changeset 108762:d3db77511b9e

Add Hebrew shaper.
author Kenichi Handa <handa@etlken>
date Tue, 25 May 2010 10:25:08 +0900
parents 271da7ed4e2e
children 9ad1ee311b5e 3eac08e0e4ee
files lisp/ChangeLog lisp/language/hebrew.el
diffstat 2 files changed, 35 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue May 25 10:03:44 2010 +0900
+++ b/lisp/ChangeLog	Tue May 25 10:25:08 2010 +0900
@@ -1,3 +1,9 @@
+2010-05-25  Kenichi Handa  <handa@m17n.org>
+
+	* language/hebrew.el (hebrew-shape-gstring): New function.
+	Register it in composition-function-table for all Hebrew combining
+	characters.
+
 2010-05-24  Uday S Reddy  <u.s.reddy@cs.bham.ac.uk>  (tiny change)
 
 	* textmodes/fill.el (fill-region): Don't fill past the end (bug#6201).
--- a/lisp/language/hebrew.el	Tue May 25 10:03:44 2010 +0900
+++ b/lisp/language/hebrew.el	Tue May 25 10:25:08 2010 +0900
@@ -85,6 +85,35 @@
   :mime-charset 'cp862)
 (define-coding-system-alias 'ibm862 'cp862)
 
+;; Composition function for hebrew.
+(defun hebrew-shape-gstring (gstring)
+  (setq gstring (font-shape-gstring gstring))
+  (let ((header (lgstring-header gstring))
+	(nchars (lgstring-char-len gstring))
+	(nglyphs (lgstring-glyph-len gstring))
+	(base-width (lglyph-width (lgstring-glyph gstring 0))))
+    (while (> nglyphs 1)
+      (setq nglyphs (1- nglyphs))
+      (let* ((glyph (lgstring-glyph gstring nglyphs))
+	     (adjust (and glyph (lglyph-adjustment glyph))))
+	(if adjust
+	    (setq nglyphs 0)
+	  (if (>= (lglyph-lbearing glyph) 0)
+	      (lglyph-set-adjustment glyph (- base-width) 0 0))))))
+  gstring)
+
+(let ((pattern1 "[\u05D0-\u05F2][\u0591-\u05BF\u05C1-\u05C5\u05C7]+")
+      (pattern2 "[\u05D0-\u05F2]\u200D[\u0591-\u05BF\u05C1-\u05C5\u05C7]+"))
+  (set-char-table-range
+   composition-function-table '(#x591 . #x5C7)
+   (list (vector pattern2 2 'hebrew-shape-gstring)
+	 (vector pattern1 1 'hebrew-shape-gstring)
+	 ["[\u0591-\u05C7]" 0 font-shape-gstring]))
+  (set-char-table-range
+   composition-function-table #x5C0 nil)
+  (set-char-table-range
+   composition-function-table #x5C6 nil))
+
 (provide 'hebrew)
 
 ;; arch-tag: 3ca04f32-3f1e-498e-af46-8267498ba5d9