Bug 336959. Reland update to use Pango for linebreaking of Thai and CJK text on Linux. patch by Theppitak Karoonboonyanan, r+sr=roc
authorroc+@cs.cmu.edu
Wed, 23 May 2007 20:16:16 -0700
changeset 1819 9da28d13d220b17798312238aae4d85699fb9fc5
parent 1818 15d3f15a586cb7e28877578a40ef0b60e4e2cc27
child 1820 560d3e9d58ccbdf6fe6985a2f6fde24892d70ab1
push idunknown
push userunknown
push dateunknown
bugs336959
milestone1.9a5pre
Bug 336959. Reland update to use Pango for linebreaking of Thai and CJK text on Linux. patch by Theppitak Karoonboonyanan, r+sr=roc
content/base/src/nsLineBreaker.cpp
intl/build/Makefile.in
intl/build/nsI18nModule.cpp
intl/lwbrk/src/Makefile.in
intl/lwbrk/src/nsLWBrkConstructors.h
intl/lwbrk/src/nsLWIMP.h
--- a/content/base/src/nsLineBreaker.cpp
+++ b/content/base/src/nsLineBreaker.cpp
@@ -52,20 +52,22 @@ static inline int
 IS_SPACE(PRUint8 u)
 {
   return u == 0x0020;
 }
 
 static inline int
 IS_CJK_CHAR(PRUnichar u)
 {
-  return (0x1100 <= u && u <= 0x11ff) ||
-         (0x2e80 <= u && u <= 0xd7ff) ||
-         (0xf900 <= u && u <= 0xfaff) ||
-         (0xff00 <= u && u <= 0xffef);
+  // CJK plus other scripts that require special line breaking treatment
+  return (0x0e01 <= u && u <= 0x0e5f) || // Thai
+         (0x1100 <= u && u <= 0x11ff) || // Hangul Jamo
+         (0x2e80 <= u && u <= 0xd7ff) || // several CJK blocks
+         (0xf900 <= u && u <= 0xfaff) || // CJK Compatibility Idographs
+         (0xff00 <= u && u <= 0xffef);   // Halfwidth and Fullwidth Forms
 }
 
 nsLineBreaker::nsLineBreaker()
   : mCurrentWordContainsCJK(PR_FALSE),
     mBreakBeforeNonWhitespace(PR_FALSE)
 {
 }
 
--- a/intl/build/Makefile.in
+++ b/intl/build/Makefile.in
@@ -101,8 +101,18 @@ EXTRA_DSO_LDOPTS = \
 ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
 EXTRA_DSO_LDOPTS += \
         $(TK_LIBS) \
         $(NULL)
 endif
 
 include $(topsrcdir)/config/rules.mk
 
+ifdef MOZ_ENABLE_PANGO
+CXXFLAGS += \
+	$(MOZ_PANGO_CFLAGS) \
+	$(NULL)
+
+EXTRA_DSO_LDOPTS += \
+	$(MOZ_PANGO_LIBS) \
+	$(NULL)
+endif
+
--- a/intl/build/nsI18nModule.cpp
+++ b/intl/build/nsI18nModule.cpp
@@ -54,18 +54,23 @@
 #include "nsLocaleConstructors.h"
 
 
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSemanticUnitScanner)
 
 static nsModuleComponentInfo components[] =
 {
  // lwbrk
+#ifdef MOZ_ENABLE_PANGO
+  { "Line Breaker", NS_LBRK_CID, 
+    NS_LBRK_CONTRACTID, nsPangoLineBreakerConstructor},
+#else
   { "Line Breaker", NS_LBRK_CID, 
     NS_LBRK_CONTRACTID, nsJISx4051LineBreakerConstructor},
+#endif
   { "Word Breaker", NS_WBRK_CID,
     NS_WBRK_CONTRACTID, nsSampleWordBreakerConstructor},
   { "Semantic Unit Scanner", NS_SEMANTICUNITSCANNER_CID,
     NS_SEMANTICUNITSCANNER_CONTRACTID, nsSemanticUnitScannerConstructor},
 
  // unicharutil
   { "Unichar Utility", NS_UNICHARUTIL_CID, 
       NS_UNICHARUTIL_CONTRACTID, nsCaseConversionImp2Constructor},
--- a/intl/lwbrk/src/Makefile.in
+++ b/intl/lwbrk/src/Makefile.in
@@ -50,14 +50,34 @@ LIBXUL_LIBRARY  = 1
 REQUIRES	= xpcom \
 		  string \
 		  unicharutil \
 		  $(NULL)
 
 CSRCS		= rulebrk.c
 
 CPPSRCS		= \
-		nsJISx4501LineBreaker.cpp \
 		nsSampleWordBreaker.cpp \
 		nsSemanticUnitScanner.cpp \
 		$(NULL)
 
+ifdef MOZ_ENABLE_PANGO
+CPPSRCS		+= \
+		nsPangoLineBreaker.cpp \
+		$(NULL)
+else
+CPPSRCS		+= \
+		nsJISx4501LineBreaker.cpp \
+		$(NULL)
+endif
+
 include $(topsrcdir)/config/rules.mk
+
+ifdef MOZ_ENABLE_PANGO
+CXXFLAGS		+= \
+			$(MOZ_PANGO_CFLAGS) \
+			$(NULL)
+
+EXTRA_DSO_LDOPTS	+= \
+			$(MOZ_PANGO_LIBS) \
+			$(NULL)
+endif
+
--- a/intl/lwbrk/src/nsLWBrkConstructors.h
+++ b/intl/lwbrk/src/nsLWBrkConstructors.h
@@ -36,17 +36,26 @@
  * ***** END LICENSE BLOCK ***** */
 
 #ifndef nsLWBrkConstructors_h__
 #define nsLWBrkConstructors_h__
 
 #include "nsLWBrkCIID.h"
 #include "nsILineBreaker.h"
 #include "nsIWordBreaker.h"
-#include "nsJISx4501LineBreaker.h"
+#ifdef MOZ_ENABLE_PANGO
+# include "nsPangoLineBreaker.h"
+#else
+# include "nsJISx4501LineBreaker.h"
+#endif
 #include "nsSampleWordBreaker.h"
 #include "nsLWBRKDll.h"
 
+#ifdef MOZ_ENABLE_PANGO
+NS_GENERIC_FACTORY_CONSTRUCTOR(nsPangoLineBreaker)
+#else
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsJISx4051LineBreaker)
+#endif
+
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSampleWordBreaker)
 
 #endif
      
--- a/intl/lwbrk/src/nsLWIMP.h
+++ b/intl/lwbrk/src/nsLWIMP.h
@@ -32,15 +32,21 @@
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 #ifndef nsLWIMP_h__
 #define nsLWIMP_h__
 
-#include "nsJISx4501LineBreaker.h"
+#ifdef MOZ_ENABLE_PANGO
+# include "nsPangoLineBreaker.h"
+# define LINEBREAKER nsPangoLineBreaker
+#else
+# include "nsJISx4501LineBreaker.h"
+# define LINEBREAKER nsJISx4501LineBreaker
+#endif
+
 #include "nsSampleWordBreaker.h"
 
-#define LINEBREAKER nsJISx4501LineBreaker
 #define WORDBREAKER nsSampleWordBreaker
 
 #endif  /* nsLWIMP_h__ */