Merge pull request #338 from jroes/resize-sha1s
Fit generated SHA1 placeholders to original length.
This commit is contained in:
@@ -5,3 +5,5 @@ notifications:
|
|||||||
disabled: true
|
disabled: true
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get install -y asciidoc
|
- sudo apt-get install -y asciidoc
|
||||||
|
- sudo easy_install docutils
|
||||||
|
|
||||||
+30
-6
@@ -80,17 +80,41 @@ module Gollum
|
|||||||
def extract_tex(data)
|
def extract_tex(data)
|
||||||
data.gsub(/\\\[\s*(.*?)\s*\\\]/m) do
|
data.gsub(/\\\[\s*(.*?)\s*\\\]/m) do
|
||||||
tag = CGI.escapeHTML($1)
|
tag = CGI.escapeHTML($1)
|
||||||
id = Digest::SHA1.hexdigest(tag)
|
id = generate_placeholder(tag, $&.length)
|
||||||
@texmap[id] = [:block, tag]
|
@texmap[id] = [:block, tag]
|
||||||
id
|
id
|
||||||
end.gsub(/\\\(\s*(.*?)\s*\\\)/m) do
|
end.gsub(/\\\(\s*(.*?)\s*\\\)/m) do
|
||||||
tag = CGI.escapeHTML($1)
|
tag = CGI.escapeHTML($1)
|
||||||
id = Digest::SHA1.hexdigest(tag)
|
id = generate_placeholder(tag, $&.length)
|
||||||
@texmap[id] = [:inline, tag]
|
@texmap[id] = [:inline, tag]
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
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
|
# Process all TeX from the texmap and replace the placeholders with the
|
||||||
# final markup.
|
# final markup.
|
||||||
#
|
#
|
||||||
@@ -131,14 +155,14 @@ module Gollum
|
|||||||
parts = $2.split('][')
|
parts = $2.split('][')
|
||||||
parts[0][0..4] = ""
|
parts[0][0..4] = ""
|
||||||
link = "#{parts[1]}|#{parts[0].sub(/\.org/,'')}"
|
link = "#{parts[1]}|#{parts[0].sub(/\.org/,'')}"
|
||||||
id = Digest::SHA1.hexdigest(link)
|
id = generate_placeholder(link, $&.length)
|
||||||
@tagmap[id] = link
|
@tagmap[id] = link
|
||||||
"#{pre}#{id}#{post}"
|
"#{pre}#{id}#{post}"
|
||||||
else
|
else
|
||||||
$&
|
$&
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
id = Digest::SHA1.hexdigest($2)
|
id = generate_placeholder($2, $2.length+4)
|
||||||
@tagmap[id] = $2
|
@tagmap[id] = $2
|
||||||
"#{$1}#{id}#{$3}"
|
"#{$1}#{id}#{$3}"
|
||||||
end
|
end
|
||||||
@@ -385,7 +409,7 @@ module Gollum
|
|||||||
# Returns the placeholder'd String data.
|
# Returns the placeholder'd String data.
|
||||||
def extract_code(data)
|
def extract_code(data)
|
||||||
data.gsub!(/^([ \t]*)``` ?([^\r\n]+)?\r?\n(.+?)\r?\n\1```\r?$/m) do
|
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)
|
cached = check_cache(:code, id)
|
||||||
@codemap[id] = cached ?
|
@codemap[id] = cached ?
|
||||||
{ :output => cached } :
|
{ :output => cached } :
|
||||||
@@ -467,7 +491,7 @@ module Gollum
|
|||||||
# Returns the placeholder'd String data.
|
# Returns the placeholder'd String data.
|
||||||
def extract_wsd(data)
|
def extract_wsd(data)
|
||||||
data.gsub(/^\{\{\{ ?(.+?)\r?\n(.+?)\r?\n\}\}\}\r?$/m) do
|
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 }
|
@wsdmap[id] = { :style => $1, :code => $2 }
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -195,6 +195,36 @@ context "Markup" do
|
|||||||
assert_equal "<p><code>make a link [[home|sweet home]]</code></p>", page.formatted_data
|
assert_equal "<p><code>make a link [[home|sweet home]]</code></p>", page.formatted_data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "table with links" do
|
||||||
|
table = <<EOT
|
||||||
|
+------------------------------+
|
||||||
|
| Proposal | Mentor |
|
||||||
|
+===============+==============+
|
||||||
|
| [[Ray-Bans]] | technoweenie |
|
||||||
|
+------------------------------+
|
||||||
|
EOT
|
||||||
|
expected_table = <<EOT
|
||||||
|
<div class="document">
|
||||||
|
<table border="1" class="docutils">
|
||||||
|
<colgroup>
|
||||||
|
<col width="52%">
|
||||||
|
<col width="48%">
|
||||||
|
</colgroup>
|
||||||
|
<thead valign="bottom"><tr>
|
||||||
|
<th class="head" colspan="2">Proposal | Mentor</th>
|
||||||
|
</tr></thead>
|
||||||
|
<tbody valign="top"><tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<a class="internal absent" href="/Ray-Bans">Ray-Bans</a> | technoweenie</td>
|
||||||
|
</tr></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
EOT
|
||||||
|
@wiki.write_page("Potato", :rest, table, commit_details)
|
||||||
|
page = @wiki.page("Potato")
|
||||||
|
assert_equal expected_table.chomp, page.formatted_data
|
||||||
|
end
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Images
|
# Images
|
||||||
|
|||||||
Reference in New Issue
Block a user