Skip to content

Mark up code inside link text as <code> #660

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 29, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions lib/rdoc/markup/to_html_crossref.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,19 @@ def initialize(options, from_path, context, markup = nil)
# Creates a link to the reference +name+ if the name exists. If +text+ is
# given it is used as the link text, otherwise +name+ is used.

def cross_reference name, text = nil
def cross_reference name, text = nil, code = true
lookup = name

name = name[1..-1] unless @show_hash if name[0, 1] == '#'

name = "#{CGI.unescape $'} at #{$1}" if name =~ /(.*[^#:])@/

text = name unless text
if name =~ /(.*[^#:])@/
text ||= "#{CGI.unescape $'} at <code>#{$1}</code>"
code = false
else
text ||= name
end

link lookup, text
link lookup, text, code
end

##
Expand Down Expand Up @@ -119,13 +122,14 @@ def handle_regexp_RDOCLINK target
def gen_url url, text
return super unless url =~ /\Ardoc-ref:/

cross_reference $', text
name = $'
cross_reference name, text, name == text
end

##
# Creates an HTML link to +name+ with the given +text+.

def link name, text
def link name, text, code = true
if name =~ /(.*[^#:])@/ then
name = $1
label = $'
Expand All @@ -139,6 +143,10 @@ def link name, text
else
path = ref.as_href @from_path

if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
text = "<code>#{text}</code>"
end

if path =~ /#/ then
path << "-label-#{label}"
elsif ref.sections and
Expand Down
46 changes: 23 additions & 23 deletions test/test_rdoc_markup_to_html_crossref.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,58 +14,58 @@ def setup
def test_convert_CROSSREF
result = @to.convert 'C1'

assert_equal para("<a href=\"C1.html\">C1</a>"), result
assert_equal para("<a href=\"C1.html\"><code>C1</code></a>"), result
end

def test_convert_CROSSREF_label
result = @to.convert 'C1@foo'
assert_equal para("<a href=\"C1.html#label-foo\">foo at C1</a>"), result
assert_equal para("<a href=\"C1.html#label-foo\">foo at <code>C1</code></a>"), result

result = @to.convert 'C1#m@foo'
assert_equal para("<a href=\"C1.html#method-i-m-label-foo\">foo at C1#m</a>"),
assert_equal para("<a href=\"C1.html#method-i-m-label-foo\">foo at <code>C1#m</code></a>"),
result
end

def test_convert_CROSSREF_label_period
result = @to.convert 'C1@foo.'
assert_equal para("<a href=\"C1.html#label-foo\">foo at C1</a>."), result
assert_equal para("<a href=\"C1.html#label-foo\">foo at <code>C1</code></a>."), result
end

def test_convert_CROSSREF_label_space
result = @to.convert 'C1@foo+bar'
assert_equal para("<a href=\"C1.html#label-foo+bar\">foo bar at C1</a>"),
assert_equal para("<a href=\"C1.html#label-foo+bar\">foo bar at <code>C1</code></a>"),
result
end

def test_convert_CROSSREF_section
@c1.add_section 'Section'

result = @to.convert 'C1@Section'
assert_equal para("<a href=\"C1.html#Section\">Section at C1</a>"), result
assert_equal para("<a href=\"C1.html#Section\">Section at <code>C1</code></a>"), result
end

def test_convert_CROSSREF_constant
result = @to.convert 'C1::CONST'

assert_equal para("<a href=\"C1.html#CONST\">C1::CONST</a>"), result
assert_equal para("<a href=\"C1.html#CONST\"><code>C1::CONST</code></a>"), result
end

def test_convert_RDOCLINK_rdoc_ref
result = @to.convert 'rdoc-ref:C1'

assert_equal para("<a href=\"C1.html\">C1</a>"), result
assert_equal para("<a href=\"C1.html\"><code>C1</code></a>"), result
end

def test_convert_RDOCLINK_rdoc_ref_method
result = @to.convert 'rdoc-ref:C1#m'

assert_equal para("<a href=\"C1.html#method-i-m\">C1#m</a>"), result
assert_equal para("<a href=\"C1.html#method-i-m\"><code>C1#m</code></a>"), result
end

def test_convert_RDOCLINK_rdoc_ref_method_label
result = @to.convert 'rdoc-ref:C1#m@foo'

assert_equal para("<a href=\"C1.html#method-i-m-label-foo\">foo at C1#m</a>"),
assert_equal para("<a href=\"C1.html#method-i-m-label-foo\">foo at <code>C1#m</code></a>"),
result, 'rdoc-ref:C1#m@foo'
end

Expand All @@ -75,13 +75,13 @@ def test_convert_RDOCLINK_rdoc_ref_method_percent

result = @to.convert 'rdoc-ref:C1#%'

assert_equal para("<a href=\"C1.html#method-i-25\">C1#%</a>"), result
assert_equal para("<a href=\"C1.html#method-i-25\"><code>C1#%</code></a>"), result

m.singleton = true

result = @to.convert 'rdoc-ref:C1::%'

assert_equal para("<a href=\"C1.html#method-c-25\">C1::%</a>"), result
assert_equal para("<a href=\"C1.html#method-c-25\"><code>C1::%</code></a>"), result
end

def test_convert_RDOCLINK_rdoc_ref_method_percent_label
Expand All @@ -90,21 +90,21 @@ def test_convert_RDOCLINK_rdoc_ref_method_percent_label

result = @to.convert 'rdoc-ref:C1#%@f'

assert_equal para("<a href=\"C1.html#method-i-25-label-f\">f at C1#%</a>"),
assert_equal para("<a href=\"C1.html#method-i-25-label-f\">f at <code>C1#%</code></a>"),
result

m.singleton = true

result = @to.convert 'rdoc-ref:C1::%@f'

assert_equal para("<a href=\"C1.html#method-c-25-label-f\">f at C1::%</a>"),
assert_equal para("<a href=\"C1.html#method-c-25-label-f\">f at <code>C1::%</code></a>"),
result
end

def test_convert_RDOCLINK_rdoc_ref_label
result = @to.convert 'rdoc-ref:C1@foo'

assert_equal para("<a href=\"C1.html#label-foo\">foo at C1</a>"), result,
assert_equal para("<a href=\"C1.html#label-foo\">foo at <code>C1</code></a>"), result,
'rdoc-ref:C1@foo'
end

Expand All @@ -117,18 +117,18 @@ def test_gen_url
end

def test_handle_regexp_CROSSREF
assert_equal "<a href=\"C2/C3.html\">C2::C3</a>", REGEXP_HANDLING('C2::C3')
assert_equal "<a href=\"C2/C3.html\"><code>C2::C3</code></a>", REGEXP_HANDLING('C2::C3')
end

def test_handle_regexp_CROSSREF_label
assert_equal "<a href=\"C1.html#method-i-m-label-foo\">foo at C1#m</a>",
assert_equal "<a href=\"C1.html#method-i-m-label-foo\">foo at <code>C1#m</code></a>",
REGEXP_HANDLING('C1#m@foo')
end

def test_handle_regexp_CROSSREF_show_hash_false
@to.show_hash = false

assert_equal "<a href=\"C1.html#method-i-m\">m</a>",
assert_equal "<a href=\"C1.html#method-i-m\"><code>m</code></a>",
REGEXP_HANDLING('#m')
end

Expand All @@ -140,11 +140,11 @@ def test_handle_regexp_HYPERLINK_rdoc

link = @to.handle_regexp_HYPERLINK hyper 'C2::C3'

assert_equal '<a href="C2/C3.html">C2::C3</a>', link
assert_equal '<a href="C2/C3.html"><code>C2::C3</code></a>', link

link = @to.handle_regexp_HYPERLINK hyper 'C4'

assert_equal '<a href="C4.html">C4</a>', link
assert_equal '<a href="C4.html"><code>C4</code></a>', link

link = @to.handle_regexp_HYPERLINK hyper 'README.txt'

Expand Down Expand Up @@ -200,16 +200,16 @@ def test_to_html_CROSSREF_email_hyperlink_all
def test_link
assert_equal 'n', @to.link('n', 'n')

assert_equal '<a href="C1.html#method-c-m">m</a>', @to.link('m', 'm')
assert_equal '<a href="C1.html#method-c-m"><code>m</code></a>', @to.link('m', 'm')
end

def test_link_for_method_traverse
@to = RDoc::Markup::ToHtmlCrossref.new @options, 'C2.html', @c9
assert_equal '<a href="C9/A.html#method-i-foo">C9::B#foo</a>', @to.link('C9::B#foo', 'C9::B#foo')
assert_equal '<a href="C9/A.html#method-i-foo"><code>C9::B#foo</code></a>', @to.link('C9::B#foo', 'C9::B#foo')
end

def test_link_class_method_full
assert_equal '<a href="Parent.html#method-c-m">Parent::m</a>',
assert_equal '<a href="Parent.html#method-c-m"><code>Parent::m</code></a>',
@to.link('Parent::m', 'Parent::m')
end

Expand Down