アイヌ語のカタカナ表記は分かち書き(わかち書き、分かち組)で、区切られた語は分割禁止と聞きました。そのような分割禁止を実現しようとして試してみたが、分からないことが多かった…というメモです。
語を分割禁止する機能を持つワープロなどは、わりと見つかりませんでした。ここでは主にCSSについてメモします。印刷物にするならVivliostyle12を使うのがよいと思います(推し)。それと、InDesignと秀丸について少し触れます。
CSS
CSSのword-break
プロパティの値keep-all
はCJK(中国語、日本語、朝鮮語)の文字の間での改行(分割)を許しません3。
以上。
念のため確認してみました。ここでCJKの文字というのはUnicode line breaking classesのNU、AL、AI、またはIDに属する文字ということだそうです4。調べてみたところ次の通りなので、結論としては、期待通りに振る舞うのではないか?
- 半濁点付き小書きのカタカナも含めてカタカナは分割禁止の対象
- 全角スペースでは半角スペース同様に行分割できる
アイヌ語で使われるカタカナは分割禁止に該当?
小書きのカタカナで半濁点が付いてるもの、例えば「ㇷ゚」(小書きの「プ」)などが気になるけど、次の通りで、分割禁止に該当する…と思う。
- (小書きじゃない)カタカナはclass IDに属するので分割禁止
- 小書きのカタカナはclass CJに属する5けど、次のようにあるので、ここではclass ID扱いでよい…と思う。つまり分割禁止。ちなみに「strict line breaking」は厳格な禁則処理といったところ
Treating characters of class CJ as class NS will give CSS strict line breaking; treating them as class ID will give CSS normal breaking.6
- カタカナに半濁点(
U+309A
)が付いてる(合成されてる)場合、次のように書いてあるので、ベースのカタカナに従って、つまり分割禁止
The line breaking behavior of the sequence is that of the base character.7
全角スペースは分割できる場所か?
分かち書きで語を区切る空白は、いわゆる半角スペース(U+0020
)も全角スペース(和字間隔、U+3000
)も使うようです。macOSのアイヌ語入力ソース8では、スペースキーで全角スペースが入力されます。
全角スペースU+3000
はclass BAなので5、分割できる場所です9。
どうしても語が行から溢れる場合 - overflow-wrap: anywhere;
アイヌ語で語の分割を禁止する理由は、「意味が致命的に変わってしまうから」とも聞いたので、行ボックスを溢れるなら、溢れて(overflow-wrap: normal;
)破綻してしまった方がよい(overflow: visible;
で溢れたことが分かる方がよい)のかもしれない……分かりません。
改行場所をCSSで美しく制御する方法を解説する記事では、word-break: keep-all;
とあわせてoverflow-wrap: anywhere;
「任意の場所で分割されることがある」も設定する例が見られます。例えばBudouXの使用例10がそうなってます。
小書きのカナの行頭禁則
日本語の禁則処理では、小書きのカナを行頭には置かないようにしたりします。これはアイヌ語でもそうなのか?……分かりません。
「ㇷ゚」のような小書きのカナが1文字だけという語を見かけます。小書きのカナ1文字の語が複数個連続する場合、その前の語を引き連れてごっそり次の行に移るという大胆な禁則処理になりそうです。そういう場合があるのか?
言語を指定してスタイルを制御 - :lang(ain)
擬似クラス
アイヌ語の言語コードはain
です。CSSの設定では:lang(ain)
擬似クラスを使って、言語に基づいてスタイルを設定したいところです。次のように書けるといいと思うのですが…
:lang(ain) {
word-break: keep-all;
}
<p lang="ain">杉本 ニㇱパ アシㇼパ</p>
しかし、現時点でlang="ja"
をやめると、次の現象が起きそうです:
- 禁則処理が働かなくなるのではないか。前述の通りで、これが問題なのかどうか分かりませんが…
- フォントの選択が不安定になるのではないか
両端揃え - text-align: justify;
text-spacing: justify;
text-spacing: justify;
どうしたものか……分かりません。
そもそも、(アイヌ語、日本語、英語にかかわらず)アクセシビリティの観点からjustification(ジャスティフィケーション、均等割付、均等割り、両端揃え)は使わない方がよいとされてます11。
それでもやるとした場合、どこのスペースを盛るか?区切りのスペースだけ?語の内部の文字スペースも?現状、わたしのGoogle Chromeでは語の内部の文字スペースも広がってしまい、隣の行と語のまとまり感が異なります。
「いやいや、全角スペースは固定幅(fixed-width space)ですよ」という話が続きます。
単語間スペース word-spacing
プロパティ
これも、どうしたものか……分かりません。
分かち書きのスペースが狭くて、語の区切りが分かりづらい場合があるとも聞きました。「…だから一定の幅を確保するために固定幅のスペースにする」のか、「…だから調整できるスペースにする」のか。どちらかを選ばなくてはならない現状のようです。
CSS Text Module Level 3では全角スペース(U+3000
)は語を区切る文字ではないとみなしています。実際、全角スペースで分かち書きしてると、全角スペースにはCSSのword-spacing
プロパティが効きません。「固定幅スペース(fixed-width spaces)なのですから」ということもあるでしょう。固定幅だから縮められることはないという面と、伸ばしたくても伸びないといいう面もある、ということか。
Note: Neither punctuation in general, nor fixed-width spaces (such as U+3000 and U+2000 through U+200A), are considered word-separator characters, because even though they frequently happen to separate words, their primary purpose is not to separate words.
「their primary purpose is not to separate words.」とありますね。でも、ここでは単語を分けるのが主目的なんですよね。CSS 2.2は、そこまでは言ってませんでした:
However general punctuation, characters with zero advance width (such as the zero with space U+200B) and fixed-width spaces (such as U+3000 and U+2000 through U+200A) are not affected.
お試し
ここまでをCodePenで試せるようにしてみました。右上の「EDIT ON CODEPEN」をクリックして別ウィンドウで開いて、サイズを変えて見てください。アイヌ語は分からないのでゴールデンカムイの登場人物の名前を並べてます:
See the Pen アイヌ語の分割禁止 by Taku Yamaguchi (@yamahige) on CodePen.
ページ組版
以上、CSSで分割禁止できそうですが、ブラウザーはページ組版が苦手です。「アイヌ語で冊子を作ろう」、「資料を印刷して配ろう」、「論文を投稿しよう」となったら、Vivliostyle12があります(推し)。
本格的に使うにはNode.jsのインストールから始めなくてはなりませんが、とりあえず試すなら、前のCodePenのコードを次のようにコピーして(CSSは<style>
で囲って)、Vivliostyle Viewerの「ドキュメントURLまたはHTMLコードを入力」欄に貼り付けて「適用」ボタンを押します。4ページくらいの文章でも大丈夫です。
<style>
:root {
writing-mode: vertical-rl;
line-break: normal;
/* overflow-wrap: anywhere; */
margin: 2em;
border: thin solid navy;
font-family: serif;
line-height: 2;
}
.ain {
word-break: keep-all;
text-align: start;
overflow: visible;
}
.ja {
text-align: justify;
}
h2 {
font-size: 1em;
}
</style>
<h2>語の分割禁止</h2>
<p class="ain">杉元 佐一 ニㇱパ アシㇼパ キロランケ インカㇻマッ チカパシ ヴァシリ・パヴリチェンコ 土方 歳三 キラウㇱ ウイルク アチャ リラッテ ススポ フチ オソマ マカナックル イカリポポ リヤㇷ゚イぺ キムㇱプ エノノカ ヨーヤンケ ヘンケ シロマクル メㇱラ スクタ イレンカ ラッチ オㇱケポロ レタㇻ ホㇿケウカムイ リュウ。</p>
<p class="ain">ト゚ ツ゚ ッ ㇳ ㇰ ㇷ゚ ㇺ ㇱ ㇻ ㇼ ㇽ ㇾ ㇿ</p>
<h2>語の分割可能</h2>
<p class="ja">杉元 佐一 ニㇱパ アシㇼパ キロランケ インカㇻマッ チカパシ ヴァシリ・パヴリチェンコ 土方 歳三 キラウㇱ ウイルク アチャ リラッテ ススポ フチ オソマ マカナックル イカリポポ リヤㇷ゚イぺ キムㇱプ エノノカ ヨーヤンケ ヘンケ シロマクル メㇱラ スクタ イレンカ ラッチ オㇱケポロ レタㇻ ホㇿケウカムイ リュウ。</p>
正規表現
ところで…
JavaScriptの正規表現が結合文字をサポートしたのはES2024からなんですね12。例えば、「ㇷ゚」(小書きの「プ」)は結合文字です。
「プレーンなテキストを処理してタグを挿入することで改行(行分割)を制御する」としましょう。例えば、BudouXの例10では<wbr>
要素を挿入してます。こういった処理を、JavaScriptの正規表現を使って自前でやろうとすると、これまでは「ㇷ゚」の扱いで苦労しただろうと思います。
JavaScriptで文字を(日本語を、そしてアイヌ語も)扱うときの注意点については、次の記事が参考になりました:
InDesign
普段使ってないのでほとんど分かりませんが…
- 単語の分割を禁止する機能があります。例えば、「アイヌ語」という名前の文字スタイルを作って分割禁止を設定し、そのスタイルが設定されたテキスト全体を分割禁止にできます
- さらに段落スタイルの設定で、正規表現を書いて、それにマッチするテキストに対して「アイヌ語」文字スタイルを自動的に設定できます
正規表現をマウス(トラックパッド)操作で組み立てられるのですが、\w
(任意の単語)というだけのシンプルな正規表現に「アイヌ語」文字スタイルを適用すると、分かち書きされた語が分割禁止になりました。
ただ、この\w
という記述だけで、本当に「ㇷ゚」まで含む語にマッチしてるのか、前記のUnicodeのように仕様を見つけることはできませんでした…
秀丸
秀丸に「分割禁止拡張 for 秀丸エディタ/秀丸メール」を導入すると、特定の文字を分割禁止できます13。
分割禁止ワード用ファイルに正規表現を書いて、マッチするテキストを分割禁止にできます。ただし、正規表現も、分割禁止ワード用ファイルもShift-JISでなくてはなりません。
-
Vivliostyle — 楽しく CSS 組版! https://vivliostyle.org/ja/ ↩ ↩2
-
Vivliostyleでなにができるの? https://gihyo.jp/article/2024/01/vivliostyle-01 ↩ ↩2
-
word-break https://developer.mozilla.org/ja/docs/Web/CSS/word-break ↩
-
5.2. Breaking Rules for Letters: the word-break property - CSS Text Module Level 3 https://www.w3.org/TR/css-text-3/#word-break-property ↩
-
Line_Break Property - Unicode Character Database https://www.unicode.org/Public/UCD/latest/ucd/LineBreak.txt ↩ ↩2
-
CJ: Conditional Japanese Starter - Unicode Line Breaking Algorithm https://www.unicode.org/reports/tr14/tr14-53.html#CJ ↩
-
CM: Combining Mark (Non-tailorable) - Unicode Line Breaking Algorithm https://www.unicode.org/reports/tr14/tr14-53.html#CM ↩
-
Macでアイヌ語入力ソースを設定する/切り替える https://support.apple.com/ja-jp/guide/japanese-input-method/jpim10244/mac ↩
-
BA: Break After - Unicode Line Breaking Algorithm https://www.unicode.org/reports/tr14/tr14-53.html#BA ↩
-
BudouX: 読みやすい改行のための軽量な分かち書き器 https://developers-jp.googleblog.com/2023/09/budoux-adobe.html ↩ ↩2
-
Visual Presentation: Understanding SC 1.4.8 https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-visual-presentation.html ↩
-
RegExp v flag with set notation + properties of strings - とほほのES2024入門 https://www.tohoho-web.com/ex/es2024.html#regexp-v-flag ↩
-
分割禁止拡張 for 秀丸エディタ/秀丸メール https://hide.maruo.co.jp/software/nodiv.html ↩