Class: MasterView::MasterViewListener
- Inherits:
-
Object
- Object
- MasterView::MasterViewListener
show all
- Includes:
- DirectiveHelpers, REXML::SAX2Listener
- Defined in:
- lib/masterview/parser.rb
Constant Summary
DirectiveHelpers::CRLF, DirectiveHelpers::ERB_END, DirectiveHelpers::ERB_EVAL, DirectiveHelpers::ERB_START
Instance Method Summary
collapse
-
#cdata(content) ⇒ Object
-
#characters(text) ⇒ Object
-
#comment(comment) ⇒ Object
-
#doctype(name, pub, sys, long_name, uri) ⇒ Object
-
#end_document ⇒ Object
-
#end_element(uri, localname, qname) ⇒ Object
-
#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.
-
#generate_replace(value) ⇒ Object
-
#initialize(options = {}) ⇒ MasterViewListener
constructor
A new instance of MasterViewListener.
-
#push_levels(attributes) ⇒ Object
-
#start_document ⇒ Object
-
#start_element(uri, localname, qname, attributes) ⇒ Object
-
#unescape_attributes!(attributes) ⇒ Object
-
#xmldecl(version, encoding, standalone) ⇒ Object
#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
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
|
449
450
451
|
# File 'lib/masterview/parser.rb', line 449
def ()
@renderer.append_content(: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)
end
|
#end_document ⇒ Object
461
462
463
|
# File 'lib/masterview/parser.rb', line 461
def end_document
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) 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') generate_render( gen_render, attributes ) unless gen_render.nil?
gen_replace = attributes.delete(@renderer.mv_ns+'gen_replace') generate_replace( gen_replace ) unless gen_replace.nil?
gen = attributes.delete(@renderer.mv_ns+'generate') unless gen.nil?
attributes[@renderer.mv_ns+'insert_generated_comment'] = @renderer.template_path unless OmitGeneratedComments render_level = nil
gen_values = parse_eval_into_hash(gen, :normal)
gen_values.each do |key,value|
mode_type = key.to_sym
arr_values = (value.is_a?(Enumerable)) ? value : [value] 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_document ⇒ Object
431
432
433
|
# File 'lib/masterview/parser.rb', line 431
def start_document
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)
end
|