Class: Depager::ExtensionGenerator
- Defined in:
- lib/depager.rb
Direct Known Subclasses
Constant Summary
Constants inherited from Generator
Instance Attribute Summary collapse
-
#slaves ⇒ Object
Returns the value of attribute slaves.
Attributes inherited from Generator
#d_parser, #decorators, #g_parser, #inner_code, #options, #outer_code, #parsing_method, #requirements, #setup_code
Instance Method Summary collapse
-
#initialize(d_parser) ⇒ ExtensionGenerator
constructor
A new instance of ExtensionGenerator.
- #master_code_template ⇒ Object
- #parse ⇒ Object
- #parse_hook(target_name) ⇒ Object
- #slave_code_template ⇒ Object
Methods inherited from Generator
#generate_code, #parse_block, #parse_common, #parse_prec
Methods included from Utils::CommonMethods
#error_exit, #error_message, #expanded_code_delimiter, #file, #full_target_name, #input_path, #inspect, #target_name, #target_namespace, #warning
Constructor Details
#initialize(d_parser) ⇒ ExtensionGenerator
Returns a new instance of ExtensionGenerator.
486 487 488 489 |
# File 'lib/depager.rb', line 486 def initialize(d_parser) super @slaves = {} end |
Instance Attribute Details
#slaves ⇒ Object
Returns the value of attribute slaves.
484 485 486 |
# File 'lib/depager.rb', line 484 def slaves @slaves end |
Instance Method Details
#master_code_template ⇒ Object
545 |
# File 'lib/depager.rb', line 545 def master_code_template; end |
#parse ⇒ Object
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 |
# File 'lib/depager.rb', line 491 def parse until file.eof? line = file.gets case line when %r{^%hook\s+([\w \t]+?)(/((?:[^/\\]+|\\.)+)/(\s+skip)?)?\s*$} hooks = $1.split @banner = hooks.join(",") @do_parse_re = $3 @do_parse_skip = $4 parts = hooks.map do |i| error_exit "Unknown hook: #{i}" unless g_parser.hook_name? i i.split("_").map(&:capitalize).join end target_name = "#{d_parser.target_namespace}::#{parts.join}#{slaves.size}::Parser" @slaves[target_name] = hooks @outer_code << parse_hook(target_name) when /^%%\s*$/ @outer_code << parse_block(raw: true) else parse_common(line) end end generate_code master_code_template end |
#parse_hook(target_name) ⇒ Object
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 |
# File 'lib/depager.rb', line 517 def parse_hook(target_name) inner = "" precs = [] @slave_mixins = @mixins.dup until file.eof? line = file.gets case line when /^%banner\s*'(([^'\\]+|\\.)*)'\s*$/ @banner = $1 when /^%inner\s*\{\s*$/ inner = parse_block when /^%mixin\s*(.+?)\s*(\((.+)\)\s*)?$/ @slave_mixins << $1 @requirements.push $3 if $3 when /^%prec\s*(.*?)\s*$/ precs = parse_prec when /^%%\s*$/ g_parser.parse(target_name, precs, @extensions, @options) g_parser.inner_code << inner return generate_code slave_code_template else warning "syntax error(declaration).\n> #{line}", file.lineno end end end |
#slave_code_template ⇒ Object
543 |
# File 'lib/depager.rb', line 543 def slave_code_template; end |