prawn 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/COPYING +340 -0
  2. data/LICENSE +56 -0
  3. data/README +30 -0
  4. data/Rakefile +83 -0
  5. data/data/fonts/Activa.ttf +0 -0
  6. data/data/fonts/Chalkboard.ttf +0 -0
  7. data/data/fonts/Courier-Bold.afm +342 -0
  8. data/data/fonts/Courier-BoldOblique.afm +342 -0
  9. data/data/fonts/Courier-Oblique.afm +342 -0
  10. data/data/fonts/Courier.afm +342 -0
  11. data/data/fonts/DejaVuSans.ttf +0 -0
  12. data/data/fonts/Dustismo_Roman.ttf +0 -0
  13. data/data/fonts/Helvetica-Bold.afm +2827 -0
  14. data/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  15. data/data/fonts/Helvetica-Oblique.afm +3051 -0
  16. data/data/fonts/Helvetica.afm +3051 -0
  17. data/data/fonts/MustRead.html +19 -0
  18. data/data/fonts/Symbol.afm +213 -0
  19. data/data/fonts/Times-Bold.afm +2588 -0
  20. data/data/fonts/Times-BoldItalic.afm +2384 -0
  21. data/data/fonts/Times-Italic.afm +2667 -0
  22. data/data/fonts/Times-Roman.afm +2419 -0
  23. data/data/fonts/ZapfDingbats.afm +225 -0
  24. data/data/fonts/comicsans.ttf +0 -0
  25. data/data/fonts/gkai00mp.ttf +0 -0
  26. data/data/images/dice.png +0 -0
  27. data/data/images/pigs.jpg +0 -0
  28. data/data/images/ruport.png +0 -0
  29. data/data/images/ruport_data.dat +0 -0
  30. data/data/images/ruport_transparent.png +0 -0
  31. data/data/images/stef.jpg +0 -0
  32. data/data/shift_jis_text.txt +1 -0
  33. data/examples/addressbook.csv +6 -0
  34. data/examples/alignment.rb +16 -0
  35. data/examples/bounding_boxes.pdf +62 -0
  36. data/examples/bounding_boxes.rb +30 -0
  37. data/examples/canvas.pdf +81 -0
  38. data/examples/canvas.rb +12 -0
  39. data/examples/cell.rb +27 -0
  40. data/examples/currency.csv +1834 -0
  41. data/examples/curves.rb +10 -0
  42. data/examples/fancy_table.rb +48 -0
  43. data/examples/font_size.rb +19 -0
  44. data/examples/hexagon.rb +14 -0
  45. data/examples/image.pdf +0 -0
  46. data/examples/image.rb +23 -0
  47. data/examples/image2.rb +13 -0
  48. data/examples/inline_styles.pdf +117 -0
  49. data/examples/kerning.rb +27 -0
  50. data/examples/line.rb +31 -0
  51. data/examples/multi_page_layout.rb +14 -0
  52. data/examples/on_page_start.rb +17 -0
  53. data/examples/page_geometry.rb +28 -0
  54. data/examples/polygons.rb +16 -0
  55. data/examples/ruport_formatter.rb +47 -0
  56. data/examples/ruport_helpers.rb +17 -0
  57. data/examples/russian_boxes.rb +34 -0
  58. data/examples/simple_text.rb +15 -0
  59. data/examples/simple_text_ttf.rb +16 -0
  60. data/examples/sjis.rb +19 -0
  61. data/examples/table.rb +45 -0
  62. data/examples/table_bench.rb +92 -0
  63. data/examples/text_flow.rb +65 -0
  64. data/examples/utf8.rb +12 -0
  65. data/lib/prawn.rb +33 -0
  66. data/lib/prawn/compatibility.rb +33 -0
  67. data/lib/prawn/document.rb +334 -0
  68. data/lib/prawn/document/bounding_box.rb +253 -0
  69. data/lib/prawn/document/page_geometry.rb +78 -0
  70. data/lib/prawn/document/table.rb +253 -0
  71. data/lib/prawn/document/text.rb +346 -0
  72. data/lib/prawn/errors.rb +33 -0
  73. data/lib/prawn/font.rb +5 -0
  74. data/lib/prawn/font/cmap.rb +59 -0
  75. data/lib/prawn/font/metrics.rb +414 -0
  76. data/lib/prawn/font/wrapping.rb +45 -0
  77. data/lib/prawn/graphics.rb +285 -0
  78. data/lib/prawn/graphics/cell.rb +226 -0
  79. data/lib/prawn/images.rb +241 -0
  80. data/lib/prawn/images/jpg.rb +43 -0
  81. data/lib/prawn/images/png.rb +178 -0
  82. data/lib/prawn/pdf_object.rb +64 -0
  83. data/lib/prawn/reference.rb +47 -0
  84. data/spec/bounding_box_spec.rb +120 -0
  85. data/spec/box_calculation_spec.rb +17 -0
  86. data/spec/document_spec.rb +152 -0
  87. data/spec/graphics_spec.rb +250 -0
  88. data/spec/images_spec.rb +42 -0
  89. data/spec/jpg_spec.rb +25 -0
  90. data/spec/metrics_spec.rb +60 -0
  91. data/spec/pdf_object_spec.rb +102 -0
  92. data/spec/png_spec.rb +35 -0
  93. data/spec/reference_spec.rb +29 -0
  94. data/spec/spec_helper.rb +29 -0
  95. data/spec/table_spec.rb +145 -0
  96. data/spec/text_spec.rb +190 -0
  97. data/vendor/font_ttf/ttf.rb +20 -0
  98. data/vendor/font_ttf/ttf/datatypes.rb +189 -0
  99. data/vendor/font_ttf/ttf/encodings.rb +140 -0
  100. data/vendor/font_ttf/ttf/exceptions.rb +28 -0
  101. data/vendor/font_ttf/ttf/file.rb +290 -0
  102. data/vendor/font_ttf/ttf/fontchunk.rb +77 -0
  103. data/vendor/font_ttf/ttf/table/cmap.rb +408 -0
  104. data/vendor/font_ttf/ttf/table/cvt.rb +49 -0
  105. data/vendor/font_ttf/ttf/table/fpgm.rb +48 -0
  106. data/vendor/font_ttf/ttf/table/gasp.rb +88 -0
  107. data/vendor/font_ttf/ttf/table/glyf.rb +452 -0
  108. data/vendor/font_ttf/ttf/table/head.rb +86 -0
  109. data/vendor/font_ttf/ttf/table/hhea.rb +96 -0
  110. data/vendor/font_ttf/ttf/table/hmtx.rb +98 -0
  111. data/vendor/font_ttf/ttf/table/kern.rb +186 -0
  112. data/vendor/font_ttf/ttf/table/loca.rb +75 -0
  113. data/vendor/font_ttf/ttf/table/maxp.rb +81 -0
  114. data/vendor/font_ttf/ttf/table/name.rb +222 -0
  115. data/vendor/font_ttf/ttf/table/os2.rb +172 -0
  116. data/vendor/font_ttf/ttf/table/post.rb +120 -0
  117. data/vendor/font_ttf/ttf/table/prep.rb +27 -0
  118. data/vendor/font_ttf/ttf/table/vhea.rb +45 -0
  119. data/vendor/font_ttf/ttf/table/vmtx.rb +36 -0
  120. metadata +180 -0
@@ -0,0 +1,190 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ class TextObserver
6
+
7
+ attr_accessor :font_settings, :size, :string
8
+
9
+ def initialize
10
+ @font_settings = []
11
+ @fonts = {}
12
+ end
13
+
14
+ def resource_font(*params)
15
+ @fonts[params[0]] = params[1].basefont
16
+ end
17
+
18
+ def set_text_font_and_size(*params)
19
+ @font_settings << { :name => @fonts[params[0]], :size => params[1] }
20
+ end
21
+
22
+ def show_text(*params)
23
+ @string = params[0]
24
+ end
25
+
26
+ def show_text_with_positioning(*params)
27
+ @string = params[0].join
28
+ end
29
+ end
30
+
31
+ class FontObserver
32
+ attr_accessor :page_fonts
33
+
34
+ def initialize
35
+ @page_fonts = []
36
+ end
37
+
38
+ def resource_font(*params)
39
+ @page_fonts.last << params[1].basefont
40
+ end
41
+
42
+ def begin_page(*params)
43
+ @page_fonts << []
44
+ end
45
+ end
46
+
47
+ describe "Font Metrics" do
48
+
49
+ it "should default to Helvetica if no font is specified" do
50
+ @pdf = Prawn::Document.new
51
+ @pdf.font_metrics.should == Prawn::Font::Metrics["Helvetica"]
52
+ end
53
+
54
+ it "should use the currently set font for font_metrics" do
55
+ @pdf = Prawn::Document.new
56
+ @pdf.font "Courier"
57
+ @pdf.font_metrics.should == Prawn::Font::Metrics["Courier"]
58
+
59
+ comicsans = "#{Prawn::BASEDIR}/data/fonts/comicsans.ttf"
60
+ @pdf.font(comicsans)
61
+ @pdf.font_metrics.should == Prawn::Font::Metrics[comicsans]
62
+ end
63
+
64
+ end
65
+
66
+ describe "when drawing text" do
67
+
68
+ before(:each) { create_pdf }
69
+
70
+ it "should advance down the document based on font_height" do
71
+ position = @pdf.y
72
+ @pdf.text "Foo"
73
+
74
+ @pdf.y.should be_close(position - @pdf.font_metrics.font_height(12),
75
+ 0.0001)
76
+
77
+ position = @pdf.y
78
+ @pdf.text "Foo\nBar\nBaz"
79
+ @pdf.y.should be_close(position - 3*@pdf.font_metrics.font_height(12),
80
+ 0.0001)
81
+ end
82
+
83
+ it "should default to 12 point helvetica" do
84
+ @pdf.text "Blah", :at => [100,100]
85
+ text = observer(TextObserver)
86
+ text.font_settings[0][:name].should == :Helvetica
87
+ text.font_settings[0][:size].should == 12
88
+ text.string.should == "Blah"
89
+ end
90
+
91
+ it "should allow setting font size" do
92
+ @pdf.text "Blah", :at => [100,100], :size => 16
93
+ text = observer(TextObserver)
94
+ text.font_settings[0][:size].should == 16
95
+ end
96
+
97
+ it "should allow setting a default font size" do
98
+ @pdf.font_size! 16
99
+ @pdf.text "Blah"
100
+ text = observer(TextObserver)
101
+ text.font_settings[0][:size].should == 16
102
+ end
103
+
104
+ it "should allow overriding default font for a single instance" do
105
+ @pdf.font_size! 16
106
+
107
+ @pdf.text "Blah", :size => 11
108
+ @pdf.text "Blaz"
109
+ text = observer(TextObserver)
110
+ text.font_settings[0][:size].should == 11
111
+ text.font_settings[1][:size].should == 16
112
+ end
113
+
114
+
115
+ it "should allow setting a font size transaction with a block" do
116
+ @pdf.font_size 16 do
117
+ @pdf.text 'Blah'
118
+ end
119
+
120
+ @pdf.text 'blah'
121
+
122
+ text = observer(TextObserver)
123
+ text.font_settings[0][:size].should == 16
124
+ text.font_settings[1][:size].should == 12
125
+ end
126
+
127
+ it "should allow manual setting the font size " +
128
+ "when in a font size block" do
129
+ @pdf.font_size 16 do
130
+ @pdf.text 'Foo'
131
+ @pdf.text 'Blah', :size => 11
132
+ @pdf.text 'Blaz'
133
+ end
134
+ text = observer(TextObserver)
135
+ text.font_settings[0][:size].should == 16
136
+ text.font_settings[1][:size].should == 11
137
+ text.font_settings[2][:size].should == 16
138
+ end
139
+
140
+ it "should allow registering of built-in font_settings on the fly" do
141
+ @pdf.font "Courier"
142
+ @pdf.text "Blah", :at => [100,100]
143
+ @pdf.font "Times-Roman"
144
+ @pdf.text "Blaz", :at => [150,150]
145
+ text = observer(TextObserver)
146
+
147
+ text.font_settings[0][:name].should == :Courier
148
+ text.font_settings[1][:name].should == :"Times-Roman"
149
+ end
150
+
151
+ it "should utilise the same default font across multiple pages" do
152
+ @pdf.text "Blah", :at => [100,100]
153
+ @pdf.start_new_page
154
+ @pdf.text "Blaz", :at => [150,150]
155
+ text = observer(FontObserver)
156
+
157
+ text.page_fonts.size.should eql(2)
158
+ text.page_fonts[0][0].should eql(:Helvetica)
159
+ text.page_fonts[1][0].should eql(:Helvetica)
160
+ end
161
+
162
+ it "should raise an exception when an unknown font is used" do
163
+ lambda { @pdf.font "Pao bu" }.should raise_error(Prawn::Errors::UnknownFont)
164
+ end
165
+
166
+ if "spec".respond_to?(:encode!)
167
+ # Handle non utf-8 string encodings in a sane way on M17N aware VMs
168
+ it "should raise an exception when a utf-8 incompatible string is rendered" do
169
+ str = "Blah \xDD"
170
+ str.force_encoding("ASCII-8BIT")
171
+ lambda { @pdf.text str }.should raise_error(Prawn::Errors::IncompatibleStringEncoding)
172
+ end
173
+ it "should not raise an exception when a shift-jis string is rendered" do
174
+ datafile = "#{Prawn::BASEDIR}/data/shift_jis_text.txt"
175
+ sjis_str = File.open(datafile, "r:shift_jis") { |f| f.gets }
176
+ lambda { @pdf.text sjis_str }.should_not raise_error(Prawn::Errors::IncompatibleStringEncoding)
177
+ end
178
+ else
179
+ # Handle non utf-8 string encodings in a sane way on non-M17N aware VMs
180
+ it "should raise an exception when a corrupt utf-8 string is rendered" do
181
+ str = "Blah \xDD"
182
+ lambda { @pdf.text str }.should raise_error(Prawn::Errors::IncompatibleStringEncoding)
183
+ end
184
+ it "should raise an exception when a shift-jis string is rendered" do
185
+ sjis_str = File.read("#{Prawn::BASEDIR}/data/shift_jis_text.txt")
186
+ lambda { @pdf.text sjis_str }.should raise_error(Prawn::Errors::IncompatibleStringEncoding)
187
+ end
188
+ end
189
+
190
+ end
@@ -0,0 +1,20 @@
1
+ # TTF/Ruby, a library to read and write TrueType fonts in Ruby.
2
+ # Copyright (C) 2006 Mathieu Blondel
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require 'ttf/file'
19
+
20
+
@@ -0,0 +1,189 @@
1
+ # TTF/Ruby, a library to read and write TrueType fonts in Ruby.
2
+ # Copyright (C) 2006 Mathieu Blondel
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ class IO
19
+ SIZEOF_USHORT = 2
20
+ SIZEOF_ULONG = 4
21
+ SIZEOF_FIXED = 4
22
+ SIZEOF_LONG_DATE_TIME = 8
23
+ SIZEOF_SHORT = SIZEOF_FWORD = 2
24
+ SHORT_BOUND = 2 ** (8 * SIZEOF_SHORT - 1)
25
+ USHORT_BOUND = SHORT_BOUND * 2
26
+
27
+ def at_offset(offset)
28
+ prev_pos = self.pos
29
+ self.pos = offset
30
+ ret = yield
31
+ self.pos = prev_pos
32
+ ret
33
+ end
34
+
35
+ alias :old_read :read
36
+
37
+ #ef read(n)
38
+ # ret = old_read(n)
39
+ # raise Font::TTF::MalformedFont if ret.nil?
40
+ # ret
41
+ #end
42
+
43
+ def read_ushort
44
+ read(SIZEOF_USHORT).unpack("n")[0]
45
+ end
46
+ alias :read_ufword :read_ushort
47
+ alias :read_f2dot14 :read_ushort
48
+
49
+ def read_ushorts(n)
50
+ read(SIZEOF_USHORT * n).unpack("n#{n.to_s}")
51
+ end
52
+ alias :read_ufwords :read_ushorts
53
+ alias :read_f2dot14s :read_ushorts
54
+
55
+ def read_ulong
56
+ read(SIZEOF_ULONG).unpack("N")[0]
57
+ end
58
+
59
+ def read_ulongs(n)
60
+ read(SIZEOF_ULONG * n).unpack("N#{n.to_s}")
61
+ end
62
+
63
+ def read_fixed
64
+ f = read_ulong
65
+ #"%d.%d" % [f >> 16, f & 0xff00]
66
+ end
67
+
68
+ def read_ulong_as_text
69
+ read(SIZEOF_ULONG)
70
+ end
71
+
72
+ def read_byte
73
+ read(1).unpack("C")[0]
74
+ end
75
+
76
+ def read_bytes(n)
77
+ read(n).unpack("C" + n.to_s)
78
+ end
79
+
80
+ def read_long_date_time
81
+ # Don't know how to compute dates
82
+ read(SIZEOF_LONG_DATE_TIME)
83
+ ""
84
+ end
85
+
86
+ def read_short
87
+ # No unpack support for signed network short
88
+ n = read_ushort
89
+ n = n - 2 * SHORT_BOUND if n >= SHORT_BOUND
90
+ n
91
+ end
92
+ alias :read_fword :read_short
93
+
94
+ def read_shorts(n)
95
+ arr = []
96
+ n.times { arr << read_short }
97
+ arr
98
+ end
99
+ alias :read_fwords :read_shorts
100
+
101
+ def read_char
102
+ read(1)
103
+ end
104
+
105
+ def read_chars(n)
106
+ read(n)
107
+ end
108
+
109
+ end
110
+
111
+ class Integer
112
+
113
+ def to_ushort
114
+ [self].pack("n")
115
+ end
116
+ alias :to_ufword :to_ushort
117
+ alias :to_f2dot14 :to_ushort
118
+
119
+ def to_ulong
120
+ [self].pack("N")
121
+ end
122
+ alias :to_fixed :to_ulong
123
+
124
+ def to_short
125
+ n = self
126
+ n + 2 * IO::SHORT_BOUND if n < 0
127
+ n.to_ushort
128
+ end
129
+ alias :to_fword :to_short
130
+
131
+ def to_byte
132
+ [self].pack("C")
133
+ end
134
+
135
+ end
136
+
137
+ class String
138
+
139
+ def to_long_date_time
140
+ # Don't know how to compute dates
141
+ # So just returns something at the good size
142
+ " " * IO::SIZEOF_LONG_DATE_TIME
143
+ end
144
+
145
+ def four_chars!
146
+ str = self
147
+ while str.length < 4
148
+ str += " "
149
+ end
150
+ self.replace(str.slice(0,4))
151
+ end
152
+ end
153
+
154
+ class Array
155
+
156
+ def to_bytes
157
+ self.pack("C*")
158
+ end
159
+
160
+ def to_ushorts
161
+ self.pack("n*")
162
+ end
163
+ alias :to_ufwords :to_ushorts
164
+ alias :to_f2dot14s :to_ushorts
165
+
166
+ def to_shorts
167
+ str = ""
168
+ self.each do |int|
169
+ str += int.to_short
170
+ end
171
+ str
172
+ end
173
+ alias :to_fwords :to_shorts
174
+
175
+ def to_ulongs
176
+ self.pack("N*")
177
+ end
178
+ alias :to_fixeds :to_ulongs
179
+
180
+ end
181
+
182
+ # This allows to sort an array of symbols as if they were strings
183
+ class Symbol
184
+
185
+ def <=>(symb)
186
+ self.to_s <=> symb.to_s
187
+ end
188
+
189
+ end
@@ -0,0 +1,140 @@
1
+ # TTF/Ruby, a library to read and write TrueType fonts in Ruby.
2
+ # Copyright (C) 2006 Mathieu Blondel
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module Font
19
+ module TTF
20
+ module Encodings
21
+
22
+ module Platform
23
+ UNICODE = 0
24
+ MACINTOSH = 1
25
+ ISO = 2
26
+ MICROSOFT = 3
27
+
28
+ ID2NAME = {
29
+ UNICODE => "Unicode",
30
+ MACINTOSH => "Macintosh",
31
+ ISO => "ISO",
32
+ MICROSOFT => "Microsoft"
33
+ }
34
+ end
35
+
36
+ module UnicodeEncoding
37
+ # When Platform == 0
38
+ DEFAULT_SEMANTICS = 0
39
+ VERSION_1_1_SEMANTICS = 1
40
+ ISO_10646_1993_SEMANTICS = 2
41
+ UNICODE = 3
42
+ end
43
+
44
+ module MicrosoftEncoding
45
+ # When Platform == 3
46
+ SYMBOL = 0
47
+ UNICODE = 1
48
+ SHIFTJIS = 2
49
+ BIG5 = 3
50
+ PRC = 4
51
+ WASUNG = 5
52
+ JOHAB = 6
53
+
54
+ ID2NAME = {
55
+ SYMBOL => "Symbol",
56
+ UNICODE => "Unicode",
57
+ SHIFTJIS => "ShiftJIS",
58
+ BIG5 => "Big5",
59
+ PRC => "PRC",
60
+ WASUNG => "Wasung",
61
+ JOHAB => "Johab"
62
+ }
63
+ end
64
+
65
+ module MacintoshEncoding
66
+ # When Platform == 1
67
+ ROMAN = 0
68
+ JAPANESE = 1
69
+ TRADITIONAL_CHINESE = 2
70
+ KOREAN = 3
71
+ ARABIC = 4
72
+ HEBREW = 5
73
+ GREEK = 6
74
+ RUSSIAN = 7
75
+ RSYMBOL = 8
76
+ DEVANAGARI = 9
77
+ GURMUKHI = 10
78
+ GUJARATI = 11
79
+ ORIYA = 12
80
+ BENGALI = 13
81
+ TAMIL = 14
82
+ TELUGU = 15
83
+ KANNADA = 16
84
+ MALAYALAM = 17
85
+ SINHALESE = 18
86
+ BURMESE = 19
87
+ KHMER = 20
88
+ THAI = 21
89
+ LAOTIAN = 22
90
+ GEORGIAN = 23
91
+ ARMENIAN = 24
92
+ SIMPLIFIED_CHINESE = 25
93
+ TIBETAN = 26
94
+ MONGOLIAN = 27
95
+ GEEZ = 28
96
+ SLAVIC = 29
97
+ VIETNAMESE = 30
98
+ SINDHI = 31
99
+ UNINTERPRETED = 32
100
+
101
+ ID2NAME = {
102
+ ROMAN => "Roman",
103
+ JAPANESE => "Japanese",
104
+ TRADITIONAL_CHINESE => "Traditional Chinese",
105
+ KOREAN => "Korean",
106
+ ARABIC => "Arabic",
107
+ HEBREW => "Hebrew",
108
+ GREEK => "Greek",
109
+ RUSSIAN => "Russian",
110
+ RSYMBOL => "RSymbol",
111
+ DEVANAGARI => "Devanagari",
112
+ GURMUKHI => "Gurmukhi",
113
+ GUJARATI => "Gujarati",
114
+ ORIYA => "Orya",
115
+ BENGALI => "Bengali",
116
+ TAMIL => "Tamil",
117
+ TELUGU => "Telugu",
118
+ KANNADA => "Kannada",
119
+ MALAYALAM => "Malayalam",
120
+ SINHALESE => "Sinhalese",
121
+ BURMESE => "Burmese",
122
+ KHMER => "Khmer",
123
+ THAI => "Thai",
124
+ LAOTIAN => "Laotian",
125
+ GEORGIAN => "Georgian",
126
+ ARMENIAN => "Armenian",
127
+ SIMPLIFIED_CHINESE => "Simplified Chinese",
128
+ TIBETAN => "Tibetan",
129
+ MONGOLIAN => "Mongolian",
130
+ GEEZ => "Geez",
131
+ SLAVIC => "Slavic",
132
+ VIETNAMESE => "Vietnamese",
133
+ SINDHI => "Sindhi",
134
+ UNINTERPRETED => "Uninterpreted"
135
+ }
136
+ end
137
+
138
+ end
139
+ end
140
+ end