Replacing magic tag-character numbers with constants.
This brought out a bug in the multiline handling, so I fixed that, too. git-svn-id: svn://hamptoncatlin.com/haml/branches/edge@96 7063305b-7217-0410-af8c-cdc13e5119b9
This commit is contained in:
parent
411750013f
commit
ce13c445c7
|
@ -16,9 +16,41 @@ module Haml
|
||||||
# Allow access to the precompiled template
|
# Allow access to the precompiled template
|
||||||
attr_reader :precompiled
|
attr_reader :precompiled
|
||||||
|
|
||||||
|
# Designates an XHTML/XML element.
|
||||||
|
ELEMENT = '%'[0]
|
||||||
|
|
||||||
|
# Designates a <tt><div></tt> element with the given class.
|
||||||
|
DIV_CLASS = '.'[0]
|
||||||
|
|
||||||
|
# Designates a <tt><div></tt> element with the given id.
|
||||||
|
DIV_ID = '#'[0]
|
||||||
|
|
||||||
|
# Designates an XHTML/XML comment.
|
||||||
|
COMMENT = '/'[0]
|
||||||
|
|
||||||
|
# Designates script, the result of which is output.
|
||||||
|
SCRIPT = '='[0]
|
||||||
|
|
||||||
|
# Designates script, the result of which is flattened and output.
|
||||||
|
FLAT_SCRIPT = '~'[0]
|
||||||
|
|
||||||
|
# Designates script which is run but not output.
|
||||||
|
SILENT_SCRIPT = '-'[0]
|
||||||
|
|
||||||
|
# When following SILENT_SCRIPT, designates a comment that is not output.
|
||||||
|
SILENT_COMMENT = '#'[0]
|
||||||
|
|
||||||
# Keeps track of the ASCII values of the characters that begin a
|
# Keeps track of the ASCII values of the characters that begin a
|
||||||
# specially-interpreted line.
|
# specially-interpreted line.
|
||||||
SPECIAL_CHARACTERS = %w(# . = ~ % /).collect { |c| c[0] }
|
SPECIAL_CHARACTERS = [
|
||||||
|
ELEMENT,
|
||||||
|
DIV_CLASS,
|
||||||
|
DIV_ID,
|
||||||
|
COMMENT,
|
||||||
|
SCRIPT,
|
||||||
|
FLAT_SCRIPT,
|
||||||
|
SILENT_SCRIPT
|
||||||
|
]
|
||||||
|
|
||||||
# The value of the character that designates that a line is part
|
# The value of the character that designates that a line is part
|
||||||
# of a multiline string.
|
# of a multiline string.
|
||||||
|
@ -117,7 +149,7 @@ module Haml
|
||||||
if count > @to_close_stack.size
|
if count > @to_close_stack.size
|
||||||
|
|
||||||
# Indentation has been increased without a new tag
|
# Indentation has been increased without a new tag
|
||||||
if @latest_command == 45 # '-'
|
if @latest_command == SILENT_SCRIPT
|
||||||
|
|
||||||
# The indentation was increased after silent script,
|
# The indentation was increased after silent script,
|
||||||
# it must be a block
|
# it must be a block
|
||||||
|
@ -125,7 +157,7 @@ module Haml
|
||||||
end
|
end
|
||||||
|
|
||||||
elsif count <= @to_close_stack.size && @to_close_stack.size > 0 &&
|
elsif count <= @to_close_stack.size && @to_close_stack.size > 0 &&
|
||||||
(line.length == 0 || line[0] != 45 || !MID_BLOCK_KEYWORDS.include?(line[1..-1].split[0]))
|
(line.length == 0 || line[0] != SILENT_SCRIPT || !MID_BLOCK_KEYWORDS.include?(line[1..-1].split[0]))
|
||||||
|
|
||||||
# The tabulation has gone down, and it's not because of one of
|
# The tabulation has gone down, and it's not because of one of
|
||||||
# Ruby's mid-block keywords
|
# Ruby's mid-block keywords
|
||||||
|
@ -135,22 +167,22 @@ module Haml
|
||||||
if line.length > 0
|
if line.length > 0
|
||||||
@latest_command = line[0]
|
@latest_command = line[0]
|
||||||
case @latest_command
|
case @latest_command
|
||||||
when 46, 35 # '.', '#'
|
when DIV_CLASS, DIV_ID
|
||||||
render_div(line, index)
|
render_div(line, index)
|
||||||
when 37 # '%'
|
when ELEMENT
|
||||||
render_tag(line, index)
|
render_tag(line, index)
|
||||||
when 47 # '/'
|
when COMMENT
|
||||||
render_comment(line)
|
render_comment(line)
|
||||||
when 61 # '='
|
when SCRIPT
|
||||||
push_script(line[1..-1], false, index)
|
push_script(line[1..-1], false, index)
|
||||||
when 126 # '~'
|
when FLAT_SCRIPT
|
||||||
push_script(line[1..-1], true, index)
|
push_script(line[1..-1], true, index)
|
||||||
when 45 # '-'
|
when SILENT_SCRIPT
|
||||||
sub_line = line[1..-1]
|
sub_line = line[1..-1]
|
||||||
unless sub_line[0] == 35 # '#'
|
unless sub_line[0] == SILENT_COMMENT
|
||||||
push_silent(sub_line, index)
|
push_silent(sub_line, index)
|
||||||
else
|
else
|
||||||
@latest_command = 35
|
@latest_command = SILENT_COMMENT
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
push_text line.strip
|
push_text line.strip
|
||||||
|
@ -169,11 +201,11 @@ module Haml
|
||||||
# rendered normally.
|
# rendered normally.
|
||||||
def handle_multiline(count, line, index)
|
def handle_multiline(count, line, index)
|
||||||
# Multilines are denoting by ending with a `|` (124)
|
# Multilines are denoting by ending with a `|` (124)
|
||||||
if line && (line[-1] == MULTILINE_CHAR_VALUE) && @multiline_buffer
|
if is_multiline?(line) && @multiline_buffer
|
||||||
# A multiline string is active, and is being continued
|
# A multiline string is active, and is being continued
|
||||||
@multiline_buffer += line[0...-1]
|
@multiline_buffer += line[0...-1]
|
||||||
suppress_render = true
|
suppress_render = true
|
||||||
elsif line && (line[-1] == MULTILINE_CHAR_VALUE) && (MULTILINE_STARTERS.include? line[0])
|
elsif is_multiline?(line) && (MULTILINE_STARTERS.include? line[0])
|
||||||
# A multiline string has just been activated, start adding the lines
|
# A multiline string has just been activated, start adding the lines
|
||||||
@multiline_buffer = line[0...-1]
|
@multiline_buffer = line[0...-1]
|
||||||
@multiline_count = count
|
@multiline_count = count
|
||||||
|
@ -188,6 +220,11 @@ module Haml
|
||||||
|
|
||||||
return suppress_render
|
return suppress_render
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether or not +line+ is in a multiline sequence.
|
||||||
|
def is_multiline?(line) # ' '[0] == 32
|
||||||
|
line && line.length > 1 && line[-1] == MULTILINE_CHAR_VALUE && line[-2] == 32
|
||||||
|
end
|
||||||
|
|
||||||
# Takes <tt>@precompiled</tt>, a string buffer of Ruby code, and
|
# Takes <tt>@precompiled</tt>, a string buffer of Ruby code, and
|
||||||
# evaluates it in the context of <tt>@scope_object</tt>, after preparing
|
# evaluates it in the context of <tt>@scope_object</tt>, after preparing
|
||||||
|
|
Loading…
Reference in New Issue