metanorma-standoc 1.6.0 → 1.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +66 -0
- data/README.adoc +1 -3
- data/lib/asciidoctor/standoc/base.rb +8 -16
- data/lib/asciidoctor/standoc/basicdoc.rng +32 -0
- data/lib/asciidoctor/standoc/cleanup.rb +52 -4
- data/lib/asciidoctor/standoc/cleanup_block.rb +41 -4
- data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +14 -0
- data/lib/asciidoctor/standoc/cleanup_footnotes.rb +25 -0
- data/lib/asciidoctor/standoc/cleanup_inline.rb +6 -2
- data/lib/asciidoctor/standoc/cleanup_ref.rb +18 -25
- data/lib/asciidoctor/standoc/cleanup_terms.rb +3 -0
- data/lib/asciidoctor/standoc/converter.rb +61 -3
- data/lib/asciidoctor/standoc/front.rb +9 -3
- data/lib/asciidoctor/standoc/front_contributor.rb +34 -10
- data/lib/asciidoctor/standoc/isodoc.rng +29 -44
- data/lib/asciidoctor/standoc/lists.rb +4 -2
- data/lib/asciidoctor/standoc/macros.rb +45 -63
- data/lib/asciidoctor/standoc/macros_terms.rb +82 -0
- data/lib/asciidoctor/standoc/ref.rb +24 -36
- data/lib/asciidoctor/standoc/ref_sect.rb +16 -8
- data/lib/asciidoctor/standoc/section.rb +5 -9
- data/lib/asciidoctor/standoc/table.rb +12 -0
- data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +86 -0
- data/lib/liquid/custom_blocks/with_json_nested_context.rb +18 -0
- data/lib/liquid/custom_blocks/with_yaml_nested_context.rb +19 -0
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +6 -3
- data/spec/asciidoctor-standoc/base_spec.rb +127 -8
- data/spec/asciidoctor-standoc/blocks_spec.rb +8 -8
- data/spec/asciidoctor-standoc/cleanup_sections_spec.rb +1514 -0
- data/spec/asciidoctor-standoc/cleanup_spec.rb +450 -1554
- data/spec/asciidoctor-standoc/isobib_cache_spec.rb +22 -31
- data/spec/asciidoctor-standoc/lists_spec.rb +10 -1
- data/spec/asciidoctor-standoc/macros_json2text_spec.rb +1 -1
- data/spec/asciidoctor-standoc/macros_lutaml_spec.rb +80 -0
- data/spec/asciidoctor-standoc/macros_plantuml_spec.rb +307 -0
- data/spec/asciidoctor-standoc/macros_spec.rb +378 -169
- data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +1 -1
- data/spec/asciidoctor-standoc/refs_dl_spec.rb +8 -8
- data/spec/asciidoctor-standoc/refs_spec.rb +350 -101
- data/spec/asciidoctor-standoc/section_spec.rb +11 -11
- data/spec/asciidoctor-standoc/table_spec.rb +86 -0
- data/spec/asciidoctor-standoc/validate_spec.rb +26 -0
- data/spec/fixtures/diagram_definitions.lutaml +22 -0
- data/spec/fixtures/test.exp +121 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +156 -4
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +49 -233
- data/spec/vcr_cassettes/isobib_get_123.yml +12 -58
- data/spec/vcr_cassettes/isobib_get_123_1.yml +27 -119
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +361 -0
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -58
- data/spec/vcr_cassettes/isobib_get_124.yml +11 -57
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +276 -158
- metadata +61 -14
- data/.github/workflows/macos.yml +0 -41
- data/.github/workflows/ubuntu.yml +0 -45
- data/.github/workflows/windows.yml +0 -43
- data/lib/asciidoctor/standoc/base_structured_text_preprocessor.rb +0 -123
- data/lib/asciidoctor/standoc/json2_text_preprocessor.rb +0 -44
- data/lib/asciidoctor/standoc/yaml2_text_preprocessor.rb +0 -46
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-standoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: iev
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,34 +66,62 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.2.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: metanorma-plugin-datastruct
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: metanorma-plugin-lutaml
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.2.1
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.2.1
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: relaton-cli
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
103
|
+
version: 1.7.0
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
110
|
+
version: 1.7.0
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: relaton-iev
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
115
|
- - "~>"
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.
|
117
|
+
version: 1.1.0
|
90
118
|
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
122
|
- - "~>"
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.
|
124
|
+
version: 1.1.0
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: sterile
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +206,20 @@ dependencies:
|
|
178
206
|
- - ">="
|
179
207
|
- !ruby/object:Gem::Version
|
180
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: fontist
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: 1.5.0
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 1.5.0
|
181
223
|
- !ruby/object:Gem::Dependency
|
182
224
|
name: byebug
|
183
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -357,9 +399,7 @@ extensions: []
|
|
357
399
|
extra_rdoc_files: []
|
358
400
|
files:
|
359
401
|
- ".gitattributes"
|
360
|
-
- ".github/workflows/
|
361
|
-
- ".github/workflows/ubuntu.yml"
|
362
|
-
- ".github/workflows/windows.yml"
|
402
|
+
- ".github/workflows/rake.yml"
|
363
403
|
- ".gitignore"
|
364
404
|
- ".hound.yml"
|
365
405
|
- ".oss-guides.rubocop.yml"
|
@@ -376,7 +416,6 @@ files:
|
|
376
416
|
- bin/rspec
|
377
417
|
- docs/quickstart.adoc
|
378
418
|
- lib/asciidoctor/standoc/base.rb
|
379
|
-
- lib/asciidoctor/standoc/base_structured_text_preprocessor.rb
|
380
419
|
- lib/asciidoctor/standoc/basicdoc.rng
|
381
420
|
- lib/asciidoctor/standoc/biblio.rng
|
382
421
|
- lib/asciidoctor/standoc/blocks.rb
|
@@ -398,24 +437,26 @@ files:
|
|
398
437
|
- lib/asciidoctor/standoc/front_contributor.rb
|
399
438
|
- lib/asciidoctor/standoc/inline.rb
|
400
439
|
- lib/asciidoctor/standoc/isodoc.rng
|
401
|
-
- lib/asciidoctor/standoc/json2_text_preprocessor.rb
|
402
440
|
- lib/asciidoctor/standoc/lists.rb
|
403
441
|
- lib/asciidoctor/standoc/log.rb
|
404
442
|
- lib/asciidoctor/standoc/macros.rb
|
405
443
|
- lib/asciidoctor/standoc/macros_plantuml.rb
|
444
|
+
- lib/asciidoctor/standoc/macros_terms.rb
|
406
445
|
- lib/asciidoctor/standoc/ref.rb
|
407
446
|
- lib/asciidoctor/standoc/ref_sect.rb
|
408
447
|
- lib/asciidoctor/standoc/reqt.rb
|
409
448
|
- lib/asciidoctor/standoc/reqt.rng
|
410
449
|
- lib/asciidoctor/standoc/section.rb
|
411
450
|
- lib/asciidoctor/standoc/table.rb
|
451
|
+
- lib/asciidoctor/standoc/term_lookup_cleanup.rb
|
412
452
|
- lib/asciidoctor/standoc/utils.rb
|
413
453
|
- lib/asciidoctor/standoc/validate.rb
|
414
454
|
- lib/asciidoctor/standoc/validate_section.rb
|
415
455
|
- lib/asciidoctor/standoc/views/datamodel/model_representation.adoc.erb
|
416
456
|
- lib/asciidoctor/standoc/views/datamodel/plantuml_representation.adoc.erb
|
417
|
-
- lib/asciidoctor/standoc/yaml2_text_preprocessor.rb
|
418
457
|
- lib/liquid/custom_blocks/key_iterator.rb
|
458
|
+
- lib/liquid/custom_blocks/with_json_nested_context.rb
|
459
|
+
- lib/liquid/custom_blocks/with_yaml_nested_context.rb
|
419
460
|
- lib/liquid/custom_filters/values.rb
|
420
461
|
- lib/metanorma-standoc.rb
|
421
462
|
- lib/metanorma/standoc.rb
|
@@ -424,6 +465,7 @@ files:
|
|
424
465
|
- metanorma-standoc.gemspec
|
425
466
|
- spec/asciidoctor-standoc/base_spec.rb
|
426
467
|
- spec/asciidoctor-standoc/blocks_spec.rb
|
468
|
+
- spec/asciidoctor-standoc/cleanup_sections_spec.rb
|
427
469
|
- spec/asciidoctor-standoc/cleanup_spec.rb
|
428
470
|
- spec/asciidoctor-standoc/datamodel/attributes_table_preprocessor_spec.rb
|
429
471
|
- spec/asciidoctor-standoc/datamodel/diagram_preprocessor_spec.rb
|
@@ -431,6 +473,8 @@ files:
|
|
431
473
|
- spec/asciidoctor-standoc/isobib_cache_spec.rb
|
432
474
|
- spec/asciidoctor-standoc/lists_spec.rb
|
433
475
|
- spec/asciidoctor-standoc/macros_json2text_spec.rb
|
476
|
+
- spec/asciidoctor-standoc/macros_lutaml_spec.rb
|
477
|
+
- spec/asciidoctor-standoc/macros_plantuml_spec.rb
|
434
478
|
- spec/asciidoctor-standoc/macros_spec.rb
|
435
479
|
- spec/asciidoctor-standoc/macros_yaml2text_spec.rb
|
436
480
|
- spec/asciidoctor-standoc/refs_dl_spec.rb
|
@@ -497,17 +541,20 @@ files:
|
|
497
541
|
- spec/examples/rice_images/rice_image3_1.png
|
498
542
|
- spec/examples/rice_images/rice_image3_2.png
|
499
543
|
- spec/examples/rice_images/rice_image3_3.png
|
544
|
+
- spec/fixtures/diagram_definitions.lutaml
|
500
545
|
- spec/fixtures/macros_datamodel/address_class_profile.xml
|
501
546
|
- spec/fixtures/macros_datamodel/address_component_profile.xml
|
502
547
|
- spec/fixtures/macros_datamodel/blank_definition_profile.xml
|
503
548
|
- spec/fixtures/macros_datamodel/common_models_diagram.xml
|
504
549
|
- spec/fixtures/macros_datamodel/top_down_diagram.xml
|
550
|
+
- spec/fixtures/test.exp
|
505
551
|
- spec/metanorma/processor_spec.rb
|
506
552
|
- spec/spec_helper.rb
|
507
553
|
- spec/support/shared_examples/structured_data_2_text_preprocessor.rb
|
508
554
|
- spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml
|
509
555
|
- spec/vcr_cassettes/isobib_get_123.yml
|
510
556
|
- spec/vcr_cassettes/isobib_get_123_1.yml
|
557
|
+
- spec/vcr_cassettes/isobib_get_123_1_fr.yml
|
511
558
|
- spec/vcr_cassettes/isobib_get_123_2001.yml
|
512
559
|
- spec/vcr_cassettes/isobib_get_124.yml
|
513
560
|
- spec/vcr_cassettes/rfcbib_get_rfc8341.yml
|
data/.github/workflows/macos.yml
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
-
# See https://github.com/metanorma/cimas
|
3
|
-
name: macos
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
branches: [ master ]
|
8
|
-
pull_request:
|
9
|
-
paths-ignore:
|
10
|
-
- .github/workflows/ubuntu.yml
|
11
|
-
- .github/workflows/windows.yml
|
12
|
-
|
13
|
-
jobs:
|
14
|
-
test-macos:
|
15
|
-
name: Test on Ruby ${{ matrix.ruby }} macOS
|
16
|
-
runs-on: macos-latest
|
17
|
-
continue-on-error: ${{ matrix.experimental }}
|
18
|
-
strategy:
|
19
|
-
fail-fast: false
|
20
|
-
matrix:
|
21
|
-
ruby: [ '2.6', '2.5', '2.4' ]
|
22
|
-
experimental: [false]
|
23
|
-
include:
|
24
|
-
- ruby: '2.7'
|
25
|
-
experimental: true
|
26
|
-
steps:
|
27
|
-
- uses: actions/checkout@master
|
28
|
-
- name: Use Ruby
|
29
|
-
uses: actions/setup-ruby@v1
|
30
|
-
with:
|
31
|
-
ruby-version: ${{ matrix.ruby }}
|
32
|
-
- name: Update gems
|
33
|
-
run: |
|
34
|
-
sudo gem install bundler --force
|
35
|
-
bundle install --jobs 4 --retry 3
|
36
|
-
- name: Install PlantUML
|
37
|
-
run: |
|
38
|
-
brew install plantuml
|
39
|
-
- name: Run specs
|
40
|
-
run: |
|
41
|
-
bundle exec rake
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
-
# See https://github.com/metanorma/cimas
|
3
|
-
name: ubuntu
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
branches: [ master ]
|
8
|
-
pull_request:
|
9
|
-
paths-ignore:
|
10
|
-
- .github/workflows/macos.yml
|
11
|
-
- .github/workflows/windows.yml
|
12
|
-
|
13
|
-
jobs:
|
14
|
-
test-linux:
|
15
|
-
name: Test on Ruby ${{ matrix.ruby }} Ubuntu
|
16
|
-
runs-on: ubuntu-latest
|
17
|
-
continue-on-error: ${{ matrix.experimental }}
|
18
|
-
strategy:
|
19
|
-
fail-fast: false
|
20
|
-
matrix:
|
21
|
-
ruby: [ '2.6', '2.5', '2.4' ]
|
22
|
-
experimental: [false]
|
23
|
-
include:
|
24
|
-
- ruby: '2.7'
|
25
|
-
experimental: true
|
26
|
-
steps:
|
27
|
-
- uses: actions/checkout@master
|
28
|
-
- name: Use Ruby
|
29
|
-
uses: actions/setup-ruby@v1
|
30
|
-
with:
|
31
|
-
ruby-version: ${{ matrix.ruby }}
|
32
|
-
- name: Update gems
|
33
|
-
run: |
|
34
|
-
gem install bundler
|
35
|
-
bundle install --jobs 4 --retry 3
|
36
|
-
- name: Install PlantUML
|
37
|
-
uses: nick-invision/retry@v1
|
38
|
-
with:
|
39
|
-
polling_interval_seconds: 5
|
40
|
-
timeout_minutes: 5
|
41
|
-
max_attempts: 3
|
42
|
-
command: sudo apt-get update -y && sudo bash -c "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
|
43
|
-
- name: Run specs
|
44
|
-
run: |
|
45
|
-
bundle exec rake
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
-
# See https://github.com/metanorma/cimas
|
3
|
-
name: windows
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
branches: [ master ]
|
8
|
-
pull_request:
|
9
|
-
paths-ignore:
|
10
|
-
- .github/workflows/macos.yml
|
11
|
-
- .github/workflows/ubuntu.yml
|
12
|
-
|
13
|
-
jobs:
|
14
|
-
test-windows:
|
15
|
-
name: Test on Ruby ${{ matrix.ruby }} Windows
|
16
|
-
runs-on: windows-latest
|
17
|
-
continue-on-error: ${{ matrix.experimental }}
|
18
|
-
strategy:
|
19
|
-
fail-fast: false
|
20
|
-
matrix:
|
21
|
-
ruby: [ '2.6', '2.5', '2.4' ]
|
22
|
-
experimental: [false]
|
23
|
-
include:
|
24
|
-
- ruby: '2.7'
|
25
|
-
experimental: true
|
26
|
-
steps:
|
27
|
-
- uses: actions/checkout@master
|
28
|
-
- name: Use Ruby
|
29
|
-
uses: actions/setup-ruby@v1
|
30
|
-
with:
|
31
|
-
ruby-version: ${{ matrix.ruby }}
|
32
|
-
- name: Update gems
|
33
|
-
shell: pwsh
|
34
|
-
run: |
|
35
|
-
gem install bundler
|
36
|
-
bundle config --local path vendor/bundle
|
37
|
-
bundle install --jobs 4 --retry 3
|
38
|
-
- name: Install PlantUML
|
39
|
-
run: |
|
40
|
-
cinst -y plantuml
|
41
|
-
- name: Run specs
|
42
|
-
run: |
|
43
|
-
bundle exec rake
|
@@ -1,123 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "liquid/custom_blocks/key_iterator"
|
4
|
-
require "liquid/custom_filters/values"
|
5
|
-
|
6
|
-
Liquid::Template.register_tag("keyiterator", Liquid::CustomBlocks::KeyIterator)
|
7
|
-
Liquid::Template.register_filter(Liquid::CustomFilters)
|
8
|
-
|
9
|
-
module Asciidoctor
|
10
|
-
module Standoc
|
11
|
-
# Base class for processing structured data blocks(yaml, json)
|
12
|
-
class BaseStructuredTextPreprocessor < Asciidoctor::Extensions::Preprocessor
|
13
|
-
BLOCK_START_REGEXP = /\{(.+?)\.\*,(.+),(.+)\}/
|
14
|
-
BLOCK_END_REGEXP = /\A\{[A-Z]+\}\z/
|
15
|
-
|
16
|
-
def process(document, reader)
|
17
|
-
input_lines = reader.readlines.to_enum
|
18
|
-
Reader.new(processed_lines(document, input_lines))
|
19
|
-
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
def content_from_file(_document, _file_path)
|
24
|
-
raise ArgumentError, "Implement `content_from_file` in your class"
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def processed_lines(document, input_lines)
|
30
|
-
result = []
|
31
|
-
loop do
|
32
|
-
result.push(*process_text_blocks(document, input_lines))
|
33
|
-
end
|
34
|
-
result
|
35
|
-
end
|
36
|
-
|
37
|
-
def relative_file_path(document, file_path)
|
38
|
-
docfile_directory = File.dirname(document.attributes["docfile"] || ".")
|
39
|
-
document
|
40
|
-
.path_resolver
|
41
|
-
.system_path(file_path, docfile_directory)
|
42
|
-
end
|
43
|
-
|
44
|
-
def process_text_blocks(document, input_lines)
|
45
|
-
line = input_lines.next
|
46
|
-
block_match = line.match(/^\[#{config[:block_name]},(.+?),(.+?)\]/)
|
47
|
-
return [line] if block_match.nil?
|
48
|
-
|
49
|
-
mark = input_lines.next
|
50
|
-
current_block = []
|
51
|
-
while (block_line = input_lines.next) != mark
|
52
|
-
current_block.push(block_line)
|
53
|
-
end
|
54
|
-
read_content_and_parse_template(document,
|
55
|
-
current_block,
|
56
|
-
block_match)
|
57
|
-
end
|
58
|
-
|
59
|
-
def read_content_and_parse_template(document, current_block, block_match)
|
60
|
-
transformed_liquid_lines = current_block
|
61
|
-
.map(&method(:transform_line_liquid))
|
62
|
-
context_items = content_from_file(document, block_match[1])
|
63
|
-
parse_context_block(document: document,
|
64
|
-
context_lines: transformed_liquid_lines,
|
65
|
-
context_items: context_items,
|
66
|
-
context_name: block_match[2])
|
67
|
-
rescue StandardError => exception
|
68
|
-
document.logger
|
69
|
-
.warn("Failed to parse #{config[:block_name]} \
|
70
|
-
block: #{exception.message}")
|
71
|
-
[]
|
72
|
-
end
|
73
|
-
|
74
|
-
def transform_line_liquid(line)
|
75
|
-
if line.match?(BLOCK_START_REGEXP)
|
76
|
-
line.gsub!(BLOCK_START_REGEXP,
|
77
|
-
'{% keyiterator \1, \2 %}')
|
78
|
-
end
|
79
|
-
|
80
|
-
if line.strip.match?(BLOCK_END_REGEXP)
|
81
|
-
line.gsub!(BLOCK_END_REGEXP, "{% endkeyiterator %}")
|
82
|
-
end
|
83
|
-
line
|
84
|
-
.gsub(/(?<!{){(?!%)([^{}]+)(?<!%)}(?!})/, '{{\1}}')
|
85
|
-
.gsub(/[a-z\.]+\#/, "index")
|
86
|
-
.gsub(/{{(.+)\s+\+\s+(\d+)\s*?}}/, '{{ \1 | plus: \2 }}')
|
87
|
-
.gsub(/{{(.+)\s+\-\s+(\d+)\s*?}}/, '{{ \1 | minus: \2 }}')
|
88
|
-
.gsub(/{{(.+).values(.*?)}}/,
|
89
|
-
'{% assign custom_value = \1 | values %}{{custom_value\2}}')
|
90
|
-
end
|
91
|
-
|
92
|
-
def parse_context_block(context_lines:,
|
93
|
-
context_items:,
|
94
|
-
context_name:,
|
95
|
-
document:)
|
96
|
-
render_result, errors = render_liquid_string(
|
97
|
-
template_string: context_lines.join("\n"),
|
98
|
-
context_items: context_items,
|
99
|
-
context_name: context_name
|
100
|
-
)
|
101
|
-
notify_render_errors(document, errors)
|
102
|
-
render_result.split("\n")
|
103
|
-
end
|
104
|
-
|
105
|
-
def render_liquid_string(template_string:, context_items:, context_name:)
|
106
|
-
liquid_template = Liquid::Template.parse(template_string)
|
107
|
-
rendered_string = liquid_template
|
108
|
-
.render(context_name => context_items,
|
109
|
-
strict_variables: true,
|
110
|
-
error_mode: :warn)
|
111
|
-
[rendered_string, liquid_template.errors]
|
112
|
-
end
|
113
|
-
|
114
|
-
def notify_render_errors(document, errors)
|
115
|
-
errors.each do |error_obj|
|
116
|
-
document
|
117
|
-
.logger
|
118
|
-
.warn("Liquid render error: #{error_obj.message}")
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|