Class: MasterView::MasterViewListener

Inherits:
Object
  • Object
show all
Includes:
DirectiveHelpers, REXML::SAX2Listener
Defined in:
lib/masterview/parser.rb

Constant Summary

Constants included from DirectiveHelpers

DirectiveHelpers::CRLF, DirectiveHelpers::ERB_END, DirectiveHelpers::ERB_EVAL, DirectiveHelpers::ERB_START

Instance Method Summary collapse

Methods included from DirectiveHelpers

#delete_last_in_parent, #find_last_in_parent, #find_string_val_in_string_hash, #lowercase_attribute_keys, #lowercase_attribute_keys_and_values, #merge_into_embedded_hash, #parse, #parse_eval_into_array, #parse_eval_into_hash, #remove_prepended_strings

Constructor Details

#initialize(options = {}) ⇒ MasterViewListener

Returns a new instance of MasterViewListener.



423
424
425
# File 'lib/masterview/parser.rb', line 423

def initialize( options = {} )
  @renderer = Renderer.new(options)
end

Instance Method Details

#cdata(content) ⇒ Object



453
454
455
# File 'lib/masterview/parser.rb', line 453

def cdata(content)
  @renderer.append_content(:cdata, content)
end

#characters(text) ⇒ Object



445
446
447
# File 'lib/masterview/parser.rb', line 445

def characters(text)
  @renderer.append_content(:characters, text)
end

#comment(comment) ⇒ Object



449
450
451
# File 'lib/masterview/parser.rb', line 449

def comment(comment)
  @renderer.append_content(:comment, comment)
end

#doctype(name, pub, sys, long_name, uri) ⇒ Object



435
436
437
# File 'lib/masterview/parser.rb', line 435

def doctype(name, pub, sys, long_name, uri)
  #todo
end

#end_documentObject



461
462
463
# File 'lib/masterview/parser.rb', line 461

def end_document
  #todo
end

#end_element(uri, localname, qname) ⇒ Object



457
458
459
# File 'lib/masterview/parser.rb', line 457

def end_element(uri, localname, qname)
  @renderer.pop_tag
end

#generate_render(value, attributes) ⇒ Object

handle a mv:gen_render attribute, which calls generate and outputs a token it takes an optional :dir => ‘foo/bar’ which is prepended to partial path, otherwise it just uses what is in partial. This creates a generate attribute value which will be used later. Parameters value = attribute value for gen_render attributes = all remaining attributes hash



483
484
485
486
487
488
489
490
491
492
493
494
495
496
# File 'lib/masterview/parser.rb', line 483

def generate_render(value, attributes)
  prepend_dir = find_string_val_in_string_hash(value, :dir) #only used for masterview
  partial = find_string_val_in_string_hash(value, :partial) 
  return if partial.nil?
  dir = File.dirname(partial)
  base = File.basename(partial) 
  filename = '_'+base+'.rhtml'
  path = ( (dir != '.') ? File.join(dir,filename) : filename )
  path = File.join(prepend_dir, path) if prepend_dir
  generate_attribute = attributes[@renderer.mv_ns+'generate'] || ''
  generate_attribute = path + (generate_attribute.blank? ? '' : ', '+generate_attribute)
  attributes[@renderer.mv_ns+'generate'] = generate_attribute 
  @renderer.append_raw( ERB_EVAL+'render( '+value+' )'+ERB_END ) 
end

#generate_replace(value) ⇒ Object



472
473
474
# File 'lib/masterview/parser.rb', line 472

def generate_replace(value)
  @renderer.append_raw ERB_EVAL+value+ERB_END
end

#push_levels(attributes) ⇒ Object



498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
# File 'lib/masterview/parser.rb', line 498

def push_levels(attributes)
  gen_render = attributes.delete(@renderer.mv_ns+'gen_render') #get and delete from map
  generate_render( gen_render, attributes ) unless gen_render.nil?
  
  gen_replace = attributes.delete(@renderer.mv_ns+'gen_replace') #get and delete from map
  generate_replace( gen_replace ) unless gen_replace.nil?

  gen = attributes.delete(@renderer.mv_ns+'generate') #get and delete from map
  unless gen.nil?
    attributes[@renderer.mv_ns+'insert_generated_comment'] =  @renderer.template_path unless OmitGeneratedComments #add the comment directive, so it will be written to each gen'd file
    render_level = nil
    gen_values = parse_eval_into_hash(gen, :normal)

    #Log.debug { 'generate_hash='+gen_values.inspect }

    gen_values.each do |key,value|
      mode_type = key.to_sym
      arr_values = (value.is_a?(Enumerable)) ? value : [value] #if not enumerable add it to array
      value.each do |path|
        path.strip!
        Log.debug { ('pushing mode='+mode_type.to_s+' path='+path).indent(2*@renderer.render_levels.size) } 
        render_level ||= RenderLevel.new
        render_level.push RenderMode.new(path, mode_type)
      end
    end
    @renderer.push_level(render_level) unless render_level.nil?
  end
end

#start_documentObject



431
432
433
# File 'lib/masterview/parser.rb', line 431

def start_document
  #todo
end

#start_element(uri, localname, qname, attributes) ⇒ Object



439
440
441
442
443
# File 'lib/masterview/parser.rb', line 439

def start_element(uri, localname, qname, attributes)
  unescape_attributes!(attributes)
  push_levels(attributes)
  @renderer.push_tag(qname, attributes)
end

#unescape_attributes!(attributes) ⇒ Object



465
466
467
468
469
470
# File 'lib/masterview/parser.rb', line 465

def unescape_attributes!(attributes)
  attributes.each do |name, value|
    value.replace CGI::unescapeHTML(value)
    value.gsub!(''', '\'')
  end
end

#xmldecl(version, encoding, standalone) ⇒ Object



427
428
429
# File 'lib/masterview/parser.rb', line 427

def xmldecl(version, encoding, standalone)
  #todo
end