org-ruby 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. data/History.txt +12 -0
  2. data/Rakefile +3 -5
  3. data/announcement.txt +24 -0
  4. data/doc/History_txt.html +272 -0
  5. data/doc/OrgRuby.html +149 -0
  6. data/doc/Orgmode.html +960 -0
  7. data/doc/Orgmode/Headline.html +522 -0
  8. data/doc/Orgmode/HtmlOutputBuffer.html +480 -0
  9. data/doc/Orgmode/Line.html +1251 -0
  10. data/doc/Orgmode/OutputBuffer.html +810 -0
  11. data/doc/Orgmode/Parser.html +852 -0
  12. data/doc/Orgmode/RegexpHelper.html +639 -0
  13. data/doc/Orgmode/TextileOutputBuffer.html +456 -0
  14. data/doc/README_rdoc.html +178 -0
  15. data/doc/announcement_txt.html +142 -0
  16. data/doc/bin/org-ruby.html +54 -0
  17. data/doc/created.rid +15 -0
  18. data/doc/images/brick.png +0 -0
  19. data/doc/images/brick_link.png +0 -0
  20. data/doc/images/bug.png +0 -0
  21. data/doc/images/bullet_black.png +0 -0
  22. data/doc/images/bullet_toggle_minus.png +0 -0
  23. data/doc/images/bullet_toggle_plus.png +0 -0
  24. data/doc/images/date.png +0 -0
  25. data/doc/images/find.png +0 -0
  26. data/doc/images/loadingAnimation.gif +0 -0
  27. data/doc/images/macFFBgHack.png +0 -0
  28. data/doc/images/package.png +0 -0
  29. data/doc/images/page_green.png +0 -0
  30. data/doc/images/page_white_text.png +0 -0
  31. data/doc/images/page_white_width.png +0 -0
  32. data/doc/images/plugin.png +0 -0
  33. data/doc/images/ruby.png +0 -0
  34. data/doc/images/tag_green.png +0 -0
  35. data/doc/images/wrench.png +0 -0
  36. data/doc/images/wrench_orange.png +0 -0
  37. data/doc/images/zoom.png +0 -0
  38. data/doc/index.html +306 -0
  39. data/doc/js/darkfish.js +116 -0
  40. data/doc/js/jquery.js +32 -0
  41. data/doc/js/quicksearch.js +114 -0
  42. data/doc/js/thickbox-compressed.js +10 -0
  43. data/doc/lib/org-ruby/headline_rb.html +52 -0
  44. data/doc/lib/org-ruby/html_output_buffer_rb.html +52 -0
  45. data/doc/lib/org-ruby/html_symbol_replace_rb.html +54 -0
  46. data/doc/lib/org-ruby/line_rb.html +52 -0
  47. data/doc/lib/org-ruby/output_buffer_rb.html +54 -0
  48. data/doc/lib/org-ruby/parser_rb.html +56 -0
  49. data/doc/lib/org-ruby/regexp_helper_rb.html +54 -0
  50. data/doc/lib/org-ruby/textile_output_buffer_rb.html +54 -0
  51. data/doc/lib/org-ruby/textile_symbol_replace_rb.html +54 -0
  52. data/doc/lib/org-ruby_rb.html +52 -0
  53. data/doc/rdoc.css +763 -0
  54. data/lib/org-ruby.rb +1 -1
  55. data/lib/org-ruby/headline.rb +2 -2
  56. data/lib/org-ruby/html_output_buffer.rb +62 -5
  57. data/lib/org-ruby/html_symbol_replace.rb +345 -0
  58. data/lib/org-ruby/line.rb +20 -9
  59. data/lib/org-ruby/output_buffer.rb +8 -1
  60. data/lib/org-ruby/parser.rb +47 -19
  61. data/lib/org-ruby/regexp_helper.rb +16 -0
  62. data/lib/org-ruby/textile_output_buffer.rb +37 -2
  63. data/lib/org-ruby/textile_symbol_replace.rb +345 -0
  64. data/org-ruby.gemspec +41 -0
  65. data/spec/headline_spec.rb +5 -0
  66. data/spec/html_examples/advanced-code.html +10 -0
  67. data/spec/html_examples/advanced-code.org +13 -0
  68. data/spec/html_examples/blockcomment.html +3 -0
  69. data/spec/html_examples/blockcomment.org +15 -0
  70. data/spec/html_examples/center.html +6 -0
  71. data/spec/html_examples/center.org +7 -0
  72. data/spec/html_examples/deflist.html +6 -0
  73. data/spec/html_examples/deflist.org +6 -0
  74. data/spec/html_examples/footnotes.html +10 -0
  75. data/spec/html_examples/footnotes.org +7 -0
  76. data/spec/html_examples/inline-formatting.html +8 -0
  77. data/spec/html_examples/inline-formatting.org +10 -0
  78. data/spec/html_examples/inline-images.html +1 -1
  79. data/spec/html_examples/lists.html +4 -0
  80. data/spec/html_examples/lists.org +11 -0
  81. data/spec/html_examples/subsupscript-nil.html +3 -0
  82. data/spec/html_examples/subsupscript-nil.org +6 -0
  83. data/spec/html_examples/subsupscript.html +3 -0
  84. data/spec/html_examples/subsupscript.org +5 -0
  85. data/spec/html_examples/tables.html +15 -0
  86. data/spec/html_examples/tables.org +24 -0
  87. data/spec/line_spec.rb +17 -13
  88. data/spec/spec_helper.rb +1 -2
  89. data/spec/textile_examples/center.org +7 -0
  90. data/spec/textile_examples/center.textile +6 -0
  91. data/spec/textile_examples/footnotes.org +7 -0
  92. data/spec/textile_examples/footnotes.textile +8 -0
  93. data/spec/textile_examples/tables.org +24 -0
  94. data/spec/textile_examples/tables.textile +17 -0
  95. data/util/gen-special-replace.el +37 -0
  96. metadata +111 -19
  97. data/.gitignore +0 -1
data/lib/org-ruby/line.rb CHANGED
@@ -36,7 +36,9 @@ module Orgmode
36
36
 
37
37
  # Tests if a line is a comment.
38
38
  def comment?
39
- check_assignment_or_regexp(:comment, /^\s*#/)
39
+ return @assigned_paragraph_type == :comment if @assigned_paragraph_type
40
+ return block_type.casecmp("COMMENT") if begin_block? or end_block?
41
+ return @line =~ /^#/
40
42
  end
41
43
 
42
44
  # Tests if a line contains metadata instead of actual content.
@@ -45,7 +47,7 @@ module Orgmode
45
47
  end
46
48
 
47
49
  def nonprinting?
48
- comment? || metadata?
50
+ comment? || metadata? || begin_block? || end_block?
49
51
  end
50
52
 
51
53
  def blank?
@@ -53,10 +55,10 @@ module Orgmode
53
55
  end
54
56
 
55
57
  def plain_list?
56
- ordered_list? or unordered_list?
58
+ ordered_list? or unordered_list? or definition_list?
57
59
  end
58
60
 
59
- UnorderedListRegexp = /^\s*(-|\+)\s*/
61
+ UnorderedListRegexp = /^\s*(-|\+)\s+/
60
62
 
61
63
  def unordered_list?
62
64
  check_assignment_or_regexp(:unordered_list, UnorderedListRegexp)
@@ -66,7 +68,13 @@ module Orgmode
66
68
  @line.sub(UnorderedListRegexp, "")
67
69
  end
68
70
 
69
- OrderedListRegexp = /^\s*\d+(\.|\))\s*/
71
+ DefinitionListRegexp = /^\s*(-|\+)\s*(.*?)::/
72
+
73
+ def definition_list?
74
+ check_assignment_or_regexp(:definition_list, DefinitionListRegexp)
75
+ end
76
+
77
+ OrderedListRegexp = /^\s*\d+(\.|\))\s+/
70
78
 
71
79
  def ordered_list?
72
80
  check_assignment_or_regexp(:ordered_list, OrderedListRegexp)
@@ -112,14 +120,14 @@ module Orgmode
112
120
  table_row? or table_separator? or table_header?
113
121
  end
114
122
 
115
- BlockRegexp = /^\s*#\+(BEGIN|END)_(\w*)/
123
+ BlockRegexp = /^\s*#\+(BEGIN|END)_(\w*)/i
116
124
 
117
125
  def begin_block?
118
- @line =~ BlockRegexp && $1 == "BEGIN"
126
+ @line =~ BlockRegexp && $1 =~ /BEGIN/i
119
127
  end
120
128
 
121
129
  def end_block?
122
- @line =~ BlockRegexp && $1 == "END"
130
+ @line =~ BlockRegexp && $1 =~ /END/i
123
131
  end
124
132
 
125
133
  def block_type
@@ -127,7 +135,7 @@ module Orgmode
127
135
  end
128
136
 
129
137
  def code_block_type?
130
- block_type =~ /^(EXAMPLE|SRC)$/
138
+ block_type =~ /^(EXAMPLE|SRC)$/i
131
139
  end
132
140
 
133
141
  InlineExampleRegexp = /^\s*:/
@@ -162,9 +170,12 @@ module Orgmode
162
170
  # Determines the paragraph type of the current line.
163
171
  def paragraph_type
164
172
  return :blank if blank?
173
+ return :definition_list if definition_list? # order is important! A definition_list is also an unordered_list!
165
174
  return :ordered_list if ordered_list?
166
175
  return :unordered_list if unordered_list?
167
176
  return :metadata if metadata?
177
+ return :begin_block if begin_block?
178
+ return :end_block if end_block?
168
179
  return :comment if comment?
169
180
  return :table_separator if table_separator?
170
181
  return :table_row if table_row?
@@ -54,7 +54,7 @@ module Orgmode
54
54
  push_mode(:normal)
55
55
  end
56
56
 
57
- Modes = [:normal, :ordered_list, :unordered_list, :blockquote, :src, :example, :table, :inline_example]
57
+ Modes = [:normal, :ordered_list, :unordered_list, :definition_list, :blockquote, :src, :example, :table, :inline_example, :center]
58
58
 
59
59
  def current_mode
60
60
  @mode_stack.last
@@ -187,12 +187,17 @@ module Orgmode
187
187
  else
188
188
  @list_indent_stack = []
189
189
  while ((current_mode == :ordered_list) or
190
+ (current_mode == :definition_list) or
190
191
  (current_mode == :unordered_list))
191
192
  pop_mode
192
193
  end
193
194
  end
194
195
  end
195
196
 
197
+ def output_footnotes!
198
+ return false
199
+ end
200
+
196
201
  # Tests if the current line should be accumulated in the current
197
202
  # output buffer. (Extraneous line breaks in the orgmode buffer
198
203
  # are removed by accumulating lines in the output buffer without
@@ -208,6 +213,7 @@ module Orgmode
208
213
  # Currently only "paragraphs" get accumulated with previous output.
209
214
  return false unless line.paragraph_type == :paragraph
210
215
  if ((@output_type == :ordered_list) or
216
+ (@output_type == :definition_list) or
211
217
  (@output_type == :unordered_list)) then
212
218
 
213
219
  # If the previous output type was a list item, then we only put a paragraph in it
@@ -220,6 +226,7 @@ module Orgmode
220
226
  return false unless
221
227
  ((@output_type == :paragraph) or
222
228
  (@output_type == :ordered_list) or
229
+ (@output_type == :definition_list) or
223
230
  (@output_type == :unordered_list))
224
231
  true
225
232
  end
@@ -53,6 +53,11 @@ module Orgmode
53
53
  "t" == @options["todo"]
54
54
  end
55
55
 
56
+ # Returns true if we are to export footnotes
57
+ def export_footnotes?
58
+ "t" == @options["f"]
59
+ end
60
+
56
61
  # Returns true if we are to export heading numbers.
57
62
  def export_heading_number?
58
63
  "t" == @options["num"]
@@ -69,9 +74,15 @@ module Orgmode
69
74
  "nil" != @options["|"]
70
75
  end
71
76
 
77
+ # Should we export sub/superscripts? (_{foo}/^{foo})
78
+ # only {} mode is currently supported.
79
+ def use_sub_superscripts?
80
+ @options["^"] != "nil"
81
+ end
82
+
72
83
  # I can construct a parser object either with an array of lines
73
84
  # or with a single string that I will split along \n boundaries.
74
- def initialize(lines)
85
+ def initialize(lines, offset=0)
75
86
  if lines.is_a? Array then
76
87
  @lines = lines
77
88
  elsif lines.is_a? String then
@@ -88,12 +99,13 @@ module Orgmode
88
99
  @options = { }
89
100
  mode = :normal
90
101
  previous_line = nil
102
+ table_header_set = false
91
103
  @lines.each do |line|
92
104
  case mode
93
105
  when :normal
94
106
 
95
107
  if (Headline.headline? line) then
96
- @current_headline = Headline.new line, self
108
+ @current_headline = Headline.new line, self, offset
97
109
  @headlines << @current_headline
98
110
  else
99
111
  line = Line.new line, self
@@ -102,9 +114,14 @@ module Orgmode
102
114
  store_in_buffer_setting key, value
103
115
  end
104
116
  if line.table_separator? then
105
- previous_line.assigned_paragraph_type = :table_header if previous_line and previous_line.paragraph_type == :table_row
117
+ if previous_line and previous_line.paragraph_type == :table_row and !table_header_set
118
+ previous_line.assigned_paragraph_type = :table_header
119
+ table_header_set = true
120
+ end
106
121
  end
122
+ table_header_set = false if !line.table?
107
123
  mode = :code if line.begin_block? and line.block_type == "EXAMPLE"
124
+ mode = :block_comment if line.begin_block? and line.block_type == "COMMENT"
108
125
  if (@current_headline) then
109
126
  @current_headline.body_lines << line
110
127
  else
@@ -112,6 +129,14 @@ module Orgmode
112
129
  end
113
130
  end
114
131
 
132
+ when :block_comment
133
+ line = Line.new line, self
134
+ if line.end_block? and line.block_type == "COMMENT"
135
+ mode = :normal
136
+ else
137
+ line.assigned_paragraph_type = :comment
138
+ end
139
+
115
140
  when :code
116
141
 
117
142
  # As long as we stay in code mode, force lines to be either blank or paragraphs.
@@ -154,7 +179,9 @@ module Orgmode
154
179
  export_options = {
155
180
  :decorate_title => true,
156
181
  :export_heading_number => export_heading_number?,
157
- :export_todo => export_todo?
182
+ :export_todo => export_todo?,
183
+ :use_sub_superscripts => use_sub_superscripts?,
184
+ :export_footnotes => export_footnotes?
158
185
  }
159
186
  export_options[:skip_tables] = true if not export_tables?
160
187
  output = ""
@@ -199,29 +226,29 @@ module Orgmode
199
226
  output_buffer.prepare(line)
200
227
 
201
228
  case line.paragraph_type
202
- when :metadata, :table_separator, :blank
229
+ when :metadata, :table_separator, :blank, :comment
203
230
 
204
231
  output_buffer << line.line if output_buffer.preserve_whitespace?
205
232
 
206
- when :comment
207
-
208
- if line.begin_block?
209
- output_buffer.push_mode(:blockquote) if line.block_type == "QUOTE"
210
- output_buffer.push_mode(:src) if line.block_type == "SRC"
211
- output_buffer.push_mode(:example) if line.block_type == "EXAMPLE"
212
- elsif line.end_block?
213
- output_buffer.pop_mode(:blockquote) if line.block_type == "QUOTE"
214
- output_buffer.pop_mode(:src) if line.block_type == "SRC"
215
- output_buffer.pop_mode(:example) if line.block_type == "EXAMPLE"
216
- else
217
- output_buffer << line.line if output_buffer.preserve_whitespace?
218
- end
233
+ when :begin_block
234
+
235
+ output_buffer.push_mode(:blockquote) if line.block_type.casecmp("QUOTE") == 0
236
+ output_buffer.push_mode(:src) if line.block_type.casecmp("SRC") == 0
237
+ output_buffer.push_mode(:example) if line.block_type.casecmp("EXAMPLE") == 0
238
+ output_buffer.push_mode(:center) if line.block_type.casecmp("CENTER") == 0
239
+
240
+ when :end_block
241
+
242
+ output_buffer.pop_mode(:blockquote) if line.block_type.casecmp("QUOTE") == 0
243
+ output_buffer.pop_mode(:src) if line.block_type.casecmp("SRC") == 0
244
+ output_buffer.pop_mode(:example) if line.block_type.casecmp("EXAMPLE") == 0
245
+ output_buffer.pop_mode(:center) if line.block_type.casecmp("CENTER") == 0
219
246
 
220
247
  when :table_row, :table_header
221
248
 
222
249
  output_buffer << line.line.lstrip
223
250
 
224
- when :unordered_list, :ordered_list
251
+ when :unordered_list, :ordered_list, :definition_list
225
252
 
226
253
  output_buffer << line.output_text << " "
227
254
 
@@ -240,6 +267,7 @@ module Orgmode
240
267
  end
241
268
  output_buffer.flush!
242
269
  output_buffer.pop_mode until output_buffer.current_mode == :normal
270
+ output_buffer.output_footnotes!
243
271
  output_buffer.output
244
272
  end
245
273
 
@@ -61,6 +61,8 @@ module Orgmode
61
61
  @logger.level = Logger::WARN
62
62
  build_org_emphasis_regexp
63
63
  build_org_link_regexp
64
+ @org_subp_regexp = /([_^])\{(.*?)\}/
65
+ @org_footnote_regexp = /\[fn:(.+?)(:(.*?))?\]/
64
66
  end
65
67
 
66
68
  # Finds all emphasis matches in a string.
@@ -99,6 +101,20 @@ module Orgmode
99
101
  end
100
102
  end
101
103
 
104
+ # rewrite subscript and superscript (_{foo} and ^{bar})
105
+ def rewrite_subp(str) # :yields: type ("_" for subscript and "^" for superscript), text
106
+ str.gsub(@org_subp_regexp) do |match|
107
+ yield $1, $2
108
+ end
109
+ end
110
+
111
+ # rewrite footnotes
112
+ def rewrite_footnote(str) # :yields: name, definition or nil
113
+ str.gsub(@org_footnote_regexp) do |match|
114
+ yield $1, $3
115
+ end
116
+ end
117
+
102
118
  # = Summary
103
119
  #
104
120
  # Rewrite org-mode links in a string to markup suitable to the
@@ -7,16 +7,20 @@ module Orgmode
7
7
  def initialize(output)
8
8
  super(output)
9
9
  @add_paragraph = false
10
+ @support_definition_list = true # TODO this should be an option
11
+ @footnotes = {}
10
12
  end
11
13
 
12
14
  def push_mode(mode)
13
15
  super(mode)
14
16
  @output << "bc.. " if mode_is_code(mode)
17
+ @output << "\np=. " if mode == :center
15
18
  end
16
19
 
17
20
  def pop_mode(mode = nil)
18
21
  m = super(mode)
19
22
  @add_paragraph = (mode_is_code(m))
23
+ @output << "\n" if mode == :center
20
24
  m
21
25
  end
22
26
 
@@ -36,14 +40,38 @@ module Orgmode
36
40
  m = TextileMap[marker]
37
41
  "#{m}#{body}#{m}"
38
42
  end
43
+ input = @re_help.rewrite_subp(input) do |type, text|
44
+ if type == "_" then
45
+ "~#{text}~"
46
+ elsif type == "^" then
47
+ "^#{text}^"
48
+ end
49
+ end
39
50
  input = @re_help.rewrite_links(input) do |link, text|
40
51
  text ||= link
41
52
  link = link.gsub(/ /, "%20")
42
53
  "\"#{text}\":#{link}"
43
54
  end
55
+ input = @re_help.rewrite_footnote(input) do |name, defi|
56
+ # textile only support numerical names! Use hash as a workarround
57
+ name = name.hash.to_s unless name.to_i.to_s == name # check if number
58
+ @footnotes[name] = defi if defi
59
+ "[#{name}]"
60
+ end
61
+ Orgmode.special_symbols_to_textile(input)
44
62
  input
45
63
  end
46
64
 
65
+ def output_footnotes!
66
+ return false if @footnotes.empty?
67
+
68
+ @footnotes.each do |name, defi|
69
+ @output << "\nfn#{name}. #{defi}\n"
70
+ end
71
+
72
+ return true
73
+ end
74
+
47
75
  # Flushes the current buffer
48
76
  def flush!
49
77
  @logger.debug "FLUSH ==========> #{@output_type}"
@@ -55,8 +83,15 @@ module Orgmode
55
83
  @add_paragraph = false
56
84
  end
57
85
  @output << "bq. " if current_mode == :blockquote
58
- @output << "#" * @list_indent_stack.length << " " if @output_type == :ordered_list
59
- @output << "*" * @list_indent_stack.length << " " if @output_type == :unordered_list
86
+ if @output_type == :definition_list and @support_definition_list then
87
+ @output << "-" * @list_indent_stack.length << " "
88
+ @buffer.sub!("::", ":=")
89
+ elsif @output_type == :ordered_list then
90
+ @output << "#" * @list_indent_stack.length << " "
91
+ elsif @output_type == :unordered_list or \
92
+ (@output_type == :definition_list and not @support_definition_list) then
93
+ @output << "*" * @list_indent_stack.length << " "
94
+ end
60
95
  @output << inline_formatting(@buffer) << "\n"
61
96
  end
62
97
  clear_accumulation_buffer!
@@ -0,0 +1,345 @@
1
+ # Autogenerated by util/gen-special-replace.el
2
+
3
+ module Orgmode
4
+ def Orgmode.special_symbols_to_textile(str)
5
+ str.gsub!(/\\Agrave((\{\})|(\s|$))/, "À\\3")
6
+ str.gsub!(/\\agrave((\{\})|(\s|$))/, "à\\3")
7
+ str.gsub!(/\\Aacute((\{\})|(\s|$))/, "Á\\3")
8
+ str.gsub!(/\\aacute((\{\})|(\s|$))/, "á\\3")
9
+ str.gsub!(/\\Acirc((\{\})|(\s|$))/, "Â\\3")
10
+ str.gsub!(/\\acirc((\{\})|(\s|$))/, "â\\3")
11
+ str.gsub!(/\\Atilde((\{\})|(\s|$))/, "Ã\\3")
12
+ str.gsub!(/\\atilde((\{\})|(\s|$))/, "ã\\3")
13
+ str.gsub!(/\\Auml((\{\})|(\s|$))/, "Ä\\3")
14
+ str.gsub!(/\\auml((\{\})|(\s|$))/, "ä\\3")
15
+ str.gsub!(/\\Aring((\{\})|(\s|$))/, "Å\\3")
16
+ str.gsub!(/\\AA((\{\})|(\s|$))/, "Å\\3")
17
+ str.gsub!(/\\aring((\{\})|(\s|$))/, "å\\3")
18
+ str.gsub!(/\\AElig((\{\})|(\s|$))/, "Æ\\3")
19
+ str.gsub!(/\\aelig((\{\})|(\s|$))/, "æ\\3")
20
+ str.gsub!(/\\Ccedil((\{\})|(\s|$))/, "Ç\\3")
21
+ str.gsub!(/\\ccedil((\{\})|(\s|$))/, "ç\\3")
22
+ str.gsub!(/\\Egrave((\{\})|(\s|$))/, "È\\3")
23
+ str.gsub!(/\\egrave((\{\})|(\s|$))/, "è\\3")
24
+ str.gsub!(/\\Eacute((\{\})|(\s|$))/, "É\\3")
25
+ str.gsub!(/\\eacute((\{\})|(\s|$))/, "é\\3")
26
+ str.gsub!(/\\Ecirc((\{\})|(\s|$))/, "Ê\\3")
27
+ str.gsub!(/\\ecirc((\{\})|(\s|$))/, "ê\\3")
28
+ str.gsub!(/\\Euml((\{\})|(\s|$))/, "Ë\\3")
29
+ str.gsub!(/\\euml((\{\})|(\s|$))/, "ë\\3")
30
+ str.gsub!(/\\Igrave((\{\})|(\s|$))/, "Ì\\3")
31
+ str.gsub!(/\\igrave((\{\})|(\s|$))/, "ì\\3")
32
+ str.gsub!(/\\Iacute((\{\})|(\s|$))/, "Í\\3")
33
+ str.gsub!(/\\iacute((\{\})|(\s|$))/, "í\\3")
34
+ str.gsub!(/\\Icirc((\{\})|(\s|$))/, "Î\\3")
35
+ str.gsub!(/\\icirc((\{\})|(\s|$))/, "î\\3")
36
+ str.gsub!(/\\Iuml((\{\})|(\s|$))/, "Ï\\3")
37
+ str.gsub!(/\\iuml((\{\})|(\s|$))/, "ï\\3")
38
+ str.gsub!(/\\Ntilde((\{\})|(\s|$))/, "Ñ\\3")
39
+ str.gsub!(/\\ntilde((\{\})|(\s|$))/, "ñ\\3")
40
+ str.gsub!(/\\Ograve((\{\})|(\s|$))/, "Ò\\3")
41
+ str.gsub!(/\\ograve((\{\})|(\s|$))/, "ò\\3")
42
+ str.gsub!(/\\Oacute((\{\})|(\s|$))/, "Ó\\3")
43
+ str.gsub!(/\\oacute((\{\})|(\s|$))/, "ó\\3")
44
+ str.gsub!(/\\Ocirc((\{\})|(\s|$))/, "Ô\\3")
45
+ str.gsub!(/\\ocirc((\{\})|(\s|$))/, "ô\\3")
46
+ str.gsub!(/\\Otilde((\{\})|(\s|$))/, "Õ\\3")
47
+ str.gsub!(/\\otilde((\{\})|(\s|$))/, "õ\\3")
48
+ str.gsub!(/\\Ouml((\{\})|(\s|$))/, "Ö\\3")
49
+ str.gsub!(/\\ouml((\{\})|(\s|$))/, "ö\\3")
50
+ str.gsub!(/\\Oslash((\{\})|(\s|$))/, "Ø\\3")
51
+ str.gsub!(/\\oslash((\{\})|(\s|$))/, "ø\\3")
52
+ str.gsub!(/\\OElig((\{\})|(\s|$))/, "Œ\\3")
53
+ str.gsub!(/\\oelig((\{\})|(\s|$))/, "œ\\3")
54
+ str.gsub!(/\\Scaron((\{\})|(\s|$))/, "Š\\3")
55
+ str.gsub!(/\\scaron((\{\})|(\s|$))/, "š\\3")
56
+ str.gsub!(/\\szlig((\{\})|(\s|$))/, "ß\\3")
57
+ str.gsub!(/\\Ugrave((\{\})|(\s|$))/, "Ù\\3")
58
+ str.gsub!(/\\ugrave((\{\})|(\s|$))/, "ù\\3")
59
+ str.gsub!(/\\Uacute((\{\})|(\s|$))/, "Ú\\3")
60
+ str.gsub!(/\\uacute((\{\})|(\s|$))/, "ú\\3")
61
+ str.gsub!(/\\Ucirc((\{\})|(\s|$))/, "Û\\3")
62
+ str.gsub!(/\\ucirc((\{\})|(\s|$))/, "û\\3")
63
+ str.gsub!(/\\Uuml((\{\})|(\s|$))/, "Ü\\3")
64
+ str.gsub!(/\\uuml((\{\})|(\s|$))/, "ü\\3")
65
+ str.gsub!(/\\Yacute((\{\})|(\s|$))/, "Ý\\3")
66
+ str.gsub!(/\\yacute((\{\})|(\s|$))/, "ý\\3")
67
+ str.gsub!(/\\Yuml((\{\})|(\s|$))/, "Ÿ\\3")
68
+ str.gsub!(/\\yuml((\{\})|(\s|$))/, "ÿ\\3")
69
+ str.gsub!(/\\fnof((\{\})|(\s|$))/, "ƒ\\3")
70
+ str.gsub!(/\\real((\{\})|(\s|$))/, "ℜ\\3")
71
+ str.gsub!(/\\image((\{\})|(\s|$))/, "ℑ\\3")
72
+ str.gsub!(/\\weierp((\{\})|(\s|$))/, "℘\\3")
73
+ str.gsub!(/\\Alpha((\{\})|(\s|$))/, "Α\\3")
74
+ str.gsub!(/\\alpha((\{\})|(\s|$))/, "α\\3")
75
+ str.gsub!(/\\Beta((\{\})|(\s|$))/, "Β\\3")
76
+ str.gsub!(/\\beta((\{\})|(\s|$))/, "β\\3")
77
+ str.gsub!(/\\Gamma((\{\})|(\s|$))/, "Γ\\3")
78
+ str.gsub!(/\\gamma((\{\})|(\s|$))/, "γ\\3")
79
+ str.gsub!(/\\Delta((\{\})|(\s|$))/, "Δ\\3")
80
+ str.gsub!(/\\delta((\{\})|(\s|$))/, "δ\\3")
81
+ str.gsub!(/\\Epsilon((\{\})|(\s|$))/, "Ε\\3")
82
+ str.gsub!(/\\epsilon((\{\})|(\s|$))/, "ε\\3")
83
+ str.gsub!(/\\varepsilon((\{\})|(\s|$))/, "ε\\3")
84
+ str.gsub!(/\\Zeta((\{\})|(\s|$))/, "Ζ\\3")
85
+ str.gsub!(/\\zeta((\{\})|(\s|$))/, "ζ\\3")
86
+ str.gsub!(/\\Eta((\{\})|(\s|$))/, "Η\\3")
87
+ str.gsub!(/\\eta((\{\})|(\s|$))/, "η\\3")
88
+ str.gsub!(/\\Theta((\{\})|(\s|$))/, "Θ\\3")
89
+ str.gsub!(/\\theta((\{\})|(\s|$))/, "θ\\3")
90
+ str.gsub!(/\\thetasym((\{\})|(\s|$))/, "ϑ\\3")
91
+ str.gsub!(/\\vartheta((\{\})|(\s|$))/, "ϑ\\3")
92
+ str.gsub!(/\\Iota((\{\})|(\s|$))/, "Ι\\3")
93
+ str.gsub!(/\\iota((\{\})|(\s|$))/, "ι\\3")
94
+ str.gsub!(/\\Kappa((\{\})|(\s|$))/, "Κ\\3")
95
+ str.gsub!(/\\kappa((\{\})|(\s|$))/, "κ\\3")
96
+ str.gsub!(/\\Lambda((\{\})|(\s|$))/, "Λ\\3")
97
+ str.gsub!(/\\lambda((\{\})|(\s|$))/, "λ\\3")
98
+ str.gsub!(/\\Mu((\{\})|(\s|$))/, "Μ\\3")
99
+ str.gsub!(/\\mu((\{\})|(\s|$))/, "μ\\3")
100
+ str.gsub!(/\\nu((\{\})|(\s|$))/, "ν\\3")
101
+ str.gsub!(/\\Nu((\{\})|(\s|$))/, "Ν\\3")
102
+ str.gsub!(/\\Xi((\{\})|(\s|$))/, "Ξ\\3")
103
+ str.gsub!(/\\xi((\{\})|(\s|$))/, "ξ\\3")
104
+ str.gsub!(/\\Omicron((\{\})|(\s|$))/, "Ο\\3")
105
+ str.gsub!(/\\omicron((\{\})|(\s|$))/, "ο\\3")
106
+ str.gsub!(/\\Pi((\{\})|(\s|$))/, "Π\\3")
107
+ str.gsub!(/\\pi((\{\})|(\s|$))/, "π\\3")
108
+ str.gsub!(/\\Rho((\{\})|(\s|$))/, "Ρ\\3")
109
+ str.gsub!(/\\rho((\{\})|(\s|$))/, "ρ\\3")
110
+ str.gsub!(/\\Sigma((\{\})|(\s|$))/, "Σ\\3")
111
+ str.gsub!(/\\sigma((\{\})|(\s|$))/, "σ\\3")
112
+ str.gsub!(/\\sigmaf((\{\})|(\s|$))/, "ς\\3")
113
+ str.gsub!(/\\varsigma((\{\})|(\s|$))/, "ς\\3")
114
+ str.gsub!(/\\Tau((\{\})|(\s|$))/, "Τ\\3")
115
+ str.gsub!(/\\Upsilon((\{\})|(\s|$))/, "Υ\\3")
116
+ str.gsub!(/\\upsih((\{\})|(\s|$))/, "ϒ\\3")
117
+ str.gsub!(/\\upsilon((\{\})|(\s|$))/, "υ\\3")
118
+ str.gsub!(/\\Phi((\{\})|(\s|$))/, "Φ\\3")
119
+ str.gsub!(/\\phi((\{\})|(\s|$))/, "φ\\3")
120
+ str.gsub!(/\\Chi((\{\})|(\s|$))/, "Χ\\3")
121
+ str.gsub!(/\\chi((\{\})|(\s|$))/, "χ\\3")
122
+ str.gsub!(/\\acutex((\{\})|(\s|$))/, "𝑥́\\3")
123
+ str.gsub!(/\\Psi((\{\})|(\s|$))/, "Ψ\\3")
124
+ str.gsub!(/\\psi((\{\})|(\s|$))/, "ψ\\3")
125
+ str.gsub!(/\\tau((\{\})|(\s|$))/, "τ\\3")
126
+ str.gsub!(/\\Omega((\{\})|(\s|$))/, "Ω\\3")
127
+ str.gsub!(/\\omega((\{\})|(\s|$))/, "ω\\3")
128
+ str.gsub!(/\\piv((\{\})|(\s|$))/, "ϖ\\3")
129
+ str.gsub!(/\\partial((\{\})|(\s|$))/, "∂\\3")
130
+ str.gsub!(/\\alefsym((\{\})|(\s|$))/, "ℵ\\3")
131
+ str.gsub!(/\\ETH((\{\})|(\s|$))/, "Ð\\3")
132
+ str.gsub!(/\\eth((\{\})|(\s|$))/, "ð\\3")
133
+ str.gsub!(/\\THORN((\{\})|(\s|$))/, "Þ\\3")
134
+ str.gsub!(/\\thorn((\{\})|(\s|$))/, "þ\\3")
135
+ str.gsub!(/\\dots((\{\})|(\s|$))/, "…\\3")
136
+ str.gsub!(/\\hellip((\{\})|(\s|$))/, "…\\3")
137
+ str.gsub!(/\\middot((\{\})|(\s|$))/, "·\\3")
138
+ str.gsub!(/\\iexcl((\{\})|(\s|$))/, "¡\\3")
139
+ str.gsub!(/\\iquest((\{\})|(\s|$))/, "¿\\3")
140
+ str.gsub!(/\\shy((\{\})|(\s|$))/, "\\3")
141
+ str.gsub!(/\\ndash((\{\})|(\s|$))/, "–\\3")
142
+ str.gsub!(/\\mdash((\{\})|(\s|$))/, "—\\3")
143
+ str.gsub!(/\\quot((\{\})|(\s|$))/, "\"\\3")
144
+ str.gsub!(/\\acute((\{\})|(\s|$))/, "´\\3")
145
+ str.gsub!(/\\ldquo((\{\})|(\s|$))/, "“\\3")
146
+ str.gsub!(/\\rdquo((\{\})|(\s|$))/, "”\\3")
147
+ str.gsub!(/\\bdquo((\{\})|(\s|$))/, "„\\3")
148
+ str.gsub!(/\\lsquo((\{\})|(\s|$))/, "‘\\3")
149
+ str.gsub!(/\\rsquo((\{\})|(\s|$))/, "’\\3")
150
+ str.gsub!(/\\sbquo((\{\})|(\s|$))/, "‚\\3")
151
+ str.gsub!(/\\laquo((\{\})|(\s|$))/, "«\\3")
152
+ str.gsub!(/\\raquo((\{\})|(\s|$))/, "»\\3")
153
+ str.gsub!(/\\lsaquo((\{\})|(\s|$))/, "‹\\3")
154
+ str.gsub!(/\\rsaquo((\{\})|(\s|$))/, "›\\3")
155
+ str.gsub!(/\\circ((\{\})|(\s|$))/, "ˆ\\3")
156
+ str.gsub!(/\\vert((\{\})|(\s|$))/, "|\\3")
157
+ str.gsub!(/\\brvbar((\{\})|(\s|$))/, "¦\\3")
158
+ str.gsub!(/\\sect((\{\})|(\s|$))/, "§\\3")
159
+ str.gsub!(/\\amp((\{\})|(\s|$))/, "&\\3")
160
+ str.gsub!(/\\lt((\{\})|(\s|$))/, "<\\3")
161
+ str.gsub!(/\\gt((\{\})|(\s|$))/, ">\\3")
162
+ str.gsub!(/\\tilde((\{\})|(\s|$))/, "~\\3")
163
+ str.gsub!(/\\dagger((\{\})|(\s|$))/, "†\\3")
164
+ str.gsub!(/\\Dagger((\{\})|(\s|$))/, "‡\\3")
165
+ str.gsub!(/\\nbsp((\{\})|(\s|$))/, " \\3")
166
+ str.gsub!(/\\ensp((\{\})|(\s|$))/, " \\3")
167
+ str.gsub!(/\\emsp((\{\})|(\s|$))/, " \\3")
168
+ str.gsub!(/\\thinsp((\{\})|(\s|$))/, " \\3")
169
+ str.gsub!(/\\curren((\{\})|(\s|$))/, "¤\\3")
170
+ str.gsub!(/\\cent((\{\})|(\s|$))/, "¢\\3")
171
+ str.gsub!(/\\pound((\{\})|(\s|$))/, "£\\3")
172
+ str.gsub!(/\\yen((\{\})|(\s|$))/, "¥\\3")
173
+ str.gsub!(/\\euro((\{\})|(\s|$))/, "€\\3")
174
+ str.gsub!(/\\EUR((\{\})|(\s|$))/, "€\\3")
175
+ str.gsub!(/\\EURdig((\{\})|(\s|$))/, "€\\3")
176
+ str.gsub!(/\\EURhv((\{\})|(\s|$))/, "€\\3")
177
+ str.gsub!(/\\EURcr((\{\})|(\s|$))/, "€\\3")
178
+ str.gsub!(/\\EURtm((\{\})|(\s|$))/, "€\\3")
179
+ str.gsub!(/\\copy((\{\})|(\s|$))/, "©\\3")
180
+ str.gsub!(/\\reg((\{\})|(\s|$))/, "®\\3")
181
+ str.gsub!(/\\trade((\{\})|(\s|$))/, "™\\3")
182
+ str.gsub!(/\\minus((\{\})|(\s|$))/, "−\\3")
183
+ str.gsub!(/\\pm((\{\})|(\s|$))/, "±\\3")
184
+ str.gsub!(/\\plusmn((\{\})|(\s|$))/, "±\\3")
185
+ str.gsub!(/\\times((\{\})|(\s|$))/, "×\\3")
186
+ str.gsub!(/\\frasl((\{\})|(\s|$))/, "⁄\\3")
187
+ str.gsub!(/\\div((\{\})|(\s|$))/, "÷\\3")
188
+ str.gsub!(/\\frac12((\{\})|(\s|$))/, "½\\3")
189
+ str.gsub!(/\\frac14((\{\})|(\s|$))/, "¼\\3")
190
+ str.gsub!(/\\frac34((\{\})|(\s|$))/, "¾\\3")
191
+ str.gsub!(/\\permil((\{\})|(\s|$))/, "‰\\3")
192
+ str.gsub!(/\\sup1((\{\})|(\s|$))/, "¹\\3")
193
+ str.gsub!(/\\sup2((\{\})|(\s|$))/, "²\\3")
194
+ str.gsub!(/\\sup3((\{\})|(\s|$))/, "³\\3")
195
+ str.gsub!(/\\radic((\{\})|(\s|$))/, "√\\3")
196
+ str.gsub!(/\\sum((\{\})|(\s|$))/, "∑\\3")
197
+ str.gsub!(/\\prod((\{\})|(\s|$))/, "∏\\3")
198
+ str.gsub!(/\\micro((\{\})|(\s|$))/, "µ\\3")
199
+ str.gsub!(/\\macr((\{\})|(\s|$))/, "¯\\3")
200
+ str.gsub!(/\\deg((\{\})|(\s|$))/, "°\\3")
201
+ str.gsub!(/\\prime((\{\})|(\s|$))/, "′\\3")
202
+ str.gsub!(/\\Prime((\{\})|(\s|$))/, "″\\3")
203
+ str.gsub!(/\\infin((\{\})|(\s|$))/, "∞\\3")
204
+ str.gsub!(/\\infty((\{\})|(\s|$))/, "∞\\3")
205
+ str.gsub!(/\\prop((\{\})|(\s|$))/, "∝\\3")
206
+ str.gsub!(/\\proptp((\{\})|(\s|$))/, "∝\\3")
207
+ str.gsub!(/\\not((\{\})|(\s|$))/, "¬\\3")
208
+ str.gsub!(/\\land((\{\})|(\s|$))/, "∧\\3")
209
+ str.gsub!(/\\wedge((\{\})|(\s|$))/, "∧\\3")
210
+ str.gsub!(/\\lor((\{\})|(\s|$))/, "∨\\3")
211
+ str.gsub!(/\\vee((\{\})|(\s|$))/, "∨\\3")
212
+ str.gsub!(/\\cap((\{\})|(\s|$))/, "∩\\3")
213
+ str.gsub!(/\\cup((\{\})|(\s|$))/, "∪\\3")
214
+ str.gsub!(/\\int((\{\})|(\s|$))/, "∫\\3")
215
+ str.gsub!(/\\there4((\{\})|(\s|$))/, "∴\\3")
216
+ str.gsub!(/\\sim((\{\})|(\s|$))/, "∼\\3")
217
+ str.gsub!(/\\cong((\{\})|(\s|$))/, "≅\\3")
218
+ str.gsub!(/\\simeq((\{\})|(\s|$))/, "≅\\3")
219
+ str.gsub!(/\\asymp((\{\})|(\s|$))/, "≈\\3")
220
+ str.gsub!(/\\approx((\{\})|(\s|$))/, "≈\\3")
221
+ str.gsub!(/\\ne((\{\})|(\s|$))/, "≠\\3")
222
+ str.gsub!(/\\neq((\{\})|(\s|$))/, "≠\\3")
223
+ str.gsub!(/\\equiv((\{\})|(\s|$))/, "≡\\3")
224
+ str.gsub!(/\\le((\{\})|(\s|$))/, "≤\\3")
225
+ str.gsub!(/\\ge((\{\})|(\s|$))/, "≥\\3")
226
+ str.gsub!(/\\sub((\{\})|(\s|$))/, "⊂\\3")
227
+ str.gsub!(/\\subset((\{\})|(\s|$))/, "⊂\\3")
228
+ str.gsub!(/\\sup((\{\})|(\s|$))/, "⊃\\3")
229
+ str.gsub!(/\\supset((\{\})|(\s|$))/, "⊃\\3")
230
+ str.gsub!(/\\nsub((\{\})|(\s|$))/, "⊄\\3")
231
+ str.gsub!(/\\sube((\{\})|(\s|$))/, "⊆\\3")
232
+ str.gsub!(/\\nsup((\{\})|(\s|$))/, "⊅\\3")
233
+ str.gsub!(/\\supe((\{\})|(\s|$))/, "⊇\\3")
234
+ str.gsub!(/\\forall((\{\})|(\s|$))/, "∀\\3")
235
+ str.gsub!(/\\exist((\{\})|(\s|$))/, "∃\\3")
236
+ str.gsub!(/\\exists((\{\})|(\s|$))/, "∃\\3")
237
+ str.gsub!(/\\empty((\{\})|(\s|$))/, "∅\\3")
238
+ str.gsub!(/\\emptyset((\{\})|(\s|$))/, "∅\\3")
239
+ str.gsub!(/\\isin((\{\})|(\s|$))/, "∈\\3")
240
+ str.gsub!(/\\in((\{\})|(\s|$))/, "∈\\3")
241
+ str.gsub!(/\\notin((\{\})|(\s|$))/, "∉\\3")
242
+ str.gsub!(/\\ni((\{\})|(\s|$))/, "∋\\3")
243
+ str.gsub!(/\\nabla((\{\})|(\s|$))/, "∇\\3")
244
+ str.gsub!(/\\ang((\{\})|(\s|$))/, "∠\\3")
245
+ str.gsub!(/\\angle((\{\})|(\s|$))/, "∠\\3")
246
+ str.gsub!(/\\perp((\{\})|(\s|$))/, "⊥\\3")
247
+ str.gsub!(/\\sdot((\{\})|(\s|$))/, "⋅\\3")
248
+ str.gsub!(/\\cdot((\{\})|(\s|$))/, "⋅\\3")
249
+ str.gsub!(/\\lceil((\{\})|(\s|$))/, "⌈\\3")
250
+ str.gsub!(/\\rceil((\{\})|(\s|$))/, "⌉\\3")
251
+ str.gsub!(/\\lfloor((\{\})|(\s|$))/, "⌊\\3")
252
+ str.gsub!(/\\rfloor((\{\})|(\s|$))/, "⌋\\3")
253
+ str.gsub!(/\\lang((\{\})|(\s|$))/, "⟨\\3")
254
+ str.gsub!(/\\rang((\{\})|(\s|$))/, "⟩\\3")
255
+ str.gsub!(/\\larr((\{\})|(\s|$))/, "←\\3")
256
+ str.gsub!(/\\leftarrow((\{\})|(\s|$))/, "←\\3")
257
+ str.gsub!(/\\gets((\{\})|(\s|$))/, "←\\3")
258
+ str.gsub!(/\\lArr((\{\})|(\s|$))/, "⇐\\3")
259
+ str.gsub!(/\\Leftarrow((\{\})|(\s|$))/, "⇐\\3")
260
+ str.gsub!(/\\uarr((\{\})|(\s|$))/, "↑\\3")
261
+ str.gsub!(/\\uparrow((\{\})|(\s|$))/, "↑\\3")
262
+ str.gsub!(/\\uArr((\{\})|(\s|$))/, "⇑\\3")
263
+ str.gsub!(/\\Uparrow((\{\})|(\s|$))/, "⇑\\3")
264
+ str.gsub!(/\\rarr((\{\})|(\s|$))/, "→\\3")
265
+ str.gsub!(/\\to((\{\})|(\s|$))/, "→\\3")
266
+ str.gsub!(/\\rightarrow((\{\})|(\s|$))/, "→\\3")
267
+ str.gsub!(/\\rArr((\{\})|(\s|$))/, "⇒\\3")
268
+ str.gsub!(/\\Rightarrow((\{\})|(\s|$))/, "⇒\\3")
269
+ str.gsub!(/\\darr((\{\})|(\s|$))/, "↓\\3")
270
+ str.gsub!(/\\downarrow((\{\})|(\s|$))/, "↓\\3")
271
+ str.gsub!(/\\dArr((\{\})|(\s|$))/, "⇓\\3")
272
+ str.gsub!(/\\Downarrow((\{\})|(\s|$))/, "⇓\\3")
273
+ str.gsub!(/\\harr((\{\})|(\s|$))/, "↔\\3")
274
+ str.gsub!(/\\leftrightarrow((\{\})|(\s|$))/, "↔\\3")
275
+ str.gsub!(/\\hArr((\{\})|(\s|$))/, "⇔\\3")
276
+ str.gsub!(/\\Leftrightarrow((\{\})|(\s|$))/, "⇔\\3")
277
+ str.gsub!(/\\crarr((\{\})|(\s|$))/, "↵\\3")
278
+ str.gsub!(/\\hookleftarrow((\{\})|(\s|$))/, "↵\\3")
279
+ str.gsub!(/\\arccos((\{\})|(\s|$))/, "arccos\\3")
280
+ str.gsub!(/\\arcsin((\{\})|(\s|$))/, "arcsin\\3")
281
+ str.gsub!(/\\arctan((\{\})|(\s|$))/, "arctan\\3")
282
+ str.gsub!(/\\arg((\{\})|(\s|$))/, "arg\\3")
283
+ str.gsub!(/\\cos((\{\})|(\s|$))/, "cos\\3")
284
+ str.gsub!(/\\cosh((\{\})|(\s|$))/, "cosh\\3")
285
+ str.gsub!(/\\cot((\{\})|(\s|$))/, "cot\\3")
286
+ str.gsub!(/\\coth((\{\})|(\s|$))/, "coth\\3")
287
+ str.gsub!(/\\csc((\{\})|(\s|$))/, "csc\\3")
288
+ str.gsub!(/\\deg((\{\})|(\s|$))/, "deg\\3")
289
+ str.gsub!(/\\det((\{\})|(\s|$))/, "det\\3")
290
+ str.gsub!(/\\dim((\{\})|(\s|$))/, "dim\\3")
291
+ str.gsub!(/\\exp((\{\})|(\s|$))/, "exp\\3")
292
+ str.gsub!(/\\gcd((\{\})|(\s|$))/, "gcd\\3")
293
+ str.gsub!(/\\hom((\{\})|(\s|$))/, "hom\\3")
294
+ str.gsub!(/\\inf((\{\})|(\s|$))/, "inf\\3")
295
+ str.gsub!(/\\ker((\{\})|(\s|$))/, "ker\\3")
296
+ str.gsub!(/\\lg((\{\})|(\s|$))/, "lg\\3")
297
+ str.gsub!(/\\lim((\{\})|(\s|$))/, "lim\\3")
298
+ str.gsub!(/\\liminf((\{\})|(\s|$))/, "liminf\\3")
299
+ str.gsub!(/\\limsup((\{\})|(\s|$))/, "limsup\\3")
300
+ str.gsub!(/\\ln((\{\})|(\s|$))/, "ln\\3")
301
+ str.gsub!(/\\log((\{\})|(\s|$))/, "log\\3")
302
+ str.gsub!(/\\max((\{\})|(\s|$))/, "max\\3")
303
+ str.gsub!(/\\min((\{\})|(\s|$))/, "min\\3")
304
+ str.gsub!(/\\Pr((\{\})|(\s|$))/, "Pr\\3")
305
+ str.gsub!(/\\sec((\{\})|(\s|$))/, "sec\\3")
306
+ str.gsub!(/\\sin((\{\})|(\s|$))/, "sin\\3")
307
+ str.gsub!(/\\sinh((\{\})|(\s|$))/, "sinh\\3")
308
+ str.gsub!(/\\sup((\{\})|(\s|$))/, "sup\\3")
309
+ str.gsub!(/\\tan((\{\})|(\s|$))/, "tan\\3")
310
+ str.gsub!(/\\tanh((\{\})|(\s|$))/, "tanh\\3")
311
+ str.gsub!(/\\bull((\{\})|(\s|$))/, "•\\3")
312
+ str.gsub!(/\\bullet((\{\})|(\s|$))/, "•\\3")
313
+ str.gsub!(/\\star((\{\})|(\s|$))/, "⋆\\3")
314
+ str.gsub!(/\\lowast((\{\})|(\s|$))/, "∗\\3")
315
+ str.gsub!(/\\ast((\{\})|(\s|$))/, "*\\3")
316
+ str.gsub!(/\\odot((\{\})|(\s|$))/, "ʘ\\3")
317
+ str.gsub!(/\\oplus((\{\})|(\s|$))/, "⊕\\3")
318
+ str.gsub!(/\\otimes((\{\})|(\s|$))/, "⊗\\3")
319
+ str.gsub!(/\\checkmark((\{\})|(\s|$))/, "✓\\3")
320
+ str.gsub!(/\\para((\{\})|(\s|$))/, "¶\\3")
321
+ str.gsub!(/\\ordf((\{\})|(\s|$))/, "ª\\3")
322
+ str.gsub!(/\\ordm((\{\})|(\s|$))/, "º\\3")
323
+ str.gsub!(/\\cedil((\{\})|(\s|$))/, "¸\\3")
324
+ str.gsub!(/\\oline((\{\})|(\s|$))/, "‾\\3")
325
+ str.gsub!(/\\uml((\{\})|(\s|$))/, "¨\\3")
326
+ str.gsub!(/\\zwnj((\{\})|(\s|$))/, "‌\\3")
327
+ str.gsub!(/\\zwj((\{\})|(\s|$))/, "‍\\3")
328
+ str.gsub!(/\\lrm((\{\})|(\s|$))/, "‎\\3")
329
+ str.gsub!(/\\rlm((\{\})|(\s|$))/, "‏\\3")
330
+ str.gsub!(/\\smile((\{\})|(\s|$))/, "⌣\\3")
331
+ str.gsub!(/\\smiley((\{\})|(\s|$))/, "☺\\3")
332
+ str.gsub!(/\\blacksmile((\{\})|(\s|$))/, "☻\\3")
333
+ str.gsub!(/\\sad((\{\})|(\s|$))/, "☹\\3")
334
+ str.gsub!(/\\clubs((\{\})|(\s|$))/, "♣\\3")
335
+ str.gsub!(/\\clubsuit((\{\})|(\s|$))/, "♣\\3")
336
+ str.gsub!(/\\spades((\{\})|(\s|$))/, "♠\\3")
337
+ str.gsub!(/\\spadesuit((\{\})|(\s|$))/, "♠\\3")
338
+ str.gsub!(/\\hearts((\{\})|(\s|$))/, "♥\\3")
339
+ str.gsub!(/\\heartsuit((\{\})|(\s|$))/, "♥\\3")
340
+ str.gsub!(/\\diams((\{\})|(\s|$))/, "♦\\3")
341
+ str.gsub!(/\\diamondsuit((\{\})|(\s|$))/, "♦\\3")
342
+ str.gsub!(/\\Diamond((\{\})|(\s|$))/, "⋄\\3")
343
+ str.gsub!(/\\loz((\{\})|(\s|$))/, "◊\\3")
344
+ end
345
+ end # module Orgmode