stepmod-utils 0.2.0 → 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.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +51 -0
- data/.github/workflows/release.yml +20 -22
- data/Gemfile +2 -1
- data/Makefile +2 -0
- data/README.adoc +82 -1
- data/exe/stepmod-annotate +44 -0
- data/exe/stepmod-annotate-all +39 -0
- data/exe/stepmod-build-resource-docs-cache +19 -0
- data/exe/stepmod-convert-express-description +33 -0
- data/exe/stepmod-convert-express-resource +33 -0
- data/exe/stepmod-find-express-files +23 -0
- data/lib/stepmod/utils/cleaner.rb +11 -0
- data/lib/stepmod/utils/converters/a.rb +47 -0
- data/lib/stepmod/utils/converters/blockquote.rb +22 -0
- data/lib/stepmod/utils/converters/br.rb +15 -0
- data/lib/stepmod/utils/converters/bypass.rb +81 -0
- data/lib/stepmod/utils/converters/code.rb +19 -0
- data/lib/stepmod/utils/converters/comment.rb +16 -0
- data/lib/stepmod/utils/converters/dd.rb +15 -0
- data/lib/stepmod/utils/converters/def.rb +11 -4
- data/lib/stepmod/utils/converters/dl.rb +31 -0
- data/lib/stepmod/utils/converters/drop.rb +22 -0
- data/lib/stepmod/utils/converters/dt.rb +17 -0
- data/lib/stepmod/utils/converters/em_express_description.rb +22 -0
- data/lib/stepmod/utils/converters/eqn.rb +96 -0
- data/lib/stepmod/utils/converters/example.rb +1 -6
- data/lib/stepmod/utils/converters/express_g.rb +46 -0
- data/lib/stepmod/utils/converters/express_ref_express_description.rb +13 -0
- data/lib/stepmod/utils/converters/ext_description.rb +16 -0
- data/lib/stepmod/utils/converters/ext_descriptions.rb +14 -0
- data/lib/stepmod/utils/converters/fund_cons.rb +15 -0
- data/lib/stepmod/utils/converters/head.rb +22 -0
- data/lib/stepmod/utils/converters/hr.rb +15 -0
- data/lib/stepmod/utils/converters/ignore.rb +16 -0
- data/lib/stepmod/utils/converters/introduction.rb +15 -0
- data/lib/stepmod/utils/converters/note.rb +1 -6
- data/lib/stepmod/utils/converters/ol.rb +3 -2
- data/lib/stepmod/utils/converters/p.rb +21 -0
- data/lib/stepmod/utils/converters/pass_through.rb +13 -0
- data/lib/stepmod/utils/converters/q.rb +16 -0
- data/lib/stepmod/utils/converters/resource.rb +14 -0
- data/lib/stepmod/utils/converters/schema.rb +18 -0
- data/lib/stepmod/utils/converters/schema_diag.rb +14 -0
- data/lib/stepmod/utils/converters/strong.rb +21 -0
- data/lib/stepmod/utils/converters/sub.rb +16 -0
- data/lib/stepmod/utils/converters/sup.rb +16 -0
- data/lib/stepmod/utils/converters/text.rb +68 -0
- data/lib/stepmod/utils/html_to_asciimath.rb +157 -0
- data/lib/stepmod/utils/smrl_description_converter.rb +49 -0
- data/lib/stepmod/utils/smrl_resource_converter.rb +67 -0
- data/lib/stepmod/utils/stepmod_file_annotator.rb +54 -0
- data/lib/stepmod/utils/version.rb +1 -1
- data/migrating_from_cvs.adoc +190 -0
- metadata +54 -6
- data/.github/workflows/macos.yml +0 -39
- data/.github/workflows/ubuntu.yml +0 -53
- data/.github/workflows/windows.yml +0 -41
@@ -5,12 +5,7 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Example < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
|
9
|
-
[example]
|
10
|
-
====
|
11
|
-
#{treat_children(node, state).strip}
|
12
|
-
====
|
13
|
-
TEMPLATE
|
8
|
+
"\n\n[example]\n====\n#{treat_children(node, state).strip}\n====\n\n"
|
14
9
|
end
|
15
10
|
end
|
16
11
|
ReverseAdoc::Converters.register :example, Example.new
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class ExpressG < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
node.children.map do |child|
|
9
|
+
next unless child.name == 'imgfile'
|
10
|
+
|
11
|
+
parse_to_svg_reference(child['file'])
|
12
|
+
end.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parse_to_svg_reference(file)
|
18
|
+
return '' unless File.file?(file)
|
19
|
+
|
20
|
+
image_document = Nokogiri::XML(File.read(file))
|
21
|
+
svg_path = File.basename(image_document.xpath('//img').first['src'], '.*')
|
22
|
+
<<~SVGMAP
|
23
|
+
[.svgmap]
|
24
|
+
====
|
25
|
+
image::#{svg_path}.svg[]
|
26
|
+
|
27
|
+
#{image_document.xpath('//img.area').map.with_index(1) {|n, i| schema_reference(n['href'], i) }.join("\n")}
|
28
|
+
====
|
29
|
+
SVGMAP
|
30
|
+
end
|
31
|
+
|
32
|
+
def schema_reference(xml_path, index)
|
33
|
+
if xml_path =~ /#/
|
34
|
+
_,express_path_part = xml_path.split('#')
|
35
|
+
"* <<express:#{express_path_part.strip}>>; #{index}"
|
36
|
+
else
|
37
|
+
schema_name = File.basename(xml_path, '.*')
|
38
|
+
"* <<express:#{schema_name.strip}>>; #{index}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
ReverseAdoc::Converters.register 'express-g', ExpressG.new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Stepmod
|
2
|
+
module Utils
|
3
|
+
module Converters
|
4
|
+
class ExpressRefExpressDescription < ReverseAdoc::Converters::Base
|
5
|
+
def convert(node, _state = {})
|
6
|
+
parts = node['linkend'].to_s.split(':').last.split('.')
|
7
|
+
"<<express:#{parts.join('.').strip},#{parts.last.strip}>>"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
ReverseAdoc::Converters.register :express_ref, ExpressRefExpressDescription.new
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Stepmod
|
2
|
+
module Utils
|
3
|
+
module Converters
|
4
|
+
class ExtDescription < ReverseAdoc::Converters::Base
|
5
|
+
def convert(node, state = {})
|
6
|
+
<<~TEMPLATE
|
7
|
+
(*"#{node['linkend']}"
|
8
|
+
#{treat_children(node, state).strip}
|
9
|
+
*)
|
10
|
+
TEMPLATE
|
11
|
+
end
|
12
|
+
end
|
13
|
+
ReverseAdoc::Converters.register :ext_description, ExtDescription.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 ExtDescriptions < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
treat_children(node, state)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
ReverseAdoc::Converters.register :ext_descriptions, ExtDescriptions.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class FundCons < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
"\n\n== Fundamental concerns\n\n#{treat_children(node, state).strip}\n\n"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAdoc::Converters.register :fund_cons, FundCons.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -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
|
@@ -5,12 +5,7 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Note < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
|
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
11
|
ReverseAdoc::Converters.register :note, Note.new
|
@@ -9,8 +9,9 @@ module Stepmod
|
|
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
|
-
|
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
|
|
@@ -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,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
|
@@ -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
|
@@ -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/, " ")
|
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
|