File Coverage

blib/lib/LaTeX/ToUnicode/Tables.pm
Criterion Covered Total %
statement 10 10 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 14 100.0


line stmt bran cond sub pod time code
1             package LaTeX::ToUnicode::Tables;
2             BEGIN {
3 1     1   27 $LaTeX::ToUnicode::Tables::VERSION = '0.11';
4             }
5 1     1   5 use strict;
  1         2  
  1         20  
6 1     1   4 use warnings;
  1         2  
  1         22  
7             #ABSTRACT: Character tables for LaTeX::ToUnicode
8              
9 1     1   6 use utf8;
  1         2  
  1         7  
10              
11              
12             # Technically not all of these are ligatures, but close enough.
13             # Order is important, so has to be a list, not a hash.
14             our @LIGATURES = (
15             "---" => "\x{2014}", # em dash
16             "--" => "\x{2013}", # en dash
17             "!`" => "\x{00A1}", # inverted exclam
18             "?`" => "\x{00A1}", # inverted question
19             "``" => "\x{201c}", # left double
20             "''" => "\x{201d}", # right double
21             "`" => "\x{2018}", # left single
22             "'" => "\x{2019}", # right single
23             );
24             # test text: em---dash, en---dash, exc!`am, quest?`ion, ``ld, rd'', `ls, rs'.
25              
26             # additions supported in T1 encoding, but we won't (from tex-text.map):
27             # U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
28             # U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
29             # U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
30              
31              
32             our @SPECIALS = ( qw( $ % & _ { } ), '#' );
33              
34             our %COMMANDS = (
35             'LaTeX' => 'LaTeX',
36             'TeX' => 'TeX',
37             ' ' => ' ', # control space
38             '-' => '', # hyphenation
39             '/' => '', # italic correction
40             'dag' => "\x{2020}",
41             'ddag' => "\x{2021}",
42             'bullet' => "\x{2022}",
43             'dots' => "\x{2026}",
44             'ldots' => "\x{2026}",
45             'epsilon' => "\x{03F5}",
46             'varepsilon' => "\x{03B5}",
47             'Omega' => "\x{03A9}",
48             'omega' => "\x{03C9}",
49             'hookrightarrow' => "\x{2194}",
50             'log' => 'log',
51             );
52              
53              
54             our %SYMBOLS = ( # Table 3.2 in Lamport, plus more
55             'AA' => "\x{00C5}", # A with ring
56             'aa' => "\x{00E5}",
57             'AE' => "\x{00C6}", # AE
58             'ae' => "\x{00E6}",
59             'DH' => "\x{00D0}", # ETH
60             'dh' => "\x{00F0}",
61             'DJ' => "\x{0110}", # D with stroke
62             'dj' => "\x{0111}",
63             'i' => "\x{0131}", # small dotless i
64             'L' => "\x{0141}", # L with stroke
65             'l' => "\x{0142}",
66             'NG' => "\x{014A}", # ENG
67             'ng' => "\x{014B}",
68             'OE' => "\x{0152}", # OE
69             'oe' => "\x{0153}",
70             'O' => "\x{00D8}", # O with stroke
71             'o' => "\x{00F8}",
72             'SS' => 'SS', # lately also U+1E9E, but SS seems good enough
73             'ss' => "\x{00DF}",
74             'TH' => "\x{00DE}", # THORN
75             'th' => "\x{00FE}",
76             'TM' => "\x{2122}", # trade mark sign
77             );
78              
79              
80             our %ACCENTS = (
81             "\"" => { # with diaresis
82             A => "\x{00C4}",
83             E => "\x{00CB}",
84             H => "\x{1E26}",
85             I => "\x{00CF}",
86             O => "\x{00D6}",
87             U => "\x{00DC}",
88             W => "\x{1E84}",
89             X => "\x{1E8c}",
90             Y => "\x{0178}",
91             "\\I" => "\x{00CF}",
92             "\\i" => "\x{00EF}",
93             a => "\x{00E4}",
94             e => "\x{00EB}",
95             h => "\x{1E27}",
96             i => "\x{00EF}",
97             o => "\x{00F6}",
98             t => "\x{1E97}",
99             u => "\x{00FC}",
100             w => "\x{1E85}",
101             x => "\x{1E8d}",
102             y => "\x{00FF}",
103             },
104             "'" => { # with acute
105             A => "\x{00C1}",
106             AE => "\x{01FC}",
107             C => "\x{0106}",
108             E => "\x{00C9}",
109             G => "\x{01F4}",
110             I => "\x{00CD}",
111             K => "\x{1E30}",
112             L => "\x{0139}",
113             M => "\x{1E3E}",
114             N => "\x{0143}",
115             O => "\x{00D3}",
116             P => "\x{1E54}",
117             R => "\x{0154}",
118             S => "\x{015A}",
119             U => "\x{00DA}",
120             W => "\x{1E82}",
121             Y => "\x{00DD}",
122             Z => "\x{0179}",
123             "\\I" => "\x{00CD}",
124             "\\i" => "\x{00ED}",
125             a => "\x{00E1}",
126             ae => "\x{01FD}",
127             c => "\x{0107}",
128             e => "\x{00E9}",
129             g => "\x{01F5}",
130             i => "\x{00ED}",
131             k => "\x{1E31}",
132             l => "\x{013A}",
133             m => "\x{1E3f}",
134             n => "\x{0144}",
135             o => "\x{00F3}",
136             p => "\x{1E55}",
137             r => "\x{0155}",
138             s => "\x{015B}",
139             u => "\x{00FA}",
140             w => "\x{1E83}",
141             y => "\x{00FD}",
142             z => "\x{017A}",
143             },
144             "." => { # with dot above
145             A => "\x{0226}",
146             B => "\x{1E02}",
147             C => "\x{010A}",
148             D => "\x{1E0A}",
149             E => "\x{0116}",
150             F => "\x{1E1E}",
151             G => "\x{0120}",
152             H => "\x{1E22}",
153             I => "\x{0130}",
154             M => "\x{1E40}",
155             N => "\x{1E44}",
156             O => "\x{022E}",
157             P => "\x{1E56}",
158             R => "\x{1E58}",
159             S => "\x{1E60}",
160             T => "\x{1E6a}",
161             W => "\x{1E86}",
162             X => "\x{1E8A}",
163             Y => "\x{1E8E}",
164             Z => "\x{017B}",
165             "\\I" => "\x{0130}",
166             a => "\x{0227}",
167             b => "\x{1E03}",
168             c => "\x{010B}",
169             d => "\x{1E0B}",
170             e => "\x{0117}",
171             f => "\x{1e1f}",
172             g => "\x{0121}",
173             h => "\x{1E23}",
174             m => "\x{1E41}",
175             n => "\x{1E45}",
176             o => "\x{022F}",
177             p => "\x{1E57}",
178             r => "\x{1E59}",
179             s => "\x{1E61}",
180             t => "\x{1E6b}",
181             w => "\x{1E87}",
182             x => "\x{1E8b}",
183             y => "\x{1E8f}",
184             z => "\x{017C}",
185             },
186             '=' => { # with macron
187             A => "\x{0100}",
188             AE => "\x{01E2}",
189             E => "\x{0112}",
190             G => "\x{1E20}",
191             I => "\x{012A}",
192             O => "\x{014C}",
193             U => "\x{016A}",
194             Y => "\x{0232}",
195             "\\I" => "\x{012A}",
196             "\\i" => "\x{012B}",
197             a => "\x{0101}",
198             ae => "\x{01E3}",
199             e => "\x{0113}",
200             g => "\x{1E21}",
201             i => "\x{012B}",
202             o => "\x{014D}",
203             u => "\x{016B}",
204             y => "\x{0233}",
205             },
206             "H" => { # with double acute
207             O => "\x{0150}",
208             U => "\x{0170}",
209             o => "\x{0151}",
210             u => "\x{0171}",
211             },
212             "^" => { # with circumflex
213             A => "\x{00C2}",
214             C => "\x{0108}",
215             E => "\x{00CA}",
216             G => "\x{011C}",
217             H => "\x{0124}",
218             I => "\x{00CE}",
219             J => "\x{0134}",
220             O => "\x{00D4}",
221             S => "\x{015C}",
222             U => "\x{00DB}",
223             W => "\x{0174}",
224             Y => "\x{0176}",
225             Z => "\x{1E90}",
226             "\\I" => "\x{00CE}",
227             "\\J" => "\x{0134}",
228             "\\i" => "\x{00EE}",
229             "\\j" => "\x{0135}",
230             a => "\x{00E2}",
231             c => "\x{0109}",
232             e => "\x{00EA}",
233             g => "\x{011D}",
234             h => "\x{0125}",
235             i => "\x{00EE}",
236             j => "\x{0135}",
237             o => "\x{00F4}",
238             s => "\x{015D}",
239             u => "\x{00FB}",
240             w => "\x{0175}",
241             y => "\x{0177}",
242             z => "\x{1E91}",
243             },
244             "`" => { # with grave
245             A => "\x{00C0}",
246             E => "\x{00C8}",
247             I => "\x{00CC}",
248             N => "\x{01F8}",
249             O => "\x{00D2}",
250             U => "\x{00D9}",
251             W => "\x{1E80}",
252             Y => "\x{1Ef2}",
253             "\\I" => "\x{00CC}",
254             "\\i" => "\x{00EC}",
255             a => "\x{00E0}",
256             e => "\x{00E8}",
257             i => "\x{00EC}",
258             n => "\x{01F9}",
259             o => "\x{00F2}",
260             u => "\x{00F9}",
261             w => "\x{1E81}",
262             y => "\x{1EF3}",
263             },
264             "c" => { # with cedilla
265             C => "\x{00C7}",
266             D => "\x{1E10}",
267             E => "\x{0228}",
268             G => "\x{0122}",
269             H => "\x{1E28}",
270             K => "\x{0136}",
271             L => "\x{013B}",
272             N => "\x{0145}",
273             R => "\x{0156}",
274             S => "\x{015E}",
275             T => "\x{0162}",
276             c => "\x{00E7}",
277             d => "\x{1E11}",
278             e => "\x{0229}",
279             g => "\x{0123}",
280             h => "\x{1E29}",
281             k => "\x{0137}",
282             l => "\x{013C}",
283             n => "\x{0146}",
284             r => "\x{0157}",
285             s => "\x{015F}",
286             t => "\x{0163}",
287             },
288             "d" => { # with dot below
289             A => "\x{1EA0}",
290             B => "\x{1E04}",
291             D => "\x{1E0C}",
292             E => "\x{1EB8}",
293             H => "\x{1E24}",
294             I => "\x{1ECA}",
295             K => "\x{1E32}",
296             L => "\x{1E36}",
297             M => "\x{1E42}",
298             N => "\x{1E46}",
299             O => "\x{1ECC}",
300             R => "\x{1E5A}",
301             S => "\x{1E62}",
302             T => "\x{1E6C}",
303             U => "\x{1EE4}",
304             V => "\x{1E7E}",
305             W => "\x{1E88}",
306             Y => "\x{1Ef4}",
307             Z => "\x{1E92}",
308             "\\I" => "\x{1ECA}",
309             "\\i" => "\x{1ECB}",
310             a => "\x{1EA1}",
311             b => "\x{1E05}",
312             d => "\x{1E0D}",
313             e => "\x{1EB9}",
314             h => "\x{1E25}",
315             i => "\x{1ECB}",
316             k => "\x{1E33}",
317             l => "\x{1E37}",
318             m => "\x{1E43}",
319             n => "\x{1E47}",
320             o => "\x{1ECD}",
321             r => "\x{1E5b}",
322             s => "\x{1E63}",
323             t => "\x{1E6D}",
324             u => "\x{1EE5}",
325             v => "\x{1E7F}",
326             w => "\x{1E89}",
327             y => "\x{1EF5}",
328             z => "\x{1E93}",
329             },
330             "h" => { # with hook above
331             A => "\x{1EA2}",
332             E => "\x{1EBA}",
333             I => "\x{1EC8}",
334             O => "\x{1ECe}",
335             U => "\x{1EE6}",
336             Y => "\x{1EF6}",
337             "\\I" => "\x{1EC8}",
338             "\\i" => "\x{1EC9}",
339             a => "\x{1EA3}",
340             e => "\x{1EBB}",
341             i => "\x{1EC9}",
342             o => "\x{1ECF}",
343             u => "\x{1EE7}",
344             y => "\x{1EF7}",
345             },
346             "k" => { # with ogonek
347             A => "\x{0104}",
348             E => "\x{0118}",
349             I => "\x{012E}",
350             O => "\x{01EA}",
351             U => "\x{0172}",
352             "\\I" => "\x{012E}",
353             "\\i" => "\x{012F}",
354             a => "\x{0105}",
355             e => "\x{0119}",
356             i => "\x{012F}",
357             o => "\x{01EB}",
358             u => "\x{0173}",
359             },
360             "r" => { # with ring above
361             A => "\x{00C5}",
362             U => "\x{016E}",
363             a => "\x{00E5}",
364             u => "\x{016F}",
365             w => "\x{1E98}",
366             y => "\x{1E99}",
367             },
368             "u" => { # with breve
369             A => "\x{0102}",
370             E => "\x{0114}",
371             G => "\x{011E}",
372             I => "\x{012C}",
373             O => "\x{014E}",
374             U => "\x{016C}",
375             "\\I" => "\x{012C}",
376             "\\i" => "\x{012D}",
377             a => "\x{0103}",
378             e => "\x{0115}",
379             g => "\x{011F}",
380             i => "\x{012D}",
381             o => "\x{014F}",
382             u => "\x{016D}",
383             },
384             "v" => { # with caron
385             A => "\x{01CD}",
386             C => "\x{010C}",
387             D => "\x{010E}",
388             DZ => "\x{01C4}",
389             E => "\x{011A}",
390             G => "\x{01E6}",
391             H => "\x{021E}",
392             I => "\x{01CF}",
393             K => "\x{01E8}",
394             L => "\x{013D}",
395             N => "\x{0147}",
396             O => "\x{01D1}",
397             R => "\x{0158}",
398             S => "\x{0160}",
399             T => "\x{0164}",
400             U => "\x{01D3}",
401             Z => "\x{017D}",
402             "\\I" => "\x{01CF}",
403             "\\i" => "\x{01D0}",
404             "\\j" => "\x{01F0}",
405             a => "\x{01CE}",
406             c => "\x{010D}",
407             d => "\x{010F}",
408             dz => "\x{01C6}",
409             e => "\x{011B}",
410             g => "\x{01E7}",
411             h => "\x{021F}",
412             i => "\x{01D0}",
413             j => "\x{01F0}",
414             k => "\x{01E9}",
415             l => "\x{013E}",
416             n => "\x{0148}",
417             o => "\x{01D2}",
418             r => "\x{0159}",
419             s => "\x{0161}",
420             t => "\x{0165}",
421             u => "\x{01D4}",
422             z => "\x{017E}",
423             },
424             "~" => { # with tilde
425             A => "\x{00C3}",
426             E => "\x{1EBC}",
427             I => "\x{0128}",
428             N => "\x{00D1}",
429             O => "\x{00D5}",
430             U => "\x{0168}",
431             V => "\x{1E7C}",
432             Y => "\x{1EF8}",
433             "\\I" => "\x{0128}",
434             "\\i" => "\x{0129}",
435             a => "\x{00E3}",
436             e => "\x{1EBD}",
437             i => "\x{0129}",
438             n => "\x{00F1}",
439             o => "\x{00F5}",
440             u => "\x{0169}",
441             v => "\x{1E7D}",
442             y => "\x{1EF9}",
443             },
444             );
445              
446              
447             our %GERMAN = ( # for package `german'/`ngerman'
448             '"a' => 'ä',
449             '"A' => 'Ä',
450             '"e' => 'ë',
451             '"E' => 'Ë',
452             '"i' => 'ï',
453             '"I' => 'Ï',
454             '"o' => 'ö',
455             '"O' => 'Ö',
456             '"u' => 'ü',
457             '"U' => 'Ü',
458             '"s' => 'ß',
459             '"S' => 'SS',
460             '"z' => 'ß',
461             '"Z' => 'SZ',
462             '"ck' => 'ck', # old spelling: ck -> k-k
463             '"ff' => 'ff', # old spelling: ff -> ff-f
464             '"`' => '„',
465             "\"'" => '“',
466             '"<' => '«',
467             '">' => '»',
468             '"-' => "\x{AD}", # soft hyphen
469             '""' => "\x{200B}", # zero width space
470             '"~' => "\x{2011}", # non-breaking hyphen
471             '"=' => '-',
472             '\glq' => '‚', # left german single quote
473             '\grq' => '‘', # right german single quote
474             '\flqq' => '«',
475             '\frqq' => '»',
476             '\dq' => '"',
477             );
478              
479              
480             # for {\MARKUP ...} and \textMARKUP{...}
481             our @MARKUPS = ( qw( bf cal em it rm sc sl small tt ) );
482              
483              
484             1;
485              
486             __END__