2007/11/25

祖父が他界しました。

94歳でした。
立派な人でした。

2007/11/24

Common Lisp で XML をいじる

Closure XML Parser http://common-lisp.net/project/cxml/ を使って XML をいじってみます。


準備


CVS で最新バージョンを取得します。


cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/cxml/cvsroot co cxml
cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/cxml/cvsroot co closure-common

いつもの手順で asdf:*central-registry* に登録します。


Quick Start


まずは require です。


(require :cxml)

お試し用の XML ファイルを作成します。


(with-open-file (out "/tmp/try.xml" :direction :output
:element-type '(unsigned-byte 8)
:if-exists :supersede)
(cxml:with-xml-output
(cxml:make-octet-stream-sink out :indentation 2 :canonical nil)
(cxml:with-element "try"
(cxml:attribute "title" "XML")
(cxml:with-element "para"
(cxml:text "試してみよう。")))))

DOM でいじってみます。


(let* ((builder (cxml-dom:make-dom-builder)) ;DOM ビルダーを作る
(dom (cxml:parse-file "/tmp/try.xml" builder)) ;パースする
(try-element (dom:document-element dom))) ;エレメントを取得
(format t "DOM オブジェクト: ~a~%" dom)
(format t "try タグ(~a)のタグ名: ~a, title属性の値: ~a~%"
try-element
(dom:tag-name try-element) ;タグ名を取得
(dom:get-attribute try-element "title"))) ;属性値を取得

リストでいじってみます。


リストから XML ファイルを出力します。


(with-open-file (out "/tmp/try.xml" :direction :output
:element-type '(unsigned-byte 8)
:if-exists :supersede)
(cxml-xmls:map-node (cxml:make-octet-stream-sink out)
'("try" (("title" "XML")) ("para" nil "リストから出力。"))
:include-namespace-uri nil))

XML から リストを取得します。


(cxml:parse-file "/tmp/try.xml" (cxml-xmls:make-xmls-builder))
;; => ("try" (("title" "XML")) ("para" NIL "リストから出力。"))

給与 話し合いの結果

今月の給与は以前のものに戻っていました。
管理監督者ではなく残業代も支給されるということです。

いまの会社はタイムカードについては管理監督者になったとしてもうたなくてはならないし、毎日の始業・就業時間を記入した勤務表も提出しなければならない、ということでした。
いろいろなっとくいかないような気もしますが、もとの給与体系に戻ったのでよしとしましょう。

2007/11/18

DocBook のメモ

ちょっと DocBook を調べたのでメモしておきます。

参考図書
DocBook: The Definitive Guide
DocBook XSL: The Complete Guide

セットアップ
必要なパッケージ

最低限必要なパッケージはたぶん次のものす。

docbook
docbook-xml
sgml-base
opensp
emacs
psgml

環境変数の設定

文字コードに UTF-8 を使用するので、次のように環境変数をセットしました。

Example 1. 環境変数の設定
export SP_BCTF=utf-8

検証

C-c C-v で onsgmls を使って入力した文章を検証することができます。

Example 2. 検証コマンド
onsgmls -wxml -e -g -s -u /usr/share/sgml/declaration/xml.dcl memo.xml


xmllint というのもあります。

Example 3. xmmlint
xmllint --valid --noout memo.xml

変換

DocBook は xsltproc コマンド等によってスタイルシートに基づいて HTML 等に変化されます。
HTML への変換

DocBook を HTML に変換してみます。
1ファイルの HTML への変換

1ファイルの HTML への変換には html/docbook.xls スタイルシートを使います。

Example 4. 1ファイルの HTML への変換
xsltproc -o dst.html /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl src.xml


src.xml を -o オプションで指定した dst.html に変換します。
複数ファイルの HTML への変換

複数の HTML に分割して変換するには html/chunk.xsl スタイルシートを使います。出力ファイルは指定しません。デフォルトで index.html がトップページとして出力されます。

Example 5. 複数ファイルの HTML への変換
xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/html/chunk.xsl src.xml


root.filename パラメータでトップページのファイル名を index.html 以外にすることができます。

トップページ以外のファイル名も DocBook 中で明示的に指定したり、id 属性をファイル名にしたり、自動で生成してくれたりします。
その他いろいろ

実にいろいろなことができるみたい。CSS スタイルシートやアイコン。HTML の インデント。エンコーディング指定。などなど。おもしろい。
PDF への変換

PDF への変換でどうしても日本語フォントが表示できないと悩んでいたら、問題は PDF ビューアの方にありました。xpdf, evince ともだめで、Adobe Reader では表示されました。どうやら埋め込みの TrueType フォントを表示できるかどうかとうい問題だったようです。(日本語フォントの設定は Makefile と userconfig.xml を参照)

そうすると、次の問題は埋め込み TrueType フォントではなく Ryumin-Light の Type1 フォントを使う方法ですね。

それにしても、仕上がりはどうしようもなくきたない。いろいろ設定が必要なのかもしれない。日本語の組版に対応していないのかな。Couldn't find hyphenation pattern en というエラーメッセージも出てるし。うぅむ。

Makefile

SRC=memo

XLS=/usr/share/xml/docbook/stylesheet/nwalsh

FOP=fop
#FOP=/home/ancient/tmp/fop-0.94/fop

#JLIB=/usr/share/java

SAZANAMI_GOTHIC=/usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf
SAZANAMI_MINCHO=/usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf

html:
xsltproc -o $(SRC).html $(XLS)/html/docbook.xsl $(SRC).xml
opera $(SRC).html

chunk:
xsltproc $(XLS)/html/chunk.xsl $(SRC).xml
opera index.html

fo:
xsltproc -o $(SRC).fo \
--stringparam body.font.family Mincho \
--stringparam title.font.family Gothic \
$(XLS)/fo/docbook.xsl $(SRC).xml
$(FOP) -c userconfig.xml -fo $(SRC).fo -pdf $(SRC).pdf
acroread $(SRC).pdf

# --stringparam body.start.indent 0pc \

font:
fop-ttfreader $(SAZANAMI_GOTHIC) fonts/sazanami-gothic.xml
fop-ttfreader $(SAZANAMI_MINCHO) fonts/sazanami-mincho.xml

word:
xsltproc -o $(SRC)-word.xml --stringparam wordml.template template.xml $(XLS)/roundtrip/docbook.xsl $(SRC).xml
openoffice $(SRC)-word.xml

clean:
rm -f *.html *~

userconfig.xml
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font metrics-url="file:///home/ancient/letter/docbook/memo/fonts/sazanami-gothic.xml"
kerning="yes"
embed-url="file:///usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf">
<font-triplet name="Gothic" style="normal" weight="normal"/>
<font-triplet name="Gothic" style="normal" weight="bold"/>
<font-triplet name="Gothic" style="italic" weight="normal"/>
<font-triplet name="Gothic" style="italic" weight="bold"/>
</font>
<font metrics-url="file:///home/ancient/letter/docbook/memo/fonts/sazanami-mincho.xml"
kerning="yes"
embed-url="file:///usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf">
<font-triplet name="Mincho" style="normal" weight="normal"/>
<font-triplet name="Mincho" style="normal" weight="bold"/>
<font-triplet name="Mincho" style="italic" weight="normal"/>
<font-triplet name="Mincho" style="italic" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>

memo.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<article>
<title>DocBook のメモ</title>

<sect1>
<title>セットアップ</title>

<sect2>
<title>必要なパッケージ</title>
<para>最低限必要なパッケージはたぶん次のものす。</para>
<itemizedlist>
<listitem>
<para>docbook</para>
</listitem>
<listitem>
<para>docbook-xml</para>
</listitem>
<listitem>
<para>sgml-base</para>
</listitem>
<listitem>
<para>opensp</para>
</listitem>
<listitem>
<para>emacs</para>
</listitem>
<listitem>
<para>psgml</para>
</listitem>
</itemizedlist>
</sect2>

<sect2>
<title>環境変数の設定</title>
<para>文字コードに UTF-8 を使用するので、次のように環境変数をセットしました。</para>
<example>
<title>環境変数の設定</title>
<programlisting>export SP_BCTF=utf-8</programlisting>
</example>
</sect2>

</sect1>

<sect1>
<title>検証</title>
<para>C-c C-v で onsgmls を使って入力した文章を検証することができます。</para>
<example>
<title>検証コマンド</title>
<programlisting>onsgmls -wxml -e -g -s -u /usr/share/sgml/declaration/xml.dcl memo.xml</programlisting>
</example>
<para>xmllint というのもあります。</para>
<example>
<title>xmmlint</title>
<programlisting>xmllint --valid --noout memo.xml</programlisting>
</example>
</sect1>

<sect1>
<title>変換</title>

<para>DocBook は xsltproc コマンド等によってスタイルシートに基づいて HTML 等に変化されます。</para>

<sect2>
<title>HTML への変換</title>
<para>DocBook を HTML に変換してみます。</para>


<sect3>
<title>1ファイルの HTML への変換</title>
<para>1ファイルの HTML への変換には html/docbook.xls スタイルシートを使います。</para>
<example>
<title>1ファイルの HTML への変換</title>
<programlisting>xsltproc -o dst.html /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl src.xml</programlisting>
</example>
<para>src.xml を -o オプションで指定した dst.html に変換します。</para>
</sect3>

<sect3>
<title>複数ファイルの HTML への変換</title>
<para>複数の HTML に分割して変換するには html/chunk.xsl スタイルシートを使います。出力ファイルは指定しません。デフォルトで index.html がトップページとして出力されます。</para>
<example>
<title>複数ファイルの HTML への変換</title>
<programlisting>xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/html/chunk.xsl src.xml</programlisting>
</example>
<para>root.filename パラメータでトップページのファイル名を index.html 以外にすることができます。</para>
<para>トップページ以外のファイル名も DocBook 中で明示的に指定したり、id 属性をファイル名にしたり、自動で生成してくれたりします。</para>
</sect3>

<sect3>
<title>その他いろいろ</title>
<para>実にいろいろなことができるみたい。CSS スタイルシートやアイコン。HTML の インデント。エンコーディング指定。などなど。おもしろい。</para>
</sect3>

</sect2>


<sect2>
<title>PDF への変換</title>

<para>PDF への変換でどうしても日本語フォントが表示できないと悩んでいたら、問題は PDF ビューアの方にありました。xpdf, evince ともだめで、Adobe Reader では表示されました。どうやら埋め込みの TrueType フォントを表示できるかどうかとうい問題だったようです。</para>

<para>そうすると、次の問題は埋め込み TrueType フォントではなく Ryumin-Light の Type1 フォントを使う方法ですね。</para>

<para>それにしても、仕上がりはどうしようもなくきたない。いろいろ設定が必要なのかもしれない。日本語の組版に対応していないのかな。Couldn't find hyphenation pattern en というエラーメッセージも出てるし。うぅむ。</para>
</sect2>
</sect1>
</article>

2007/11/17

クエックブックを Muse で書くようにする

いままで HTML で書いていたクエックブックを Muse で書くようにしました。
<contents> で Table Of Contents を自動的に作ってくれるとこと、<src lang="lisp"> で自動的の強調表示してくれるところが気にいっています。
src タグでの強調表示は Emacs のメジャーモードを lang 属性に指定することによって、Htmlize 機能を使って強調表示してくれます。なので、Emacs のメジャーモードのある言語なら全て強調表示ができます。
それに、Muse のファイル自体読みやすく書きやすい。
ただ処理速度が遅いのがちょっと気になりました。Erlang の方を HTML に変換するには少々時間が必要です。

DocBook もどうかなぁと思っていじってみましたが、S式好きにはどうも XML は耐えられないようです。

2007/11/13

[Common Lisp] たまには何か書かないと

ここのところ全然 Lisp をさわってなかったので、何でもいいから書きたくなりました。
それで書いたのが次のコード。
series を使って、/tmp/a 内容を /tmp/b に行番号付きで出力するだけです。
scan-file, collect-file では external-format や if-exists の指定ができないため、scan-stream, collect-stream を使っています。

(eval-when (:compile-toplevel :load-toplevel :execute)
(require :series))

(with-open-file (in "/tmp/a")
(with-open-file (out "/tmp/b" :direction :output :if-exists :supersede)
(let ((no (series:generator (series:scan-range :from 1))))
(series:collect-stream
out (series:scan-stream in #'read-line)
#'(lambda (line stream)
(format stream "~a ~a~%" (series:next-in no) line))))))

scan-file, collect-file を使うとこんな感じです。
(let ((no (series:generator (series:scan-range :from 1))))
(series:collect-file
"/tmp/c" (series:scan-file "/tmp/a" #'read-line)
#'(lambda (line stream)
(format stream "~a ~a~%" (series:next-in no) line))))

やっぱり Common Lisp は楽しい♪

2007/11/11

~/.uim

私が Debian 環境で使っている日本語入力 uim のローマ字入力のカスタマイズです。
下記のような ~/.uim を作成してカスタマイズしています。
変数 ja-rk-rule で設定しますが、最初に (require "japanese.scm") が必要です。
Dvorak 配列を使用しているので、ACTJLOD配列 を基にした配列になっています。

;;;-*- scheme -*-

(require "japanese.scm")

;; Japanese EUC
(set! ja-rk-rule
'(
((("-"). ())("ー" "ー" "ー"))
(((","). ())("、" "、" "、"))
((("."). ())("。" "。" "。"))
((("!"). ())("!" "!" "!"))
((("\""). ())("”" "”" "\""))
;;((("#"). ())("#" "#" "#"))
;;((("$"). ())("$" "$" "$"))
;;((("%"). ())("%" "%" "%"))
;;((("&"). ())("&" "&" "&"))
;;((("'"). ())("’" "’" "'"))
((("("). ())("(" "(" "("))
(((")"). ())(")" ")" ")"))
;;((("~"). ())("〜" "〜" "~"))
;;((("="). ())("=" "=" "="))
;;((("^"). ())("^" "^" "^"))
;;((("\\"). ())("\" "\" "\\"))
;;((("|"). ())("|" "|" "|"))
;;((("`"). ())("‘" "‘" "`"))
;;((("@"). ())("@" "@" "@"))
;;((("{"). ())("{" "{" "{"))
((("["). ())("「" "「" "「"))
;;((("+"). ())("+" "+" "+"))
;;(((";"). ())(";" ";" ";"))
;;((("*"). ())("*" "*" "*"))
;;(((":"). ())(":" ":" ":"))
;;((("}"). ())("}" "}" "}"))
((("]"). ())("」" "」" "」"))
;;((("<"). ())("<" "<" "<"))
;;(((">"). ())(">" ">" ">"))
((("?"). ())("?" "?" "?"))
;;((("/"). ())("/" "/" "/"))
;;((("_"). ())("_" "_" "_"))
((("yen"). ())("¥" "¥" "¥")) ;; XXX

((("1"). ())("1" "1" "1"))
((("2"). ())("2" "2" "2"))
((("3"). ())("3" "3" "3"))
((("4"). ())("4" "4" "4"))
((("5"). ())("5" "5" "5"))
((("6"). ())("6" "6" "6"))
((("7"). ())("7" "7" "7"))
((("8"). ())("8" "8" "8"))
((("9"). ())("9" "9" "9"))
((("0"). ())("0" "0" "0"))

((("a"). ())("あ" "ア" "ア"))
((("i"). ())("い" "イ" "イ"))
((("u"). ())("う" "ウ" "ウ"))
((("e"). ())("え" "エ" "エ"))
((("o"). ())("お" "オ" "オ"))

((("x" "a"). ())("ぁ" "ァ" "ァ"))
((("x" "i"). ())("ぃ" "ィ" "ィ"))
((("x" "y" "i"). ())("ぃ" "ィ" "ィ"))
((("x" "u"). ())("ぅ" "ゥ" "ゥ"))
((("x" "e"). ())("ぇ" "ェ" "ェ"))
((("x" "y" "e"). ())("ぇ" "ェ" "ェ"))
((("x" "o"). ())("ぉ" "ォ" "ォ"))

((("c" "c"). ("c"))("っ" "ッ" "ッ"))

((("c" "a"). ())("か" "カ" "カ"))
((("c" "i"). ())("き" "キ" "キ"))
((("c" "u"). ())("く" "ク" "ク"))
((("c" "e"). ())("け" "ケ" "ケ"))
((("c" "o"). ())("こ" "コ" "コ"))
((("c" "'"). ())(("か" "カ" "カ") ("い" "イ" "イ")))
((("c" "("). ())(("こ" "コ" "コ") ("う" "ウ" "ウ")))
((("c" ")"). ())(("け" "ケ" "ケ") ("い" "イ" "イ")))
((("c" "p"). ())(("く" "ク" "ク") ("う" "ウ" "ウ")))
((("c" "y"). ())(("き" "キ" "キ") ("い" "イ" "イ")))
((("c" ";"). ())(("か" "カ" "カ") ("ん" "ン" "ン")))
((("c" "q"). ())(("こ" "コ" "コ") ("ん" "ン" "ン")))
((("c" "j"). ())(("け" "ケ" "ケ") ("ん" "ン" "ン")))
((("c" "k"). ())(("く" "ク" "ク") ("ん" "ン" "ン")))
((("c" "x"). ())(("き" "キ" "キ") ("ん" "ン" "ン")))
((("c" "h" "a"). ())(("き" "キ" "キ") ("ゃ" "ャ" "ャ")))
((("c" "h" "i"). ())(("き" "キ" "キ") ("ぃ" "ィ" "ィ")))
((("c" "h" "u"). ())(("き" "キ" "キ") ("ゅ" "ュ" "ュ")))
((("c" "h" "e"). ())(("き" "キ" "キ") ("ぇ" "ェ" "ェ")))
((("c" "h" "o"). ())(("き" "キ" "キ") ("ょ" "ョ" "ョ")))
((("c" "h" "'"). ())(("き" "キ" "キ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("c" "h" "y"). ())(("き" "キ" "キ") ("ぃ" "ィ" "ィ") ("う" "ウ" "ウ")))
((("c" "h" "p"). ())(("き" "キ" "キ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("c" "h" ")"). ())(("き" "キ" "キ") ("ぇ" "ェ" "ェ") ("う" "ウ" "ウ")))
((("c" "h" "("). ())(("き" "キ" "キ") ("ょ" "ョ" "ョ") ("い" "イ" "イ")))
((("c" "h" ";"). ())(("き" "キ" "キ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("c" "h" "x"). ())(("き" "キ" "キ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("c" "h" "k"). ())(("き" "キ" "キ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("c" "h" "j"). ())(("き" "キ" "キ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("c" "h" "q"). ())(("き" "キ" "キ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("g" "g"). ("g"))("っ" "ッ" "ッ"))

((("g" "a"). ())("が" "ガ" "ガ"))
((("g" "i"). ())("ぎ" "ギ" "ギ"))
((("g" "u"). ())("ぐ" "グ" "グ"))
((("g" "e"). ())("げ" "ゲ" "ゲ"))
((("g" "o"). ())("ご" "ゴ" "ゴ"))
((("g" "'"). ())(("が" "ガ" "ガ") ("い" "イ" "イ")))
((("g" "y"). ())(("ぐ" "グ" "グ") ("い" "イ" "イ")))
((("g" "p"). ())(("ぐ" "グ" "グ") ("う" "ウ" "ウ")))
((("g" ")"). ())(("げ" "ゲ" "ゲ") ("い" "イ" "イ")))
((("g" "("). ())(("ご" "ゴ" "ゴ") ("う" "ウ" "ウ")))
((("g" ";"). ())(("が" "ガ" "ガ") ("ん" "ン" "ン")))
((("g" "x"). ())(("ぎ" "ギ" "ギ") ("ん" "ン" "ン")))
((("g" "k"). ())(("ぐ" "グ" "グ") ("ん" "ン" "ン")))
((("g" "j"). ())(("げ" "ゲ" "ゲ") ("ん" "ン" "ン")))
((("g" "q"). ())(("ご" "ゴ" "ゴ") ("ん" "ン" "ン")))
((("g" "n" "a"). ())(("ぎ" "ギ" "ギ") ("ゃ" "ャ" "ャ")))
((("g" "n" "i"). ())(("ぎ" "ギ" "ギ") ("ぃ" "ィ" "ィ")))
((("g" "n" "u"). ())(("ぎ" "ギ" "ギ") ("ゅ" "ュ" "ュ")))
((("g" "n" "e"). ())(("ぎ" "ギ" "ギ") ("ぇ" "ェ" "ェ")))
((("g" "n" "o"). ())(("ぎ" "ギ" "ギ") ("ょ" "ョ" "ョ")))
((("g" "n" "'"). ())(("ぎ" "ギ" "ギ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("g" "n" "y"). ())(("ぎ" "ギ" "ギ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("g" "n" "p"). ())(("ぎ" "ギ" "ギ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("g" "n" ")"). ())(("ぎ" "ギ" "ギ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("g" "n" "("). ())(("ぎ" "ギ" "ギ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("g" "n" ";"). ())(("ぎ" "ギ" "ギ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("g" "n" "x"). ())(("ぎ" "ギ" "ギ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("g" "n" "k"). ())(("ぎ" "ギ" "ギ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("g" "n" "j"). ())(("ぎ" "ギ" "ギ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("g" "n" "q"). ())(("ぎ" "ギ" "ギ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("s" "s"). ("s"))("っ" "ッ" "ッ"))

((("s" "a"). ())("さ" "サ" "サ"))
((("s" "i"). ())("し" "シ" "シ"))
((("s" "u"). ())("す" "ス" "ス"))
((("s" "e"). ())("せ" "セ" "セ"))
((("s" "o"). ())("そ" "ソ" "ソ"))
((("s" "'"). ())(("さ" "サ" "サ") ("い" "イ" "イ")))
((("s" "y"). ())(("す" "ス" "ス") ("い" "イ" "イ")))
((("s" "p"). ())(("す" "ス" "ス") ("う" "ウ" "ウ")))
((("s" ")"). ())(("せ" "セ" "セ") ("い" "イ" "イ")))
((("s" "("). ())(("そ" "ソ" "ソ") ("う" "ウ" "ウ")))
((("s" ";"). ())(("さ" "サ" "サ") ("ん" "ン" "ン")))
((("s" "x"). ())(("し" "シ" "シ") ("ん" "ン" "ン")))
((("s" "k"). ())(("す" "ス" "ス") ("ん" "ン" "ン")))
((("s" "j"). ())(("せ" "セ" "セ") ("ん" "ン" "ン")))
((("s" "q"). ())(("そ" "ソ" "ソ") ("ん" "ン" "ン")))

((("s" "h" "a"). ())(("し" "シ" "シ") ("ゃ" "ャ" "ャ")))
((("s" "h" "i"). ())(("し" "シ" "シ") ("ぃ" "ィ" "ィ")))
((("s" "h" "u"). ())(("し" "シ" "シ") ("ゅ" "ュ" "ュ")))
((("s" "h" "e"). ())(("し" "シ" "シ") ("ぇ" "ェ" "ェ")))
((("s" "h" "o"). ())(("し" "シ" "シ") ("ょ" "ョ" "ョ")))
((("s" "h" "'"). ())(("し" "シ" "シ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("s" "h" "y"). ())(("し" "シ" "シ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("s" "h" "p"). ())(("し" "シ" "シ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("s" "h" ")"). ())(("し" "シ" "シ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("s" "h" "("). ())(("し" "シ" "シ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("s" "h" ";"). ())(("し" "シ" "シ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("s" "h" "x"). ())(("し" "シ" "シ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("s" "h" "k"). ())(("し" "シ" "シ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("s" "h" "j"). ())(("し" "シ" "シ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("s" "h" "q"). ())(("し" "シ" "シ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("z" "z"). ("z"))("っ" "ッ" "ッ"))

((("z" "a"). ())("ざ" "ザ" "ザ"))
((("z" "i"). ())("じ" "ジ" "ジ"))
((("z" "u"). ())("ず" "ズ" "ズ"))
((("z" "e"). ())("ぜ" "ゼ" "ゼ"))
((("z" "o"). ())("ぞ" "ゾ" "ゾ"))
((("z" "'"). ())(("ざ" "ザ" "ザ") ("い" "イ" "イ")))
((("z" "y"). ())(("ず" "ズ" "ズ") ("い" "イ" "イ")))
((("z" "p"). ())(("ず" "ズ" "ズ") ("う" "ウ" "ウ")))
((("z" ")"). ())(("ぜ" "ゼ" "ゼ") ("い" "イ" "イ")))
((("z" "("). ())(("ぞ" "ゾ" "ゾ") ("う" "ウ" "ウ")))
((("z" ";"). ())(("ざ" "ザ" "ザ") ("ん" "ン" "ン")))
((("z" "x"). ())(("じ" "ジ" "ジ") ("ん" "ン" "ン")))
((("z" "k"). ())(("ず" "ズ" "ズ") ("ん" "ン" "ン")))
((("z" "j"). ())(("ぜ" "ゼ" "ゼ") ("ん" "ン" "ン")))
((("z" "q"). ())(("ぞ" "ゾ" "ゾ") ("ん" "ン" "ン")))
((("z" "h" "a"). ())(("じ" "ジ" "ジ") ("ゃ" "ャ" "ャ")))
((("z" "h" "i"). ())(("じ" "ジ" "ジ") ("ぃ" "ィ" "ィ")))
((("z" "h" "u"). ())(("じ" "ジ" "ジ") ("ゅ" "ュ" "ュ")))
((("z" "h" "e"). ())(("じ" "ジ" "ジ") ("ぇ" "ェ" "ェ")))
((("z" "h" "o"). ())(("じ" "ジ" "ジ") ("ょ" "ョ" "ョ")))
((("z" "h" "'"). ())(("じ" "ジ" "ジ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("z" "h" "y"). ())(("じ" "ジ" "ジ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("z" "h" "p"). ())(("じ" "ジ" "ジ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("z" "h" ")"). ())(("じ" "ジ" "ジ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("z" "h" "("). ())(("じ" "ジ" "ジ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("z" "h" ";"). ())(("じ" "ジ" "ジ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("z" "h" "x"). ())(("じ" "ジ" "ジ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("z" "h" "k"). ())(("じ" "ジ" "ジ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("z" "h" "j"). ())(("じ" "ジ" "ジ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("z" "h" "q"). ())(("じ" "ジ" "ジ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("t" "t"). ("t"))("っ" "ッ" "ッ"))

((("t" "a"). ())("た" "タ" "タ"))
((("t" "i"). ())("ち" "チ" "チ"))
((("t" "u"). ())("つ" "ツ" "ツ"))
((("t" "e"). ())("て" "テ" "テ"))
((("t" "o"). ())("と" "ト" "ト"))
((("t" "'"). ())(("た" "タ" "タ") ("い" "イ" "イ")))
((("t" "y"). ())(("つ" "ツ" "ツ") ("い" "イ" "イ")))
((("t" "p"). ())(("つ" "ツ" "ツ") ("う" "ウ" "ウ")))
((("t" ")"). ())(("て" "テ" "テ") ("い" "イ" "イ")))
((("t" "("). ())(("と" "ト" "ト") ("う" "ウ" "ウ")))
((("t" ";"). ())(("た" "タ" "タ") ("ん" "ン" "ン")))
((("t" "x"). ())(("ち" "チ" "チ") ("ん" "ン" "ン")))
((("t" "k"). ())(("つ" "ツ" "ツ") ("ん" "ン" "ン")))
((("t" "j"). ())(("て" "テ" "テ") ("ん" "ン" "ン")))
((("t" "q"). ())(("と" "ト" "ト") ("ん" "ン" "ン")))

((("t" "h" "a"). ())(("ち" "チ" "チ") ("ゃ" "ャ" "ャ")))
((("t" "h" "i"). ())(("ち" "チ" "チ") ("ぃ" "ィ" "ィ")))
((("t" "h" "u"). ())(("ち" "チ" "チ") ("ゅ" "ュ" "ュ")))
((("t" "h" "e"). ())(("ち" "チ" "チ") ("ぇ" "ェ" "ェ")))
((("t" "h" "o"). ())(("ち" "チ" "チ") ("ょ" "ョ" "ョ")))
((("t" "h" "'"). ())(("ち" "チ" "チ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("t" "h" "y"). ())(("ち" "チ" "チ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("t" "h" "p"). ())(("ち" "チ" "チ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("t" "h" ")"). ())(("ち" "チ" "チ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("t" "h" "("). ())(("ち" "チ" "チ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("t" "h" ";"). ())(("ち" "チ" "チ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("t" "h" "x"). ())(("ち" "チ" "チ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("t" "h" "k"). ())(("ち" "チ" "チ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("t" "h" "j"). ())(("ち" "チ" "チ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("t" "h" "q"). ())(("ち" "チ" "チ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("t" "s" "a"). ())(("つ" "ツ" "ツ") ("ぁ" "ァ" "ァ")))
((("t" "s" "i"). ())(("つ" "ツ" "ツ") ("ぃ" "ィ" "ィ")))
((("t" "s" "u"). ())("つ" "ツ" "ツ"))
((("t" "s" "e"). ())(("つ" "ツ" "ツ") ("ぇ" "ェ" "ェ")))
((("t" "s" "o"). ())(("つ" "ツ" "ツ") ("ぉ" "ォ" "ォ")))

((("x" "t" "u"). ())("っ" "ッ" "ッ"))
((("x" "t" "s" "u"). ())("っ" "ッ" "ッ"))

((("d" "a"). ())("だ" "ダ" "ダ"))
((("d" "i"). ())("ぢ" "ヂ" "ヂ"))
((("d" "u"). ())("づ" "ヅ" "ヅ"))
((("d" "e"). ())("で" "デ" "デ"))
((("d" "o"). ())("ど" "ド" "ド"))
((("d" "'"). ())(("だ" "ダ" "ダ") ("い" "イ" "イ")))
((("d" "y"). ())(("づ" "ヅ" "ヅ") ("い" "イ" "イ")))
((("d" "p"). ())(("づ" "ヅ" "ヅ") ("う" "ウ" "ウ")))
((("d" ")"). ())(("で" "デ" "デ") ("い" "イ" "イ")))
((("d" "("). ())(("ど" "ド" "ド") ("う" "ウ" "ウ")))
((("d" ";"). ())(("だ" "ダ" "ダ") ("ん" "ン" "ン")))
((("d" "x"). ())(("ぢ" "ヂ" "ヂ") ("ん" "ン" "ン")))
((("d" "k"). ())(("づ" "ヅ" "ヅ") ("ん" "ン" "ン")))
((("d" "j"). ())(("で" "デ" "デ") ("ん" "ン" "ン")))
((("d" "q"). ())(("ど" "ド" "ド") ("ん" "ン" "ン")))

((("d" "h" "a"). ())(("ぢ" "ヂ" "ヂ") ("ゃ" "ャ" "ャ")))
((("d" "h" "i"). ())(("ぢ" "ヂ" "ヂ") ("ぃ" "ィ" "ィ")))
((("d" "h" "u"). ())(("ぢ" "ヂ" "ヂ") ("ゅ" "ュ" "ュ")))
((("d" "h" "e"). ())(("ぢ" "ヂ" "ヂ") ("ぇ" "ェ" "ェ")))
((("d" "h" "o"). ())(("ぢ" "ヂ" "ヂ") ("ょ" "ョ" "ョ")))
((("d" "h" "'"). ())(("ぢ" "ヂ" "ヂ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("d" "h" "y"). ())(("ぢ" "ヂ" "ヂ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("d" "h" "p"). ())(("ぢ" "ヂ" "ヂ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("d" "h" ")"). ())(("ぢ" "ヂ" "ヂ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("d" "h" "("). ())(("ぢ" "ヂ" "ヂ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("d" "h" ";"). ())(("ぢ" "ヂ" "ヂ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("d" "h" "x"). ())(("ぢ" "ヂ" "ヂ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("d" "h" "k"). ())(("ぢ" "ヂ" "ヂ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("d" "h" "j"). ())(("ぢ" "ヂ" "ヂ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("d" "h" "q"). ())(("ぢ" "ヂ" "ヂ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("n" "n"). ())("ん" "ン" "ン"))
((("n"). ())("ん" "ン" "ン"))

((("n" "a"). ())("な" "ナ" "ナ"))
((("n" "i"). ())("に" "ニ" "ニ"))
((("n" "u"). ())("ぬ" "ヌ" "ヌ"))
((("n" "e"). ())("ね" "ネ" "ネ"))
((("n" "o"). ())("の" "ノ" "ノ"))
((("n" "'"). ())(("な" "ナ" "ナ") ("い" "イ" "イ")))
((("n" "y"). ())(("ぬ" "ヌ" "ヌ") ("い" "イ" "イ")))
((("n" "p"). ())(("ぬ" "ヌ" "ヌ") ("う" "ウ" "ウ")))
((("n" ")"). ())(("ね" "ネ" "ネ") ("い" "イ" "イ")))
((("n" "("). ())(("の" "ノ" "ノ") ("う" "ウ" "ウ")))
((("n" ";"). ())(("な" "ナ" "ナ") ("ん" "ン" "ン")))
((("n" "x"). ())(("に" "ニ" "ニ") ("ん" "ン" "ン")))
((("n" "k"). ())(("ぬ" "ヌ" "ヌ") ("ん" "ン" "ン")))
((("n" "j"). ())(("ね" "ネ" "ネ") ("ん" "ン" "ン")))
((("n" "q"). ())(("の" "ノ" "ノ") ("ん" "ン" "ン")))

((("n" "h" "a"). ())(("に" "ニ" "ニ") ("ゃ" "ャ" "ャ")))
((("n" "h" "i"). ())(("に" "ニ" "ニ") ("ぃ" "ィ" "ィ")))
((("n" "h" "u"). ())(("に" "ニ" "ニ") ("ゅ" "ュ" "ュ")))
((("n" "h" "e"). ())(("に" "ニ" "ニ") ("ぇ" "ェ" "ェ")))
((("n" "h" "o"). ())(("に" "ニ" "ニ") ("ょ" "ョ" "ョ")))
((("n" "h" "'"). ())(("に" "ニ" "ニ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("n" "h" "y"). ())(("に" "ニ" "ニ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("n" "h" "p"). ())(("に" "ニ" "ニ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("n" "h" ")"). ())(("に" "ニ" "ニ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("n" "h" "("). ())(("に" "ニ" "ニ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("n" "h" ";"). ())(("に" "ニ" "ニ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("n" "h" "x"). ())(("に" "ニ" "ニ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("n" "h" "k"). ())(("に" "ニ" "ニ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("n" "h" "j"). ())(("に" "ニ" "ニ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("n" "h" "q"). ())(("に" "ニ" "ニ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("h" "h"). ("h"))("っ" "ッ" "ッ"))

((("h" "a"). ())("は" "ハ" "ハ"))
((("h" "i"). ())("ひ" "ヒ" "ヒ"))
((("h" "u"). ())("ふ" "フ" "フ"))
((("h" "e"). ())("へ" "ヘ" "ヘ"))
((("h" "o"). ())("ほ" "ホ" "ホ"))
((("h" "'"). ())(("は" "ハ" "ハ") ("い" "イ" "イ")))
((("h" "y"). ())(("ふ" "フ" "フ") ("い" "イ" "イ")))
((("h" "p"). ())(("ふ" "フ" "フ") ("う" "ウ" "ウ")))
((("h" ")"). ())(("へ" "ヘ" "ヘ") ("い" "イ" "イ")))
((("h" "("). ())(("ほ" "ホ" "ホ") ("う" "ウ" "ウ")))
((("h" ";"). ())(("は" "ハ" "ハ") ("ん" "ン" "ン")))
((("h" "x"). ())(("ひ" "ヒ" "ヒ") ("ん" "ン" "ン")))
((("h" "k"). ())(("ふ" "フ" "フ") ("ん" "ン" "ン")))
((("h" "j"). ())(("へ" "ヘ" "ヘ") ("ん" "ン" "ン")))
((("h" "q"). ())(("ほ" "ホ" "ホ") ("ん" "ン" "ン")))

((("h" "n" "a"). ())(("ひ" "ヒ" "ヒ") ("ゃ" "ャ" "ャ")))
((("h" "n" "i"). ())(("ひ" "ヒ" "ヒ") ("ぃ" "ィ" "ィ")))
((("h" "n" "u"). ())(("ひ" "ヒ" "ヒ") ("ゅ" "ュ" "ュ")))
((("h" "n" "e"). ())(("ひ" "ヒ" "ヒ") ("ぇ" "ェ" "ェ")))
((("h" "n" "o"). ())(("ひ" "ヒ" "ヒ") ("ょ" "ョ" "ョ")))
((("h" "n" "'"). ())(("ひ" "ヒ" "ヒ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("h" "n" "y"). ())(("ひ" "ヒ" "ヒ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("h" "n" "p"). ())(("ひ" "ヒ" "ヒ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("h" "n" ")"). ())(("ひ" "ヒ" "ヒ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("h" "n" "("). ())(("ひ" "ヒ" "ヒ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("h" "n" ";"). ())(("ひ" "ヒ" "ヒ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("h" "n" "x"). ())(("ひ" "ヒ" "ヒ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("h" "n" "k"). ())(("ひ" "ヒ" "ヒ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("h" "n" "j"). ())(("ひ" "ヒ" "ヒ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("h" "n" "q"). ())(("ひ" "ヒ" "ヒ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("b" "b"). ("b"))("っ" "ッ" "ッ"))

((("b" "a"). ())("ば" "バ" "バ"))
((("b" "i"). ())("び" "ビ" "ビ"))
((("b" "u"). ())("ぶ" "ブ" "ブ"))
((("b" "e"). ())("べ" "ベ" "ベ"))
((("b" "o"). ())("ぼ" "ボ" "ボ"))
((("b" "'"). ())(("ば" "バ" "バ") ("い" "イ" "イ")))
((("b" "y"). ())(("ぶ" "ブ" "ブ") ("い" "イ" "イ")))
((("b" "p"). ())(("ぶ" "ブ" "ブ") ("う" "ウ" "ウ")))
((("b" ")"). ())(("べ" "ベ" "ベ") ("い" "イ" "イ")))
((("b" "("). ())(("ぼ" "ボ" "ボ") ("う" "ウ" "ウ")))
((("b" ";"). ())(("ば" "バ" "バ") ("ん" "ン" "ン")))
((("b" "x"). ())(("び" "ビ" "ビ") ("ん" "ン" "ン")))
((("b" "k"). ())(("ぶ" "ブ" "ブ") ("ん" "ン" "ン")))
((("b" "j"). ())(("べ" "ベ" "ベ") ("ん" "ン" "ン")))
((("b" "q"). ())(("ぼ" "ボ" "ボ") ("ん" "ン" "ン")))

((("b" "n" "a"). ())(("び" "ビ" "ビ") ("ゃ" "ャ" "ャ")))
((("b" "n" "i"). ())(("び" "ビ" "ビ") ("ぃ" "ィ" "ィ")))
((("b" "n" "u"). ())(("び" "ビ" "ビ") ("ゅ" "ュ" "ュ")))
((("b" "n" "e"). ())(("び" "ビ" "ビ") ("ぇ" "ェ" "ェ")))
((("b" "n" "o"). ())(("び" "ビ" "ビ") ("ょ" "ョ" "ョ")))
((("b" "n" "'"). ())(("び" "ビ" "ビ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("b" "n" "y"). ())(("び" "ビ" "ビ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("b" "n" "p"). ())(("び" "ビ" "ビ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("b" "n" ")"). ())(("び" "ビ" "ビ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("b" "n" "("). ())(("び" "ビ" "ビ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("b" "n" ";"). ())(("び" "ビ" "ビ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("b" "n" "x"). ())(("び" "ビ" "ビ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("b" "n" "k"). ())(("び" "ビ" "ビ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("b" "n" "j"). ())(("び" "ビ" "ビ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("b" "n" "q"). ())(("び" "ビ" "ビ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("f" "f"). ("f"))("っ" "ッ" "ッ"))

((("f" "a"). ())("ぱ" "パ" "パ"))
((("f" "i"). ())("ぴ" "ピ" "ピ"))
((("f" "u"). ())("ぷ" "プ" "プ"))
((("f" "e"). ())("ぺ" "ペ" "ペ"))
((("f" "o"). ())("ぽ" "ポ" "ポ"))
((("f" "'"). ())(("ぱ" "パ" "パ") ("い" "イ" "イ")))
((("f" "y"). ())(("ぷ" "プ" "プ") ("い" "イ" "イ")))
((("f" "p"). ())(("ぷ" "プ" "プ") ("う" "ウ" "ウ")))
((("f" ")"). ())(("ぺ" "ペ" "ペ") ("い" "イ" "イ")))
((("f" "("). ())(("ぽ" "ポ" "ポ") ("う" "ウ" "ウ")))
((("f" ";"). ())(("ぱ" "パ" "パ") ("ん" "ン" "ン")))
((("f" "x"). ())(("ぴ" "ピ" "ピ") ("ん" "ン" "ン")))
((("f" "k"). ())(("ぷ" "プ" "プ") ("ん" "ン" "ン")))
((("f" "j"). ())(("ぺ" "ペ" "ペ") ("ん" "ン" "ン")))
((("f" "q"). ())(("ぽ" "ポ" "ポ") ("ん" "ン" "ン")))

((("f" "n" "a"). ())(("ぴ" "ピ" "ピ") ("ゃ" "ャ" "ャ")))
((("f" "n" "i"). ())(("ぴ" "ピ" "ピ") ("ぃ" "ィ" "ィ")))
((("f" "n" "u"). ())(("ぴ" "ピ" "ピ") ("ゅ" "ュ" "ュ")))
((("f" "n" "e"). ())(("ぴ" "ピ" "ピ") ("ぇ" "ェ" "ェ")))
((("f" "n" "o"). ())(("ぴ" "ピ" "ピ") ("ょ" "ョ" "ョ")))
((("f" "n" "'"). ())(("ぴ" "ピ" "ピ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("f" "n" "y"). ())(("ぴ" "ピ" "ピ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("f" "n" "p"). ())(("ぴ" "ピ" "ピ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("f" "n" ")"). ())(("ぴ" "ピ" "ピ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("f" "n" "("). ())(("ぴ" "ピ" "ピ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("f" "n" ";"). ())(("ぴ" "ピ" "ピ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("f" "n" "x"). ())(("ぴ" "ピ" "ピ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("f" "n" "k"). ())(("ぴ" "ピ" "ピ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("f" "n" "j"). ())(("ぴ" "ピ" "ピ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("f" "n" "q"). ())(("ぴ" "ピ" "ピ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("m" "m"). ("m"))("っ" "ッ" "ッ"))

((("m" "b"). ("b"))("ん" "ン" "ン"))
((("m" "p"). ("p"))("ん" "ン" "ン"))

((("m" "a"). ())("ま" "マ" "マ"))
((("m" "i"). ())("み" "ミ" "ミ"))
((("m" "u"). ())("む" "ム" "ム"))
((("m" "e"). ())("め" "メ" "メ"))
((("m" "o"). ())("も" "モ" "モ"))
((("m" "'"). ())(("ま" "マ" "マ") ("い" "イ" "イ")))
((("m" "y"). ())(("む" "ム" "ム") ("い" "イ" "イ")))
((("m" "p"). ())(("む" "ム" "ム") ("う" "ウ" "ウ")))
((("m" ")"). ())(("め" "メ" "メ") ("い" "イ" "イ")))
((("m" "("). ())(("も" "モ" "モ") ("う" "ウ" "ウ")))
((("m" ";"). ())(("ま" "マ" "マ") ("ん" "ン" "ン")))
((("m" "x"). ())(("み" "ミ" "ミ") ("ん" "ン" "ン")))
((("m" "k"). ())(("む" "ム" "ム") ("ん" "ン" "ン")))
((("m" "j"). ())(("め" "メ" "メ") ("ん" "ン" "ン")))
((("m" "q"). ())(("も" "モ" "モ") ("ん" "ン" "ン")))

((("m" "n" "a"). ())(("み" "ミ" "ミ") ("ゃ" "ャ" "ャ")))
((("m" "n" "i"). ())(("み" "ミ" "ミ") ("ぃ" "ィ" "ィ")))
((("m" "n" "u"). ())(("み" "ミ" "ミ") ("ゅ" "ュ" "ュ")))
((("m" "n" "e"). ())(("み" "ミ" "ミ") ("ぇ" "ェ" "ェ")))
((("m" "n" "o"). ())(("み" "ミ" "ミ") ("ょ" "ョ" "ョ")))
((("m" "n" "'"). ())(("み" "ミ" "ミ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("m" "n" "y"). ())(("み" "ミ" "ミ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("m" "n" "p"). ())(("み" "ミ" "ミ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("m" "n" ")"). ())(("み" "ミ" "ミ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("m" "n" "("). ())(("み" "ミ" "ミ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("m" "n" ";"). ())(("み" "ミ" "ミ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("m" "n" "x"). ())(("み" "ミ" "ミ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("m" "n" "k"). ())(("み" "ミ" "ミ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("m" "n" "j"). ())(("み" "ミ" "ミ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("m" "n" "q"). ())(("み" "ミ" "ミ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("v" "v"). ("v"))("っ" "ッ" "ッ"))

((("v" "a"). ())("や" "ヤ" "ヤ"))
((("v" "u"). ())("ゆ" "ユ" "ユ"))
((("v" "e"). ())(("い" "イ" "イ") ("ぇ" "ェ" "ェ")))
((("v" "o"). ())("よ" "ヨ" "ヨ"))
((("v" "'"). ())(("や" "ヤ" "ヤ") ("い" "イ" "イ")))
((("v" "p"). ())(("い" "イ" "イ") ("い" "イ" "イ")))
((("v" ")"). ())(("い" "イ" "イ") ("う" "ウ" "ウ")))
((("v" "("). ())(("よ" "ヨ" "ヨ") ("う" "ウ" "ウ")))
((("v" ";"). ())(("や" "ヤ" "ヤ") ("ん" "ン" "ン")))
((("v" "k"). ())(("ゆ" "ユ" "ユ") ("ん" "ン" "ン")))
((("v" "j"). ())(("い" "イ" "イ") ("ん" "ン" "ン")))
((("v" "q"). ())(("よ" "ヨ" "ヨ") ("ん" "ン" "ン")))

((("v" "h" "a"). ())(("う゛" "ヴ" "ヴ") ("ぁ" "ァ" "ァ")))
((("v" "h" "i"). ())(("う゛" "ヴ" "ヴ") ("ぃ" "ィ" "ィ")))
((("v" "h" "u"). ())("う゛" "ヴ" "ヴ"))
((("v" "h" "e"). ())(("う゛" "ヴ" "ヴ") ("ぇ" "ェ" "ェ")))
((("v" "h" "o"). ())(("う゛" "ヴ" "ヴ") ("ぉ" "ォ" "ォ")))

((("v" "n" "a"). ())(("う゛" "ヴ" "ヴ") ("ゃ" "ャ" "ャ")))
((("v" "n" "u"). ())(("う゛" "ヴ" "ヴ") ("ゅ" "ュ" "ュ")))
((("v" "n" "o"). ())(("う゛" "ヴ" "ヴ") ("ょ" "ョ" "ョ")))

((("x" "c" "a"). ())("ヵ" "ヵ" "カ"))
((("x" "k" "a"). ())("ヵ" "ヵ" "カ"))
((("x" "k" "e"). ())("ヶ" "ヶ" "ケ"))

((("x" "y" "a"). ())("ゃ" "ャ" "ャ"))
((("x" "y" "u"). ())("ゅ" "ュ" "ュ"))
((("x" "y" "o"). ())("ょ" "ョ" "ョ"))

((("r" "r"). ("r"))("っ" "ッ" "ッ"))

((("r" "a"). ())("ら" "ラ" "ラ"))
((("r" "i"). ())("り" "リ" "リ"))
((("r" "u"). ())("る" "ル" "ル"))
((("r" "e"). ())("れ" "レ" "レ"))
((("r" "o"). ())("ろ" "ロ" "ロ"))
((("r" "'"). ())(("ら" "ラ" "ラ") ("い" "イ" "イ")))
((("r" "y"). ())(("る" "ル" "ル") ("い" "イ" "イ")))
((("r" "p"). ())(("る" "ル" "ル") ("う" "ウ" "ウ")))
((("r" ")"). ())(("れ" "レ" "レ") ("い" "イ" "イ")))
((("r" "("). ())(("ろ" "ロ" "ロ") ("う" "ウ" "ウ")))
((("r" ";"). ())(("ら" "ラ" "ラ") ("ん" "ン" "ン")))
((("r" "x"). ())(("り" "リ" "リ") ("ん" "ン" "ン")))
((("r" "k"). ())(("る" "ル" "ル") ("ん" "ン" "ン")))
((("r" "j"). ())(("れ" "レ" "レ") ("ん" "ン" "ン")))
((("r" "q"). ())(("ろ" "ロ" "ロ") ("ん" "ン" "ン")))

((("r" "h" "a"). ())(("り" "リ" "リ") ("ゃ" "ャ" "ャ")))
((("r" "h" "i"). ())(("り" "リ" "リ") ("ぃ" "ィ" "ィ")))
((("r" "h" "u"). ())(("り" "リ" "リ") ("ゅ" "ュ" "ュ")))
((("r" "h" "e"). ())(("り" "リ" "リ") ("ぇ" "ェ" "ェ")))
((("r" "h" "o"). ())(("り" "リ" "リ") ("ょ" "ョ" "ョ")))
((("r" "h" "'"). ())(("り" "リ" "リ") ("ゃ" "ャ" "ャ") ("い" "イ" "イ")))
((("r" "h" "y"). ())(("り" "リ" "リ") ("ゅ" "ュ" "ュ") ("い" "イ" "イ")))
((("r" "h" "p"). ())(("り" "リ" "リ") ("ゅ" "ュ" "ュ") ("う" "ウ" "ウ")))
((("r" "h" ")"). ())(("り" "リ" "リ") ("ぇ" "ェ" "ェ") ("い" "イ" "イ")))
((("r" "h" "("). ())(("り" "リ" "リ") ("ょ" "ョ" "ョ") ("う" "ウ" "ウ")))
((("r" "h" ";"). ())(("り" "リ" "リ") ("ゃ" "ャ" "ャ") ("ん" "ン" "ン")))
((("r" "h" "x"). ())(("り" "リ" "リ") ("ぃ" "ィ" "ィ") ("ん" "ン" "ン")))
((("r" "h" "k"). ())(("り" "リ" "リ") ("ゅ" "ュ" "ュ") ("ん" "ン" "ン")))
((("r" "h" "j"). ())(("り" "リ" "リ") ("ぇ" "ェ" "ェ") ("ん" "ン" "ン")))
((("r" "h" "q"). ())(("り" "リ" "リ") ("ょ" "ョ" "ョ") ("ん" "ン" "ン")))

((("w" "w"). ("w"))("っ" "ッ" "ッ"))

((("w" "a"). ())("わ" "ワ" "ワ"))
((("w" "'"). ())(("わ" "ワ" "ワ") ("い" "イ" "イ")))
((("w" ";"). ())(("わ" "ワ" "ワ") ("ん" "ン" "ン")))
((("w" "i"). ())(("う" "ウ" "ウ") ("ぃ" "ィ" "ィ")))
((("w" "u"). ())("う" "ウ" "ウ"))
((("w" "e"). ())(("う" "ウ" "ウ") ("ぇ" "ェ" "ェ")))
((("w" "o"). ())("を" "ヲ" "ヲ"))
((("w" "h" "a"). ())(("う" "ウ" "ウ") ("ぁ" "ァ" "ァ")))
((("w" "h" "i"). ())(("う" "ウ" "ウ") ("ぃ" "ィ" "ィ")))
((("w" "h" "u"). ())("う" "ウ" "ウ"))
((("w" "h" "e"). ())(("う" "ウ" "ウ") ("ぇ" "ェ" "ェ")))
((("w" "h" "o"). ())(("う" "ウ" "ウ") ("ぉ" "ォ" "ォ")))

((("d" "r"). ())(("で" "デ" "デ") ("あ" "ア" "ア") ("る" "ル" "ル")))
((("d" "s"). ())(("で" "デ" "デ") ("す" "ス" "ス")))
((("m" "n"). ())(("も" "モ" "モ") ("の" "ノ" "ノ")))
((("m" "s"). ())(("ま" "マ" "マ") ("す" "ス" "ス")))
((("c" "r"). ())(("か" "カ" "カ") ("ら" "ラ" "ラ")))
((("n" "d"). ())(("の" "ノ" "ノ") ("で" "デ" "デ")))
((("s" "r"). ())(("す" "ス" "ス") ("る" "ル" "ル")))
((("s" "t"). ())(("し" "シ" "シ") ("た" "タ" "タ")))
((("t" "m"). ())(("た" "タ" "タ") ("め" "メ" "メ")))

((("z" "-"). ())("〜" "〜" ""))
((("z" "["). ())("『" "『" ""))
((("z" "]"). ())("』" "』" ""))
((("z" ","). ())("‥" "‥" ""))
((("z" "."). ())("…" "…" ""))
((("z" "/"). ())("・" "・" "・"))
))

(set! ja-wide-rule
'(("a" "a")
("b" "b")
("c" "c")
("d" "d")
("e" "e")
("f" "f")
("g" "g")
("h" "h")
("i" "i")
("j" "j")
("k" "k")
("l" "l")
("m" "m")
("n" "n")
("o" "o")
("p" "p")
("q" "q")
("r" "r")
("s" "s")
("t" "t")
("u" "u")
("v" "v")
("w" "w")
("x" "x")
("y" "y")
("z" "z")
("A" "A")
("B" "B")
("C" "C")
("D" "D")
("E" "E")
("F" "F")
("G" "G")
("H" "H")
("I" "I")
("J" "J")
("K" "K")
("L" "L")
("M" "M")
("N" "N")
("O" "O")
("P" "P")
("Q" "Q")
("R" "R")
("S" "S")
("T" "T")
("U" "U")
("V" "V")
("W" "W")
("X" "X")
("Y" "Y")
("Z" "Z")

("1" "1")
("2" "2")
("3" "3")
("4" "4")
("5" "5")
("6" "6")
("7" "7")
("8" "8")
("9" "9")
("0" "0")

("-" "−")
("," ",")
("." ".")
("!" "!")
("\"" "”")
("#" "#")
("$" "$")
("%" "%")
("&" "&")
("'" "’")
("(" "(")
(")" ")")
("~" "〜")
("=" "=")
("^" "^")
("\\" "\")
("yen" "¥")
("|" "|")
("`" "‘")
("@" "@")
("{" "{")
("[" "[")
("+" "+")
(";" ";")
("*" "*")
(":" ":")
("}" "}")
("]" "]")
("<" "<")
(">" ">")
("?" "?")
("/" "/")
("_" "_")
(" " " ")
))