coradoc 0.1.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 (45) hide show
  1. checksums.yaml +7 -0
  2. data/.docker/Dockerfile +19 -0
  3. data/.docker/Makefile +35 -0
  4. data/.docker/docker-compose.yml +14 -0
  5. data/.docker/readme.md +61 -0
  6. data/.hound.yml +5 -0
  7. data/.rubocop.yml +10 -0
  8. data/CHANGELOG.md +5 -0
  9. data/CODE_OF_CONDUCT.md +84 -0
  10. data/Gemfile +5 -0
  11. data/LICENSE.txt +21 -0
  12. data/Makefile +1 -0
  13. data/README.md +69 -0
  14. data/Rakefile +7 -0
  15. data/coradoc.gemspec +38 -0
  16. data/docker-compose.yml +1 -0
  17. data/lib/coradoc/document/admonition.rb +11 -0
  18. data/lib/coradoc/document/attribute.rb +27 -0
  19. data/lib/coradoc/document/author.rb +11 -0
  20. data/lib/coradoc/document/base.rb +17 -0
  21. data/lib/coradoc/document/bibdata.rb +24 -0
  22. data/lib/coradoc/document/block.rb +34 -0
  23. data/lib/coradoc/document/header.rb +11 -0
  24. data/lib/coradoc/document/list.rb +14 -0
  25. data/lib/coradoc/document/paragraph.rb +19 -0
  26. data/lib/coradoc/document/revision.rb +11 -0
  27. data/lib/coradoc/document/section.rb +28 -0
  28. data/lib/coradoc/document/table.rb +20 -0
  29. data/lib/coradoc/document/text_element.rb +22 -0
  30. data/lib/coradoc/document/title.rb +33 -0
  31. data/lib/coradoc/document.rb +46 -0
  32. data/lib/coradoc/legacy_parser.rb +200 -0
  33. data/lib/coradoc/oscal.rb +85 -0
  34. data/lib/coradoc/parser/asciidoc/base.rb +84 -0
  35. data/lib/coradoc/parser/asciidoc/bibdata.rb +19 -0
  36. data/lib/coradoc/parser/asciidoc/content.rb +143 -0
  37. data/lib/coradoc/parser/asciidoc/header.rb +30 -0
  38. data/lib/coradoc/parser/asciidoc/section.rb +60 -0
  39. data/lib/coradoc/parser/base.rb +32 -0
  40. data/lib/coradoc/parser.rb +11 -0
  41. data/lib/coradoc/transformer.rb +178 -0
  42. data/lib/coradoc/version.rb +5 -0
  43. data/lib/coradoc.rb +19 -0
  44. data/todo.md +10 -0
  45. metadata +174 -0
@@ -0,0 +1,32 @@
1
+ require "parslet"
2
+ require "parslet/convenience"
3
+
4
+ require "coradoc/parser/asciidoc/header"
5
+ require "coradoc/parser/asciidoc/bibdata"
6
+ require "coradoc/parser/asciidoc/section"
7
+
8
+ module Coradoc
9
+ module Parser
10
+ class Base < Parslet::Parser
11
+ include Coradoc::Parser::Asciidoc::Header
12
+ include Coradoc::Parser::Asciidoc::Bibdata
13
+ include Coradoc::Parser::Asciidoc::Section
14
+
15
+ root :document
16
+ rule(:document) do
17
+ (
18
+ bibdatas.as(:bibdata) |
19
+ section.as(:section) |
20
+ header.as(:header) |
21
+ empty_line.as(:line_break) |
22
+ any.as(:unparsed)
23
+ ).repeat(1).as(:document)
24
+ end
25
+
26
+ def self.parse(filename)
27
+ content = File.read(filename)
28
+ new.parse_with_debug(content)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ require "coradoc/parser/base"
2
+
3
+ module Coradoc
4
+ module Parser
5
+ class << self
6
+ def parse(filename)
7
+ Coradoc::Parser::Base.parse(filename)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,178 @@
1
+ require "parslet"
2
+ require "coradoc/document"
3
+
4
+ module Coradoc
5
+ class Transformer < Parslet::Transform
6
+ # Header
7
+ rule(
8
+ title: simple(:title),
9
+ author: simple(:author),
10
+ revision: simple(:revision)) do
11
+ Document::Header.new(title, author: author, revision: revision)
12
+ end
13
+
14
+ # Author
15
+ rule(
16
+ first_name: simple(:first_name),
17
+ last_name: simple(:last_name),
18
+ email: simple(:email)) do
19
+ Document::Author.new(first_name, last_name, email)
20
+ end
21
+
22
+ # Revision
23
+ rule(number: simple(:number), date: simple(:date), remark: simple(:remark)) do
24
+ Document::Revision.new(number, date: date, remark: remark)
25
+ end
26
+
27
+ # Text Element
28
+ rule(text: simple(:text)) { Document::TextElement.new(text) }
29
+ rule(id: simple(:id), text: simple(:text)) do
30
+ Document::TextElement.new(text, id: id)
31
+ end
32
+
33
+ rule(text: simple(:text), break: simple(:line_break)) do
34
+ Document::TextElement.new(text, line_break: line_break)
35
+ end
36
+
37
+ rule(id: simple(:id), text: simple(:text), break: simple(:line_break)) do
38
+ Document::TextElement.new(text, id: id, line_break: line_break)
39
+ end
40
+
41
+
42
+ # Title Element
43
+ rule(
44
+ level: simple(:level),
45
+ text: simple(:text),
46
+ break: simple(:line_break)) do
47
+ Document::Title.new(text, level, line_break: line_break)
48
+ end
49
+
50
+ rule(
51
+ name: simple(:name),
52
+ level: simple(:level),
53
+ text: simple(:text),
54
+ break: simple(:line_break)) do
55
+ Document::Title.new(text, level, line_break: line_break, id: name)
56
+ end
57
+
58
+ # Paragraph
59
+ rule(paragraph: sequence(:paragraph)) do
60
+ Document::Paragraph.new(paragraph)
61
+ end
62
+
63
+ # Section
64
+ # rule(title: simple(:title)) { Document::Section.new(title) }
65
+ #
66
+ # rule(id: simple(:id), title: simple(:title), content:)
67
+ rule(
68
+ id: simple(:id),
69
+ title: simple(:title),
70
+ sections: sequence(:sections)) do
71
+ Document::Section.new(title, id: id, sections: sections)
72
+ end
73
+
74
+ rule(
75
+ id: simple(:id),
76
+ title: simple(:title),
77
+ contents: sequence(:contents),
78
+ sections: simple(:sections)) do
79
+ Document::Section.new(title, id: id, contents: contents, sections: sections)
80
+ end
81
+
82
+ rule(
83
+ id: simple(:id),
84
+ title: simple(:title),
85
+ contents: sequence(:contents),
86
+ sections: sequence(:sections)) do
87
+ Document::Section.new(title, id: id, contents: contents, sections: sections)
88
+ end
89
+
90
+ rule(example: sequence(:example)) do
91
+ Document::Block.new("", type: "example", lines: example)
92
+ end
93
+
94
+ # rule(title: simple(:title), paragraphs: sequence(:paragraphs)) do
95
+ # Document::Section.new(title, paragraphs: paragraphs)
96
+ # end
97
+ #
98
+ # rule(title: simple(:title), blocks: sequence(:blocks)) do
99
+ # Document::Section.new(title, blocks: blocks)
100
+ # end
101
+ #
102
+ # # Admonition
103
+ # rule(admonition: simple(:admonition)) { admonition }
104
+ # rule(type: simple(:type), text: simple(:text), break: simple(:line_break)) do
105
+ # Document::Admonition.new(text, type.to_s, line_break: line_break)
106
+ # end
107
+ #
108
+ # # Block
109
+ # rule(title: simple(:title), lines: sequence(:lines)) do
110
+ # Document::Block.new(title, lines: lines)
111
+ # end
112
+ #
113
+ # rule(
114
+ # title: simple(:title),
115
+ # delimiter: simple(:delimiter),
116
+ # lines: sequence(:lines)) do
117
+ # Document::Block.new(title, lines: lines, delimiter: delimiter)
118
+ # end
119
+ #
120
+ # rule(
121
+ # type: simple(:type),
122
+ # title: simple(:title),
123
+ # delimiter: simple(:delimiter),
124
+ # lines: sequence(:lines)) do
125
+ # Document::Block.new(title, lines: lines, delimiter: delimiter, type: type)
126
+ # end
127
+ #
128
+ # rule(attributes: simple(:attributes), lines: sequence(:lines)) do
129
+ # Document::Block.new(nil, lines: lines, attributes: attributes)
130
+ # end
131
+ #
132
+ # Attribute
133
+ rule(key: simple(:key), value: simple(:value)) do
134
+ Document::Attribute.new(key, value)
135
+ end
136
+
137
+ rule(key: simple(:key), value: simple(:value), break: simple(:line_break)) do
138
+ Document::Attribute.new(key, value, line_break: line_break)
139
+ end
140
+
141
+ rule(line_break: simple(:line_break)) { Document::LineBreak.new(line_break) }
142
+
143
+ rule(bibdata: sequence(:bibdata)) do
144
+ Document::Bibdata.new(bibdata)
145
+ end
146
+
147
+ # Table
148
+ rule(table: simple(:table)) { table }
149
+ rule(cols: sequence(:cols)) { Document::Table::Row.new(cols) }
150
+ rule(title: simple(:title), rows: sequence(:rows)) do
151
+ Document::Table.new(title, rows)
152
+ end
153
+
154
+ # List
155
+ rule(list: simple(:list)) { list }
156
+ rule(unnumbered: sequence(:list_items)) do
157
+ Document::List::Unnumbered.new(list_items)
158
+ end
159
+
160
+ # Highlight
161
+ rule(highlight: simple(:text)) { Document::Highlight.new(text) }
162
+
163
+ # Glossaries
164
+ rule(glossaries: sequence(:glossaries)) do
165
+ Document::Glossaries.new(glossaries)
166
+ end
167
+
168
+ rule(header: simple(:header)) { header }
169
+ rule(section: simple(:section)) { section }
170
+ rule(document: sequence(:elements)) do
171
+ Document.from_ast(elements)
172
+ end
173
+
174
+ def self.transform(syntax_tree)
175
+ new.apply(syntax_tree)
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ VERSION = "0.1.0"
5
+ end
data/lib/coradoc.rb ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "parslet"
4
+ require "coradoc/version"
5
+
6
+ require "coradoc/parser"
7
+ require "coradoc/transformer"
8
+
9
+ module Coradoc
10
+ class Error < StandardError; end
11
+
12
+ def self.root
13
+ File.dirname(__dir__)
14
+ end
15
+
16
+ def self.root_path
17
+ Pathname.new(Coradoc.root)
18
+ end
19
+ end
data/todo.md ADDED
@@ -0,0 +1,10 @@
1
+ ## Metanorma Parser
2
+
3
+ ### Todos
4
+
5
+ - Parse the ascii doc
6
+
7
+ ### References
8
+
9
+ - https://www.rubydoc.info/gems/asciidoctor/2.0.18
10
+ - https://docs.asciidoctor.org/asciidoctor/latest/api/convert-files/
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coradoc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ - Abu Nashir
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2023-06-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: parslet
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: oscal
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 0.1.1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.1.1
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: Experimental AsciiDoc parser for metanorma
99
+ email:
100
+ - open.source@ribose.com
101
+ - abunashir@gmail.com
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".docker/Dockerfile"
107
+ - ".docker/Makefile"
108
+ - ".docker/docker-compose.yml"
109
+ - ".docker/readme.md"
110
+ - ".hound.yml"
111
+ - ".rubocop.yml"
112
+ - CHANGELOG.md
113
+ - CODE_OF_CONDUCT.md
114
+ - Gemfile
115
+ - LICENSE.txt
116
+ - Makefile
117
+ - README.md
118
+ - Rakefile
119
+ - coradoc.gemspec
120
+ - docker-compose.yml
121
+ - lib/coradoc.rb
122
+ - lib/coradoc/document.rb
123
+ - lib/coradoc/document/admonition.rb
124
+ - lib/coradoc/document/attribute.rb
125
+ - lib/coradoc/document/author.rb
126
+ - lib/coradoc/document/base.rb
127
+ - lib/coradoc/document/bibdata.rb
128
+ - lib/coradoc/document/block.rb
129
+ - lib/coradoc/document/header.rb
130
+ - lib/coradoc/document/list.rb
131
+ - lib/coradoc/document/paragraph.rb
132
+ - lib/coradoc/document/revision.rb
133
+ - lib/coradoc/document/section.rb
134
+ - lib/coradoc/document/table.rb
135
+ - lib/coradoc/document/text_element.rb
136
+ - lib/coradoc/document/title.rb
137
+ - lib/coradoc/legacy_parser.rb
138
+ - lib/coradoc/oscal.rb
139
+ - lib/coradoc/parser.rb
140
+ - lib/coradoc/parser/asciidoc/base.rb
141
+ - lib/coradoc/parser/asciidoc/bibdata.rb
142
+ - lib/coradoc/parser/asciidoc/content.rb
143
+ - lib/coradoc/parser/asciidoc/header.rb
144
+ - lib/coradoc/parser/asciidoc/section.rb
145
+ - lib/coradoc/parser/base.rb
146
+ - lib/coradoc/transformer.rb
147
+ - lib/coradoc/version.rb
148
+ - todo.md
149
+ homepage: https://www.metanorma.org
150
+ licenses:
151
+ - MIT
152
+ metadata:
153
+ homepage_uri: https://www.metanorma.org
154
+ source_code_uri: https://github.com/metanorma/coradoc
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: 2.7.0
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubygems_version: 3.3.7
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: AsciiDoc parser for metanorma
174
+ test_files: []