class RSGenerator

Public Class Methods

check_data(text) click to toggle source
# File lib/rsyntaxtree.rb, line 119
def self.check_data(text)
   sp = StringParser.new(text)
   sp.valid?
end
new(params = {}) click to toggle source
# File lib/rsyntaxtree.rb, line 36
def initialize(params = {})
  new_params = {}
  params.each do |keystr, value|
    key = keystr.to_sym
    case key
    when :data
      data = CGI.unescape(value)
      data  = data.gsub('-AMP-', '&')
        .gsub('-PERCENT-', "%")
        .gsub('-PRIME-', "'")
        .gsub('-SCOLON-', ';')
        .gsub('-OABRACKET-', '<')
        .gsub('-CABRACKET-', '>')
      new_params[key] = data
      new_params[:multibyte] = data.contains_cjk?
    when :symmetrize, :color, :autosub
      new_params[key] = value && value != "off" ? true : false
    when :fontsize
      new_params[key] = value.to_i
    when :margin
      new_params[key] = value.to_i
    when :vheight
      new_params[key] = value.to_f
    when :fontstyle
      if value == "noto-sans" || value == "sans"
        new_params[:font] = FONT_DIR + "/NotoSans-Regular.ttf"
        new_params[:font_it] = FONT_DIR + "/NotoSans-Italic.ttf"
        new_params[:font_bd] = FONT_DIR + "/NotoSans-Bold.ttf"
        new_params[:font_bdit] = FONT_DIR + "/NotoSans-BoldItalic.ttf"
        new_params[:font_cjk] = FONT_DIR + "/NotoSansCJKjp-Regular.otf"
        new_params[:fontstyle] = "sans"
      elsif value == "noto-serif" || value == "serif"
        new_params[:font] = FONT_DIR + "/NotoSerif-Regular.ttf"
        new_params[:font_it] = FONT_DIR + "/NotoSerif-Italic.ttf"
        new_params[:font_bd] = FONT_DIR + "/NotoSerif-Bold.ttf"
        new_params[:font_bdit] = FONT_DIR + "/NotoSerif-BoldItalic.ttf"
        new_params[:font_cjk] = FONT_DIR + "/NotoSerifCJKjp-Regular.otf"
        new_params[:fontstyle] = "serif"
      elsif value == "cjk zenhei" || value == "cjk"
        new_params[:font] = FONT_DIR + "/wqy-zenhei.ttf"
        new_params[:font_it] = FONT_DIR + "/NotoSans-Italic.ttf"
        new_params[:font_bd] = FONT_DIR + "/NotoSans-Bold.ttf"
        new_params[:font_bdit] = FONT_DIR + "/NotoSans-BoldItalic.ttf"
        new_params[:font_cjk] = FONT_DIR + "/wqy-zenhei.ttf"
        new_params[:fontstyle] = "sans"
      end
    else
      new_params[key] = value
    end
  end

  @params = {
    :symmetrize => true,
    :color      => true,
    :autosub    => false,
    :fontsize   => 18,
    :format     => "png",
    :leafstyle  => "auto",
    :filename   => "syntree",
    :data       => "",
    :margin     => 0,
    :vheight    =>  1.0,
    :fontstyle  => "sans",
    :font       => "/NotoSansCJKjp-Regular.otf",
    :font_it    => "/NotoSans-Italic.ttf",
    :font_bd    => "/NotoSans-Bold.ttf",
    :font_bdit  => "/NotoSans-BoldItalic.ttf",
  }
  @metrics = {
    :e_width  => 120,
    :e_padd   => 14,
    :v_space  => 20,
    :h_space  => 20,
    :b_side   => 10,
    :b_topbot => 10
  }

  @params.merge! new_params
  @params[:fontsize]  = @params[:fontsize] * 2
  @params[:margin]    = @params[:margin] * 2
  @metrics[:v_space] = @metrics[:v_space] * @params[:vheight]
 end

Public Instance Methods

draw_gif() click to toggle source
# File lib/rsyntaxtree.rb, line 134
def draw_gif
  @params[:format] = "gif"
  draw_tree
end
draw_jpg() click to toggle source
# File lib/rsyntaxtree.rb, line 129
def draw_jpg
  @params[:format] = "jpg"
  draw_tree
end
draw_pdf() click to toggle source
# File lib/rsyntaxtree.rb, line 139
def draw_pdf
  @params[:format] = "pdf"
  draw_tree
end
draw_png() click to toggle source
# File lib/rsyntaxtree.rb, line 124
def draw_png
  @params[:format] = "png"
  draw_tree
end
draw_svg() click to toggle source
# File lib/rsyntaxtree.rb, line 144
def draw_svg
  @params[:format] = "svg"
  sp = StringParser.new(@params[:data].gsub('&', '&amp;').gsub('%', '&#37;'))
  sp.parse
  sp.auto_subscript if @params[:autosub]
  elist = sp.get_elementlist
  graph = SVGGraph.new(elist, @metrics,
    @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte], 
    @params[:fontstyle], @params[:fontsize],
  )
  graph.svg_data
end
draw_tree() click to toggle source
# File lib/rsyntaxtree.rb, line 157
def draw_tree
  sp = StringParser.new(@params[:data])
  sp.parse
  sp.auto_subscript if @params[:autosub]
  elist = sp.get_elementlist
  graph = TreeGraph.new(elist, @metrics,
    @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
    @params[:fontstyle], @params[:font], @params[:font_it], @params[:font_bd], @params[:font_bdit], 
    @params[:font_cjk], @params[:fontsize], @params[:margin], 
  )
  graph.to_blob(@params[:format])
end