class AoBane::Document

Constants

BLANK_LINE_PATTERN
HEADER_PATTERN
HEADER_SEQUEL_PATTERN

Attributes

body[RW]
headers[RW]
text[RW]
text=[RW]

Public Class Methods

new(headers = {}, body = '') click to toggle source
# File lib/AoBane.rb, line 333
def initialize(headers = {}, body = '')
        @headers = {}
        headers.each do |k, v|
                self[k] = v
        end
        @body = body
end
parse(str, default_enc = EncodingType::UTF8) click to toggle source
# File lib/AoBane.rb, line 326
def parse(str, default_enc = EncodingType::UTF8)
        parse_io(StringIO.new(str), default_enc)
end
parse_io(input, default_enc = EncodingType::UTF8) click to toggle source
# File lib/AoBane.rb, line 246
def parse_io(input, default_enc = EncodingType::UTF8)
        headers = {}
        body = nil
        first_pos = input.pos
        default_enc = EncodingType.regulate(default_enc)

        Util.change_kcode(EncodingType.convert_to_kcode(default_enc)){
                # default encoding
                if defined?(Encoding) then
                        input.set_encoding(Encoding.find(default_enc))
                end



                # get headers
                pos_before_gets = nil
                first_line = true

                loop do
                        pos_before_gets = input.pos
                        line = input.gets

                        # cut UTF-8 BOM
                        if first_line and Util.utf8_bom?(line) then
                                line.slice!(UTF8_BOM_PATTERN)
                        end
                        first_line = false

                        if line and line.chomp =~ HEADER_PATTERN then
                                key = $1.downcase; value = $2

                                if key == 'encoding' and not headers.include?('encoding') then
                                        kc = EncodingType.convert_to_kcode(value.downcase)
                                        if input.respond_to?(:set_encoding) then
                                                input.set_encoding(EncodingType.regulate(value))

                                                # rewind (reason => [ruby-list:45988])
                                                input.pos = first_pos
                                                first_line = true
                                        else
                                                $KCODE = kc
                                        end
                                end

                                headers[key] = value
                        else
                                # EOF or Metadata end
                                break
                        end
                end

                # back
                input.pos = pos_before_gets



                # skip blank lines
                loop do
                        pos_before_gets = input.pos

                        line = input.gets
                        if line.nil? or not line =~ BLANK_LINE_PATTERN then
                                break
                        end
                end

                # back
                input.pos = pos_before_gets



                # get body
                body = input.read

        }


        return self.new(headers, body)
end

Public Instance Methods

[](key) click to toggle source
# File lib/AoBane.rb, line 341
def [](key)
        @headers[key.to_s.downcase]
end
[]=(key, value) click to toggle source
# File lib/AoBane.rb, line 345
def []=(key, value)
        @headers[key.to_s.downcase] = value.to_s
end
css() click to toggle source
# File lib/AoBane.rb, line 353
def css
        @headers['css']
end
encoding_type() click to toggle source
# File lib/AoBane.rb, line 377
def encoding_type
        @headers['encoding'] || EncodingType::UTF8
end
header_id_type() click to toggle source
# File lib/AoBane.rb, line 381
def header_id_type
        (@headers['header-id-type'] || HeaderIDType::MD5).downcase
end
kcode() click to toggle source
# File lib/AoBane.rb, line 385
def kcode
        self.encoding_type && EncodingType.convert_to_kcode(self.encoding_type)
end
numbering() click to toggle source
# File lib/AoBane.rb, line 357
def numbering
        case @headers['numbering']
        when 'yes', '1', 'true', 'on'
                true
        else
                false
        end
end
Also aliased as: numbering?
numbering?()
Alias for: numbering
numbering_start_level() click to toggle source
# File lib/AoBane.rb, line 368
def numbering_start_level
        level = (@headers['numbering-start-level'] || 2).to_i
        if level >= 1 and level <= 6 then
                return level
        else
                return 2
        end
end
title() click to toggle source
# File lib/AoBane.rb, line 349
def title
        @headers['title']
end
to_html() click to toggle source
# File lib/AoBane.rb, line 389
def to_html
        Parser.new.document_to_html(self)
end