File Coverage

blib/lib/Text/ANSI/Fold/Japanese/W3C.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 18 19 94.7


line stmt bran cond sub pod time code
1             package Text::ANSI::Fold::Japanese::W3C;
2              
3 12     12   212 use v5.14;
  12         50  
4 12     12   74 use warnings;
  12         31  
  12         402  
5 12     12   71 use utf8;
  12         50  
  12         119  
6              
7 12     12   326 use Exporter 'import';
  12         30  
  12         4358  
8             our @EXPORT_OK = qw(%prohibition);
9              
10             # https://www.w3.org/TR/jlreq/
11             # Requirements for Japanese Text Layout
12             # 日本語組版処理の要件
13             # W3C Working Group Note 11 August 2020
14              
15             my %character_class = (
16              
17             # A.1 Opening brackets
18             cl_01 => <<'END',
19             Character UCS Name Common name Remarks
20             ‘ 2018 LEFT SINGLE QUOTATION MARK 左シングル引用符,左シングルクォーテーションマーク used in horizontal composition
21             “ 201C LEFT DOUBLE QUOTATION MARK 左ダブル引用符,左ダブルクォーテーションマーク used in horizontal composition
22             ( 0028 LEFT PARENTHESIS 始め小括弧,始め丸括弧
23             ( FF08 FULLWIDTH LEFT PARENTHESIS 始め小括弧,始め丸括弧
24             〔 3014 LEFT TORTOISE SHELL BRACKET 始めきっこう(亀甲)括弧
25             [ 005B LEFT SQUARE BRACKET 始め大括弧,始め角括弧
26             [ FF3B FULLWIDTH LEFT SQUARE BRACKET 始め大括弧,始め角括弧
27             { 007B LEFT CURLY BRACKET 始め中括弧,始め波括弧
28             { FF5B FULLWIDTH LEFT CURLY BRACKET 始め中括弧,始め波括弧
29             〈 3008 LEFT ANGLE BRACKET 始め山括弧
30             《 300A LEFT DOUBLE ANGLE BRACKET 始め二重山括弧
31             「 300C LEFT CORNER BRACKET 始めかぎ括弧
32             『 300E LEFT WHITE CORNER BRACKET 始め二重かぎ括弧
33             【 3010 LEFT BLACK LENTICULAR BRACKET 始めすみ付き括弧
34             ⦅ 2985 LEFT WHITE PARENTHESIS 始め二重パーレン,始め二重括弧
35             ⦅ FF5F FULLWIDTH LEFT WHITE PARENTHESIS 始め二重パーレン,始め二重括弧
36             〘 3018 LEFT WHITE TORTOISE SHELL BRACKET 始め二重きっこう(亀甲)括弧
37             〖 3016 LEFT WHITE LENTICULAR BRACKET 始めすみ付き括弧(白)
38             « 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 始め二重山括弧引用記号,始めギュメ
39             〝 301D REVERSED DOUBLE PRIME QUOTATION MARK 始めダブルミニュート used in vertical composition
40             END
41              
42             # A.2 Closing brackets
43             cl_02 => <<'END',
44             Character UCS Name Common name Remarks
45             ’ 2019 RIGHT SINGLE QUOTATION MARK 右シングル引用符,右シングルクォーテーションマーク used in horizontal composition
46             ” 201D RIGHT DOUBLE QUOTATION MARK 右ダブル引用符,右ダブルクォーテーションマーク used in horizontal composition
47             ) 0029 RIGHT PARENTHESIS 終わり小括弧,終わり丸括弧
48             ) FF09 FULLWIDTH RIGHT PARENTHESIS 終わり小括弧,終わり丸括弧
49             〕 3015 RIGHT TORTOISE SHELL BRACKET 終わりきっこう(亀甲)括弧
50             ] 005D RIGHT SQUARE BRACKET 終わり大括弧,終わり角括弧
51             ] FF3D FULLWIDTH RIGHT SQUARE BRACKET 終わり大括弧,終わり角括弧
52             } 007D RIGHT CURLY BRACKET 終わり中括弧,終わり波括弧
53             } FF5D FULLWIDTH RIGHT CURLY BRACKET 終わり中括弧,終わり波括弧
54             〉 3009 RIGHT ANGLE BRACKET 終わり山括弧
55             》 300B RIGHT DOUBLE ANGLE BRACKET 終わり二重山括弧
56             」 300D RIGHT CORNER BRACKET 終わりかぎ括弧
57             』 300F RIGHT WHITE CORNER BRACKET 終わり二重かぎ括弧
58             】 3011 RIGHT BLACK LENTICULAR BRACKET 終わりすみ付き括弧
59             ⦆ 2986 RIGHT WHITE PARENTHESIS 終わり二重パーレン,終わり二重括弧
60             ⦆ FF60 FULLWIDTH RIGHT WHITE PARENTHESIS 終わり二重パーレン,終わり二重括弧
61             〙 3019 RIGHT WHITE TORTOISE SHELL BRACKET 終わり二重きっこう(亀甲)括弧
62             〗 3017 RIGHT WHITE LENTICULAR BRACKET 終わりすみ付き括弧(白)
63             » 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 終わり二重山括弧引用記号,終わりギュメ
64             〟 301F LOW DOUBLE PRIME QUOTATION MARK 終わりダブルミニュート used in vertical composition
65             END
66              
67             # A.3 Hyphens
68             cl_03 => <<'END',
69             Character UCS Name Common name Remarks
70             ‐ 2010 HYPHEN ハイフン(四分) quarter em width
71             〜 301C WAVE DASH 波ダッシュ
72             ゠ 30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN 二重ハイフン,二分二重ダッシュ half-width
73             – 2013 EN DASH 二分ダーシ,ダッシュ(二分) half-width
74             END
75            
76             # A.4 Dividing punctuation marks
77             cl_04 => <<'END',
78             Character UCS Name Common name Remarks
79             ! 0021 EXCLAMATION MARK 感嘆符
80             ! FF01 FULLWIDTH EXCLAMATION MARK 感嘆符
81             ? 003F QUESTION MARK 疑問符
82             ? FF1F FULLWIDTH QUESTION MARK 疑問符
83             ‼ 203C DOUBLE EXCLAMATION MARK 感嘆符二つ
84             ⁇ 2047 DOUBLE QUESTION MARK 疑問符二つ
85             ⁈ 2048 QUESTION EXCLAMATION MARK 疑問符感嘆符
86             ⁉ 2049 EXCLAMATION QUESTION MARK 感嘆符疑問符
87             END
88            
89             # A.5 Middle dots
90             cl_05 => <<'END',
91             Character UCS Name Common name Remarks
92             ・ 30FB KATAKANA MIDDLE DOT 中点
93             : 003A COLON コロン
94             : FF1A FULLWIDTH COLON コロン
95             ; 003B SEMICOLON セミコロン used in horizontal composition
96             ; FF1B FULLWIDTH SEMICOLON セミコロン used in horizontal composition
97             END
98            
99             # A.6 Full stops
100             cl_06 => <<'END',
101             Character UCS Name Common name Remarks
102             。 3002 IDEOGRAPHIC FULL STOP 句点
103             . 002E FULL STOP ピリオド used in horizontal composition
104             . FF0E FULLWIDTH FULL STOP ピリオド used in horizontal composition
105             END
106            
107             # A.7 Commas
108             cl_07 => <<'END',
109             Character UCS Name Common name Remarks
110             、 3001 IDEOGRAPHIC COMMA 読点
111             , 002C COMMA コンマ used in horizontal composition
112             , FF0C FULLWIDTH COMMA コンマ used in horizontal composition
113             END
114            
115             # A.8 Inseparable characters
116             cl_08 => <<'END',
117             Character UCS Name Common name Remarks
118             — 2014 EM DASH ダッシュ(全角) Some systems implement U+2015 HORIZONTAL BAR very similar behavior to U+2014 EM DASH
119             … 2026 HORIZONTAL ELLIPSIS 三点リーダ
120             ‥ 2025 TWO DOT LEADER 二点リーダ
121             〳 3033 VERTICAL KANA REPEAT MARK UPPER HALF くの字点上 used in vertical composition U+3035 follows this
122             〴 3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF くの字点上(濁点) used in vertical composition U+3035 follows this
123             〵 3035 VERTICAL KANA REPEAT MARK LOWER HALF くの字点下 used in vertical composition
124             END
125              
126             # A.9 Iteration marks
127             cl_09 => <<'END',
128             Character UCS Name Common name Remarks
129             ヽ 30FD KATAKANA ITERATION MARK 片仮名繰返し記号
130             ヾ 30FE KATAKANA VOICED ITERATION MARK 片仮名繰返し記号(濁点)
131             ゝ 309D HIRAGANA ITERATION MARK 平仮名繰返し記号
132             ゞ 309E HIRAGANA VOICED ITERATION MARK 平仮名繰返し記号(濁点)
133             々 3005 IDEOGRAPHIC ITERATION MARK 繰返し記号
134             〻 303B VERTICAL IDEOGRAPHIC ITERATION MARK 二の字点,ゆすり点
135             END
136              
137             # A.10 Prolonged sound mark
138             cl_10 => <<'END',
139             Character UCS Name Common name Remarks
140             ー 30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK 長音記号
141             END
142              
143             # A.11 Small kana
144             cl_11 => <<'END',
145             Character UCS Name Common name Remarks
146             ぁ 3041 HIRAGANA LETTER SMALL A 小書き平仮名あ
147             ぃ 3043 HIRAGANA LETTER SMALL I 小書き平仮名い
148             ぅ 3045 HIRAGANA LETTER SMALL U 小書き平仮名う
149             ぇ 3047 HIRAGANA LETTER SMALL E 小書き平仮名え
150             ぉ 3049 HIRAGANA LETTER SMALL O 小書き平仮名お
151             ァ 30A1 KATAKANA LETTER SMALL A 小書き片仮名ア
152             ィ 30A3 KATAKANA LETTER SMALL I 小書き片仮名イ
153             ゥ 30A5 KATAKANA LETTER SMALL U 小書き片仮名ウ
154             ェ 30A7 KATAKANA LETTER SMALL E 小書き片仮名エ
155             ォ 30A9 KATAKANA LETTER SMALL O 小書き片仮名オ
156             っ 3063 HIRAGANA LETTER SMALL TU 小書き平仮名つ
157             ゃ 3083 HIRAGANA LETTER SMALL YA 小書き平仮名や
158             ゅ 3085 HIRAGANA LETTER SMALL YU 小書き平仮名ゆ
159             ょ 3087 HIRAGANA LETTER SMALL YO 小書き平仮名よ
160             ゎ 308E HIRAGANA LETTER SMALL WA 小書き平仮名わ
161             ゕ 3095 HIRAGANA LETTER SMALL KA 小書き平仮名か
162             ゖ 3096 HIRAGANA LETTER SMALL KE 小書き平仮名け
163             ッ 30C3 KATAKANA LETTER SMALL TU 小書き片仮名ツ
164             ャ 30E3 KATAKANA LETTER SMALL YA 小書き片仮名ヤ
165             ュ 30E5 KATAKANA LETTER SMALL YU 小書き片仮名ユ
166             ョ 30E7 KATAKANA LETTER SMALL YO 小書き片仮名ヨ
167             ヮ 30EE KATAKANA LETTER SMALL WA 小書き片仮名ワ
168             ヵ 30F5 KATAKANA LETTER SMALL KA 小書き片仮名カ
169             ヶ 30F6 KATAKANA LETTER SMALL KE 小書き片仮名ケ
170             ㇰ 31F0 KATAKANA LETTER SMALL KU 小書き片仮名ク
171             ㇱ 31F1 KATAKANA LETTER SMALL SI 小書き片仮名シ
172             ㇲ 31F2 KATAKANA LETTER SMALL SU 小書き片仮名ス
173             ㇳ 31F3 KATAKANA LETTER SMALL TO 小書き片仮名ト
174             ㇴ 31F4 KATAKANA LETTER SMALL NU 小書き片仮名ヌ
175             ㇵ 31F5 KATAKANA LETTER SMALL HA 小書き片仮名ハ
176             ㇶ 31F6 KATAKANA LETTER SMALL HI 小書き片仮名ヒ
177             ㇷ 31F7 KATAKANA LETTER SMALL HU 小書き片仮名フ
178             ㇸ 31F8 KATAKANA LETTER SMALL HE 小書き片仮名ヘ
179             ㇹ 31F9 KATAKANA LETTER SMALL HO 小書き片仮名ホ
180             ㇺ 31FA KATAKANA LETTER SMALL MU 小書き片仮名ム
181             ㇻ 31FB KATAKANA LETTER SMALL RA 小書き片仮名ラ
182             ㇼ 31FC KATAKANA LETTER SMALL RI 小書き片仮名リ
183             ㇽ 31FD KATAKANA LETTER SMALL RU 小書き片仮名ル
184             ㇾ 31FE KATAKANA LETTER SMALL RE 小書き片仮名レ
185             ㇿ 31FF KATAKANA LETTER SMALL RO 小書き片仮名ロ
186             ㇷ゚ <31F7, 309A> 小書き半濁点付き片仮名フ
187             END
188            
189             # A.12 Prefixed abbreviations
190             cl_12 => <<'END',
191             Character UCS Name Common name Remarks
192             ¥ 00A5 YEN SIGN 円記号
193             ¥ FFE5 FULLWIDTH YEN SIGN 円記号
194             $ 0024 DOLLAR SIGN ドル記号
195             $ FF04 FULLWIDTH DOLLAR SIGN ドル記号
196             £ 00A3 POUND SIGN ポンド記号
197             £ FFE1 FULLWIDTH POUND SIGN ポンド記号
198             # 0023 NUMBER SIGN 番号記号,井げた
199             # FF03 FULLWIDTH NUMBER SIGN 番号記号,井げた
200             € 20AC EURO SIGN ユーロ記号
201             № 2116 NUMERO SIGN 全角NO
202             END
203            
204             # A.13 Postfixed abbreviations
205             cl_13 => <<'END',
206             Character UCS Name Common name Remarks
207             ° 00B0 DEGREE SIGN 度 proportionally-spaced
208             ′ 2032 PRIME 分 proportionally-spaced
209             ″ 2033 DOUBLE PRIME 秒 proportionally-spaced
210             ℃ 2103 DEGREE CELSIUS セ氏度記号
211             ¢ 00A2 CENT SIGN セント記号
212             ¢ FFE0 FULLWIDTH CENT SIGN セント記号
213             % 0025 PERCENT SIGN パーセント
214             % FF05 FULLWIDTH PERCENT SIGN パーセント
215             ‰ 2030 PER MILLE SIGN パーミル
216             ㏋ 33CB SQUARE HP HP, ホースパワー(馬力)
217             ℓ 2113 SCRIPT SMALL L リットル
218             ㌃ 3303 SQUARE AARU 全角アール
219             ㌍ 330D SQUARE KARORII 全角カロリー
220             ㌔ 3314 SQUARE KIRO 全角キロ
221             ㌘ 3318 SQUARE GURAMU 全角グラム
222             ㌢ 3322 SQUARE SENTI 全角センチ
223             ㌣ 3323 SQUARE SENTO 全角セント
224             ㌦ 3326 SQUARE DORU 全角ドル
225             ㌧ 3327 SQUARE TON 全角トン
226             ㌫ 332B SQUARE PAASENTO 全角パーセント
227             ㌶ 3336 SQUARE HEKUTAARU 全角ヘクタール
228             ㌻ 333B SQUARE PEEZI 全角ページ
229             ㍉ 3349 SQUARE MIRI 全角ミリ
230             ㍊ 334A SQUARE MIRIBAARU 全角ミリバール
231             ㍍ 334D SQUARE MEETORU 全角メートル
232             ㍑ 3351 SQUARE RITTORU 全角リットル
233             ㍗ 3357 SQUARE WATTO 全角ワット
234             ㎎ 338E SQUARE MG 全角MG
235             ㎏ 338F SQUARE KG 全角KG
236             ㎜ 339C SQUARE MM 全角MM
237             ㎝ 339D SQUARE CM 全角CM
238             ㎞ 339E SQUARE KM 全角KM
239             ㎡ 33A1 SQUARE M SQUARED 全角M2
240             ㏄ 33C4 SQUARE CC 全角CC
241             END
242              
243             # A.14 Full-width ideographic space
244             cl_14 => <<'END',
245             Character UCS Name Common name Remarks
246               3000 IDEOGRAPHIC SPACE
247             END
248              
249             );
250              
251             sub class_chars {
252 60     60 0 156 join '', map { /^(?![A-Z])(\X)/mg } @character_class{@_};
  156         2203  
253             }
254              
255             our %prohibition = (
256             head => class_chars( qw(cl_02 cl_03 cl_04 cl_05 cl_06 cl_07 cl_09 cl_10 cl_11) ),
257             end => class_chars( qw(cl_01) ),
258             prefix => class_chars( qw(cl_12) ),
259             postfix => class_chars( qw(cl_13) ),
260             inseparable => class_chars( qw(cl_08) ),
261             );
262              
263             1;