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



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

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



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

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


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

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



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

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

#inline_anchor_xref(node) ⇒ Object



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

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|\.adoc)(#.*$)}, "\\2")
  noko do |xml|
    xml.xref **attr_code(target: t, type: f) do |x|
      x << c
    end
  end.join
end

#inline_break(node) ⇒ Object



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

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

#inline_callout(node) ⇒ Object



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

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

#inline_footnote(node) ⇒ Object



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

def inline_footnote(node)
  @fn_number ||= 0
  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



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/asciidoctor/standoc/inline.rb', line 123

def inline_quoted(node)
  noko do |xml|
    case node.type
    when :emphasis then xml.em { |s| s << node.text }
    when :strong then xml.strong { |s| s << node.text }
    when :monospaced then xml.tt { |s| s << node.text }
    when :double then xml << "\"#{node.text}\""
    when :single then xml << "'#{node.text}'"
    when :superscript then xml.sup { |s| s << node.text }
    when :subscript then xml.sub { |s| s << node.text }
    when :asciimath then stem_parse(node.text, xml, :asciimath)
    when :latexmath then stem_parse(node.text, xml, :latexmath)
    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 { |s| s << node.text }
      when "smallcap" then xml.smallcap { |s| s << node.text }
      when "keyword" then xml.keyword { |s| s << node.text }
      else
        xml << node.text
      end
    end
  end.join
end

#page_break(_node) ⇒ Object



88
89
90
# File 'lib/asciidoctor/standoc/inline.rb', line 88

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

#refid?(x) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#stem_parse(text, xml, style) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/asciidoctor/standoc/inline.rb', line 103

def stem_parse(text, xml, style)
  if /&lt;([^:>&]+:)?math(\s+[^>&]+)?&gt; |
    <([^:>&]+:)?math(\s+[^>&]+)?>/x.match text
    math = xml_encode(text)
    xml.stem math, **{ type: "MathML" }
  elsif style == :latexmath
    latexmlmath_input = Unicode2LaTeX::unicode2latex(text).gsub(/'/, '\\').gsub(/\n/, " ")
    latex = IO.popen('latexmlmath --preload=amsmath  -- -', 'r+') do |io|
      io.write(latexmlmath_input)
      io.close_write
      io.read
    end
    xml.stem **{ type: "MathML" } do |s|
      s << latex.sub(/<\?[^>]+>/, "")
    end
  else
    xml.stem text, **{ type: "AsciiMath" }
  end
end

#thematic_break(_node) ⇒ Object



92
93
94
# File 'lib/asciidoctor/standoc/inline.rb', line 92

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

#xml_encode(text) ⇒ Object



96
97
98
99
100
101
# File 'lib/asciidoctor/standoc/inline.rb', line 96

def xml_encode(text)
  HTMLEntities.new.encode(text, :basic, :hexadecimal).
      gsub(/&amp;gt;/, ">").gsub(/\&amp;lt;/, "<").gsub(/&amp;amp;/, "&").
      gsub(/&gt;/, ">").gsub(/&lt;/, "<").gsub(/&amp;/, "&").
      gsub(/&quot;/, '"').gsub(/&#xa;/, "\n")
end