]> git.eshelyaron.com Git - emacs.git/commitdiff
Add Hebrew shaper.
authorKenichi Handa <handa@etlken>
Tue, 25 May 2010 01:25:08 +0000 (10:25 +0900)
committerKenichi Handa <handa@etlken>
Tue, 25 May 2010 01:25:08 +0000 (10:25 +0900)
lisp/ChangeLog
lisp/language/hebrew.el

index 061db502dc505bd9439b82a3df601eb9e964738c..6bbcc1262b0911eaa5132b30c30e28ca61455299 100644 (file)
@@ -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).
index fd98fcfecb7ccb44af9443b1ef62eb381a5a746c..5c39bb224161ac212f8e2d3cdc85d78f83f83a09 100644 (file)
@@ -85,6 +85,35 @@ Bidirectional editing is supported.")))
   :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