Module: Asciidoctor::Standoc::Inline

Included in:
Converter
Defined in:
lib/asciidoctor/standoc/inline.rb

Instance Method Summary collapse

Instance Method Details

#inline_anchor(node) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/asciidoctor/standoc/inline.rb', line 11

def inline_anchor(node)
  case node.type
  when :ref
    inline_anchor_ref node
  when :xref
    inline_anchor_xref node
  when :link
    inline_anchor_link node
  when :bibref
    inline_anchor_bibref node
  end
end

#inline_anchor_bibref(node) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/asciidoctor/standoc/inline.rb', line 53

def inline_anchor_bibref(node)
  eref_contents = node.target == node.text ? nil : node.text
  eref_attributes = { id: node.target }
  @refids << node.target
  noko do |xml|
    xml.ref **attr_code(eref_attributes) do |r|
      r << eref_contents
    end
  end.join
end


42
43
44
45
46
47
48
49
50
51
# File 'lib/asciidoctor/standoc/inline.rb', line 42

def inline_anchor_link(node)
  contents = node.text
  contents = "" if node.target.gsub(%r{^mailto:}, "") == node.text
  attributes = { "target": node.target }
  noko do |xml|
    xml.link **attr_code(attributes) do |l|
      l << contents
    end
  end.join
end

#inline_anchor_ref(node) ⇒ Object



24
25
26
27
28
# File 'lib/asciidoctor/standoc/inline.rb', line 24

def inline_anchor_ref(node)
  noko do |xml|
    xml.bookmark nil, **attr_code(id: node.id)
  end.join
end

#inline_anchor_xref(node) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/asciidoctor/standoc/inline.rb', line 30

def inline_anchor_xref(node)
  matched = /^fn(:\s*(?<text>.*))?$/.match node.text
  f = matched.nil? ? "inline" : "footnote"
  c = matched.nil? ? node.text : matched[:text]
  t = node.target.gsub(/^#/, "").gsub(%r{(.)(\.xml)?#.*$}, "\\1")
  noko do |xml|
    xml.xref **attr_code(target: t, type: f) do |x|
      x << c
    end
  end.join
end

#inline_break(node) ⇒ Object



79
80
81
82
83
84
# File 'lib/asciidoctor/standoc/inline.rb', line 79

def inline_break(node)
  noko do |xml|
    xml << node.text
    xml.br
  end.join("\n")
end

#inline_callout(node) ⇒ Object



64
65
66
67
68
# File 'lib/asciidoctor/standoc/inline.rb', line 64

def inline_callout(node)
  noko do |xml|
    xml.callout node.text
  end.join
end

#inline_footnote(node) ⇒ Object



70
71
72
73
74
75
76
77
# File 'lib/asciidoctor/standoc/inline.rb', line 70

def inline_footnote(node)
  noko do |xml|
    @fn_number += 1
    xml.fn **{ reference: @fn_number } do |fn|
      fn.p { |p| p << node.text }
    end
  end.join("\n")
end

#inline_quoted(node) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/asciidoctor/standoc/inline.rb', line 106

def inline_quoted(node)
  noko do |xml|
    case node.type
    when :emphasis then xml.em node.text
    when :strong then xml.strong node.text
    when :monospaced then xml.tt node.text
    when :double then xml << "\"#{node.text}\""
    when :single then xml << "'#{node.text}'"
    when :superscript then xml.sup node.text
    when :subscript then xml.sub node.text
    when :asciimath then stem_parse(node.text, xml)
    else
      case node.role
        # the following three are legacy, they are now handled by macros
      when "alt" then xml.admitted { |a| a << node.text }
      when "deprecated" then xml.deprecates { |a| a << node.text }
      when "domain" then xml.domain { |a| a << node.text }

      when "strike" then xml.strike node.text
      when "smallcap" then xml.smallcap node.text
      else
        xml << node.text
      end
    end
  end.join
end

#page_break(_node) ⇒ Object



86
87
88
# File 'lib/asciidoctor/standoc/inline.rb', line 86

def page_break(_node)
  noko { |xml| xml.pagebreak }.join("\n")
end

#refid?(x) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
# File 'lib/asciidoctor/standoc/inline.rb', line 7

def refid?(x)
  @refids.include? x
end

#stem_parse(text, xml) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/asciidoctor/standoc/inline.rb', line 94

def stem_parse(text, xml)
  if /&lt;([^:>&]+:)?math(\s+[^>&]+)?&gt; |
    <([^:>&]+:)?math(\s+[^>&]+)?>/x.match text
    math = HTMLEntities.new.encode(text, :basic, :hexadecimal).
      gsub(/&amp;gt;/, ">").gsub(/\&amp;lt;/, "<").gsub(/&amp;amp;/, "&").
      gsub(/&gt;/, ">").gsub(/&lt;/, "<").gsub(/&amp;/, "&")
    xml.stem math, **{ type: "MathML" }
  else
    xml.stem text, **{ type: "AsciiMath" }
  end
end

#thematic_break(_node) ⇒ Object



90
91
92
# File 'lib/asciidoctor/standoc/inline.rb', line 90

def thematic_break(_node)
  noko { |xml| xml.hr }.join("\n")
end