stepmod-utils 0.1.5 → 0.2.3

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +51 -0
  3. data/.github/workflows/release.yml +20 -22
  4. data/Gemfile +2 -0
  5. data/Makefile +2 -0
  6. data/README.adoc +136 -2
  7. data/exe/stepmod-annotate +44 -0
  8. data/exe/stepmod-annotate-all +39 -0
  9. data/exe/stepmod-build-resource-docs-cache +19 -0
  10. data/exe/stepmod-convert-express-description +33 -0
  11. data/exe/stepmod-convert-express-resource +33 -0
  12. data/exe/stepmod-extract-terms +62 -13
  13. data/exe/stepmod-find-express-files +23 -0
  14. data/lib/stepmod/utils/cleaner.rb +11 -0
  15. data/lib/stepmod/utils/concept.rb +16 -3
  16. data/lib/stepmod/utils/converters/a.rb +47 -0
  17. data/lib/stepmod/utils/converters/blockquote.rb +22 -0
  18. data/lib/stepmod/utils/converters/br.rb +15 -0
  19. data/lib/stepmod/utils/converters/bypass.rb +81 -0
  20. data/lib/stepmod/utils/converters/clause_ref.rb +2 -2
  21. data/lib/stepmod/utils/converters/code.rb +19 -0
  22. data/lib/stepmod/utils/converters/comment.rb +16 -0
  23. data/lib/stepmod/utils/converters/dd.rb +15 -0
  24. data/lib/stepmod/utils/converters/def.rb +13 -6
  25. data/lib/stepmod/utils/converters/definition.rb +2 -2
  26. data/lib/stepmod/utils/converters/dl.rb +31 -0
  27. data/lib/stepmod/utils/converters/drop.rb +22 -0
  28. data/lib/stepmod/utils/converters/dt.rb +17 -0
  29. data/lib/stepmod/utils/converters/em.rb +3 -3
  30. data/lib/stepmod/utils/converters/em_express_description.rb +22 -0
  31. data/lib/stepmod/utils/converters/eqn.rb +96 -0
  32. data/lib/stepmod/utils/converters/example.rb +3 -8
  33. data/lib/stepmod/utils/converters/express_g.rb +46 -0
  34. data/lib/stepmod/utils/converters/express_ref.rb +2 -2
  35. data/lib/stepmod/utils/converters/express_ref_express_description.rb +13 -0
  36. data/lib/stepmod/utils/converters/ext_description.rb +16 -0
  37. data/lib/stepmod/utils/converters/ext_descriptions.rb +14 -0
  38. data/lib/stepmod/utils/converters/fund_cons.rb +15 -0
  39. data/lib/stepmod/utils/converters/head.rb +22 -0
  40. data/lib/stepmod/utils/converters/hr.rb +15 -0
  41. data/lib/stepmod/utils/converters/ignore.rb +16 -0
  42. data/lib/stepmod/utils/converters/introduction.rb +15 -0
  43. data/lib/stepmod/utils/converters/module_ref.rb +2 -2
  44. data/lib/stepmod/utils/converters/note.rb +3 -8
  45. data/lib/stepmod/utils/converters/ol.rb +7 -6
  46. data/lib/stepmod/utils/converters/p.rb +21 -0
  47. data/lib/stepmod/utils/converters/pass_through.rb +13 -0
  48. data/lib/stepmod/utils/converters/q.rb +16 -0
  49. data/lib/stepmod/utils/converters/resource.rb +14 -0
  50. data/lib/stepmod/utils/converters/schema.rb +18 -0
  51. data/lib/stepmod/utils/converters/schema_diag.rb +14 -0
  52. data/lib/stepmod/utils/converters/stem.rb +2 -2
  53. data/lib/stepmod/utils/converters/strong.rb +21 -0
  54. data/lib/stepmod/utils/converters/sub.rb +16 -0
  55. data/lib/stepmod/utils/converters/sup.rb +16 -0
  56. data/lib/stepmod/utils/converters/synonym.rb +2 -2
  57. data/lib/stepmod/utils/converters/term.rb +2 -2
  58. data/lib/stepmod/utils/converters/text.rb +68 -0
  59. data/lib/stepmod/utils/html_to_asciimath.rb +157 -0
  60. data/lib/stepmod/utils/smrl_description_converter.rb +49 -0
  61. data/lib/stepmod/utils/smrl_resource_converter.rb +67 -0
  62. data/lib/stepmod/utils/stepmod_definition_converter.rb +21 -21
  63. data/lib/stepmod/utils/stepmod_file_annotator.rb +54 -0
  64. data/lib/stepmod/utils/version.rb +1 -1
  65. data/migrating_from_cvs.adoc +190 -0
  66. data/stepmod-utils.gemspec +2 -1
  67. metadata +70 -8
  68. data/.github/workflows/macos.yml +0 -39
  69. data/.github/workflows/ubuntu.yml +0 -53
  70. data/.github/workflows/windows.yml +0 -41
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Head < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ title = extract_title(node)
9
+ "= #{title}\n:stem:\n\n"
10
+ end
11
+
12
+ def extract_title(node)
13
+ title = node.at("./title")
14
+ return "(???)" if title.nil?
15
+ title.text
16
+ end
17
+ end
18
+
19
+ ReverseAdoc::Converters.register :head, Head.new
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Hr < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ "\n* * *\n"
9
+ end
10
+ end
11
+
12
+ ReverseAdoc::Converters.register :hr, Hr.new
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Ignore < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ '' # noop
9
+ end
10
+ end
11
+
12
+ ReverseAdoc::Converters.register :colgroup, Ignore.new
13
+ ReverseAdoc::Converters.register :col, Ignore.new
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Introduction < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ "\n\n== Introduction\n\n#{treat_children(node, state).strip}\n\n"
9
+ end
10
+ end
11
+
12
+ ReverseAdoc::Converters.register :introduction, Introduction.new
13
+ end
14
+ end
15
+ end
@@ -3,7 +3,7 @@
3
3
  module Stepmod
4
4
  module Utils
5
5
  module Converters
6
- class ModuleRef < ReverseAsciidoctor::Converters::Base
6
+ class ModuleRef < ReverseAdoc::Converters::Base
7
7
  def convert(node, _state = {})
8
8
  ref = node['linkend']
9
9
  # #23:
@@ -27,7 +27,7 @@ module Stepmod
27
27
  ref.squeeze(' ').strip
28
28
  end
29
29
  end
30
- ReverseAsciidoctor::Converters.register :module_ref, ModuleRef.new
30
+ ReverseAdoc::Converters.register :module_ref, ModuleRef.new
31
31
  end
32
32
  end
33
33
  end
@@ -3,17 +3,12 @@
3
3
  module Stepmod
4
4
  module Utils
5
5
  module Converters
6
- class Note < ReverseAsciidoctor::Converters::Base
6
+ class Note < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
- <<~TEMPLATE
9
- [NOTE]
10
- --
11
- #{treat_children(node, state).strip}
12
- --
13
- TEMPLATE
8
+ "\n\n[NOTE]\n--\n#{treat_children(node, state).strip}\n--\n\n"
14
9
  end
15
10
  end
16
- ReverseAsciidoctor::Converters.register :note, Note.new
11
+ ReverseAdoc::Converters.register :note, Note.new
17
12
  end
18
13
  end
19
14
  end
@@ -3,14 +3,15 @@
3
3
  module Stepmod
4
4
  module Utils
5
5
  module Converters
6
- class Ol < ReverseAsciidoctor::Converters::Base
6
+ class Ol < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
8
  id = node['id']
9
9
  anchor = id ? "[[#{id}]]\n" : ""
10
10
  ol_count = state.fetch(:ol_count, 0) + 1
11
11
  attrs = ol_attrs(node)
12
- res = "\n#{anchor}#{attrs}#{treat_children(node, state.merge(ol_count: ol_count))}"
13
- res = "\n" + res if node.parent && node.parent.name == 'note'
12
+ res = "\n\n#{anchor}#{attrs}#{treat_children(node, state.merge(ol_count: ol_count))}\n"
13
+ # Why do we add this?
14
+ # res = "\n" + res if node.parent && node.parent.name == 'note'
14
15
  res
15
16
  end
16
17
 
@@ -44,9 +45,9 @@ module Stepmod
44
45
  end
45
46
  end
46
47
 
47
- ReverseAsciidoctor::Converters.register :ol, Ol.new
48
- ReverseAsciidoctor::Converters.register :ul, Ol.new
49
- ReverseAsciidoctor::Converters.register :dir, Ol.new
48
+ ReverseAdoc::Converters.register :ol, Ol.new
49
+ ReverseAdoc::Converters.register :ul, Ol.new
50
+ ReverseAdoc::Converters.register :dir, Ol.new
50
51
  end
51
52
  end
52
53
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class P < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ id = node['id']
9
+ anchor = id ? "[[#{id}]]\n" : ""
10
+ if state[:tdsinglepara]
11
+ "#{anchor}#{treat_children(node, state).strip}"
12
+ else
13
+ "\n\n#{anchor}#{treat_children(node, state).strip}\n\n"
14
+ end
15
+ end
16
+ end
17
+
18
+ ReverseAdoc::Converters.register :p, P.new
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class PassThrough < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ node.to_s
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Q < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ content = treat_children(node, state)
9
+ "#{content[/^\s*/]}\"#{content.strip}\"#{content[/\s*$/]}"
10
+ end
11
+ end
12
+
13
+ ReverseAdoc::Converters.register :q, Q.new
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Resource < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ treat_children(node, state)
9
+ end
10
+ end
11
+ ReverseAdoc::Converters.register :resource, Resource.new
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Schema < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ <<~TEMPLATE
9
+ (*"#{node['name']}"
10
+ #{treat_children(node, state).strip}
11
+ *)
12
+ TEMPLATE
13
+ end
14
+ end
15
+ ReverseAdoc::Converters.register :schema, Schema.new
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class SchemaDiag < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ treat_children(node, state).strip
9
+ end
10
+ end
11
+ ReverseAdoc::Converters.register :schema_diag, SchemaDiag.new
12
+ end
13
+ end
14
+ end
@@ -5,7 +5,7 @@ require 'stepmod/utils/converters/em'
5
5
  module Stepmod
6
6
  module Utils
7
7
  module Converters
8
- class Stem < ReverseAsciidoctor::Converters::Base
8
+ class Stem < ReverseAdoc::Converters::Base
9
9
  def convert(node, state = {})
10
10
  return Em.new.convert(node, state) if node.text.strip.length > 8
11
11
 
@@ -13,7 +13,7 @@ module Stepmod
13
13
  end
14
14
  end
15
15
 
16
- ReverseAsciidoctor::Converters.register :i, Stem.new
16
+ ReverseAdoc::Converters.register :i, Stem.new
17
17
  end
18
18
  end
19
19
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Strong < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ content = treat_children(node, state.merge(already_strong: true))
9
+ if content.strip.empty? || state[:already_strong]
10
+ content
11
+ else
12
+ "#{content[/^\s*/]}*#{content.strip}*#{content[/\s*$/]}"
13
+ end
14
+ end
15
+ end
16
+
17
+ ReverseAdoc::Converters.register :strong, Strong.new
18
+ ReverseAdoc::Converters.register :b, Strong.new
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Sub < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ content = treat_children(node, state)
9
+ "#{content[/^\s*/]}~#{content.strip}~#{content[/\s*$/]}"
10
+ end
11
+ end
12
+
13
+ ReverseAdoc::Converters.register :sub, Sub.new
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Sup < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ content = treat_children(node, state)
9
+ "#{content[/^\s*/]}^#{content.strip}^#{content[/\s*$/]}"
10
+ end
11
+ end
12
+
13
+ ReverseAdoc::Converters.register :sup, Sup.new
14
+ end
15
+ end
16
+ end
@@ -3,13 +3,13 @@
3
3
  module Stepmod
4
4
  module Utils
5
5
  module Converters
6
- class Synonym < ReverseAsciidoctor::Converters::Base
6
+ class Synonym < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
8
  "alt:[#{node.text.strip}]"
9
9
  end
10
10
  end
11
11
 
12
- ReverseAsciidoctor::Converters.register :synonym, Synonym.new
12
+ ReverseAdoc::Converters.register :synonym, Synonym.new
13
13
  end
14
14
  end
15
15
  end
@@ -5,7 +5,7 @@ require 'stepmod/utils/converters/synonym'
5
5
  module Stepmod
6
6
  module Utils
7
7
  module Converters
8
- class Term < ReverseAsciidoctor::Converters::Base
8
+ class Term < ReverseAdoc::Converters::Base
9
9
  def convert(node, state = {})
10
10
  first_child = node.children.find do |child|
11
11
  child.name == 'text' && !child.text.to_s.strip.empty?
@@ -23,7 +23,7 @@ module Stepmod
23
23
  end
24
24
  end
25
25
 
26
- ReverseAsciidoctor::Converters.register :term, Term.new
26
+ ReverseAdoc::Converters.register :term, Term.new
27
27
  end
28
28
  end
29
29
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stepmod
4
+ module Utils
5
+ module Converters
6
+ class Text < ReverseAdoc::Converters::Base
7
+ def convert(node, state = {})
8
+ if node.text.strip.empty?
9
+ treat_empty(node, state)
10
+ else
11
+ treat_text(node)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def treat_empty(node, state)
18
+ parent = node.parent.name.to_sym
19
+ if [:ol, :ul].include?(parent) # Otherwise the identation is broken
20
+ ''
21
+ elsif state[:tdsinglepara]
22
+ ''
23
+ elsif node.text == ' ' # Regular whitespace text node
24
+ ' '
25
+ else
26
+ ''
27
+ end
28
+ end
29
+
30
+ def treat_text(node)
31
+ text = node.text
32
+ text = preserve_nbsp(text)
33
+ # text = remove_border_newlines(text)
34
+ text = remove_inner_newlines(text)
35
+
36
+ text = preserve_keychars_within_backticks(text)
37
+ text = preserve_tags(text)
38
+
39
+ text
40
+ end
41
+
42
+ def preserve_nbsp(text)
43
+ text.gsub(/\u00A0/, "&nbsp;")
44
+ end
45
+
46
+ def preserve_tags(text)
47
+ text.gsub(/[<>]/, '>' => '\>', '<' => '\<')
48
+ end
49
+
50
+ def remove_border_newlines(text)
51
+ text.gsub(/\A\n+/, '').gsub(/\n+\z/, '')
52
+ end
53
+
54
+ def remove_inner_newlines(text)
55
+ text.tr("\n\t", ' ').squeeze(' ')
56
+ end
57
+
58
+ def preserve_keychars_within_backticks(text)
59
+ text.gsub(/`.*?`/) do |match|
60
+ match.gsub('\_', '_').gsub('\*', '*')
61
+ end
62
+ end
63
+ end
64
+
65
+ ReverseAdoc::Converters.register :text, Text.new
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,157 @@
1
+ module Stepmod
2
+ module Utils
3
+ class HtmlToAsciimath
4
+ def call(input)
5
+ return input if input.nil? || input.empty?
6
+
7
+ to_asciimath = Nokogiri::HTML.fragment(input, "UTF-8")
8
+
9
+ to_asciimath.css('i').each do |math_element|
10
+ # puts "HTML MATH!! #{math_element.to_xml}"
11
+ # puts "HTML MATH!! #{math_element.text}"
12
+ decoded = text_to_asciimath(math_element.text)
13
+ case decoded.length
14
+ when 1..12
15
+ # puts "(#{math_element.text} to => #{decoded})"
16
+ math_element.replace "stem:[#{decoded}]"
17
+ when 0
18
+ math_element.remove
19
+ else
20
+ math_element.replace "_#{decoded}_"
21
+ end
22
+ end
23
+
24
+ to_asciimath.css('sub').each do |math_element|
25
+ case math_element.text.length
26
+ when 0
27
+ math_element.remove
28
+ else
29
+ math_element.replace "~#{text_to_asciimath(math_element.text)}~"
30
+ end
31
+ end
32
+
33
+ to_asciimath.css('sup').each do |math_element|
34
+ case math_element.text.length
35
+ when 0
36
+ math_element.remove
37
+ else
38
+ math_element.replace "^#{text_to_asciimath(math_element.text)}^"
39
+ end
40
+ end
41
+
42
+ to_asciimath.css('ol').each do |element|
43
+ element.css('li').each do |li|
44
+ li.replace ". #{li.text}"
45
+ end
46
+ end
47
+
48
+ to_asciimath.css('ul').each do |element|
49
+ element.css('li').each do |li|
50
+ li.replace "* #{li.text}"
51
+ end
52
+ end
53
+
54
+ # Replace sans-serif font with monospace
55
+ to_asciimath.css('font[style*="sans-serif"]').each do |x|
56
+ x.replace "`#{x.text}`"
57
+ end
58
+
59
+ html_entities_to_stem(
60
+ to_asciimath.children.to_s.gsub(/\]stem:\[/, '').gsub(/<\/?[uo]l>/, '')
61
+ )
62
+ end
63
+
64
+ def text_to_asciimath(text)
65
+ html_entities_to_asciimath(text.decode_html)
66
+ end
67
+
68
+ def html_entities_to_asciimath(x)
69
+ x.gsub("&alpha;", "alpha").
70
+ gsub("&beta;", "beta").
71
+ gsub("&gamma;", "gamma").
72
+ gsub("&Gamma;", "Gamma").
73
+ gsub("&delta;", "delta").
74
+ gsub("&Delta;", "Delta").
75
+ gsub("&epsilon;", "epsilon").
76
+ gsub("&varepsilon;", "varepsilon").
77
+ gsub("&zeta;", "zeta").
78
+ gsub("&eta;", "eta").
79
+ gsub("&theta;", "theta").
80
+ gsub("&Theta;", "Theta").
81
+ gsub("&vartheta;", "vartheta").
82
+ gsub("&iota;", "iota").
83
+ gsub("&kappa;", "kappa").
84
+ gsub("&lambda;", "lambda").
85
+ gsub("&Lambda;", "Lambda").
86
+ gsub("&mu;", "mu").
87
+ gsub("&nu;", "nu").
88
+ gsub("&xi;", "xi").
89
+ gsub("&Xi;", "Xi").
90
+ gsub("&pi;", "pi").
91
+ gsub("&Pi;", "Pi").
92
+ gsub("&rho;", "rho").
93
+ gsub("&beta;", "beta").
94
+ gsub("&sigma;", "sigma").
95
+ gsub("&Sigma;", "Sigma").
96
+ gsub("&tau;", "tau").
97
+ gsub("&upsilon;", "upsilon").
98
+ gsub("&phi;", "phi").
99
+ gsub("&Phi;", "Phi").
100
+ gsub("&varphi;", "varphi").
101
+ gsub("&chi;", "chi").
102
+ gsub("&psi;", "psi").
103
+ gsub("&Psi;", "Psi").
104
+ gsub("&omega;", "omega")
105
+ gsub("&#967", "χ").
106
+ gsub("&#215", "×").
107
+ gsub("&#931", "Σ").
108
+ gsub("&#961", "ρ").
109
+ gsub("&#963", "σ").
110
+ gsub("&#955", "λ").
111
+ gsub("&#964", "τ").
112
+ gsub("&#8706", "∂").
113
+ gsub("&#8804", "≤").
114
+ gsub("&#8805", "≥")
115
+ end
116
+
117
+ def html_entities_to_stem(x)
118
+ x.gsub("&alpha;", "stem:[alpha]").
119
+ gsub("&beta;", "stem:[beta]").
120
+ gsub("&gamma;", "stem:[gamma]").
121
+ gsub("&Gamma;", "stem:[Gamma]").
122
+ gsub("&delta;", "stem:[delta]").
123
+ gsub("&Delta;", "stem:[Delta]").
124
+ gsub("&epsilon;", "stem:[epsilon]").
125
+ gsub("&varepsilon;", "stem:[varepsilon]").
126
+ gsub("&zeta;", "stem:[zeta]").
127
+ gsub("&eta;", "stem:[eta]").
128
+ gsub("&theta;", "stem:[theta]").
129
+ gsub("&Theta;", "stem:[Theta]").
130
+ gsub("&vartheta;", "stem:[vartheta]").
131
+ gsub("&iota;", "stem:[iota]").
132
+ gsub("&kappa;", "stem:[kappa]").
133
+ gsub("&lambda;", "stem:[lambda]").
134
+ gsub("&Lambda;", "stem:[Lambda]").
135
+ gsub("&mu;", "stem:[mu]").
136
+ gsub("&nu;", "stem:[nu]").
137
+ gsub("&xi;", "stem:[xi]").
138
+ gsub("&Xi;", "stem:[Xi]").
139
+ gsub("&pi;", "stem:[pi]").
140
+ gsub("&Pi;", "stem:[Pi]").
141
+ gsub("&rho;", "stem:[rho]").
142
+ gsub("&beta;", "stem:[beta]").
143
+ gsub("&sigma;", "stem:[sigma]").
144
+ gsub("&Sigma;", "stem:[Sigma]").
145
+ gsub("&tau;", "stem:[tau]").
146
+ gsub("&upsilon;", "stem:[upsilon]").
147
+ gsub("&phi;", "stem:[phi]").
148
+ gsub("&Phi;", "stem:[Phi]").
149
+ gsub("&varphi;", "stem:[varphi]").
150
+ gsub("&chi;", "stem:[chi]").
151
+ gsub("&psi;", "stem:[psi]").
152
+ gsub("&Psi;", "stem:[Psi]").
153
+ gsub("&omega;", "stem:[omega]")
154
+ end
155
+ end
156
+ end
157
+ end