lib/origami/font.rb in origami-1.2.7 vs lib/origami/font.rb in origami-2.0.0
- old
+ new
@@ -1,209 +1,196 @@
=begin
-= File
- font.rb
+ This file is part of Origami, PDF manipulation framework for Ruby
+ Copyright (C) 2016 Guillaume Delugré.
-= Info
- This file is part of Origami, PDF manipulation framework for Ruby
- Copyright (C) 2010 Guillaume Delugré <guillaume AT security-labs DOT org>
- All right reserved.
-
- Origami is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ Origami is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- Origami is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
+ Origami is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with Origami. If not, see <http://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU Lesser General Public License
+ along with Origami. If not, see <http://www.gnu.org/licenses/>.
=end
module Origami
- #
- # Embedded font stream.
- #
- class FontStream < Stream
-
- field :Subtype, :Type => Name
- field :Length1, :Type => Integer
- field :Length2, :Type => Integer
- field :Length3, :Type => Integer
+ #
+ # Embedded font stream.
+ #
+ class FontStream < Stream
+ field :Subtype, :Type => Name
+ field :Length1, :Type => Integer
+ field :Length2, :Type => Integer
+ field :Length3, :Type => Integer
+ field :Metadata, :Type => MetadataStream
+ end
- end
-
- #
- # Class representing a font details in a document.
- #
- class FontDescriptor < Dictionary
-
- include StandardObject
-
- FIXEDPITCH = 1 << 1
- SERIF = 1 << 2
- SYMBOLIC = 1 << 3
- SCRIPT = 1 << 4
- NONSYMBOLIC = 1 << 6
- ITALIC = 1 << 7
- ALLCAP = 1 << 17
- SMALLCAP = 1 << 18
- FORCEBOLD = 1 << 19
+ #
+ # Class representing a font details in a document.
+ #
+ class FontDescriptor < Dictionary
+ include StandardObject
- field :Type, :Type => Name, :Default => :FontDescriptor, :Required => true
- field :FontName, :Type => Name, :Required => true
- field :FontFamily, :Type => ByteString, :Version => "1.5"
- field :FontStretch, :Type => Name, :Default => :Normal, :Version => "1.5"
- field :FontWeight, :Type => Integer, :Default => 400, :Version => "1.5"
- field :Flags, :Type => Integer, :Required => true
- field :FontBBox, :Type => Array
- field :ItalicAngle, :Type => Number, :Required => true
- field :Ascent, :Type => Number
- field :Descent, :Type => Number
- field :Leading, :Type => Number, :Default => 0
- field :CapHeight, :Type => Number
- field :XHeight, :Type => Number, :Default => 0
- field :StemV, :Type => Number
- field :StemH, :Type => Number, :Default => 0
- field :AvgWidth, :Type => Number, :Default => 0
- field :MaxWidth, :Type => Number, :Default => 0
- field :MissingWidth, :Type => Number, :Default => 0
- field :FontFile, :Type => FontStream
- field :FontFile2, :Type => FontStream, :Version => "1.1"
- field :FontFile3, :Type => FontStream, :Version => "1.2"
- field :CharSet, :Type => ByteString, :Version => "1.1"
-
- end
-
- #
- # Class representing a character encoding in a document.
- #
- class Encoding < Dictionary
-
- include StandardObject
+ FIXEDPITCH = 1 << 1
+ SERIF = 1 << 2
+ SYMBOLIC = 1 << 3
+ SCRIPT = 1 << 4
+ NONSYMBOLIC = 1 << 6
+ ITALIC = 1 << 7
+ ALLCAP = 1 << 17
+ SMALLCAP = 1 << 18
+ FORCEBOLD = 1 << 19
- field :Type, :Type => Name, :Default => :Encoding
- field :BaseEncoding, :Type => Name
- field :Differences, :Type => Array
-
- end
-
- #
- # Class representing a rendering font in a document.
- #
- class Font < Dictionary
-
- include StandardObject
-
- field :Type, :Type => Name, :Default => :Font, :Required => true
- field :Subtype, :Type => Name, :Required => true
- field :Name, :Type => Name
- field :FirstChar, :Type => Integer
- field :LastChar, :Type => Integer
- field :Widths, :Type => Array
- field :FontDescriptor, :Type => FontDescriptor
- field :Encoding, :Type => [ Name, Encoding ], :Default => :MacRomanEncoding
- field :ToUnicode, :Type => Stream, :Version => "1.2"
-
- # TODO: Type0 and CID Fonts
+ field :Type, :Type => Name, :Default => :FontDescriptor, :Required => true
+ field :FontName, :Type => Name, :Required => true
+ field :FontFamily, :Type => String, :Version => "1.5"
+ field :FontStretch, :Type => Name, :Default => :Normal, :Version => "1.5"
+ field :FontWeight, :Type => Integer, :Default => 400, :Version => "1.5"
+ field :Flags, :Type => Integer, :Required => true
+ field :FontBBox, :Type => Rectangle
+ field :ItalicAngle, :Type => Number, :Required => true
+ field :Ascent, :Type => Number
+ field :Descent, :Type => Number
+ field :Leading, :Type => Number, :Default => 0
+ field :CapHeight, :Type => Number
+ field :XHeight, :Type => Number, :Default => 0
+ field :StemV, :Type => Number
+ field :StemH, :Type => Number, :Default => 0
+ field :AvgWidth, :Type => Number, :Default => 0
+ field :MaxWidth, :Type => Number, :Default => 0
+ field :MissingWidth, :Type => Number, :Default => 0
+ field :FontFile, :Type => FontStream
+ field :FontFile2, :Type => FontStream, :Version => "1.1"
+ field :FontFile3, :Type => FontStream, :Version => "1.2"
+ field :CharSet, :Type => String, :Version => "1.1"
+ end
#
- # Type1 Fonts.
+ # Class representing a character encoding in a document.
#
- class Type1 < Font
+ class Encoding < Dictionary
+ include StandardObject
- field :BaseFont, :Type => Name, :Required => true
- field :Subtype, :Type => Name, :Default => :Type1, :Required => true
-
- #
- # 14 standard Type1 fonts.
- #
- module Standard
-
- class TimesRoman < Type1
- field :BaseFont, :Type => Name, :Default => :"Times-Roman", :Required => true
- end
+ field :Type, :Type => Name, :Default => :Encoding
+ field :BaseEncoding, :Type => Name
+ field :Differences, :Type => Array
+ end
- class Helvetica < Type1
- field :BaseFont, :Type => Name, :Default => :Helvetica, :Required => true
- end
+ #
+ # Class representing a rendering font in a document.
+ #
+ class Font < Dictionary
+ include StandardObject
- class Courier < Type1
- field :BaseFont, :Type => Name, :Default => :Courier, :Required => true
- end
+ field :Type, :Type => Name, :Default => :Font, :Required => true
+ field :Subtype, :Type => Name, :Required => true
+ field :Name, :Type => Name
+ field :FirstChar, :Type => Integer
+ field :LastChar, :Type => Integer
+ field :Widths, :Type => Array.of(Number)
+ field :FontDescriptor, :Type => FontDescriptor
+ field :Encoding, :Type => [ Name, Encoding ], :Default => :MacRomanEncoding
+ field :ToUnicode, :Type => Stream, :Version => "1.2"
- class Symbol < Type1
- field :BaseFont, :Type => Name, :Default => :Symbol, :Required => true
- end
+ # TODO: Type0 and CID Fonts
- class TimesBold < Type1
- field :BaseFont, :Type => Name, :Default => :"Times-Bold", :Required => true
- end
+ #
+ # Type1 Fonts.
+ #
+ class Type1 < Font
- class HelveticaBold < Type1
- field :BaseFont, :Type => Name, :Default => :"Helvetica-Bold", :Required => true
- end
+ field :BaseFont, :Type => Name, :Required => true
+ field :Subtype, :Type => Name, :Default => :Type1, :Required => true
- class CourierBold < Type1
- field :BaseFont, :Type => Name, :Default => :"Courier-Bold", :Required => true
- end
+ #
+ # 14 standard Type1 fonts.
+ #
+ module Standard
- class ZapfDingbats < Type1
- field :BaseFont, :Type => Name, :Default => :ZapfDingbats, :Required => true
- end
+ class TimesRoman < Type1
+ field :BaseFont, :Type => Name, :Default => :"Times-Roman", :Required => true
+ end
- class TimesItalic < Type1
- field :BaseFont, :Type => Name, :Default => :"Times-Italic", :Required => true
- end
+ class Helvetica < Type1
+ field :BaseFont, :Type => Name, :Default => :Helvetica, :Required => true
+ end
- class HelveticaOblique < Type1
- field :BaseFont, :Type => Name, :Default => :"Helvetica-Oblique", :Required => true
- end
+ class Courier < Type1
+ field :BaseFont, :Type => Name, :Default => :Courier, :Required => true
+ end
- class CourierOblique < Type1
- field :BaseFont, :Type => Name, :Default => :"Courier-Oblique", :Required => true
- end
+ class Symbol < Type1
+ field :BaseFont, :Type => Name, :Default => :Symbol, :Required => true
+ end
- class TimesBoldItalic < Type1
- field :BaseFont, :Type => Name, :Default => :"Times-BoldItalic", :Required => true
- end
+ class TimesBold < Type1
+ field :BaseFont, :Type => Name, :Default => :"Times-Bold", :Required => true
+ end
- class HelveticaBoldOblique < Type1
- field :BaseFont, :Type => Name, :Default => :"Helvetica-BoldOblique", :Required => true
- end
+ class HelveticaBold < Type1
+ field :BaseFont, :Type => Name, :Default => :"Helvetica-Bold", :Required => true
+ end
- class CourierBoldOblique < Type1
- field :BaseFont, :Type => Name, :Default => :"Courier-BoldOblique", :Required => true
- end
+ class CourierBold < Type1
+ field :BaseFont, :Type => Name, :Default => :"Courier-Bold", :Required => true
+ end
- end
+ class ZapfDingbats < Type1
+ field :BaseFont, :Type => Name, :Default => :ZapfDingbats, :Required => true
+ end
- end
+ class TimesItalic < Type1
+ field :BaseFont, :Type => Name, :Default => :"Times-Italic", :Required => true
+ end
- #
- # TrueType Fonts
- #
- class TrueType < Font
- field :Subtype, :Type => Name, :Default => :TrueType, :Required => true
- end
+ class HelveticaOblique < Type1
+ field :BaseFont, :Type => Name, :Default => :"Helvetica-Oblique", :Required => true
+ end
- #
- # Type 3 Fonts
- #
- class Type3 < Font
+ class CourierOblique < Type1
+ field :BaseFont, :Type => Name, :Default => :"Courier-Oblique", :Required => true
+ end
- field :Subtype, :Type => Name, :Default => :Type3, :Required => true
- field :FontBBox, :Type => Array, :Required => true
- field :FontMatrix, :Type => Array, :Required => true
- field :CharProcs, :Type => Dictionary, :Required => true
- field :Resources, :Type => Dictionary, :Version => "1.2"
+ class TimesBoldItalic < Type1
+ field :BaseFont, :Type => Name, :Default => :"Times-BoldItalic", :Required => true
+ end
- end
+ class HelveticaBoldOblique < Type1
+ field :BaseFont, :Type => Name, :Default => :"Helvetica-BoldOblique", :Required => true
+ end
- end
+ class CourierBoldOblique < Type1
+ field :BaseFont, :Type => Name, :Default => :"Courier-BoldOblique", :Required => true
+ end
+ end
+ end
+
+ #
+ # TrueType Fonts
+ #
+ class TrueType < Font
+ field :Subtype, :Type => Name, :Default => :TrueType, :Required => true
+ field :BaseFont, :Type => Name, :Required => true
+ end
+
+ #
+ # Type 3 Fonts
+ #
+ class Type3 < Font
+ include ResourcesHolder
+
+ field :Subtype, :Type => Name, :Default => :Type3, :Required => true
+ field :FontBBox, :Type => Rectangle, :Required => true
+ field :FontMatrix, :Type => Array.of(Number, length: 6), :Required => true
+ field :CharProcs, :Type => Dictionary, :Required => true
+ field :Resources, :Type => Resources, :Version => "1.2"
+ end
+ end
end