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 id1
push userroot
push dateTue, 26 Apr 2011 22:38:44 +0000
treeherdermozilla-beta@bfdb6e623a36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
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__ */