Icalendar::Parser

Constants

DATE

date = date-fullyear ["-"] date-month ["-"] date-mday date-fullyear = 4 DIGIT date-month = 2 DIGIT date-mday = 2 DIGIT

LINE

Contentline

NAME

1*(ALPHA / DIGIT / "=")

PARAM

param = name "=" param-value *("," param-value)

PTEXT

*<Any character except CTLs, DQUOTE, ";", ":", ",">

PVALUE

param-value = ptext / quoted-string

QSTR

<"> <Any character except CTLs, DQUOTE> <">

TIME

time = time-hour [":"] time-minute [":"] time-second [time-secfrac] [time-zone] time-hour = 2 DIGIT time-minute = 2 DIGIT time-second = 2 DIGIT time-secfrac = "," 1*DIGIT time-zone = "Z" / time-numzone time-numzome = sign time-hour [":"] time-minute

Attributes

strict[RW]

Defines if this is a strict parser.

Public Class Methods

new(src, strict = true) click to toggle source
# File lib/icalendar/parser.rb, line 45
def initialize(src, strict = true)
  # Setup the parser method hash table
  setup_parsers

  # The default behavior is to raise an error when the parser
  # finds an unknown property. Set this to false to discard
  # unknown properties instead of raising an error.
  @strict = strict

  if src.respond_to?(:gets)
    @file = src
  elsif (not src.nil?) and src.respond_to?(:to_s)
    @file = StringIO.new(src.to_s, 'r')
  else
    raise ArgumentError, "CalendarParser.new cannot be called with a #{src.class} type!"
  end

  @prev_line = @file.gets
  @prev_line.chomp! unless @prev_line.nil?

  @@logger.debug("New Calendar Parser: #{@file.inspect}")
end

Public Instance Methods

next_line() click to toggle source

Define next line for an IO object. Works for strings now with StringIO

# File lib/icalendar/parser.rb, line 70
def next_line
  line = @prev_line

  if line.nil? 
    return nil 
  end

  # Loop through until we get to a non-continuation line...
  loop do
    nextLine = @file.gets
    @@logger.debug "new_line: #{nextLine}"

    if !nextLine.nil?
      nextLine.chomp!
    end

    # If it's a continuation line, add it to the last.
    # If it's an empty line, drop it from the input.
    if( nextLine =~ /^[ \t]/ )
      line << nextLine[1, nextLine.size]
    elsif( nextLine =~ /^$/ )
    else
      @prev_line = nextLine
      break
    end
  end
  line
end
parse() click to toggle source

Parse the calendar into an object representation

# File lib/icalendar/parser.rb, line 100
def parse
  calendars = []

  @@logger.debug "parsing..."
  # Outer loop for Calendar objects
  while (line = next_line) 
    fields = parse_line(line)

    # Just iterate through until we find the beginning of a calendar object
    if fields[:name] == "BEGIN" and fields[:value] == "VCALENDAR"
      cal = parse_component Calendar.new
      @@logger.debug "Added parsed calendar..."
      calendars << cal
    end
  end

  calendars
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.