coradoc 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []