Merge pull request #338 from jroes/resize-sha1s

Fit generated SHA1 placeholders to original length.
This commit is contained in:
Corey Donohoe
2012-05-16 12:15:40 -07:00
3 changed files with 62 additions and 6 deletions
+30 -6
View File
@@ -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