Refactoring comment_char internals: prepping for block comments
This commit is contained in:
parent
7609e1a624
commit
d067210faa
16
lib/rocco.rb
16
lib/rocco.rb
@ -107,12 +107,18 @@ class Rocco
|
|||||||
# to look around for comment characters to override the default.
|
# to look around for comment characters to override the default.
|
||||||
elsif @options[:language] != defaults[:language]
|
elsif @options[:language] != defaults[:language]
|
||||||
@options[:comment_chars] = generate_comment_chars()
|
@options[:comment_chars] = generate_comment_chars()
|
||||||
|
|
||||||
|
# If neither is true, then convert the default comment character string
|
||||||
|
# into the comment_char syntax (we'll discuss that syntax in detail when
|
||||||
|
# we get to `generate_comment_chars()` in a moment.
|
||||||
|
else
|
||||||
|
@options[:comment_chars] = { :single => @options[:comment_chars], :multi => "" }
|
||||||
end
|
end
|
||||||
|
|
||||||
# Turn `:comment_chars` into a regex matching a series of spaces, the
|
# Turn `:comment_chars` into a regex matching a series of spaces, the
|
||||||
# `:comment_chars` string, and the an optional space. We'll use that
|
# `:comment_chars` string, and the an optional space. We'll use that
|
||||||
# to detect single-line comments.
|
# to detect single-line comments.
|
||||||
@comment_pattern = Regexp.new("^\\s*#{@options[:comment_chars]}\s?")
|
@comment_pattern = Regexp.new("^\\s*#{@options[:comment_chars][:single]}\s?")
|
||||||
|
|
||||||
# `parse()` the file contents stored in `@data`. Run the result through `split()`
|
# `parse()` the file contents stored in `@data`. Run the result through `split()`
|
||||||
# and that result through `highlight()` to generate the final section list.
|
# and that result through `highlight()` to generate the final section list.
|
||||||
@ -214,9 +220,9 @@ class Rocco
|
|||||||
}
|
}
|
||||||
|
|
||||||
if comment_styles[language]
|
if comment_styles[language]
|
||||||
comment_styles[language][:single]
|
comment_styles[language]
|
||||||
else
|
else
|
||||||
@options[:comment_chars]
|
{ :single => @options[:comment_chars], :multi => nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -281,7 +287,7 @@ class Rocco
|
|||||||
|
|
||||||
# Combine all code blocks into a single big stream and run through either
|
# Combine all code blocks into a single big stream and run through either
|
||||||
# `pygmentize(1)` or <http://pygments.appspot.com>
|
# `pygmentize(1)` or <http://pygments.appspot.com>
|
||||||
code_stream = code_blocks.join("\n\n#{@options[:comment_chars]} DIVIDER\n\n")
|
code_stream = code_blocks.join("\n\n#{@options[:comment_chars][:single]} DIVIDER\n\n")
|
||||||
|
|
||||||
if pygmentize?
|
if pygmentize?
|
||||||
code_html = highlight_pygmentize(code_stream)
|
code_html = highlight_pygmentize(code_stream)
|
||||||
@ -292,7 +298,7 @@ class Rocco
|
|||||||
# Do some post-processing on the pygments output to split things back
|
# Do some post-processing on the pygments output to split things back
|
||||||
# into sections and remove partial `<pre>` blocks.
|
# into sections and remove partial `<pre>` blocks.
|
||||||
code_html = code_html.
|
code_html = code_html.
|
||||||
split(/\n*<span class="c.?">#{@options[:comment_chars]} DIVIDER<\/span>\n*/m).
|
split(/\n*<span class="c.?">#{@options[:comment_chars][:single]} DIVIDER<\/span>\n*/m).
|
||||||
map { |code| code.sub(/\n?<div class="highlight"><pre>/m, '') }.
|
map { |code| code.sub(/\n?<div class="highlight"><pre>/m, '') }.
|
||||||
map { |code| code.sub(/\n?<\/pre><\/div>\n/m, '') }
|
map { |code| code.sub(/\n?<\/pre><\/div>\n/m, '') }
|
||||||
|
|
||||||
|
@ -3,22 +3,22 @@ require File.dirname(__FILE__) + '/helper'
|
|||||||
class RoccoAutomaticCommentChars < Test::Unit::TestCase
|
class RoccoAutomaticCommentChars < Test::Unit::TestCase
|
||||||
def test_basic_detection
|
def test_basic_detection
|
||||||
r = Rocco.new( 'filename.js' ) { "" }
|
r = Rocco.new( 'filename.js' ) { "" }
|
||||||
assert_equal "//", r.options[:comment_chars]
|
assert_equal "//", r.options[:comment_chars][:single]
|
||||||
end
|
end
|
||||||
def test_fallback_language
|
def test_fallback_language
|
||||||
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "js" } ) { "" }
|
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "js" } ) { "" }
|
||||||
assert_equal "//", r.options[:comment_chars]
|
assert_equal "//", r.options[:comment_chars][:single]
|
||||||
end
|
end
|
||||||
def test_fallback_default
|
def test_fallback_default
|
||||||
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever' ) { "" }
|
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever' ) { "" }
|
||||||
assert_equal "#", r.options[:comment_chars], "`:comment_chars` should be `#` when falling back to defaults."
|
assert_equal "#", r.options[:comment_chars][:single], "`:comment_chars` should be `#` when falling back to defaults."
|
||||||
end
|
end
|
||||||
def test_fallback_user
|
def test_fallback_user
|
||||||
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :comment_chars => "user" } ) { "" }
|
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :comment_chars => "user" } ) { "" }
|
||||||
assert_equal "user", r.options[:comment_chars], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
assert_equal "user", r.options[:comment_chars][:single], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
||||||
end
|
end
|
||||||
def test_fallback_user_with_unknown_language
|
def test_fallback_user_with_unknown_language
|
||||||
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "not-a-language", :comment_chars => "user" } ) { "" }
|
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "not-a-language", :comment_chars => "user" } ) { "" }
|
||||||
assert_equal "user", r.options[:comment_chars], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
assert_equal "user", r.options[:comment_chars][:single], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user