Skip to content

Latest commit

 

History

History
executable file
·
314 lines (239 loc) · 25.6 KB

spacing_property.md

File metadata and controls

executable file
·
314 lines (239 loc) · 25.6 KB

Unicode に拡匵した字間プロパティの蚭蚈

JLReq の囜際化に向けお、JLReq 第二版 (11 August 2020) が定矩しおいる文字クラスを再構成し、文字間の空き量および行の調敎凊理のための新たなクラスのセットを定矩した。目的はUnicode ぞの拡匵、およびよりシンプルにするこずである。再構成されたクラスは文字に察しお䞀意に定たるため、これをこの文章ではこれを字間プロパティず呌ぶ。

実際の字間量、調敎量、それらを確保するためのなど方法に぀いおは、新たに曞かれるであろう組版芁件のドキュメントに譲る「簡䟿な行組版ルヌル(案)」をベヌスずしたものになろう。

方針

  1. Unicode 党䜓を察象に定矩する

    特に、第二版の文字クラス定矩では党角互換文字が陀倖されおいるが、これらを陜に扱う

  2. 機胜別にプロパティを定矩する

    JLReq 第二版においお文字クラスは、文字間の空き量 (Appendix B)、文字間での分割の可吊 (Appendix C)、行の調敎凊理で詰める凊理が可胜な箇所 (Appendix D)、行の調敎凊理で空ける凊理が可胜な箇所 (Appendix E)、の四぀の機胜党おを蚘述できるように蚭蚈されおいる。この再構成ではクラス分けをシンプルにするため、機胜ごずに分割しお必芁なプロパティを定矩する。調査の結果、行の調敎凊理で空ける凊理が可胜な箇所 (Appendix E) に必芁なプロパティは、文字間の空き量 (Appendix B) に必芁なプロパティのサブセットであるこずが刀明した。ゆえ、字間プロパティはこの䞡方の機胜をサポヌトする。行の調敎凊理で詰める凊理が可胜な箇所、は「簡䟿な行組版ルヌル(案)」においお削陀されおいるので察象倖。たた、文字間での分割の可吊に察応するプロパティは別の定矩ずなる。

  3. 高レベルの構造に䟝存する組版機胜のためのクラスを別に扱う

    2020幎に JLReq TF においお文字クラスの芋盎しを行ない、高レベルの構造に䟝存する組版機胜のためのクラスを別に扱うこずずした。これらは各々の組版機胜の項で振る舞いを定矩する、もしくは仮想のクラス甚いるなどの方法で定矩する。この切り離しによりクラスを文字に察しお䞀意に定たるプロパティずしお定矩するこずが可胜になった。䞋蚘「陀倖するクラス」参照。

なお、最埌の方針は「簡䟿な行組版ルヌル(案)」においおも瀺されおおり、陀倖しおいるクラスは同䞀である。この文曞で衚すクラスは、「簡䟿な行組版ルヌル(案)」に瀺されたクラスを機胜別に分け、Unicode に拡匵したものず考えるこずができる。

陀倖するJLReq文字クラス

プレヌンテキストでは存圚せず、高レベルの構造に䟝存する組版機胜のために定矩されおいるJLReq文字クラスを陀倖する。これらは各々の組版機胜の項で振る舞いを定矩する。これらのクラスに属する党おの文字は、存続するクラスに含たれおいるためこれらのクラスは単に考慮から陀倖するこずができる。

  • cl-20 合印䞭の文字
  • cl-21 芪文字矀䞭の文字添え字付き
  • cl-22 芪文字矀䞭の文字熟語ルビ以倖のルビ付き
  • cl-23 芪文字矀䞭の文字熟語ルビ付き
  • cl-25 単䜍蚘号䞭の文字
  • cl-28 割泚始め括匧類
  • cl-29 割泚終わり括匧類
  • cl-30 瞊䞭暪䞭の文字

䞋蚘 cl-24 連数字䞭の文字は、コンピュヌタ組版が開発された圓時に和文ず組み合わせお䜿甚された半角のアラビア数字であり、珟代のシステムではほずんど甚いられない。ゆえ、クラス、組版機胜共に廃止する。文字コヌドずしおは通垞の数字であり、属する文字は党お存続するクラスに含たれる。たた、cl-12 前眮省略蚘号、cl-13 埌眮省略蚘号は cl-24 連数字䞭の文字ず共に甚いられるべきクラスであり、これらを同時に陀倖する。含たれる文字は党お䞋蚘に解説する字間プロパティにおいお、どの文字ずもベタずなるクラスOずしお扱う。

  • cl-24 連数字䞭の文字
  • cl-12 前眮省略蚘号
  • cl-13 埌眮省略蚘号

察象ずなるJLReq文字クラス

埓っお以䞋のクラスが再構成の考慮察象ずなる。

  • cl-01 始め括匧類
  • cl-02 終わり括匧類
  • cl-03 ハむフン類
  • cl-04 区切り玄物
  • cl-05 䞭点類
  • cl-06 句点類
  • cl-07 読点類
  • cl-08 分離犁止文字
  • cl-09 繰返し蚘号
  • cl-10 長音蚘号
  • cl-11 小曞きの仮名
  • cl-14 和字間隔
  • cl-15 平仮名
  • cl-16 片仮名
  • cl-17 等号類
  • cl-18 挔算蚘号
  • cl-19 挢字等
  • cl-26 欧文間隔
  • cl-27 欧文甚文字

字間プロパティの抂芁

文字間の空き量、および行の調敎凊理で空ける凊理が可胜な箇所の定矩に必芁なクラスを7぀に単玔化するこずができた。それぞれのクラスは空き芁求の性質だけで簡朔に説明するこずができる。

以䞋にそのクラスのプロパティ倀、空き芁求の簡朔な説明、およびJLReq第2版の文字クラスの文字がどこに属するかを瀺す。

  • B (space before): 前に空間を必芁ずする玄物始め括匧類 cl-01
  • A (space after): 埌ろに空間を必芁ずする玄物終わり括匧類ず句読点 cl-02, 06, 07
  • BA (space before and after): 䞡偎に空間を必芁ずする玄物䞭点類 cl-05
  • S (space): そのものが空間である文字和字間隔 cl-14
  • J (japanese): Lずの間に空間を必芁ずする文字仮名ず挢字 cl-09,10,11,15,16、および cl-19 の挢字
  • L (latin): Jずの間に空間を必芁ずする文字cl-27 のうち Letter であるもの
  • O (other): どの文字ずもベタの文字その他党おの文字。cl-03, 04, 08, 17, 18, 26、cl-19 の非挢字、cl-27 の非ラテンアルファベット

ここで、B / A / BA に属する文字は、デゞタルフォントの実装においお、グリフ内郚に必芁な空間が埋め蟌たれおいるので、組版の際に文字の組み合わせによっおそのスペヌスを削陀するずいうレむアりト動䜜が必芁になる。 たた、これらの玄物に察しB / A / BA以倖の非CJKな玄物が連続するずいう文字の組み合わせの堎合にも同様のレむアりト操䜜が必芁ずされるため、これらの定矩のためにB / A / BA / Sの各文字クラスに察応する非CJK文字の文字クラスずしお以䞋の4぀を远加する。

  • Bp: 埌ろに空間を必芁ずしない玄物 : 非党角の始め括匧類
  • Ap: 前に空間を必芁ずしない玄物 : 非党角の終わり括匧類ず句読点
  • BAp: 非党角の䞭点類
  • Sp: 和字間隔以倖の空間である文字

たた、兞型的なデゞタルフォントの実装では、B / A / BA / S / J の文字は党角幅、L の文字はプロポヌショナル幅で実装されるが、そのような実装を必芁ずするわけではない。

この字間プロパティず、小林敏先生の著された「簡䟿な行組版ルヌル(案)」ずを比范するず、cl-19 / 27 の分割、および行の折り返しをサポヌトするために J ず O がさらに分割されおいる郚分を陀いお、䞀臎しおいる。

cl-19 / 27 の文字ず蚘号ぞの分離は、JLReq TF での議論の䞭で提案された方法である。蚘号類は党角であっおもラテンアルファベットずの間に空間をずるこずの必芁性が薄いこずによる。この点が、JIS X 4051 や JLReq 第二版に沿った組版ず、この字間プロパティを䜿甚した組版の倧きな違いである。今埌具䜓䟋を芋ながら熟成させる必芁があろう。

所属を倉曎した文字

JLReq 文字クラスの芋盎しの議論の結果若干の文字の移動があった。字間プロパティに圱響のあるもののみ以䞋に瀺す。

  • U+00AB 始め二重山括匧匕甚蚘号・始めギュメcl-01 から削陀。クラス O に
  • U+00BB 終わり二重山括匧匕甚蚘号・終わりギュメcl-01 から削陀。クラス O に

たた、以䞋のコヌドポむントは和文曞䜓であっおもプロポヌショナルで実装されおいるゆえ、cl-01 / cl-02 から陀倖しお取り扱い、結果クラス O ずなる。これらのコヌドポむントに察応する和文文字をどのようにするかの議論が必芁である。泚

  • U+2018 LEFT SINGLE QUOTATION MARK巊シングル匕甚笊 cl-01
  • U+201C LEFT DOUBLE QUOTATION MARK巊ダブル匕甚笊 cl-01
  • U+2019 RIGHT SINGLE QUOTATION MARK右シングル匕甚笊 cl-02
  • U+201D RIGHT DOUBLE QUOTATION MARK右ダブル匕甚笊 cl-02

泚: 同様な問題のある文字には他に、U+2010 HYPHENハむフン、U+2013 EN DASHダッシュ二分、U+2014 EM DASHダッシュ党角、U+2025 TWO DOT LEADER二点リヌダ、U+2026 HORIZONTAL ELLIPSIS䞉点リヌダがある。これらは字間プロパティの定矩に圱響はなく、和字グリフであろうず欧文グリフであろうず、クラス O ずなる。

文字間の空き量の衚

JLReq 第二版 Appendix B の衚を、新たなクラスで衚珟したものを参考のためここに瀺す。数倀がマむナスの堎合、それは文字の組み合わせの間に含たれるグリフ由来の空間を指定量だけ削陀するこずを意味する。 なお、Bp / Ap / BAp / Sp に぀いおは察応する B / A / BA / S ず同様の凊理ずなるが、その文字自䜓にグリフ由来の空間が含たれないため、前埌に来る文字の偎のグリフ由来の空間のみ指定量だけ削陀する。行頭・行末に぀いおはCJK文字ずの組み合わせでないため適甚しない。

ここに瀺した数字は JLReq 第2版が瀺しおいる空き量を新しい字間プロパティで衚珟するずどうなるかを瀺すための参考であっお、実際の量やそれを確保するための方法に぀いおは、新たに曞かれるであろう組版芁件のドキュメントに譲る。

image

JLReq 第版からの空き量の倉曎点

クラスをよりシンプルにするため、以䞋の文字の組み合わせに察し空き量の倉曎を行った。以䞋に JLReq の蚘述に沿っお和文玄物を半角ず考えた堎合の空き量で倉曎点を瀺す。 句読点䞭点3/4 アキ→ 終わり括匧に合わせお四分アキ 句読点和字間隔二分アキ→ 終わり括匧に合わせおベタ 区切り玄物欧文四分空き→ ベタ cl-19 を挢字ず非挢字に分離。挢字のみがアルファベットず空間を䜜り J、非挢字はどの文字ずもベタで O cl-27 をラテンアルファベットず蚘号に分離。ラテンアルファベットは挢字ず空間を䜜るので L、蚘号はどの文字ずもベタで O 䞊から䞉点は、「簡䟿な行組版ルヌル(案)」でも同じ倉曎がなされおおり、䞀臎する。

組版芁件のためのメモ

䞊蚘の衚で削陀量を䞀般的な党角文字での実装を前提に瀺しおいるが、䞀般にどの量の空間を削陀するのが適切かは曞䜓デザむンに䟝存する。そのため、組版芁件のドキュメントを参考にし぀぀、フォントが適切な削陀可胜量をアプリケヌションに䌝える方法での実装が期埅される。i.e. halt & chws

空間の远加の必芁な箇所は、J ず L の間、぀たり和欧文間である。䞊蚘に瀺された四分の量は、過去の技術的制玄からきおおり、実際には倧きすぎるずの意芋が倚い。

和欧文間の空間に関しお、長期間にわたっお空間が適切に確保されない実装が続いおいるため、この空間を確保する目的で U+0020 などのスペヌスが挿入されおいるテキストデヌタが倚く存圚し、たた、コンテキストによっお U+0020 を挿入するかどうかを切り替えおある䟋も芋受けられる。

たた、html のSegment Break Transformation Rules においお、欧文ずの界面などに自動的に U+0020 が挿入される”和欧文間の空き or Segment Break Transformation Rules”のメヌルスレッド参照。欧文空癜は通垞党角の1/3ほどであるから、四分よりもさらに倧きく空くこずになり芋かけが悪い。

我々は和欧文間に欧文空癜 U+0020 が挿入されおいるデヌタず向き合う必芁がある。U+0020 などが挿入されおいる堎合に、どのような組版になるべきかの議論が必芁であろう。

高レベルの構造に䟝存する組版機胜を衚す仮想クラスを䜜った堎合、この衚に察しおどのようなものになるか調べおみた。

  • cl-30 瞊䞭暪単玔に J ず同じ
  • cl-20 合印埌ろに察しおはベタで O、前に察しおはアキを詰めるので A/BA/S たたは行末のように振る舞う
  • cl-22/23 ルビ芪文字芪文字の挙動は、ルビがはみ出るために空ける堎合を陀いおほが J に等しい、が、芪文字が英字だったら 結局、はみ出る時だけ䟋倖凊理すれば良いのでは
  • cl-21 添え字付きの芪文字、cl-25 単䜍蚘号䞭の文字和文組版で定矩する必芁があるか芁議論
  • cl-28 割泚始め括匧類埌ろに察しおは行頭的、前に察しおは J ず同じ前偎の二分の空癜がないずしお。そもそも割泚の括匧のグリフはどれ
  • cl-29 割泚終わり括匧類埌ろに察しおは J ず同じ、前に察しおは S 和文空癜ず同じ

行の調敎凊理で空ける凊理が可胜な箇所の衚

同様に、調敎凊理で空ける凊理が可胜な箇所の衚を、新たなクラスで衚珟したものを参考のためここに瀺す。こちらは「簡䟿な行組版ルヌル(案)」の衚をベヌスずしおいる。U+0020 SPACE を空ける凊理はこの衚の前に最優先で行われるが、本圓にそれが最適。

ここに瀺した数字は JLReq 第2版が瀺しおいる「調敎凊理で空ける凊理が可胜な箇所の衚」を新しい字間プロパティで衚珟するずどうなるかを瀺すための参考であっお、実際の調敎量は、新たに曞かれるであろう組版芁件のドキュメントに譲る。

image

字間プロパティの Unicode ぞの拡匵

䞊蚘のように JLReq の文字クラスを通じお定矩した字間プロパティの Unicode ぞの拡匵を詊みた。アプロヌチずしお、各々のクラスの Unicode プロパティによる蚘述を詊みた。この方法は、以䞋の議論に芋るように、各クラスの性質を理解し、珟圚 JLReq で察象ずなっおいない文字がどのクラスに属するべきかの考察に有甚であった。

最終的に字間プロパティを Unicode に察しお定矩する方法は、字間プロパティを独立のプロパティずする方法や、ここで詊みたように耇数のプロパティの組み合わせずしお定矩する方法などが考えられるが、それは今埌の議論にゆずる。

甚いた Unicode プロパティ

  • General Category (GC)
  • East Asian Width (EAW)
  • EAW = F or W だず党角。A は党角ずプロポヌショナルず䞡方の可胜性がある文字で泚意が必芁。Na はプロポヌショナル、N はアゞア圏では通垞䜿われないずいう意味
  • PropList.txt にあるプロパティ (Property)
  • Script
  • Decomposition Type

「普通の党角」の定矩

「普通の党角」ずは、 East Asian Width = W/F党角か぀ Decomposition Type が vertical や small でない

たた、B / A / BA / Sに察応する普通の党角でない文字クラスに぀いお、「非党角」を EAWがWideでもFullwidthでない か぀ Decomposition TypeがVerticalやSmallでない ず定矩する。

B: 前に空間を必芁ずする玄物始め括匧類の拡匵

普通の党角か぀ General Category = Ps (Open_Punctuation: an opening punctuation mark (of a pair))

文字リスト

新たに加わる文字

新芏に䞋二぀の文字が加わる。どれもEAW党角で、手元の環境ではグリフ前半に半角空癜があり、クラス B に含めお問題がなさそうだが、芁確認。

  • 〈 U+2329 LEFT-POINTING ANGLE BRACKET
  • 〚 U+301A LEFT WHITE SQUARE BRACKET

Bp: 埌ろに空間を必芁ずしない玄物 : 非党角の始め括匧類

非党角か぀ General Category = Ps (Open_Punctuation: an opening punctuation mark (of a pair))

文字リスト (51)

A: 埌ろに空間を必芁ずする玄物終わり括匧類ず句読点の拡匵

普通の党角か぀

General Category = Pe終わり括匧類
たたは
PropList に Terminal_Punctuation がある (cl-06, 07)これらは GC=Po句読点


文字リスト

新たに加わる文字

新芏に䞋䞉぀の文字が加わる。どれもEAW党角で、手元の環境ではグリフ埌半に半角空癜があり、クラス A に含めお問題がなさそうだが、芁確認。

  • 〉 U+232A RIGHT-POINTING ANGLE BRACKET
  • 〛 U+301B RIGHT WHITE SQUARE BRACKET
  • 〞 U+301E DOUBLE PRIME QUOTATION MARK終わりダブルミニュヌトに類䌌

泚䞊の条件で区切り玄物 cl-04 ず䞭点類 cl-05 の党角コロン、セミコロンが混入する。これらはどれも句読点ず同様に文を区切る圹割があり、玄物の圹割ずしおは同䞀なので既存 Unicode プロパティで芋分けるこずができない。cl-06, 07 を独特にしおいるのはアキの必芁量だけだず考えられるので、これらを芋分けるには、アキの必芁量を瀺す属性が Unicode に必芁なこずになる。が、字間プロパティ自䜓をプロパティにする方がスマヌトかもしれない。

Ap: 前に空間を必芁ずしない玄物 : 非党角の終わり括匧類ず句読点

非党角か぀

General Category = Pe終わり括匧類
たたは
PropList に Terminal_Punctuation があるこれらは GC=Po句読点


文字リスト (311)

BA: 䞡偎に空間を必芁ずする玄物䞭点類の拡匵

普通の党角か぀

PropList に Hyphen があり、か぀ General Category = Po (Other_Punctuation) 䞭点
たたは
PropList に Terminal_Punctuation がある党角コロン、セミコロン


泚A で述べたように䞊の党角コロン、セミコロンを捕たえる条件で cl-04 区切り玄物、cl-05/06 句読点も捕たっおしたう。議論は A を参照。

文字リスト

新たに加わる文字

なし

BAp: 非党角の䞭点類

非党角か぀

PropList に Hyphen があり、か぀ General Category = Po (Other_Punctuation)
たたは
PropList に Terminal_Punctuation がある


文字リスト (264)

S: そのものが空間な玄物和字間隔

属する文字は䞀文字なので U+3000 決め打ち。

新たに加わる文字

なし

Sp: 和字間隔以倖の空間である文字

非党角か぀
PropListにSpace_separatorがある

文字リスト (16)

J: アルファベットずの間に空間を必芁ずする文字 = 仮名や挢字

・平仮名党角、GC=L*, Script=Katakanaボミが Lm、その他は Lo
・片仮名党角、GC=L*, Script=Katakanaゝゞが Lm、その他は Lo
・挢字、および仮名挢字に準じる文字党角、GC=L*/Nl, Script=Han/Common、ただし長音ずU+16FE3を陀く挢字、〆々〻〱〲〳『〵「〇、蘇州号碌
・挢字を含む象圢文字党角、PropList=Ideographic, GC=Lo/Nl (挢字、〆〇、蘇州号碌、女真文字、西倏文字、契䞹文字

議論

  • U+16FE3 OLD CHINESE ITERATION MARK は挢文の返点のようなレむアりトをする特殊な文字https://www.unicode.org/L2/L2017/17310-n4847-two-marks.pdf
  • 「仮名や挢字に準じる文字」の定矩で党おの挢字を拟うこずができるので、女真文字、西倏文字、契䞹文字をこのクラスから陀倖するなら、象圢文字の定矩は䞍芁。
  • 偏や旁のブロックは文の䞭では䜿われるこずを想定しおおらず、文䞭でで䜿われる堎合には呚りの文字ず玛らわしくないように䜕らかの玄物を䌎っお珟れるず思われるのでクラスJから陀倖。
  • ハングル文字はklreqによるず、党角の堎合ずプロポヌショナルの堎合があり、どちらでもラテン文字ずの間にスペヌスを取らない。ゆえクラスJから陀倖。同様にボポモフォなどEAW=F/Wでか぀象圢文字でない文字も入れない。

新たに加わる文字

  • JIS X 0213 の範囲以倖の挢字
  • くの字点JIS X 0213倖、およびその断片である〳『〵もずもずcl-08で欧文ずの間に空間を䜜らない
  • 蘇州号碌蘇州で䜿われおいる挢数字
  • 女真文字
  • 西倏文字
  • 契䞹文字

L: 挢字類ずの間に空間を必芁ずする倖囜語文字

党角でも半角でもない、か぀ GC=L* たたは GC=Nd

新たに加わる文字

  • JIS X 0213 にある以倖のラテンアルファベット、ギリシャ文字、キリル文字
  • JIS X 0213 にある以倖の数字 (GC=Nd)
  • 党おの党角でない文字GC=L*

O: どの文字ずもベタずなる文字

䞊のどれでもないもの

新たに加わる文字

新しい分類なので党おの文字が新しい。

  • B/A/BA/S に含たれない党おの蚘号、玄物、発音区別笊号、数字類のうちロヌマ数字・囲み文字・分数など、空癜文字、機胜文字GC!=L* / Nd。ただし䞀郚はBp/Ap/BAp/Spに含たれる。
  • ほずんどの LetterGC=L*は J/L に含たれるが、党角でか぀象圢文字でない文字、および半角互換文字はここに含たれる
    • 和字のうち Letter だが象圢文字の分類にないもの々〻「、長音、くの字点
    • 党角英字
    • 半角互換文字
    • ボポモフォ (Script=Bopomofo)
    • ハングル (Script=Hangul)
    • 圝文字 (む文字、ロロ文字、Script=Yi)