diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 3bac70d1..31e19cd6 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -80,17 +80,41 @@ module Gollum def extract_tex(data) data.gsub(/\\\[\s*(.*?)\s*\\\]/m) do tag = CGI.escapeHTML($1) - id = Digest::SHA1.hexdigest(tag) + id = generate_placeholder(tag, $&.length) @texmap[id] = [:block, tag] id end.gsub(/\\\(\s*(.*?)\s*\\\)/m) do tag = CGI.escapeHTML($1) - id = Digest::SHA1.hexdigest(tag) + id = generate_placeholder(tag, $&.length) @texmap[id] = [:inline, tag] id end end + # Fit `id` into `len` by adding trailing spaces or truncating. + # + # id - The String identifier to be fit. + # len - The Integer target length. + # + # Returns the newly-fit String. + def fit_width(id, len) + if id.length < len + id.ljust(len) + else + id[0...len] + end + end + + # Generate a placeholder of a particular length. + # + # tag - The original String tag to be processed later. + # length - The Integer length the placeholder should be. + # + # Returns the new placeholder String. + def generate_placeholder(tag, length) + fit_width(Digest::SHA1.hexdigest(tag), length) + end + # Process all TeX from the texmap and replace the placeholders with the # final markup. # @@ -131,14 +155,14 @@ module Gollum parts = $2.split('][') parts[0][0..4] = "" link = "#{parts[1]}|#{parts[0].sub(/\.org/,'')}" - id = Digest::SHA1.hexdigest(link) + id = generate_placeholder(link, $&.length) @tagmap[id] = link "#{pre}#{id}#{post}" else $& end else - id = Digest::SHA1.hexdigest($2) + id = generate_placeholder($2, $2.length+4) @tagmap[id] = $2 "#{$1}#{id}#{$3}" end @@ -385,7 +409,7 @@ module Gollum # Returns the placeholder'd String data. def extract_code(data) data.gsub!(/^([ \t]*)``` ?([^\r\n]+)?\r?\n(.+?)\r?\n\1```\r?$/m) do - id = Digest::SHA1.hexdigest("#{$2}.#{$3}") + id = generate_placeholder("#{$2}.#{$3}", [$2, $3].join.length) cached = check_cache(:code, id) @codemap[id] = cached ? { :output => cached } : @@ -467,7 +491,7 @@ module Gollum # Returns the placeholder'd String data. def extract_wsd(data) data.gsub(/^\{\{\{ ?(.+?)\r?\n(.+?)\r?\n\}\}\}\r?$/m) do - id = Digest::SHA1.hexdigest($2) + id = generate_placeholder($2, $&.length) @wsdmap[id] = { :style => $1, :code => $2 } id end diff --git a/test/test_markup.rb b/test/test_markup.rb index b14e597e..7be6d915 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -195,6 +195,36 @@ context "Markup" do assert_equal "

make a link [[home|sweet home]]

", page.formatted_data end + test "table with links" do + table = < + ++++ + + + + + + +
Proposal | Mentor
+Ray-Bans | technoweenie
+ +EOT + @wiki.write_page("Potato", :rest, table, commit_details) + page = @wiki.page("Potato") + assert_equal expected_table.chomp, page.formatted_data + end + ######################################################################### # # Images