OSDN Git Service

transformation of kana seq. into LuaTeX-ja itself.
[luatex-ja/luatexja.git] / src / ltj-inputbuf.lua
index cfef819..7f39b9b 100644 (file)
@@ -1,46 +1,90 @@
 --
--- luatexja/ltj-inputbuf.lua
+-- ltj-inputbuf.lua
 --
 
-luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+luatexja.load_module 'base';      local ltjb = luatexja.base
+luatexja.load_module 'charrange'; local ltjc = luatexja.charrange
 
-require("unicode")
-local utflen = unicode.utf8.len
-local utfbyte = unicode.utf8.byte
+local utflen = utf.len
+local utfbyte = utf.byte
+local utfchar = utf.char
 local node_new = node.new
 local node_free = node.free
-local id_glyph = node.id('glyph')
-local getcatcode = tex.getcatcode
+local id_glyph = node.id 'glyph'
+local getcatcode, getcount = tex.getcatcode, tex.getcount
 local ltjc_is_japanese_char_curlist = ltjc.is_japanese_char_curlist
-local FFFFF = string.char(0xF3,0xBF,0xBF,0xBF)
+
+local substituter
+do
+    local uchar = utf.char
+    local cd, cp = uchar(0x3099), uchar(0x309A)
+    substituter = (utf.substituter or utf.subtituter)      -- typo in lualibs?
+    {
+      ['ウ'..cd] = 'ヴ', ['う'..cd] = uchar(0x30F4),
+      ['か'..cd] = 'が', ['カ'..cd] = 'ガ',
+      ['き'..cd] = 'ぎ', ['キ'..cd] = 'ギ',
+      ['く'..cd] = 'ぐ', ['ク'..cd] = 'グ',
+      ['け'..cd] = 'げ', ['ケ'..cd] = 'ゲ',
+      ['こ'..cd] = 'ご', ['コ'..cd] = 'ゴ',
+      --
+      ['さ'..cd] = 'ざ', ['サ'..cd] = 'ザ',
+      ['し'..cd] = 'じ', ['シ'..cd] = 'ジ',
+      ['す'..cd] = 'ず', ['ス'..cd] = 'ズ',
+      ['せ'..cd] = 'ぜ', ['セ'..cd] = 'ゼ',
+      ['そ'..cd] = 'ぞ', ['ソ'..cd] = 'ゾ',
+      --
+      ['た'..cd] = 'だ', ['タ'..cd] = 'ダ',
+      ['ち'..cd] = 'ぢ', ['チ'..cd] = 'ヂ',
+      ['つ'..cd] = 'づ', ['ツ'..cd] = 'ヅ',
+      ['て'..cd] = 'で', ['テ'..cd] = 'デ',
+      ['と'..cd] = 'ど', ['ト'..cd] = 'ド',
+      --
+      ['は'..cd] = 'ば', ['ハ'..cd] = 'バ', ['は'..cp] = 'ぱ', ['ハ'..cp] = 'パ',
+      ['ひ'..cd] = 'び', ['ヒ'..cd] = 'ビ', ['ひ'..cp] = 'ぴ', ['ヒ'..cp] = 'ピ',
+      ['ふ'..cd] = 'ぶ', ['フ'..cd] = 'ブ', ['ふ'..cp] = 'ぷ', ['フ'..cp] = 'プ',
+      ['へ'..cd] = 'べ', ['ヘ'..cd] = 'ベ', ['へ'..cp] = 'ぺ', ['ヘ'..cp] = 'ペ',
+      ['ほ'..cd] = 'ぼ', ['ホ'..cd] = 'ボ', ['ほ'..cp] = 'ぽ', ['ホ'..cp] = 'ポ',
+      --
+      ['ゝ'..cd] = 'ゞ', ['ヽ'..cd] = 'ヾ',
+      ['ワ'..cd] = uchar(0x30F7), ['ヰ'..cd] = uchar(0x30F8),
+      ['ヱ'..cd] = uchar(0x30F9), ['ヲ'..cd] = uchar(0x30FA),
+    }
+end
 
 --- the following function is modified from jafontspec.lua (by K. Maeda).
 --- Instead of "%", we use U+FFFFF for suppressing spaces.
+--DEBUG require"socket"
+local time_line = 0
+local start_time_measure, stop_time_measure
+   = ltjb.start_time_measure, ltjb.stop_time_measure
 local function add_comment(buffer)
+   start_time_measure 'inputbuf'; buffer = substituter(buffer)
    local i = utflen(buffer)
-   while (i>0) and (getcatcode(utfbyte(buffer, i))==1 
-                or getcatcode(utfbyte(buffer, i))==2) do
-      i=i-1
+   local c = utfbyte(buffer, i)
+   while (i>0) and (getcatcode(c)==1 or getcatcode(c)==2) do
+      i=i-1; if (i>0) then c = utfbyte(buffer, i) end;
    end
    if i>0 then
-      local c = utfbyte(buffer, i)
-      if c>0x80 then
-        local ct = getcatcode(c)
-        local te = tex.endlinechar
-        local ctl = (te ~= -1) and (getcatcode(te)==5) and (getcatcode(0xFFFFF)==14)
-        -- Is the catcode of endline character is 5 (end-of-line)?
-        -- Is the catcode of U+FFFFF (new comment char) is 14 (comment)?
-        if ((ct==11) or (ct==12)) and ctl then
-           if ltjc_is_japanese_char_curlist(c) then
-              buffer = buffer .. FFFFF -- U+FFFFF
-           end
-        end
+      if c>=0x80 then
+         local te = tex.endlinechar
+         -- Is the catcode of endline character is 5 (end-of-line)?
+         if (te ~= -1) and (getcatcode(te)==5) then
+            local ct = getcatcode(c)
+            if (ct==11) or (ct==12) then
+               local lec = getcount 'ltjlineendcomment'
+               -- Is the catcode of \ltjlineendcomment (new comment char) is 14 (comment)?
+               if ltjc_is_japanese_char_curlist(c) and (getcatcode(lec)==14) then
+                  stop_time_measure 'inputbuf'; return buffer .. utfchar(lec)
+               end
+            end
+         end
       end
    end
+   stop_time_measure 'inputbuf'
    return buffer
 end
 
-luatexbase.add_to_callback('process_input_buffer', 
+luatexbase.add_to_callback('process_input_buffer',
    add_comment,'ltj.process_input_buffer')
 
 --EOF