OSDN Git Service

transformation of kana seq. into LuaTeX-ja itself.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 2 Jan 2022 22:03:11 +0000 (07:03 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 2 Jan 2022 22:03:11 +0000 (07:03 +0900)
doc/luatexja.dtx
src/addons/luatexja-adjust.sty
src/ltj-adjust.lua
src/ltj-inputbuf.lua
test/test35-combkana.tex

index 46106f0..106de97 100644 (file)
@@ -4721,8 +4721,8 @@ we specify <ratio> to $0.25/(0.5+0.25)=1/3$.
 
 JFMによって本来挿入されるグルーの他に
 \Param{kanjiskip}分の空白を自然長(\texttt{kanjiskip\_natural}),伸び量(\texttt{kanjiskip\_stretch}),
-縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては
-            \Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに.追加できる.}%
+縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する
+%  \footnote{本来\Param{xkanjiskip}が挿入される場所においては\Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに}%
 ための指定である.いずれも省略された場合のデフォルト値は0(追加しない)である.
 
 例えば,\LuaTeX-jaの横組標準JFMの \texttt{jfm-ujis.lua} では,
@@ -4767,7 +4767,7 @@ and is also easy to shrink.
 \item[kanjiskip\_natural=<num>\textrm{, }%
   kanjiskip\_stretch=<num>\textrm{, }kanjiskip\_shrink=<num>]\leavevmode
 
-These keys specifies the amount of the natural width of \Param{kanjiskip}
+These keys specifies the amount of the natural width of \Param{kanjiskip}%
 (the stretch/shrink part, respectively) which will be inserted
 in addition to the original JFM glue. Default values of them are all 0.
 
@@ -7764,7 +7764,8 @@ for making the difference obvious.}
 \begin{cslist}
 \item[\cs{ltjenableadjust[...]}]
 \verb+...+ に指定したkey-valueリストに従い,「行末文字の位置調整」「優先順位付きの行長調整」
-  「『中身までみた』行送り計算」「段階的な行送り調整」を有効化/無効化する.
+  「『中身までみた』行送り計算」「段階的な行送り調整」%「濁点・半濁点付き仮名文字の正規化」
+  を有効化/無効化する.
 指定できるキーは以下の通り.
 \begin{description}
   \item[\texttt{lineend=[false,true,extended]}]
@@ -7776,6 +7777,8 @@ for making the difference obvious.}
   「中身までみた」行送り計算を無効化(\texttt{false}),または有効化(\texttt{true}).
   \item[\texttt{linestep=[false,true]}]
   段階的な行送り調整を無効化(\texttt{false}),または有効化(\texttt{true}).
+%  \item[\texttt{composekana=[false,true]}]
+%  濁点・半濁点付き仮名文字の正規化を無効化(\texttt{false}),または有効化(\texttt{true}).
 \end{description}
 どのキーともキー名のみを指定した場合は値として\texttt{true}が指定されたものと扱われる.
 
 その行はそこで改行するようにした方がいいだろう.
 %</ja>
 
+\begin{table}[t]
+%<ja>  \caption{「基底文字+合成用濁点・半濁点」から合成済み文字への変換をサポートする組み合わせ}
+%<en>  \caption{Transformation of Kana Character Sequences with Combiing (Semi)-voiced Sound Mark}\medskip
+  \label{tab:kana_composite}
+  \def\D#1{%
+    {\fboxsep0pt\fcolorbox{cyan}{white}%
+    {\hbox to 1\zw{\hss#1}}}} %"
+  \def\DC#1{\D{\unitlength=1\zw
+     \begin{picture}(1,0)
+       \put(0.5,0.38){\arc[0,15]{0.25}}\put(0.5,0.38){\arc[30,45]{0.25}}\put(0.5,0.38){\arc[60,75]{0.25}}
+       \put(0.5,0.38){\arc[90,105]{0.25}}\put(0.5,0.38){\arc[120,135]{0.25}}\put(0.5,0.38){\arc[150,165]{0.25}}
+       \put(0.5,0.38){\arc[180,195]{0.25}}\put(0.5,0.38){\arc[210,225]{0.25}}\put(0.5,0.38){\arc[240,255]{0.25}}
+       \put(0.5,0.38){\arc[270,285]{0.25}}\put(0.5,0.38){\arc[300,315]{0.25}}\put(0.5,0.38){\arc[330,345]{0.25}}
+     \end{picture}\llap{#1\kern-.7\zw}}}
+  \def\CDJ#1#2{$\mbox{\D{\char"#1}}+\mbox{\DC{゛}}\rightarrow \mbox{\D{\char"#2}}$}
+  \def\CHJ#1#2{$\mbox{\D{\char"#1}}+\mbox{\DC{゜}}\rightarrow \mbox{\D{\char"#2}}$}
+  \small\centering
+  \begin{tabular}{@{}llllll@{}}
+  \CDJ{3046}{3094}&
+  \CDJ{304B}{304C}&
+  \CDJ{304D}{304E}&
+  \CDJ{304F}{3050}&
+  \CDJ{3051}{3052}&
+  \CDJ{3053}{3054}\\
+  \CDJ{3055}{3056}&
+  \CDJ{3057}{3058}&
+  \CDJ{3059}{305A}&
+  \CDJ{305B}{305C}&
+  \CDJ{305D}{305E}&
+  \CDJ{305F}{3060}\\
+  \CDJ{3061}{3062}&
+  \CDJ{3064}{3065}&
+  \CDJ{3066}{3067}&
+  \CDJ{3068}{3069}&
+  \CDJ{306F}{3070}&
+  \CDJ{3072}{3073}\\
+  \CDJ{3075}{3076}&
+  \CDJ{3078}{3079}&
+  \CDJ{307B}{307C}&
+  \CDJ{309D}{309E}&
+  \CDJ{30A6}{30F4}&
+  \CDJ{30AB}{30AC}\\
+  \CDJ{30AD}{30AE}&
+  \CDJ{30AF}{30B0}&
+  \CDJ{30B1}{30B2}&
+  \CDJ{30B3}{30B4}&
+  \CDJ{30B5}{30B6}&
+  \CDJ{30B7}{30B8}\\
+  \CDJ{30B9}{30BA}&
+  \CDJ{30BB}{30BC}&
+  \CDJ{30BD}{30BE}&
+  \CDJ{30BF}{30C0}&
+  \CDJ{30C1}{30C2}&
+  \CDJ{30C4}{30C5}\\
+  \CDJ{30C6}{30C7}&
+  \CDJ{30C8}{30C9}&
+  \CDJ{30CF}{30D0}&
+  \CDJ{30D2}{30D3}&
+  \CDJ{30D5}{30D6}&
+  \CDJ{30D8}{30D9}\\
+  \CDJ{30DB}{30DC}&
+  \CDJ{30EF}{30F7}&
+  \CDJ{30F0}{30F8}&
+  \CDJ{30F1}{30F9}&
+  \CDJ{30F2}{30FA}&
+  \CDJ{30FD}{30FE}\\
+  \CHJ{306F}{3071}&
+  \CHJ{3072}{3074}&
+  \CHJ{3075}{3077}&
+  \CHJ{3078}{307A}&
+  \CHJ{307B}{307D}&
+  \CHJ{30CF}{30D1}\\
+  \CHJ{30D2}{30D4}&
+  \CHJ{30D5}{30D7}&
+  \CHJ{30D8}{30DA}&
+  \CHJ{30DB}{30DD}
+  \end{tabular}
+\end{table}
+%<*en>
+\subsection{Composition of Kana from Combining Character Sequences}
+In (u)\pTeX, Hiragana and Katakana in the NFD form%
+\footnote{namely, character sequences which contains
+  ``COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK''~(\texttt{U+3099}) and
+ ``COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK''~(\texttt{U+309A}).}
+are transformed to precomposed charaters before (u)\pTeX\ looks into the input line.
+This transformation are shown in \autoref{tab:kana_composite}.
+
+This transformation is also performed in \LuaTeX-ja version~20220103.0 or later, because
+fonts might not have this transformation as an OpenType features.
+%</en>
+
+%<*ja>
+\subsection{濁点・半濁点付き仮名文字の正規化}
+\TeX~Live~2016以降の(u)\pTeX では,合成用濁点(\texttt{U+3099})・合成用半濁点(\texttt{U+309A})を用いて
+表現された平仮名・片仮名を合成済み文字に変換する(具体的には\autoref{tab:kana_composite}の組み合わせ)という処理を行っている.
+この処理を行っている要因としては,
+\begin{itemize}
+  \item 無用なトラブルを避けるため.
+  濁点・半濁点付きの仮名文字が「合成用濁点・半濁点を使って入力されているか」「最初から合成済み文字で入力されているか」を
+  見た目から判別することは難しい.
+  \item \pTeX との互換性のため.\pTeX は内部コードがJIS~X~0208の範囲に限られるため,
+  合成用濁点・半濁点は利用できない.そのため上記の変換処理はさらに前から行われていた.
+\end{itemize}
+
+一方,\LuaTeX(-ja)では入力の変換は基本的に行わず,文字の合成は使用しているフォントのOpenType機能に委ねるという立場である.
+しかし,\autoref{tab:kana_composite}に挙げた変換はUnicode正規化の範疇であり,この内容を持っているフォントは多くない.
+よって,前段落で述べた2つの理由(と\upTeX との互換性という意味も込めて)も考慮して,
+バージョン20220103.0以降では,\LuaTeX-jaは入力行に対して\autoref{tab:kana_composite}の変換を行う.
+%</ja>
+  
 %<*ja>
 
 %<en>\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}}
index 8bc2aa2..d325df7 100644 (file)
@@ -64,7 +64,7 @@
   \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
     \csname iftrue\endcsname
   \NeedsTeXFormat{LaTeX2e}
-  \ProvidesPackage{luatexja-adjust}[2021-12-27]
+  \ProvidesPackage{luatexja-adjust}[2022-01-03]
 \fi                             %</LaTeX>
 
 % Load core module if not yet.
@@ -91,7 +91,6 @@
 \newcount\ltjadj@status@lp
 \newcount\ltjadj@status@pr
 \newcount\ltjadj@status@ls
-\newcount\ltjadj@status@cd
 \let\ltj@adjust@temp=\relax
 \define@choicekey[ltj]{adjust}{lineend}[\@@temp\ltj@adjust@temp]%
 {false,true,extended}[true]{%
   \ltjadj@status@lp=\ifltj@adjust@profile1\else0\fi\relax}
 \define@boolkey[ltj]{adjust}{linestep}[true]{%
   \ltjadj@status@ls=\ifltj@adjust@linestep1\else0\fi\relax}
-\define@boolkey[ltj]{adjust}{combinevoicedkana}[true]{%
-  \ltjadj@status@cd=\ifltj@adjust@combinevoicedkana1\else0\fi\relax}
 
 \protected\def\@@ltjenableadjust[#1]{%
    \setkeys[ltj]{adjust}{#1}%
    \directlua{luatexja.adjust.enable_cb(
     \the\ltjadj@status@le, \the\ltjadj@status@pr,
-    \the\ltjadj@status@lp, \the\ltjadj@status@ls,\the\ltjadj@status@cd)}\ignorespaces
+    \the\ltjadj@status@lp, \the\ltjadj@status@ls)}\ignorespaces
 }
 \protected\def\ltjdisableadjust{%
-  \ltjenableadjust[lineend=false,priority=false,profile=false,linestep=false,combinevoicedkana=false]}
+  \ltjenableadjust[lineend=false,priority=false,profile=false,linestep=false]}%
 \protected\def\ltjenableadjust{%
    \ltx@ifnextchar[{\@@ltjenableadjust}{\@@ltjenableadjust[lineend,priority]}}%]
 
index e794215..76a1a68 100644 (file)
@@ -9,46 +9,6 @@ luatexja.load_module 'direction'; local ltjd = luatexja.direction
 luatexja.load_module 'lineskip';  local ltjl = luatexja.lineskip
 luatexja.adjust = luatexja.adjust or {}
 
-----
-local combine_voiced_kana
-do
-    local uchar = utf.char
-    local cd, cp = uchar(0x3099), uchar(0x309A)
-    local 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),
-    }
-    combine_voiced_kana = function(buffer) return substituter(buffer) end
-end
-----
-
 local to_node = node.direct.tonode
 local to_direct = node.direct.todirect
 
@@ -445,7 +405,7 @@ do
       return to_node(head)
    end
    local is_reg = false
-   local function enable_cb(status_le, status_pr, status_lp, status_ls, status_cd)
+   local function enable_cb(status_le, status_pr, status_lp, status_ls)
       if (status_le>0 or status_pr>0) and (not is_reg) then
          ltjb.add_to_callback('post_linebreak_filter',
             adjust_width, 'Adjust width', 
@@ -475,18 +435,9 @@ do
          status_lp>0 and 'profile' or 'dummy',
          status_ls>0 and 'step' or 'dummy'
       )
-      if status_cd==1 then
-         if not luatexbase.in_callback('process_input_buffer', 'Combine voiced kana-syllables') then
-            ltjb.add_to_callback('process_input_buffer', combine_voiced_kana, 'Combine voiced kana-syllables')
-         end
-      else
-         if luatexbase.in_callback('process_input_buffer', 'Combine voiced kana-syllables') then
-               luatexbase.remove_from_callback('process_input_buffer', 'Combine voiced kana-syllables')
-         end
-      end
    end
    local function disable_cb() -- only for compatibility
-       enable_cs(0,0,0,0,0)
+       enable_cs(0,0,0,0)
    end
    luatexja.adjust.enable_cb=enable_cb
    luatexja.adjust.disable_cb=disable_cb
index e162319..7f39b9b 100644 (file)
@@ -14,6 +14,43 @@ 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 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"
@@ -21,7 +58,7 @@ 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'
+   start_time_measure 'inputbuf'; buffer = substituter(buffer)
    local i = utflen(buffer)
    local c = utfbyte(buffer, i)
    while (i>0) and (getcatcode(c)==1 or getcatcode(c)==2) do
index 433af5b..4654e9f 100644 (file)
@@ -1,5 +1,6 @@
-\documentclass{ltjarticle}\usepackage{luatexja-adjust}
-\usepackage[margin=15mm]{geometry}\begin{document}\large FALSE
+\documentclass{ltjarticle}
+\usepackage[margin=15mm]{geometry}
+\begin{document}\large 
 {\obeylines\ttfamily
 U+304x          ぁ      あ      ぃ      い      ぅ      う      ぇ      え      ぉ      お      か      が      き      ぎ      く
 U+305x  ぐ      け      げ      こ      ご      さ      ざ      し      じ      す      ず      せ      ぜ      そ      ぞ      た
@@ -15,38 +16,21 @@ U+30Ex  ム      メ      モ      ャ      ヤ      ュ      ユ      ョ
 U+30Fx  ヰ      ヱ      ヲ      ン      ヴ      ヵ      ヶ      ヷ      ヸ      ヹ      ヺ      ・      ー      ヽ      ヾ      ヿ 
 \par}
 
-\par
-\newpage\ltjenableadjust[combinevoicedkana] TRUE
-{\obeylines\ttfamily
-U+304x          ぁ      あ      ぃ      い      ぅ      う      ぇ      え      ぉ      お      か      が      き      ぎ      く
-U+305x  ぐ      け      げ      こ      ご      さ      ざ      し      じ      す      ず      せ      ぜ      そ      ぞ      た
-U+306x  だ      ち      ぢ      っ      つ      づ      て      で      と      ど      な      に      ぬ      ね      の      は
-U+307x  ば      ぱ      ひ      び      ぴ      ふ      ぶ      ぷ      へ      べ      ぺ      ほ      ぼ      ぽ      ま      み
-U+308x  む      め      も      ゃ      や      ゅ      ゆ      ょ      よ      ら      り      る      れ      ろ      ゎ      わ
-U+309x  ゐ      ゑ      を      ん      ゔ      ゕ      ゖ                      ゙        ゚        ゛      ゜      ゝ      ゞ      ゟ 
-U+30Ax  ゠      ァ      ア      ィ      イ      ゥ      ウ      ェ      エ      ォ      オ      カ      ガ      キ      ギ      ク
-U+30Bx  グ      ケ      ゲ      コ      ゴ      サ      ザ      シ      ジ      ス      ズ      セ      ゼ      ソ      ゾ      タ
-U+30Cx  ダ      チ      ヂ      ッ      ツ      ヅ      テ      デ      ト      ド      ナ      ニ      ヌ      ネ      ノ      ハ
-U+30Dx  バ      パ      ヒ      ビ      ピ      フ      ブ      プ      ヘ      ベ      ペ      ホ      ボ      ポ      マ      ミ
-U+30Ex  ム      メ      モ      ャ      ヤ      ュ      ユ      ョ      ヨ      ラ      リ      ル      レ      ロ      ヮ      ワ
-U+30Fx  ヰ      ヱ      ヲ      ン      ヴ      ヵ      ヶ      ヷ      ヸ      ヹ      ヺ      ・      ー      ヽ      ヾ      ヿ 
-\par}
+\bigskip
+\def\CB{\char"3099 }\def\CD{\char"309A }
 
-\par
-\newpage\ltjenableadjust[combinevoicedkana=false] FALSE
 {\obeylines\ttfamily
-U+304x          ぁ      あ      ぃ      い      ぅ      う      ぇ      え      ぉ      お      か      が      き      ぎ      く
-U+305x  ぐ      け      げ      こ      ご      さ      ざ      し      じ      す      ず      せ      ぜ      そ      ぞ      た
-U+306x  だ      ち      ぢ      っ      つ      づ      て      で      と      ど      な      に      ぬ      ね      の      は
-U+307x  ば      ぱ      ひ      び      ぴ      ふ      ぶ      ぷ      へ      べ      ぺ      ほ      ぼ      ぽ      ま      み
+U+304x          ぁ      あ      ぃ      い      ぅ      う      ぇ      え      ぉ      お      か      か\CB{}      き      き\CB{}      く
+U+305x  く\CB{}      け      け\CB{}      こ      こ\CB{}      さ      さ\CB{}      し      し\CB{}      す      す\CB{}      せ      せ\CB{}      そ      そ\CB{}      た
+U+306x  た\CB{}      ち      ち\CB{}      っ      つ      つ\CB{}      て      て\CB{}      と      と\CB{}      な      に      ぬ      ね      の      は
+U+307x  は\CB{}      は\CD{}      ひ      ひ\CB{}      ひ\CD{}      ふ      ふ\CB{}      ふ\CD{}      へ      へ\CB{}      へ\CD{}      ほ      ほ\CB{}      ほ\CD{}      ま      み
 U+308x  む      め      も      ゃ      や      ゅ      ゆ      ょ      よ      ら      り      る      れ      ろ      ゎ      わ
-U+309x  ゐ      ゑ      を      ん      ゔ      ゕ      ゖ                      ゙        ゚        ゛      ゜      ゝ      ゞ      ゟ 
-U+30Ax  ゠      ァ      ア      ィ      イ      ゥ      ウ      ェ      エ      ォ      オ      カ      ガ      キ      ギ      ク
-U+30Bx  グ      ケ      ゲ      コ      ゴ      サ      ザ      シ      ジ      ス      ズ      セ      ゼ      ソ      ゾ      タ
-U+30Cx  ダ      チ      ヂ      ッ      ツ      ヅ      テ      デ      ト      ド      ナ      ニ      ヌ      ネ      ノ      ハ
-U+30Dx  バ      パ      ヒ      ビ      ピ      フ      ブ      プ      ヘ      ベ      ペ      ホ      ボ      ポ      マ      ミ
+U+309x  ゐ      ゑ      を      ん      ゔ      ゕ      ゖ                      \CB{}        \CD{}        ゛      ゜      ゝ      ゝ\CB{}      ゟ 
+U+30Ax  ゠      ァ      ア      ィ      イ      ゥ      ウ      ェ      エ      ォ      オ      カ      カ\CB{}      キ      キ\CB{}      ク
+U+30Bx  ク\CB{}      ケ      ケ\CB{}      コ      コ\CB{}      サ      サ\CB{}      シ      シ\CB{}      ス      ス\CB{}      セ      セ\CB{}      ソ      ソ\CB{}      タ
+U+30Cx  タ\CB{}      チ      チ\CB{}      ッ      ツ      ツ\CB{}      テ      テ\CB{}      ト      ト\CB{}      ナ      ニ      ヌ      ネ      ノ      ハ
+U+30Dx  ハ\CB{}      ハ\CD{}      ヒ      ヒ\CB{}      ヒ\CD{}      フ      フ\CB{}      フ\CD{}      ヘ      ヘ\CB{}      ヘ\CD{}      ホ      ホ\CB{}      ホ\CD{}      マ      ミ
 U+30Ex  ム      メ      モ      ャ      ヤ      ュ      ユ      ョ      ヨ      ラ      リ      ル      レ      ロ      ヮ      ワ
-U+30Fx  ヰ      ヱ      ヲ      ン      ヴ      ヵ      ヶ      ヷ      ヸ      ヹ      ヺ      ・      ー      ヽ      ヾ      ヿ 
+U+30Fx  ヰ      ヱ      ヲ      ン      ウ\CB{}      ヵ      ヶ      ワ\CB{}      ヰ\CB{}      ヱ\CB{}      ヲ\CB{}      ・      ー      ヽ      ヽ\CB{}      ヿ 
 \par}
-
 \end{document}