arrolio 0.1.0 → 0.1.2

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/Rakefile +15 -0
  4. data/TODO.complete/56-generic-adapter-mece-decomposition.md +20 -0
  5. data/TODO.complete/60-adapter-fidelity-footnotes-notes-examples.md +92 -55
  6. data/TODO.complete/70-ttf-font-metrics-parity.md +68 -0
  7. data/TODO.complete/71-cover-layout-parity.md +45 -0
  8. data/TODO.complete/72-table-layout-parity.md +49 -0
  9. data/TODO.complete/73-toc-leaders-parity.md +55 -0
  10. data/TODO.complete/74-svg-image-rendering-parity.md +76 -0
  11. data/TODO.complete/75-mathml-formula-rendering-parity.md +52 -0
  12. data/TODO.complete/76-odd-even-page-templates-parity.md +50 -0
  13. data/TODO.complete/77-text-formatting-parity.md +55 -0
  14. data/TODO.complete/78-bibliography-formatting-parity.md +62 -0
  15. data/TODO.complete/79-line-breaking-parity.md +80 -0
  16. data/TODO.complete/80-parity-diff-harness-in-ci.md +68 -0
  17. data/TODO.complete/81-conditional-style-refinements.md +70 -0
  18. data/TODO.complete/82-semantic-presentation-dedup.md +65 -0
  19. data/TODO.complete/83-nested-list-support.md +74 -0
  20. data/TODO.complete/84-figure-svg-rendering.md +70 -0
  21. data/TODO.complete/85-locality-reference-formatting.md +48 -0
  22. data/TODO.complete/86-list-item-text-overflow.md +80 -0
  23. data/TODO.complete/87-odd-even-page-templates.md +55 -0
  24. data/TODO.complete/88-hyphenation-support.md +52 -0
  25. data/TODO.complete/89-table-rowspan.md +49 -0
  26. data/TODO.complete/90-mathml-stacked-layout.md +65 -0
  27. data/TODO.complete/91-parity-diff-diagnostics.md +50 -0
  28. data/TODO.complete/92-table-cell-height-parity.md +66 -0
  29. data/TODO.complete/93-figure-text-searchability.md +49 -0
  30. data/TODO.complete/94-fo-space-resolution.md +63 -0
  31. data/TODO.complete/95-title-header-placement.md +55 -0
  32. data/TODO.complete/96-pagination-drift-parity.md +517 -0
  33. data/TODO.complete/README.md +58 -38
  34. data/lib/arrolio/config_driven_pipeline.rb +45 -1
  35. data/lib/arrolio/content/document.rb +4 -3
  36. data/lib/arrolio/content/section.rb +3 -0
  37. data/lib/arrolio/content/table.rb +25 -14
  38. data/lib/arrolio/embedded_block_extractor.rb +54 -0
  39. data/lib/arrolio/engine/paged.rb +109 -28
  40. data/lib/arrolio/flavor/manifest.rb +0 -1
  41. data/lib/arrolio/flavor/registry.rb +1 -1
  42. data/lib/arrolio/flowable.rb +21 -0
  43. data/lib/arrolio/flowables/figure_flowable.rb +17 -0
  44. data/lib/arrolio/flowables/footnote_marker_flowable.rb +32 -13
  45. data/lib/arrolio/flowables/group_flowable.rb +57 -0
  46. data/lib/arrolio/flowables/list_flowable.rb +46 -18
  47. data/lib/arrolio/flowables/note_flowable.rb +84 -9
  48. data/lib/arrolio/flowables/page_sequence_start.rb +8 -4
  49. data/lib/arrolio/flowables/positioned_block.rb +55 -0
  50. data/lib/arrolio/flowables/rotated_text.rb +51 -0
  51. data/lib/arrolio/flowables/table_flowable.rb +303 -71
  52. data/lib/arrolio/flowables/text_flowable.rb +67 -11
  53. data/lib/arrolio/flowables/toc_line_flowable.rb +70 -7
  54. data/lib/arrolio/flowables.rb +4 -0
  55. data/lib/arrolio/font/embedder.rb +22 -3
  56. data/lib/arrolio/font_scanner.rb +133 -0
  57. data/lib/arrolio/generic_adapter/document_extraction.rb +101 -0
  58. data/lib/arrolio/generic_adapter/footnote_extraction.rb +81 -0
  59. data/lib/arrolio/generic_adapter/heading_extraction.rb +92 -0
  60. data/lib/arrolio/generic_adapter/inline_run_collection.rb +136 -0
  61. data/lib/arrolio/generic_adapter/list_conversion.rb +70 -0
  62. data/lib/arrolio/generic_adapter/metadata_extraction.rb +46 -0
  63. data/lib/arrolio/generic_adapter/table_conversion.rb +105 -0
  64. data/lib/arrolio/generic_adapter.rb +263 -317
  65. data/lib/arrolio/generic_flow_builder/bibliography.rb +47 -0
  66. data/lib/arrolio/generic_flow_builder/figures.rb +90 -0
  67. data/lib/arrolio/generic_flow_builder/lists.rb +66 -0
  68. data/lib/arrolio/generic_flow_builder/notes.rb +61 -0
  69. data/lib/arrolio/generic_flow_builder/sequences.rb +102 -0
  70. data/lib/arrolio/generic_flow_builder/tables.rb +28 -0
  71. data/lib/arrolio/generic_flow_builder/terms.rb +89 -0
  72. data/lib/arrolio/generic_flow_builder.rb +92 -187
  73. data/lib/arrolio/glyph_measurer.rb +16 -5
  74. data/lib/arrolio/inline_run.rb +2 -1
  75. data/lib/arrolio/layout_spec/page_template.rb +14 -8
  76. data/lib/arrolio/math_ml/inline_run_extractor.rb +272 -0
  77. data/lib/arrolio/math_ml.rb +7 -0
  78. data/lib/arrolio/output/page.rb +5 -4
  79. data/lib/arrolio/output/placed_box.rb +5 -2
  80. data/lib/arrolio/renderer/pdf/assets.rb +94 -0
  81. data/lib/arrolio/renderer/pdf/font_embedding.rb +77 -0
  82. data/lib/arrolio/renderer/pdf/metadata.rb +52 -0
  83. data/lib/arrolio/renderer/pdf.rb +140 -215
  84. data/lib/arrolio/style/definition.rb +7 -3
  85. data/lib/arrolio/style/registry.rb +6 -1
  86. data/lib/arrolio/table/auto_layout.rb +19 -10
  87. data/lib/arrolio/table/grid.rb +105 -0
  88. data/lib/arrolio/table.rb +1 -0
  89. data/lib/arrolio/text_layout/greedy.rb +15 -1
  90. data/lib/arrolio/text_layout/knuth_plass/breaker.rb +216 -92
  91. data/lib/arrolio/text_layout/knuth_plass/item_builder.rb +31 -17
  92. data/lib/arrolio/text_layout/knuth_plass.rb +3 -0
  93. data/lib/arrolio/text_layout/line.rb +10 -2
  94. data/lib/arrolio/version.rb +1 -1
  95. data/lib/arrolio.rb +8 -4
  96. data/scripts/parity_check.rb +52 -0
  97. data/scripts/parity_diff.rb +89 -0
  98. data/scripts/xsl_profiles/standoc.yml +8 -2
  99. data/scripts/xsl_to_config.rb +28 -1
  100. metadata +91 -5
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Parity diff diagnostics: shows per-page text differences between
5
+ # our rendered PDF and the reference PDF.
6
+ #
7
+ # Usage:
8
+ # bundle exec ruby scripts/parity_diff.rb # all pages
9
+ # bundle exec ruby scripts/parity_diff.rb 5 # page 5 only
10
+ # bundle exec ruby scripts/parity_diff.rb 19 20 21 # pages 19-21
11
+
12
+ require 'arrolio'
13
+ require 'fileutils'
14
+
15
+ module ParityDiff
16
+ OURS = File.expand_path('tmp/parity_check.pdf', Dir.pwd)
17
+ REFERENCE = File.expand_path('~/src/mn/mn-samples-oiml/_site/documents/r060/1/document.pdf')
18
+ FIXTURE = File.expand_path('~/src/mn/mn-samples-oiml/_site/documents/r060/1/document.presentation.xml')
19
+ SOURCE_DIR = File.expand_path('~/src/mn/mn-samples-oiml/sources/r060/1')
20
+ FLAVOR_DIR = File.expand_path('flavors/oiml', Dir.pwd)
21
+
22
+ def self.run(pages = nil)
23
+ render_ours unless File.exist?(OURS)
24
+ unless File.exist?(OURS) && File.exist?(REFERENCE)
25
+ warn 'PDFs not found. Run parity:check first.'
26
+ return
27
+ end
28
+
29
+ ours_pages = page_count(OURS)
30
+ ref_pages = page_count(REFERENCE)
31
+ target_pages = pages&.map(&:to_i) || (1..[ours_pages, ref_pages].max).to_a
32
+
33
+ target_pages.each do |page_num|
34
+ puts '=' * 70
35
+ puts "PAGE #{page_num}"
36
+ puts '=' * 70
37
+ ours_text = extract_text(OURS, page_num)
38
+ ref_text = extract_text(REFERENCE, page_num)
39
+ show_diff(ours_text, ref_text)
40
+ puts ''
41
+ end
42
+ end
43
+
44
+ def self.render_ours
45
+ require 'arrolio/config_driven_pipeline'
46
+ xml = File.read(FIXTURE)
47
+ FileUtils.mkdir_p(File.dirname(OURS))
48
+ Arrolio::ConfigDrivenPipeline.render(
49
+ xml, io: OURS, flavor_dir: FLAVOR_DIR,
50
+ input_path: FIXTURE, extra_image_dirs: [SOURCE_DIR]
51
+ )
52
+ end
53
+
54
+ def self.page_count(pdf)
55
+ `pdftotext "#{pdf}" - 2>/dev/null`.scan("\f").length + 1
56
+ rescue StandardError
57
+ 0
58
+ end
59
+
60
+ def self.extract_text(pdf, page)
61
+ `pdftotext -f #{page} -l #{page} "#{pdf}" - 2>/dev/null`
62
+ .delete("\f").strip
63
+ end
64
+
65
+ def self.show_diff(ours, ref)
66
+ our_lines = ours.split("\n")
67
+ ref_lines = ref.split("\n")
68
+ max_lines = [our_lines.length, ref_lines.length].max
69
+
70
+ max_lines.times do |i|
71
+ our_line = our_lines[i] || ''
72
+ ref_line = ref_lines[i] || ''
73
+
74
+ if our_line == ref_line
75
+ puts " #{our_line}"
76
+ elsif our_line.empty?
77
+ puts "+ #{ref_line}" # missing from ours
78
+ elsif ref_line.empty?
79
+ puts "- #{our_line}" # extra in ours
80
+ else
81
+ puts "~ OURS: #{our_line}"
82
+ puts " REF: #{ref_line}"
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ pages = ARGV.empty? ? nil : ARGV
89
+ ParityDiff.run(pages)
@@ -85,6 +85,9 @@ skip_metadata_elements:
85
85
  - referenceTo
86
86
  - origin
87
87
  - source
88
+ - xref
89
+ - eref
90
+ - identifier
88
91
 
89
92
  skip_elements:
90
93
  - title
@@ -146,6 +149,8 @@ metadata_fields:
146
149
  docnumber: docnumber
147
150
  edition: edition
148
151
  revision_date: version/revision-date
152
+ version_text: version
153
+ part_number: bibdata/ext/structuredidentifier/project-number/@part
149
154
  title: "title[@type='main']"
150
155
  title_intro: "title[@type='title-intro']"
151
156
  title_main: "title[@type='title-main']"
@@ -162,9 +167,10 @@ cover_fields:
162
167
  - title_main
163
168
  - title_complementary
164
169
  - title_part
170
+ - title_part_prefix
165
171
 
166
172
  style_overrides:
167
- body_margin_bottom: 8
173
+ body_margin_bottom: 0
168
174
  strong_font_name: "Times New Roman Bold"
169
175
  em_font_name: "Times New Roman Italic"
170
176
  identifier_font_name: "Times New Roman Italic"
@@ -215,4 +221,4 @@ cover_content:
215
221
  source: "{{docidentifier}} {{edition}}"
216
222
  style: cover_label
217
223
 
218
- header_template: "{{docidentifier}}: {{edition}}"
224
+ header_template: "{{docidentifier}}: {{revision_date}}"
@@ -14,6 +14,9 @@ module XslConfigGenerator
14
14
  end
15
15
 
16
16
  class Builder
17
+ # Border/padding allowance added to the XSL row min-height.
18
+ ROW_ALLOWANCE = 1.92
19
+
17
20
  def initialize(xsl_path, output_dir, profile_path)
18
21
  @xsl_path = File.expand_path(xsl_path)
19
22
  @output_dir = File.expand_path(output_dir)
@@ -76,8 +79,11 @@ module XslConfigGenerator
76
79
 
77
80
  def text_styles
78
81
  o = @profile['style_overrides'] || {}
82
+ body_style = style_from('root-style', 'clause_style')
83
+ body_style['margin_bottom'] = o['body_margin_bottom'] || 8
84
+ body_style['line_break'] = o['body_line_break'] if o['body_line_break']
79
85
  {
80
- 'body' => style_from('root-style', 'clause_style').merge('margin_bottom' => o['body_margin_bottom'] || 8),
86
+ 'body' => body_style,
81
87
  **heading_styles,
82
88
  'note' => style_from('note-style').merge('parent' => 'body'),
83
89
  'termnote' => style_from('termnote-style').merge('parent' => 'body'),
@@ -110,6 +116,26 @@ module XslConfigGenerator
110
116
  }
111
117
  end
112
118
 
119
+ # Row geometry extracted from the flavor XSL: table-row-style's
120
+ # min-height (e.g. 8.3mm) plus ROW_ALLOWANCE, the border/padding
121
+ # allowance measured against mn2pdf output (the rendered pitch is
122
+ # ~1.9pt above the bare min-height). Cell padding and footnote
123
+ # size default to values calibrated against the reference PDF.
124
+ def table_geometry
125
+ min_height = @attribute_sets.dig('table-row-style', 'min-height')
126
+ min_height_mm = min_height&.gsub(/[^\d.]/, '')
127
+ min_row_height = if min_height_mm
128
+ ((min_height_mm.to_f * 2.83464567) + ROW_ALLOWANCE).round(2)
129
+ else
130
+ 0.0
131
+ end
132
+ {
133
+ 'min_row_height' => min_row_height,
134
+ 'cell_padding' => 3.3,
135
+ 'footnote_font_size' => 9.0
136
+ }
137
+ end
138
+
113
139
  def table_styles
114
140
  o = @profile['style_overrides'] || {}
115
141
  {
@@ -222,6 +248,7 @@ module XslConfigGenerator
222
248
  'xsl_templates' => @templates.select { |template| template['name'] },
223
249
  'page_sequences' => page_sequences,
224
250
  'cover_content' => @profile['cover_content'] || [],
251
+ 'table' => table_geometry,
225
252
  'section' => {
226
253
  'heading_style' => '{{title_style_id}}',
227
254
  'body_style' => '{{style_id}}',
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arrolio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
+ autorequire:
8
9
  bindir: exe
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-08-29 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: fontisan
@@ -29,6 +30,34 @@ dependencies:
29
30
  - - "<"
30
31
  - !ruby/object:Gem::Version
31
32
  version: '1.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: fontist
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: mml
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.4'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.4'
32
61
  - !ruby/object:Gem::Dependency
33
62
  name: nokogiri
34
63
  requirement: !ruby/object:Gem::Requirement
@@ -49,14 +78,14 @@ dependencies:
49
78
  requirements:
50
79
  - - "~>"
51
80
  - !ruby/object:Gem::Version
52
- version: 0.3.0
81
+ version: '0.7'
53
82
  type: :runtime
54
83
  prerelease: false
55
84
  version_requirements: !ruby/object:Gem::Requirement
56
85
  requirements:
57
86
  - - "~>"
58
87
  - !ruby/object:Gem::Version
59
- version: 0.3.0
88
+ version: '0.7'
60
89
  - !ruby/object:Gem::Dependency
61
90
  name: rexml
62
91
  requirement: !ruby/object:Gem::Requirement
@@ -168,6 +197,33 @@ files:
168
197
  - TODO.complete/63-purge-hardcoded-vocabulary-from-generic-core.md
169
198
  - TODO.complete/64-selector-driven-adapter-specs.md
170
199
  - TODO.complete/66-semantic-content-types.md
200
+ - TODO.complete/70-ttf-font-metrics-parity.md
201
+ - TODO.complete/71-cover-layout-parity.md
202
+ - TODO.complete/72-table-layout-parity.md
203
+ - TODO.complete/73-toc-leaders-parity.md
204
+ - TODO.complete/74-svg-image-rendering-parity.md
205
+ - TODO.complete/75-mathml-formula-rendering-parity.md
206
+ - TODO.complete/76-odd-even-page-templates-parity.md
207
+ - TODO.complete/77-text-formatting-parity.md
208
+ - TODO.complete/78-bibliography-formatting-parity.md
209
+ - TODO.complete/79-line-breaking-parity.md
210
+ - TODO.complete/80-parity-diff-harness-in-ci.md
211
+ - TODO.complete/81-conditional-style-refinements.md
212
+ - TODO.complete/82-semantic-presentation-dedup.md
213
+ - TODO.complete/83-nested-list-support.md
214
+ - TODO.complete/84-figure-svg-rendering.md
215
+ - TODO.complete/85-locality-reference-formatting.md
216
+ - TODO.complete/86-list-item-text-overflow.md
217
+ - TODO.complete/87-odd-even-page-templates.md
218
+ - TODO.complete/88-hyphenation-support.md
219
+ - TODO.complete/89-table-rowspan.md
220
+ - TODO.complete/90-mathml-stacked-layout.md
221
+ - TODO.complete/91-parity-diff-diagnostics.md
222
+ - TODO.complete/92-table-cell-height-parity.md
223
+ - TODO.complete/93-figure-text-searchability.md
224
+ - TODO.complete/94-fo-space-resolution.md
225
+ - TODO.complete/95-title-header-placement.md
226
+ - TODO.complete/96-pagination-drift-parity.md
171
227
  - TODO.complete/README.md
172
228
  - TODO.implementation/01-foundation.md
173
229
  - TODO.implementation/02-content-contract.md
@@ -281,6 +337,7 @@ files:
281
337
  - lib/arrolio/content/table.rb
282
338
  - lib/arrolio/content/term_entry.rb
283
339
  - lib/arrolio/data_dir.rb
340
+ - lib/arrolio/embedded_block_extractor.rb
284
341
  - lib/arrolio/engine.rb
285
342
  - lib/arrolio/engine/cross_reference_registry.rb
286
343
  - lib/arrolio/engine/paged.rb
@@ -291,13 +348,17 @@ files:
291
348
  - lib/arrolio/flow_context.rb
292
349
  - lib/arrolio/flowable.rb
293
350
  - lib/arrolio/flowables.rb
351
+ - lib/arrolio/flowables/figure_flowable.rb
294
352
  - lib/arrolio/flowables/footnote_marker_flowable.rb
353
+ - lib/arrolio/flowables/group_flowable.rb
295
354
  - lib/arrolio/flowables/heading_flowable.rb
296
355
  - lib/arrolio/flowables/image_flowable.rb
297
356
  - lib/arrolio/flowables/list_flowable.rb
298
357
  - lib/arrolio/flowables/note_flowable.rb
299
358
  - lib/arrolio/flowables/page_break.rb
300
359
  - lib/arrolio/flowables/page_sequence_start.rb
360
+ - lib/arrolio/flowables/positioned_block.rb
361
+ - lib/arrolio/flowables/rotated_text.rb
301
362
  - lib/arrolio/flowables/spacer.rb
302
363
  - lib/arrolio/flowables/table_flowable.rb
303
364
  - lib/arrolio/flowables/text_flowable.rb
@@ -312,9 +373,24 @@ files:
312
373
  - lib/arrolio/font_metrics/afm_metrics.rb
313
374
  - lib/arrolio/font_metrics/registry.rb
314
375
  - lib/arrolio/font_metrics/true_type_metrics.rb
376
+ - lib/arrolio/font_scanner.rb
315
377
  - lib/arrolio/frame.rb
316
378
  - lib/arrolio/generic_adapter.rb
379
+ - lib/arrolio/generic_adapter/document_extraction.rb
380
+ - lib/arrolio/generic_adapter/footnote_extraction.rb
381
+ - lib/arrolio/generic_adapter/heading_extraction.rb
382
+ - lib/arrolio/generic_adapter/inline_run_collection.rb
383
+ - lib/arrolio/generic_adapter/list_conversion.rb
384
+ - lib/arrolio/generic_adapter/metadata_extraction.rb
385
+ - lib/arrolio/generic_adapter/table_conversion.rb
317
386
  - lib/arrolio/generic_flow_builder.rb
387
+ - lib/arrolio/generic_flow_builder/bibliography.rb
388
+ - lib/arrolio/generic_flow_builder/figures.rb
389
+ - lib/arrolio/generic_flow_builder/lists.rb
390
+ - lib/arrolio/generic_flow_builder/notes.rb
391
+ - lib/arrolio/generic_flow_builder/sequences.rb
392
+ - lib/arrolio/generic_flow_builder/tables.rb
393
+ - lib/arrolio/generic_flow_builder/terms.rb
318
394
  - lib/arrolio/glyph_measurer.rb
319
395
  - lib/arrolio/harness.rb
320
396
  - lib/arrolio/harness/pdf_diff.rb
@@ -330,6 +406,8 @@ files:
330
406
  - lib/arrolio/layout_spec/region.rb
331
407
  - lib/arrolio/layout_spec/scale_length.rb
332
408
  - lib/arrolio/logger.rb
409
+ - lib/arrolio/math_ml.rb
410
+ - lib/arrolio/math_ml/inline_run_extractor.rb
333
411
  - lib/arrolio/output.rb
334
412
  - lib/arrolio/output/page.rb
335
413
  - lib/arrolio/output/placed_box.rb
@@ -340,6 +418,9 @@ files:
340
418
  - lib/arrolio/renderer/link_annotator.rb
341
419
  - lib/arrolio/renderer/outline_builder.rb
342
420
  - lib/arrolio/renderer/pdf.rb
421
+ - lib/arrolio/renderer/pdf/assets.rb
422
+ - lib/arrolio/renderer/pdf/font_embedding.rb
423
+ - lib/arrolio/renderer/pdf/metadata.rb
343
424
  - lib/arrolio/renderer/signature_config.rb
344
425
  - lib/arrolio/renderer/structure_tree_builder.rb
345
426
  - lib/arrolio/renderer/xmp_builder.rb
@@ -349,6 +430,7 @@ files:
349
430
  - lib/arrolio/style/registry.rb
350
431
  - lib/arrolio/table.rb
351
432
  - lib/arrolio/table/auto_layout.rb
433
+ - lib/arrolio/table/grid.rb
352
434
  - lib/arrolio/text_direction.rb
353
435
  - lib/arrolio/text_layout.rb
354
436
  - lib/arrolio/text_layout/break_opportunity.rb
@@ -362,6 +444,8 @@ files:
362
444
  - lib/arrolio/version.rb
363
445
  - lib/arrolio/writing_mode.rb
364
446
  - script/smoke.rb
447
+ - scripts/parity_check.rb
448
+ - scripts/parity_diff.rb
365
449
  - scripts/write_content_extras.py
366
450
  - scripts/xsl_profiles/standoc.yml
367
451
  - scripts/xsl_to_config.rb
@@ -374,6 +458,7 @@ metadata:
374
458
  changelog_uri: https://github.com/arrolio/arrolio/blob/main/CHANGELOG.md
375
459
  bug_tracker_uri: https://github.com/arrolio/arrolio/issues
376
460
  rubygems_mfa_required: 'true'
461
+ post_install_message:
377
462
  rdoc_options: []
378
463
  require_paths:
379
464
  - lib
@@ -388,7 +473,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
388
473
  - !ruby/object:Gem::Version
389
474
  version: '0'
390
475
  requirements: []
391
- rubygems_version: 4.0.16
476
+ rubygems_version: 3.5.22
477
+ signing_key:
392
478
  specification_version: 4
393
479
  summary: FOP-like paged layout engine for Ruby — renders to PDF via Pdfrb
394
480
  test_files: []