@@ -76,7 +76,7 @@ module Gollum
|
|||||||
doc,toc = process_headers(doc)
|
doc,toc = process_headers(doc)
|
||||||
@toc = @sub_page ? ( @parent_page ? @parent_page.toc_data : "[[_TOC_]]" ) : toc
|
@toc = @sub_page ? ( @parent_page ? @parent_page.toc_data : "[[_TOC_]]" ) : toc
|
||||||
yield doc if block_given?
|
yield doc if block_given?
|
||||||
data = doc.to_html
|
data = doc.to_xhtml
|
||||||
|
|
||||||
data = process_toc_tags(data)
|
data = process_toc_tags(data)
|
||||||
data = process_tex(data)
|
data = process_tex(data)
|
||||||
@@ -95,16 +95,12 @@ module Gollum
|
|||||||
def process_headers(doc)
|
def process_headers(doc)
|
||||||
toc = nil
|
toc = nil
|
||||||
doc.css('h1,h2,h3,h4,h5,h6').each do |h|
|
doc.css('h1,h2,h3,h4,h5,h6').each do |h|
|
||||||
id = encodeURIComponent(h.content.gsub(' ','-'))
|
h_name = h.content.gsub(' ','-')
|
||||||
|
|
||||||
level = h.name.gsub(/[hH]/,'').to_i
|
level = h.name.gsub(/[hH]/,'').to_i
|
||||||
|
|
||||||
# Add anchors
|
# Add anchors
|
||||||
anchor = Nokogiri::XML::Node.new('a', doc)
|
h.add_child(%Q{<a class="anchor" id="#{h_name}" href="##{h_name}"></a>})
|
||||||
anchor['class'] = 'anchor'
|
|
||||||
anchor['id'] = id
|
|
||||||
# % -> %25 so anchors work on Firefox. See issue #475
|
|
||||||
anchor['href'] = '#' + id.gsub('%', '%25')
|
|
||||||
h.add_child(anchor)
|
|
||||||
|
|
||||||
# Build TOC
|
# Build TOC
|
||||||
toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>')
|
toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>')
|
||||||
@@ -122,7 +118,7 @@ module Gollum
|
|||||||
end
|
end
|
||||||
node = Nokogiri::XML::Node.new('li', doc)
|
node = Nokogiri::XML::Node.new('li', doc)
|
||||||
# % -> %25 so anchors work on Firefox. See issue #475
|
# % -> %25 so anchors work on Firefox. See issue #475
|
||||||
node.add_child(%Q{<a href="##{id.gsub("%", "%25")}">#{h.content}</a>})
|
node.add_child(%Q{<a href="##{h_name}">#{h.content}</a>})
|
||||||
tail.add_child(node)
|
tail.add_child(node)
|
||||||
end
|
end
|
||||||
toc = toc.to_xhtml if toc != nil
|
toc = toc.to_xhtml if toc != nil
|
||||||
|
|||||||
+27
-4
@@ -38,10 +38,33 @@ context "Unicode Support" do
|
|||||||
anchors = h1 / :a
|
anchors = h1 / :a
|
||||||
assert_equal 1, h1s.size
|
assert_equal 1, h1s.size
|
||||||
assert_equal 1, anchors.size
|
assert_equal 1, anchors.size
|
||||||
assert_equal '#%25ED%2595%259C%25EA%25B8%2580', anchors[0]['href']
|
assert_equal '#한글', anchors[0]['href']
|
||||||
assert_equal '%ED%95%9C%EA%B8%80', anchors[0]['id']
|
assert_equal '한글', anchors[0]['id']
|
||||||
assert_equal 'anchor', anchors[0]['class']
|
assert_equal 'anchor', anchors[0]['class']
|
||||||
assert_equal '', anchors[0].text
|
assert_equal '', anchors[0].text
|
||||||
|
end
|
||||||
|
|
||||||
|
test "create and read non-latin page with anchor 2" do
|
||||||
|
@wiki.write_page("test", :markdown, "# La faune d'Édiacara")
|
||||||
|
|
||||||
|
page = @wiki.page("test")
|
||||||
|
assert_equal Gollum::Page, page.class
|
||||||
|
assert_equal "# La faune d'Édiacara", utf8(page.raw_data)
|
||||||
|
|
||||||
|
# markup.rb
|
||||||
|
# #简介
|
||||||
|
# href.gsub('%', '%25') so the anchor works in Firefox.
|
||||||
|
# <a href="#%25ED%2595%259C%25EA%25B8%2580" id="%ED%95%9C%EA%B8%80" class="anchor"></a>
|
||||||
|
doc = Nokogiri::HTML page.formatted_data
|
||||||
|
h1s = doc / :h1
|
||||||
|
h1 = h1s.first
|
||||||
|
anchors = h1 / :a
|
||||||
|
assert_equal 1, h1s.size
|
||||||
|
assert_equal 1, anchors.size
|
||||||
|
assert_equal %q(#La-faune-d'Édiacara), anchors[0]['href']
|
||||||
|
assert_equal %q(La-faune-d'Édiacara), anchors[0]['id']
|
||||||
|
assert_equal 'anchor', anchors[0]['class']
|
||||||
|
assert_equal '', anchors[0].text
|
||||||
end
|
end
|
||||||
|
|
||||||
test "unicode with existing format rules" do
|
test "unicode with existing format rules" do
|
||||||
|
|||||||
Reference in New Issue
Block a user