Class: Synvert::Core::Engine::Haml
- Inherits:
-
Object
- Object
- Synvert::Core::Engine::Haml
- Extended by:
- Elegant
- Defined in:
- lib/synvert/core/engine/haml.rb
Constant Summary
Constants included from Elegant
Elegant::DO_BLOCK_REGEX, Elegant::ELSE_KEYWORDS, Elegant::END_LINE, Elegant::IF_KEYWORDS, Elegant::WHITESPACE
Class Method Summary collapse
-
.encode(source) ⇒ String
Encode haml string, leave only ruby code, replace other haml code with whitespace.
Methods included from Elegant
generate_transform_proc, insert_end?, scan_ruby_expression, scan_ruby_interpolation_and_plain_text, scan_ruby_statement
Class Method Details
.encode(source) ⇒ String
Encode haml string, leave only ruby code, replace other haml code with whitespace.
And insert end\n
for each if, unless, begin, case to make it a valid ruby code.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/synvert/core/engine/haml.rb', line 14 def encode(source) leading_spaces_counts = [] new_code = [] scanner = StringScanner.new(source) loop do new_code << scanner.scan(/\s*/) leading_spaces_count = scanner.matched.size if scanner.scan('-') # it matches ruby statement " - current_user" new_code << WHITESPACE scan_ruby_statement(scanner, new_code, leading_spaces_counts, leading_spaces_count) elsif scanner.scan('=') # it matches ruby expression " = current_user.login" new_code << WHITESPACE scan_ruby_expression(scanner, new_code, leading_spaces_counts, leading_spaces_count) elsif scanner.scan(/[%#\.][a-zA-Z0-9\-_%#\.]+/) # it matches element, id and class " %span.user" new_code << (WHITESPACE * scanner.matched.size) scan_matching_wrapper(scanner, new_code, '{', '}') if scanner.scan('=') new_code << ';' scan_ruby_expression(scanner, new_code, leading_spaces_counts, leading_spaces_count) else scan_ruby_interpolation_and_plain_text(scanner, new_code, leading_spaces_counts, leading_spaces_count) end else scan_ruby_interpolation_and_plain_text(scanner, new_code, leading_spaces_counts, leading_spaces_count) end break if scanner.eos? end while leading_spaces_counts.pop new_code << END_LINE end new_code.join end |