coradoc 1.1.4 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e528645f0bdb38f707239ed1862dc74944dc7eba4149cf9f1243458e98591edb
4
- data.tar.gz: 268acd80823a507d3a86e83bfeaef55a8145819822aac9903f0bc96cee29d55c
3
+ metadata.gz: 1f44a34ea3abbb6cff77d55b6516b74400db157035c2134a674ad5fe49a11f94
4
+ data.tar.gz: aa000ad423925a5e39f410e72e543071f5aa33e5a10c2cdefc10ee8e3bfa3c57
5
5
  SHA512:
6
- metadata.gz: 624f718300d0877f0d610a3fbf953b324d5bfd6a73c68de30db69ddc75b45e1b396eeb5bdfdcfc7d0ecac2d50c8301d7011f118a2d23d4ac02d11c2e54e92e6a
7
- data.tar.gz: 849b5851b2ca0b37313d8f7c743defbc168f698284c694c0a467536dbffd9cc10f5ec263fd2c28e1f287a926c6acbe3756c8753f6f3ae303dc61fc9678981ff1
6
+ metadata.gz: f8f0ddca5617607309d097195635f5b316b84f031c381cfe9dc8274e557beadb4d610ad990909d219e49297bdedb67034889902e7dcbcfdf2617ec578fc75f69
7
+ data.tar.gz: 6a98d048011b6314b2c9ae457e43f10730b0238f1329d4cae7d38494966d23b2e13a75dc4f4df1cb4938e5451b3363c5514be15aa6f1f55a4dbfb26eab6c7307
data/Gemfile CHANGED
@@ -3,3 +3,14 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
+
7
+ gem "codeclimate-test-reporter"
8
+ gem "pry"
9
+ gem "rake"
10
+ gem "redcarpet"
11
+ gem "rspec"
12
+ gem "rubocop"
13
+ gem "rubocop-performance"
14
+ gem "simplecov"
15
+ # gem "parallel_tests"
16
+ # gem "stackprof"
data/README.adoc CHANGED
@@ -1,6 +1,4 @@
1
- :sandi-metz: footnote:[http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers]
2
-
3
- = Coradoc
1
+ = Coradoc: object-oriented AsciiDoc parser
4
2
 
5
3
  Coradoc is a modern Parser for Asciidoc document. It defines a grammar for
6
4
  AsciiDoc, and then build the Parser for that grammar.
@@ -31,12 +29,7 @@ Or install it yourself as:
31
29
  gem install coradoc
32
30
  ----
33
31
 
34
- == Development
35
32
 
36
- We are following Sandi Metz's Rules for this gem, you can read the
37
- description of the rules here.{sandi-metz} All new code should follow these
38
- rules. If you make changes in a pre-existing file that violates these rules you
39
- should fix the violations as part of your contribution.
40
33
 
41
34
  == Setup
42
35
 
data/coradoc.gemspec CHANGED
@@ -29,23 +29,12 @@ Gem::Specification.new do |spec|
29
29
  spec.required_ruby_version = ">= 2.7.0"
30
30
 
31
31
  spec.add_dependency "marcel", "~> 1.0.0"
32
- spec.add_dependency "mathml2asciimath"
32
+ spec.add_dependency "plurimath"
33
+ spec.add_dependency "unitsml"
33
34
  spec.add_dependency "nokogiri", "~> 1.13"
34
35
  spec.add_dependency "oscal", "~> 0.1.1"
35
36
  spec.add_dependency "parslet"
36
- spec.add_dependency "premailer", "~> 1.11.0"
37
37
  spec.add_dependency "word-to-markdown"
38
38
  spec.add_dependency "base64"
39
39
  spec.add_dependency "thor", ">= 1.3.0"
40
- spec.add_development_dependency "codeclimate-test-reporter"
41
- spec.add_development_dependency "pry"
42
- spec.add_development_dependency "rake"
43
- spec.add_development_dependency "redcarpet"
44
- spec.add_development_dependency "rspec"
45
- spec.add_development_dependency "rubocop"
46
- spec.add_development_dependency "rubocop-performance"
47
- spec.add_development_dependency "simplecov"
48
- # spec.add_development_dependency "parallel_tests"
49
- # spec.add_development_dependency "stackprof"
50
- # spec.add_runtime_dependency "thor"
51
40
  end
@@ -15,26 +15,83 @@ module Coradoc
15
15
  @line_break = options.fetch(:line_break, "\n")
16
16
  end
17
17
 
18
+ def inline?(elem)
19
+ case elem
20
+ when Inline::HardLineBreak
21
+ :hardbreak
22
+ when ->(i){ i.class.name.to_s.include? "::Inline::" }
23
+ true
24
+ when String, TextElement, Image::InlineImage
25
+ true
26
+ else
27
+ false
28
+ end
29
+ end
30
+
18
31
  def to_adoc
19
32
  anchor = @anchor.nil? ? "" : " #{@anchor.to_adoc.to_s} "
20
33
  # text = Coradoc::Generator.gen_adoc(@content)
21
- content = Array(@content).map do |subitem|
22
- next if subitem.is_a? Inline::HardLineBreak
34
+ content = Array(@content).flatten.compact
35
+ out = ""
36
+ prev_inline = :init
37
+
38
+ # Collapse meaningless <DIV>s
39
+ while content.map(&:class) == [Section] && content.first.safe_to_collapse?
40
+ content = Array(content.first.contents)
41
+ end
23
42
 
43
+ content.each_with_index do |subitem, idx|
24
44
  subcontent = Coradoc::Generator.gen_adoc(subitem)
45
+
46
+ inline = inline?(subitem)
47
+ next_inline = idx+1 == content.length ? :end : inline?(content[idx+1])
48
+
25
49
  # Only try to postprocess elements that are text,
26
50
  # otherwise we could strip markup.
27
- if Coradoc.a_single?(subitem, Coradoc::Element::TextElement)
28
- subcontent = Coradoc.strip_unicode(subcontent)
51
+ if subitem.is_a? Coradoc::Element::TextElement
52
+ if [:hardbreak, :init, false].include?(prev_inline)
53
+ subcontent = Coradoc.strip_unicode(subcontent, only: :begin)
54
+ end
55
+ if [:hardbreak, :end, false].include?(next_inline)
56
+ subcontent = Coradoc.strip_unicode(subcontent, only: :end)
57
+ end
29
58
  end
30
- subcontent
31
- end.compact.join("\n+\n")
59
+
60
+ case inline
61
+ when true
62
+ if prev_inline == false
63
+ out += "\n+\n" + subcontent
64
+ else
65
+ out += subcontent
66
+ end
67
+ when false
68
+ case prev_inline
69
+ when :hardbreak
70
+ out += subcontent.strip
71
+ when :init
72
+ out += "{empty}\n+\n" + subcontent.strip
73
+ else
74
+ out += "\n+\n" + subcontent.strip
75
+ end
76
+ when :hardbreak
77
+ if %i[hardbreak init].include? prev_inline
78
+ # can't have two hard breaks in a row; can't start with a hard break
79
+ else
80
+ out += "\n+\n"
81
+ end
82
+ end
83
+
84
+ prev_inline = inline
85
+ end
86
+ out += "{empty}" if prev_inline == :hardbreak
87
+ out = "{empty}" if out.empty?
88
+
32
89
  # attach = Coradoc::Generator.gen_adoc(@attached)
33
90
  attach = @attached.map do |elem|
34
91
  "+\n" + Coradoc::Generator.gen_adoc(elem)
35
92
  end.join
36
93
  nest = Coradoc::Generator.gen_adoc(@nested)
37
- out = " #{anchor}#{content}#{@line_break}"
94
+ out = " #{anchor}#{out}#{@line_break}"
38
95
  out + attach + nest
39
96
  end
40
97
  end
@@ -2,7 +2,7 @@
2
2
  # this is cheating: we're injecting MathML into Asciidoctor, but
3
3
  # Asciidoctor only understands AsciiMath or LaTeX
4
4
 
5
- require "mathml2asciimath"
5
+ require "plurimath"
6
6
 
7
7
  module Coradoc::Input::HTML
8
8
  module Converters
@@ -14,7 +14,10 @@ module Coradoc::Input::HTML
14
14
 
15
15
  def convert(node, _state = {})
16
16
  stem = node.to_s.gsub(/\n/, " ")
17
- stem = MathML2AsciiMath.m2a(stem) if Coradoc::Input::HTML.config.mathml2asciimath
17
+ if Coradoc::Input::HTML.config.mathml2asciimath
18
+ stem = Plurimath::Math.parse(stem, :mathml).to_asciimath
19
+ end
20
+
18
21
  unless stem.nil?
19
22
  stem = stem.gsub(/\[/, "\\[").gsub(/\]/, "\\]").gsub(
20
23
  /\(\(([^\)]+)\)\)/, "(\\1)"
data/lib/coradoc/util.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Coradoc
2
- def self.strip_unicode(str)
3
- str.gsub(/\A[[:space:]]+|[[:space:]]+\z/, "")
2
+ def self.strip_unicode(str, only: nil)
3
+ str = str.gsub(/\A[[:space:]]+/, "") unless only == :end
4
+ str = str.gsub(/[[:space:]]+\z/, "") unless only == :begin
5
+ str
4
6
  end
5
7
 
6
8
  def self.a_single?(obj, klass)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Coradoc
4
- VERSION = "1.1.4"
4
+ VERSION = "1.1.6"
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coradoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  - Abu Nashir
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-12-06 00:00:00.000000000 Z
12
+ date: 2025-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: marcel
@@ -26,7 +26,21 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.0.0
28
28
  - !ruby/object:Gem::Dependency
29
- name: mathml2asciimath
29
+ name: plurimath
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: unitsml
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
46
  - - ">="
@@ -81,20 +95,6 @@ dependencies:
81
95
  - - ">="
82
96
  - !ruby/object:Gem::Version
83
97
  version: '0'
84
- - !ruby/object:Gem::Dependency
85
- name: premailer
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: 1.11.0
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: 1.11.0
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: word-to-markdown
100
100
  requirement: !ruby/object:Gem::Requirement
@@ -137,118 +137,6 @@ dependencies:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: 1.3.0
140
- - !ruby/object:Gem::Dependency
141
- name: codeclimate-test-reporter
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '0'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: '0'
154
- - !ruby/object:Gem::Dependency
155
- name: pry
156
- requirement: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: '0'
161
- type: :development
162
- prerelease: false
163
- version_requirements: !ruby/object:Gem::Requirement
164
- requirements:
165
- - - ">="
166
- - !ruby/object:Gem::Version
167
- version: '0'
168
- - !ruby/object:Gem::Dependency
169
- name: rake
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- version: '0'
175
- type: :development
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
- - !ruby/object:Gem::Dependency
183
- name: redcarpet
184
- requirement: !ruby/object:Gem::Requirement
185
- requirements:
186
- - - ">="
187
- - !ruby/object:Gem::Version
188
- version: '0'
189
- type: :development
190
- prerelease: false
191
- version_requirements: !ruby/object:Gem::Requirement
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- version: '0'
196
- - !ruby/object:Gem::Dependency
197
- name: rspec
198
- requirement: !ruby/object:Gem::Requirement
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- version: '0'
203
- type: :development
204
- prerelease: false
205
- version_requirements: !ruby/object:Gem::Requirement
206
- requirements:
207
- - - ">="
208
- - !ruby/object:Gem::Version
209
- version: '0'
210
- - !ruby/object:Gem::Dependency
211
- name: rubocop
212
- requirement: !ruby/object:Gem::Requirement
213
- requirements:
214
- - - ">="
215
- - !ruby/object:Gem::Version
216
- version: '0'
217
- type: :development
218
- prerelease: false
219
- version_requirements: !ruby/object:Gem::Requirement
220
- requirements:
221
- - - ">="
222
- - !ruby/object:Gem::Version
223
- version: '0'
224
- - !ruby/object:Gem::Dependency
225
- name: rubocop-performance
226
- requirement: !ruby/object:Gem::Requirement
227
- requirements:
228
- - - ">="
229
- - !ruby/object:Gem::Version
230
- version: '0'
231
- type: :development
232
- prerelease: false
233
- version_requirements: !ruby/object:Gem::Requirement
234
- requirements:
235
- - - ">="
236
- - !ruby/object:Gem::Version
237
- version: '0'
238
- - !ruby/object:Gem::Dependency
239
- name: simplecov
240
- requirement: !ruby/object:Gem::Requirement
241
- requirements:
242
- - - ">="
243
- - !ruby/object:Gem::Version
244
- version: '0'
245
- type: :development
246
- prerelease: false
247
- version_requirements: !ruby/object:Gem::Requirement
248
- requirements:
249
- - - ">="
250
- - !ruby/object:Gem::Version
251
- version: '0'
252
140
  description: Experimental AsciiDoc parser for metanorma
253
141
  email:
254
142
  - open.source@ribose.com
@@ -419,7 +307,6 @@ files:
419
307
  - lib/coradoc/util.rb
420
308
  - lib/coradoc/version.rb
421
309
  - lib/reverse_adoc.rb
422
- - todo.md
423
310
  - utils/parser_analyzer.rb
424
311
  - utils/round_trip.rb
425
312
  homepage: https://www.metanorma.org
@@ -428,7 +315,7 @@ licenses:
428
315
  metadata:
429
316
  homepage_uri: https://www.metanorma.org
430
317
  source_code_uri: https://github.com/metanorma/coradoc
431
- post_install_message:
318
+ post_install_message:
432
319
  rdoc_options: []
433
320
  require_paths:
434
321
  - lib
@@ -444,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
444
331
  version: '0'
445
332
  requirements: []
446
333
  rubygems_version: 3.3.27
447
- signing_key:
334
+ signing_key:
448
335
  specification_version: 4
449
336
  summary: AsciiDoc parser for metanorma
450
337
  test_files: []
data/todo.md DELETED
@@ -1,10 +0,0 @@
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/