review-retrovert 0.9.10 → 0.10.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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +1 -1
  3. data/.gitignore +0 -1
  4. data/.pinact.yaml +12 -0
  5. data/.ruby-version +1 -1
  6. data/Dockerfile +2 -1
  7. data/Dockerfile.local +13 -0
  8. data/Gemfile.lock +62 -35
  9. data/Makefile +7 -0
  10. data/README.md +2 -1
  11. data/Rakefile +9 -0
  12. data/aqua.yaml +20 -0
  13. data/hooks/post_push +14 -1
  14. data/lib/review/retrovert/cli.rb +10 -2
  15. data/lib/review/retrovert/converter.rb +106 -20
  16. data/lib/review/retrovert/reviewdef.rb +29 -0
  17. data/lib/review/retrovert/sty/review-utbook.cls +7 -0
  18. data/lib/review/retrovert/version.rb +1 -1
  19. data/lib/review/retrovert/yamlconfig.rb +38 -1
  20. data/review-retrovert.gemspec +18 -4
  21. data/zizmor.yml +5 -0
  22. metadata +54 -121
  23. data/.github/FUNDING.yml +0 -4
  24. data/.github/workflows/release.yml +0 -26
  25. data/.github/workflows/retrovert.yml +0 -76
  26. data/testdata/mybook/.gitignore +0 -9
  27. data/testdata/mybook/.textlintrc +0 -11
  28. data/testdata/mybook/README.md +0 -43
  29. data/testdata/mybook/Rakefile +0 -24
  30. data/testdata/mybook/catalog.yml +0 -60
  31. data/testdata/mybook/config-noretrovert.yml +0 -404
  32. data/testdata/mybook/config-retrovert.yml +0 -16
  33. data/testdata/mybook/config-starter.yml +0 -264
  34. data/testdata/mybook/config.yml +0 -404
  35. data/testdata/mybook/contents/00-preface.re +0 -129
  36. data/testdata/mybook/contents/01-install.re +0 -305
  37. data/testdata/mybook/contents/02-tutorial.re +0 -1228
  38. data/testdata/mybook/contents/03-syntax.re +0 -4610
  39. data/testdata/mybook/contents/04-customize.re +0 -1064
  40. data/testdata/mybook/contents/05-faq.re +0 -606
  41. data/testdata/mybook/contents/06-bestpractice.re +0 -1343
  42. data/testdata/mybook/contents/91-compare.re +0 -418
  43. data/testdata/mybook/contents/92-filelist.re +0 -125
  44. data/testdata/mybook/contents/93-background.re +0 -267
  45. data/testdata/mybook/contents/99-postface.re +0 -39
  46. data/testdata/mybook/contents/r0-inner.re +0 -2
  47. data/testdata/mybook/contents/r0-root.re +0 -31
  48. data/testdata/mybook/contents/table.csv +0 -4
  49. data/testdata/mybook/contents/test.txt +0 -1
  50. data/testdata/mybook/css/normalize.css +0 -349
  51. data/testdata/mybook/css/webstyle.css +0 -692
  52. data/testdata/mybook/data/terms.txt +0 -3
  53. data/testdata/mybook/data/words.txt +0 -15
  54. data/testdata/mybook/images/03-syntax/favicon-16x16.png +0 -0
  55. data/testdata/mybook/images/03-syntax/figure_heretop.png +0 -0
  56. data/testdata/mybook/images/03-syntax/index-page.png +0 -0
  57. data/testdata/mybook/images/03-syntax/order-detail.png +0 -0
  58. data/testdata/mybook/images/03-syntax/tw-icon1.jpg +0 -0
  59. data/testdata/mybook/images/03-syntax/tw-icon2.jpg +0 -0
  60. data/testdata/mybook/images/03-syntax/tw-icon3.jpg +0 -0
  61. data/testdata/mybook/images/03-syntax/tw-icon4.jpg +0 -0
  62. data/testdata/mybook/images/04-customize/caption_pagebreak.png +0 -0
  63. data/testdata/mybook/images/04-customize/chaptitlepage_sample.png +0 -0
  64. data/testdata/mybook/images/04-customize/section_decoration_samples.png +0 -0
  65. data/testdata/mybook/images/05-faq/codeblock_rpadding1.png +0 -0
  66. data/testdata/mybook/images/05-faq/codeblock_rpadding2.png +0 -0
  67. data/testdata/mybook/images/05-faq/dummy-image.png +0 -0
  68. data/testdata/mybook/images/06-bestpractice/figure_heretop.png +0 -0
  69. data/testdata/mybook/images/06-bestpractice/font_beramono.png +0 -0
  70. data/testdata/mybook/images/06-bestpractice/heading_design1.png +0 -0
  71. data/testdata/mybook/images/06-bestpractice/heading_design2.png +0 -0
  72. data/testdata/mybook/images/06-bestpractice/margin_book.png +0 -0
  73. data/testdata/mybook/images/06-bestpractice/multiline-title.png +0 -0
  74. data/testdata/mybook/images/06-bestpractice/preface_numbered.png +0 -0
  75. data/testdata/mybook/images/06-bestpractice/program_border.png +0 -0
  76. data/testdata/mybook/images/06-bestpractice/sechead_design_4.png +0 -0
  77. data/testdata/mybook/images/06-bestpractice/section_title_wlines.png +0 -0
  78. data/testdata/mybook/images/06-bestpractice/titlepage-samples.png +0 -0
  79. data/testdata/mybook/images/93-background/bug913.png +0 -0
  80. data/testdata/mybook/images/93-background/slide2.png +0 -0
  81. data/testdata/mybook/images/avatar-b.png +0 -0
  82. data/testdata/mybook/images/avatar-g.png +0 -0
  83. data/testdata/mybook/images/avatar-r.png +0 -0
  84. data/testdata/mybook/images/caution-icon.png +0 -0
  85. data/testdata/mybook/images/cover_a5.pdf +0 -0
  86. data/testdata/mybook/images/cover_b5.pdf +0 -0
  87. data/testdata/mybook/images/info-icon.png +0 -0
  88. data/testdata/mybook/images/tw-icon.jpg +0 -0
  89. data/testdata/mybook/images/warning-icon.png +0 -0
  90. data/testdata/mybook/layouts/layout.epub.erb +0 -29
  91. data/testdata/mybook/layouts/layout.html5.erb +0 -108
  92. data/testdata/mybook/layouts/layout.tex.erb +0 -432
  93. data/testdata/mybook/layouts/layout.tex.erb.orig +0 -386
  94. data/testdata/mybook/lib/hooks/beforetexcompile.rb +0 -55
  95. data/testdata/mybook/lib/ruby/review-book.rb +0 -64
  96. data/testdata/mybook/lib/ruby/review-builder.rb +0 -1342
  97. data/testdata/mybook/lib/ruby/review-cli.rb +0 -58
  98. data/testdata/mybook/lib/ruby/review-compiler.rb +0 -1176
  99. data/testdata/mybook/lib/ruby/review-epubbuilder.rb +0 -33
  100. data/testdata/mybook/lib/ruby/review-epubmaker.rb +0 -609
  101. data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +0 -949
  102. data/testdata/mybook/lib/ruby/review-latexbuilder.rb +0 -1065
  103. data/testdata/mybook/lib/ruby/review-maker.rb +0 -346
  104. data/testdata/mybook/lib/ruby/review-markdownbuilder.rb +0 -945
  105. data/testdata/mybook/lib/ruby/review-markdownmaker.rb +0 -91
  106. data/testdata/mybook/lib/ruby/review-monkeypatch.rb +0 -93
  107. data/testdata/mybook/lib/ruby/review-pdfmaker.rb +0 -546
  108. data/testdata/mybook/lib/ruby/review-textbuilder.rb +0 -36
  109. data/testdata/mybook/lib/ruby/review-tocparser.rb +0 -285
  110. data/testdata/mybook/lib/ruby/review-webmaker.rb +0 -448
  111. data/testdata/mybook/lib/tasks/mytasks.rake +0 -31
  112. data/testdata/mybook/lib/tasks/review.rake +0 -156
  113. data/testdata/mybook/lib/tasks/review.rake.orig +0 -72
  114. data/testdata/mybook/lib/tasks/starter.rake +0 -470
  115. data/testdata/mybook/locale.yml +0 -6
  116. data/testdata/mybook/review-ext.rb +0 -206
  117. data/testdata/mybook/sty/indexstyle.ist +0 -25
  118. data/testdata/mybook/sty/jumoline.sty +0 -310
  119. data/testdata/mybook/sty/mycolophon.sty +0 -81
  120. data/testdata/mybook/sty/mystyle.sty +0 -8
  121. data/testdata/mybook/sty/mytextsize.sty +0 -90
  122. data/testdata/mybook/sty/mytitlepage.sty +0 -126
  123. data/testdata/mybook/sty/review-base.sty +0 -276
  124. data/testdata/mybook/sty/reviewmacro.sty +0 -60
  125. data/testdata/mybook/sty/starter-codeblock.sty +0 -463
  126. data/testdata/mybook/sty/starter-color.sty +0 -134
  127. data/testdata/mybook/sty/starter-font.sty +0 -112
  128. data/testdata/mybook/sty/starter-heading.sty +0 -561
  129. data/testdata/mybook/sty/starter-misc.sty +0 -894
  130. data/testdata/mybook/sty/starter-note.sty +0 -180
  131. data/testdata/mybook/sty/starter-section.sty +0 -262
  132. data/testdata/mybook/sty/starter-talklist.sty +0 -105
  133. data/testdata/mybook/sty/starter-toc.sty +0 -72
  134. data/testdata/mybook/sty/starter-util.sty +0 -35
  135. data/testdata/mybook/sty/starter.sty +0 -36
  136. data/testdata/mybook/style.css +0 -597
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e21f93fe0df30502c299d24fe3a761d631b1e9cd596df35234dcf756cdb3538e
4
- data.tar.gz: 594ea8b9d78c9da30c8e4915b98665f3c74b61bca108ed29db983616a57153c3
3
+ metadata.gz: 267dfed374168e87a304450363d3f2a65db553bf530c56a3484a72bf9f64911b
4
+ data.tar.gz: f773e8543b7dff305f22a857f3074550a793487aea4e252cc0514897b3937786
5
5
  SHA512:
6
- metadata.gz: 2dd96eb3d003ede0d79444972f09e6d19bd5ecd6e5c84aa2a124bee99eedba47a636b7c6b29d4d215d5a9d7a46fb2918db3a7bc765260df42b282c5d782080a3
7
- data.tar.gz: c40f1bd244de3e41b863a1a4070874fd9e33b02e2c70e62d580cf734282023a35dfdca7401a8aaf1f1ca8a7f06146cca36e70e52b0a59a5d2a9de4ce94b13b56
6
+ metadata.gz: 7ac9c51bb200a188acf201899dc1e9667b39df719fe5950a6c6a93f69107b6943d05dfc58699ba0482cc09c6376b17517ba47bc51003ff1e0a3f7b6300e6a674
7
+ data.tar.gz: 5020eb746cb8094e74036b7ba9d5a6bb77eadc52ac73e68f3ec0a0c22394eaf90b5ef3ffd0a1dd013226706bc1afedc60d364297798bca384cec74d457157cde
data/.editorconfig CHANGED
@@ -4,7 +4,7 @@ root = true
4
4
  indent_style = space
5
5
  indent_size = 4
6
6
 
7
- [*.rb]
7
+ [*.{rb,gemspec}]
8
8
  charset = utf-8
9
9
  trim_trailing_whitespace = true
10
10
  indent_size = 2
data/.gitignore CHANGED
@@ -13,4 +13,3 @@ tmp/
13
13
  .idea
14
14
 
15
15
  *.gem
16
- mybook.pdf
data/.pinact.yaml ADDED
@@ -0,0 +1,12 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/suzuki-shunsuke/pinact/refs/heads/main/json-schema/pinact.json
2
+ # pinact - https://github.com/suzuki-shunsuke/pinact
3
+ version: 3
4
+ files:
5
+ # - pattern: action.yml
6
+ # - pattern: */action.yaml
7
+
8
+ ignore_actions:
9
+ # - name: slsa-framework/slsa-github-generator/\.github/workflows/generator_generic_slsa3\.yml
10
+ # ref: v\d+\.\d+\.\d+
11
+ - name: actions/.*
12
+ ref: v\d+
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.5
1
+ 3.3.4
data/Dockerfile CHANGED
@@ -1,4 +1,5 @@
1
- FROM vvakame/review:5.0
1
+ ARG REVIEW_VERSION=latest
2
+ FROM vvakame/review:${REVIEW_VERSION}
2
3
 
3
4
  RUN gem install review-retrovert
4
5
 
data/Dockerfile.local ADDED
@@ -0,0 +1,13 @@
1
+ ARG REVIEW_VERSION=latest
2
+ FROM vvakame/review:${REVIEW_VERSION}
3
+
4
+ # Copy source code and build from local workspace
5
+ COPY . /tmp/review-retrovert/
6
+
7
+ # Build and install from local source
8
+ RUN cd /tmp/review-retrovert && \
9
+ gem build review-retrovert.gemspec && \
10
+ gem install --no-document review-retrovert-*.gem && \
11
+ rm -rf /tmp/review-retrovert
12
+
13
+ ENTRYPOINT [ "review-retrovert" ]
data/Gemfile.lock CHANGED
@@ -1,30 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- review-retrovert (0.9.10)
4
+ review-retrovert (0.10.0)
5
+ csv
6
+ nkf
5
7
  review (>= 3.0.0)
8
+ rexml
6
9
  thor
7
10
 
8
11
  GEM
9
12
  remote: https://rubygems.org/
10
13
  specs:
11
- activesupport (6.1.1)
12
- concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ activesupport (8.1.1)
15
+ base64
16
+ bigdecimal
17
+ concurrent-ruby (~> 1.0, >= 1.3.1)
18
+ connection_pool (>= 2.2.5)
19
+ drb
13
20
  i18n (>= 1.6, < 2)
21
+ json
22
+ logger (>= 1.4.2)
14
23
  minitest (>= 5.1)
15
- tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
24
+ securerandom (>= 0.3)
25
+ tzinfo (~> 2.0, >= 2.0.5)
26
+ uri (>= 0.13.1)
17
27
  aruba (1.0.4)
18
28
  childprocess (>= 2.0, < 5.0)
19
29
  contracts (~> 0.16.0)
20
30
  cucumber (>= 2.4, < 6.0)
21
31
  rspec-expectations (~> 3.4)
22
32
  thor (~> 1.0)
23
- builder (3.2.4)
24
- childprocess (4.0.0)
25
- concurrent-ruby (1.1.7)
26
- contracts (0.16.0)
27
- cucumber (5.2.0)
33
+ base64 (0.3.0)
34
+ bigdecimal (4.0.1)
35
+ builder (3.3.0)
36
+ childprocess (4.1.0)
37
+ concurrent-ruby (1.3.6)
38
+ connection_pool (3.0.2)
39
+ contracts (0.16.1)
40
+ csv (3.3.5)
41
+ cucumber (5.3.0)
28
42
  builder (~> 3.2, >= 3.2.4)
29
43
  cucumber-core (~> 8.0, >= 8.0.1)
30
44
  cucumber-create-meta (~> 2.0, >= 2.0.2)
@@ -55,54 +69,67 @@ GEM
55
69
  cucumber-core (~> 8.0, >= 8.0.1)
56
70
  cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
57
71
  cucumber-messages (~> 13.0, >= 13.0.1)
58
- diff-lcs (1.4.4)
59
- ffi (1.14.2)
60
- i18n (1.8.7)
72
+ diff-lcs (1.6.2)
73
+ drb (2.2.3)
74
+ ffi (1.17.3)
75
+ i18n (1.14.8)
61
76
  concurrent-ruby (~> 1.0)
62
- image_size (2.1.1)
77
+ image_size (3.4.0)
78
+ json (2.18.0)
79
+ logger (1.7.0)
80
+ memoist3 (1.0.0)
63
81
  middleware (0.1.0)
64
- minitest (5.14.3)
82
+ minitest (6.0.1)
83
+ prism (~> 1.5)
65
84
  multi_test (0.1.2)
85
+ nkf (0.2.0)
66
86
  pastel (0.8.0)
67
87
  tty-color (~> 0.5)
88
+ prism (1.7.0)
68
89
  protobuf-cucumber (3.10.8)
69
90
  activesupport (>= 3.2)
70
91
  middleware
71
92
  thor
72
93
  thread_safe
73
94
  rake (12.3.3)
74
- review (5.2.0)
95
+ review (5.10.0)
96
+ csv
75
97
  image_size
98
+ nkf
99
+ rexml
76
100
  rouge
77
101
  rubyzip
78
102
  tty-logger
79
- rouge (3.26.0)
80
- rspec (3.10.0)
81
- rspec-core (~> 3.10.0)
82
- rspec-expectations (~> 3.10.0)
83
- rspec-mocks (~> 3.10.0)
84
- rspec-core (3.10.1)
85
- rspec-support (~> 3.10.0)
86
- rspec-expectations (3.10.1)
103
+ rexml (3.4.4)
104
+ rouge (4.7.0)
105
+ rspec (3.13.2)
106
+ rspec-core (~> 3.13.0)
107
+ rspec-expectations (~> 3.13.0)
108
+ rspec-mocks (~> 3.13.0)
109
+ rspec-core (3.13.6)
110
+ rspec-support (~> 3.13.0)
111
+ rspec-expectations (3.13.5)
87
112
  diff-lcs (>= 1.2.0, < 2.0)
88
- rspec-support (~> 3.10.0)
89
- rspec-mocks (3.10.1)
113
+ rspec-support (~> 3.13.0)
114
+ rspec-mocks (3.13.7)
90
115
  diff-lcs (>= 1.2.0, < 2.0)
91
- rspec-support (~> 3.10.0)
92
- rspec-support (3.10.1)
93
- ruby-debug-ide (0.7.2)
116
+ rspec-support (~> 3.13.0)
117
+ rspec-support (3.13.6)
118
+ ruby-debug-ide (0.7.5)
94
119
  rake (>= 0.8.1)
95
- rubyzip (2.3.2)
96
- sys-uname (1.2.2)
120
+ rubyzip (3.2.2)
121
+ securerandom (0.4.1)
122
+ sys-uname (1.4.1)
97
123
  ffi (~> 1.1)
98
- thor (1.0.1)
124
+ memoist3 (~> 1.0.0)
125
+ thor (1.4.0)
99
126
  thread_safe (0.3.6)
100
127
  tty-color (0.6.0)
101
128
  tty-logger (0.6.0)
102
129
  pastel (~> 0.8)
103
- tzinfo (2.0.4)
130
+ tzinfo (2.0.6)
104
131
  concurrent-ruby (~> 1.0)
105
- zeitwerk (2.4.2)
132
+ uri (1.1.1)
106
133
 
107
134
  PLATFORMS
108
135
  ruby
@@ -115,4 +142,4 @@ DEPENDENCIES
115
142
  ruby-debug-ide
116
143
 
117
144
  BUNDLED WITH
118
- 2.1.4
145
+ 2.5.11
data/Makefile CHANGED
@@ -14,6 +14,9 @@ test:
14
14
  test-ird:
15
15
  RUBYLIB=lib ./exe/review-retrovert convert --preproc --tabwidth 4 --ird testdata/mybook/config.yml -f tmp/debug
16
16
 
17
+ test-ut:
18
+ RUBYLIB=lib ./exe/review-retrovert convert --preproc --tabwidth 4 testdata/mybook/ut-config.yml -f tmp/debug
19
+
17
20
  REVIEW_VERSION:=latest
18
21
 
19
22
  debug-build:
@@ -22,3 +25,7 @@ debug-build:
22
25
 
23
26
  testdata-pdf:
24
27
  docker run --rm -v ${PWD}/testdata/mybook:/work -w /work kauplan/review2.5 rake pdf
28
+
29
+ testdata-ut-pdf:
30
+ # rm -rf ./testdata/mybook/mybook-ut-pdf
31
+ docker run --rm -v ${PWD}/testdata/mybook:/work -w /work -e config=ut-config.yml kauplan/review2.5 rake pdf
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/review-retrovert.svg)](https://badge.fury.io/rb/review-retrovert)
2
2
  [![Retrovert](https://github.com/srz-zumix/review-retrovert/actions/workflows/retrovert.yml/badge.svg?branch=master)](https://github.com/srz-zumix/review-retrovert/actions/workflows/retrovert.yml)
3
- [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/srzzumix/review-retrovert.svg)](https://hub.docker.com/r/srzzumix/review-retrovert/)
3
+ [![Docker Build](https://github.com/srz-zumix/review-retrovert/actions/workflows/docker-build.yml/badge.svg)](https://github.com/srz-zumix/review-retrovert/actions/workflows/docker-build.yml)
4
+ [![Docker Pulls](https://img.shields.io/docker/pulls/srzzumix/review-retrovert)](https://hub.docker.com/r/srzzumix/review-retrovert)
4
5
 
5
6
  # ReVIEW::Retrovert
6
7
 
data/Rakefile CHANGED
@@ -4,3 +4,12 @@ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
+
8
+ # Override the source_control_push task to skip git push
9
+ # This is useful when releasing from CI where the tag is already pushed
10
+ Rake::Task["release:source_control_push"].clear
11
+ namespace :release do
12
+ task :source_control_push do
13
+ # Do nothing - tag is already pushed by CI
14
+ end
15
+ end
data/aqua.yaml ADDED
@@ -0,0 +1,20 @@
1
+ ---
2
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/aquaproj/aqua/main/json-schema/aqua-yaml.json
3
+ # aqua - Declarative CLI Version Manager
4
+ # https://aquaproj.github.io/
5
+ # checksum:
6
+ # enabled: true
7
+ # require_checksum: true
8
+ # supported_envs:
9
+ # - all
10
+ registries:
11
+ - type: standard
12
+ ref: v4.451.1 # renovate: depName=aquaproj/aqua-registry
13
+ packages:
14
+ - name: suzuki-shunsuke/pinact@v3.8.0
15
+ tags:
16
+ - dev
17
+ - name: crates.io/zizmor@1.19.0
18
+ tags:
19
+ - dev
20
+ - ci
data/hooks/post_push CHANGED
@@ -1,8 +1,21 @@
1
1
  #!/bin/bash
2
2
  set -eu
3
3
 
4
+ # Get review-retrovert version and Re:VIEW version
5
+ VERSION=$(docker run --rm ${IMAGE_NAME} version)
6
+ REVIEW_VERSION=$(docker run --rm ${IMAGE_NAME} review-version)
7
+
4
8
  if [ "${DOCKER_TAG}" = "latest" ]; then
5
- VERSION=$(docker run --rm ${IMAGE_NAME} version)
9
+ # For latest tag, push retrovert version tag
6
10
  docker tag ${IMAGE_NAME} ${DOCKER_REPO}:${VERSION}
7
11
  docker push ${DOCKER_REPO}:${VERSION}
12
+ # Also push combined tag with Re:VIEW version (e.g., 0.10.0-review5.10)
13
+ COMBINED_TAG="${VERSION}-review${REVIEW_VERSION}"
14
+ docker tag ${IMAGE_NAME} ${DOCKER_REPO}:${COMBINED_TAG}
15
+ docker push ${DOCKER_REPO}:${COMBINED_TAG}
16
+ else
17
+ # For review version tags (e.g., 5.9), push combined tag (e.g., 0.10.0-review5.9)
18
+ COMBINED_TAG="${VERSION}-review${DOCKER_TAG}"
19
+ docker tag ${IMAGE_NAME} ${DOCKER_REPO}:${COMBINED_TAG}
20
+ docker push ${DOCKER_REPO}:${COMBINED_TAG}
8
21
  fi
@@ -11,8 +11,10 @@ module ReVIEW
11
11
  method_option "tabwidth", desc: 'Preproc tabwidth option value', type: :numeric, default: 0
12
12
  method_option "table-br-replace", desc: '@<br>{} in table replace string (Default: empty)', type: :string, default: ''
13
13
  method_option "table-empty-replace", desc: 'empty cell(.) in table replace string (Default full-width space)', type: :string, default: ' '
14
- method_option "ird", desc: 'for IRD', type: :boolean
15
- method_option "no-image", desc: 'donot copy image', type: :boolean
14
+ method_option "ird", desc: 'For IRD', type: :boolean
15
+ method_option "no-update", desc: 'Do not Re:VIEW update', type: :boolean
16
+ method_option "no-image", desc: 'Do not copy image', type: :boolean
17
+ method_option "no-delegate-yaml", desc: 'review-retrovert creates an inherited file if the config.yml/catalog.yml file does not exist. Not done if no-delegate-yaml option is specified', type: :boolean
16
18
  def convert(review_starter_configfile, outdir)
17
19
  Converter.execute(review_starter_configfile, outdir, options)
18
20
  end
@@ -22,6 +24,12 @@ module ReVIEW
22
24
  puts VERSION
23
25
  end
24
26
 
27
+ desc "review-version", "show Re:VIEW version"
28
+ map "review-version" => :review_version
29
+ def review_version()
30
+ puts ReVIEW::VERSION
31
+ end
32
+
25
33
  end
26
34
  end
27
35
  end
@@ -1,3 +1,41 @@
1
+ require 'yaml'
2
+
3
+ # For Ruby 3.1+ compatibility with review 5.3 and earlier
4
+ # These versions don't support safe YAML loading with permitted_classes
5
+ module YAML
6
+ class << self
7
+ alias_method :original_load_file, :load_file
8
+ alias_method :original_safe_load, :safe_load
9
+
10
+ def load_file(path, *args, **kwargs)
11
+ if kwargs.empty? && args.empty?
12
+ original_load_file(path, permitted_classes: [Date, Time, Symbol], permitted_symbols: [], aliases: true)
13
+ else
14
+ original_load_file(path, *args, **kwargs)
15
+ end
16
+ end
17
+
18
+ # Handle both old positional args (review 5.3 and earlier) and new keyword args
19
+ # Old format: YAML.safe_load(yaml, permitted_classes, permitted_symbols, aliases, filename)
20
+ # New format: YAML.safe_load(yaml, permitted_classes: [], permitted_symbols: [], aliases: false)
21
+ def safe_load(yaml, *args, **kwargs)
22
+ if kwargs.empty?
23
+ if args.empty?
24
+ original_safe_load(yaml, permitted_classes: [Date, Time, Symbol], permitted_symbols: [], aliases: true)
25
+ else
26
+ # Convert old positional args to new keyword args format
27
+ permitted_classes = args[0].is_a?(Array) ? args[0] : [Date, Time, Symbol]
28
+ permitted_symbols = args[1].is_a?(Array) ? args[1] : []
29
+ aliases = args[2].nil? ? true : args[2]
30
+ original_safe_load(yaml, permitted_classes: permitted_classes + [Date, Time, Symbol], permitted_symbols: permitted_symbols, aliases: aliases)
31
+ end
32
+ else
33
+ original_safe_load(yaml, *args, **kwargs)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
1
39
  require 'review'
2
40
  require 'erb'
3
41
  require 'fileutils'
@@ -122,8 +160,6 @@ module ReVIEW
122
160
  @configs.rewrite_yml('contentdir', '.')
123
161
  @configs.rewrite_yml('hook_beforetexcompile', 'null')
124
162
  @configs.rewrite_yml('texstyle', '["reviewmacro"]')
125
- pagesize = @config['starter']['pagesize'].downcase
126
- jsbook_config = "media=print,paper=#{pagesize}"
127
163
 
128
164
  # words
129
165
  words_files = @config['words_file']
@@ -146,12 +182,41 @@ module ReVIEW
146
182
  FileUtils.copy(File.join(@basedir, makeindex_dic), File.join(outdir, makeindex_dic))
147
183
  end
148
184
 
185
+ # texdocumentclass
186
+ pagesize = @config['starter']['pagesize'].downcase
187
+ book_configs = [
188
+ "media=print",
189
+ "paper=#{pagesize}"
190
+ ]
191
+
192
+ texdocumentclass = @config['texdocumentclass']
193
+ book_style = texdocumentclass[0]
194
+ if book_style == "jsbook"
195
+ book_style = "review-jsbook"
196
+ elsif book_style == "utbook"
197
+ book_style = "review-utbook"
198
+ FileUtils.cp(File.join(__dir__, 'sty/review-utbook.cls'), File.join(outdir, 'sty/review-utbook.cls'))
199
+ end
200
+ origin_book_configs = texdocumentclass[1].split(',')
201
+ book_configs.concat origin_book_configs.select { |c| !ReViewDef::review_jsbook_invalid_configs().include?(c) }
202
+
149
203
  if @ird
150
204
  # # リュウミン Pr6N R-KL 12.5Q 22H (9pt = 12.7Q 15.5pt = 21.8Q(H))
151
205
  # texdocumentclass: ["review-jsbook", "media=ebook,openany,paper=b5,fontsize=9pt,baselineskip=15.5pt,head_space=15mm,gutter=22mm,footskip=16mm,line_length=45zw,number_of_lines=38"]
152
- jsbook_config = "media=ebook,openany,paper=b5,fontsize=9pt,baselineskip=15.5pt,head_space=15mm,gutter=22mm,footskip=16mm,line_length=45zw,number_of_lines=38"
206
+ book_config = [
207
+ "media=ebook",
208
+ "openany",
209
+ "paper=b5",
210
+ "fontsize=9pt",
211
+ "baselineskip=15.5pt",
212
+ "head_space=15mm",
213
+ "gutter=22mm",
214
+ "footskip=16mm",
215
+ "line_length=45zw",
216
+ "number_of_lines=38"
217
+ ]
153
218
  end
154
- @configs.rewrite_yml_array('texdocumentclass', "[\"review-jsbook\", \"#{jsbook_config}\"]")
219
+ @configs.rewrite_yml_array('texdocumentclass', "[\"#{book_style}\", \"#{book_configs.join(',')}\"]")
155
220
  if @config.key?('retrovert')
156
221
  @config['retrovert'].each{ |k,v|
157
222
  unless v..is_a?(Hash)
@@ -584,6 +649,7 @@ module ReVIEW
584
649
  replace_compatible_block_command_outline(content, 'output', 'list', 3)
585
650
  replace_compatible_block_command_to_outside(content, 'sideimage', 'image', 1, '[]')
586
651
  replace_block_command_outline(content, 'abstract', 'lead', true)
652
+ delete_block_command(content, 'makechaptitlepage')
587
653
  delete_block_command(content, 'vspace')
588
654
  delete_block_command(content, 'needvspace')
589
655
  delete_block_command(content, 'clearpage')
@@ -706,6 +772,7 @@ module ReVIEW
706
772
  delete_inline_command(content, 'userinput')
707
773
  delete_inline_command(content, 'weak')
708
774
  delete_inline_command(content, 'cursor')
775
+ delete_inline_command(content, 'foldhere')
709
776
  # font size
710
777
  delete_inline_command(content, 'small')
711
778
  delete_inline_command(content, 'xsmall')
@@ -725,12 +792,6 @@ module ReVIEW
725
792
  content.gsub!(/@<href>{(.*?)#.*?,(.*?)}/, '@<href>{\1,\2}')
726
793
  content.gsub!(/@<href>{(.*?)#.*?}/, '@<href>{\1}')
727
794
  linkurl_footnote = @config['starter']['linkurl_footnote']
728
- # table 内の @ コマンドは不安定らしい
729
- while !content.gsub!(/(\/\/table.*)@<br>{}(.*?\/\/})/m, "\\1#{Regexp.escape(@table_br_replace)}\\2").nil? do
730
- end
731
- # 空セルが2行になることがあるらしい
732
- while !content.gsub!(/(\/\/table.*\s)\.(\s.*?\/\/})/m, "\\1#{Regexp.escape(@table_empty_replace)}\\2").nil? do
733
- end
734
795
  # noop を最後に消すためにダミーに変える
735
796
  content.gsub!('@<nop>$$', '@<dummynop>$must_be_replace_nop$')
736
797
  content.gsub!('@<nop>||', '@<dummynop>|must_be_replace_nop|')
@@ -787,9 +848,20 @@ module ReVIEW
787
848
  m.gsub(/@<br>({}|\$\$|\|\|)/, '@<fnbr>\1')
788
849
  }
789
850
 
851
+ content.gsub!(/(\/\/table.*?{.*?\/\/})/m) { |m|
852
+ # table 内の @ コマンドは不安定らしい
853
+ m.gsub!('@<br>{}', "#{Regexp.escape(@table_br_replace)}")
854
+ # 空セルが2行になることがあるらしい
855
+ m.gsub!(/(\s)\.(\s)/, "\\1#{Regexp.escape(@table_empty_replace)}\\2")
856
+ m
857
+ }
858
+
790
859
  content.gsub!(/(.*)@<br>({}|\$\$|\|\|)$/, "\\1\n\n")
791
860
  content.gsub!(/(.*)@<br>({}|\$\$|\|\|)(.*)$/, "\\1\n\n\\2")
792
- content.gsub!(/@<fnbr>({}|\$\$|\|\|)/, '@<br>\1')
861
+
862
+ content.gsub!('@<fnbr>{}', '@<br>{}')
863
+ content.gsub!('@<fnbr>$$', '@<br>$$')
864
+ content.gsub!('@<fnbr>||', '@<br>||')
793
865
  end
794
866
 
795
867
  # nop replace must be last step
@@ -943,16 +1015,30 @@ module ReVIEW
943
1015
  update_sty(outdir, options)
944
1016
  update_ext(outdir, options)
945
1017
 
946
- pwd = Dir.pwd
947
- Dir.chdir(outdir)
948
- updater = ReVIEW::Update.new
949
- updater.force = true
950
- # updater.backup = false
951
- begin
952
- updater.execute()
953
- rescue
1018
+ unless options['no-delegate-config']
1019
+ unless File.exist?(File.join(outdir, 'config.yml'))
1020
+ root_config = File.open(File.join(outdir, 'config.yml'), 'w')
1021
+ root_config.puts("review_version: #{ReVIEW::VERSION}")
1022
+ root_config.puts("inherit: [\"#{File.basename(yamlfile)}\"]")
1023
+ end
1024
+ unless File.exist?(File.join(outdir, 'catalog.yml'))
1025
+ catalogfile = @config['catalogfile']
1026
+ FileUtils.copy(File.join(@basedir, catalogfile), File.join(outdir, 'catalog.yml'))
1027
+ end
1028
+ end
1029
+
1030
+ unless options['no-update']
1031
+ pwd = Dir.pwd
1032
+ Dir.chdir(outdir)
1033
+ updater = ReVIEW::Update.new
1034
+ updater.force = true
1035
+ # updater.backup = false
1036
+ begin
1037
+ updater.execute()
1038
+ rescue
1039
+ end
1040
+ Dir.chdir(pwd)
954
1041
  end
955
- Dir.chdir(pwd)
956
1042
 
957
1043
  if options['preproc']
958
1044
  info 'preproc'
@@ -44,6 +44,35 @@ module ReVIEW
44
44
  ]
45
45
  end
46
46
 
47
+ def review_jsbook_invalid_configs()
48
+ [
49
+ "uplatex",
50
+ "autodetect-engine",
51
+ "papersize",
52
+ "titlepage",
53
+ "notitlepage",
54
+ "usemag",
55
+ "nomag",
56
+ "nomag*",
57
+ "a4j",
58
+ "a5j",
59
+ "b4j",
60
+ "b5j",
61
+ "winjis",
62
+ "mingoth",
63
+ "jis",
64
+ "disablejfam",
65
+ "a4paper",
66
+ "a5paper",
67
+ "b4paper",
68
+ "b5paper",
69
+ "letterpaper",
70
+ "tombo",
71
+ "tombow",
72
+ "mentuke",
73
+ ]
74
+ end
75
+
47
76
  # キャプションを取得する
48
77
  def get_caption(line)
49
78
  m = line.match(/^\/\/(\w+?)((\[#{r_option_inner}\])*)([$|{])*$/)
@@ -0,0 +1,7 @@
1
+ \LoadClass{utbook}
2
+
3
+ \newif\if@reclscover \@reclscovertrue
4
+ \newif\ifrecls@coverfitpage \recls@coverfitpagefalse
5
+ \newif\ifrecls@serialpage \recls@serialpagefalse
6
+
7
+ \newcommand{\headfont}
@@ -1,5 +1,5 @@
1
1
  module ReVIEW
2
2
  module Retrovert
3
- VERSION = "0.9.10"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -84,9 +84,27 @@ module ReVIEW
84
84
  FileUtils.copy(File.expand_path(current_file, @basedir), File.join(outdir, current_file))
85
85
  }
86
86
  @basedir = outdir
87
+ # Only quote date fields for review 5.3 and earlier (< 5.4.0)
88
+ # These versions have YAML Date parsing issues with Ruby 3.1+
89
+ if Gem::Version.new(ReVIEW::VERSION) < Gem::Version.new('5.4.0')
90
+ quote_date_fields()
91
+ end
87
92
  rewrite_retrovert_yml()
88
93
  end
89
94
 
95
+ # Quote date fields to avoid YAML Date parsing issues with Ruby 3.1+ and review 5.3 or earlier
96
+ def quote_date_fields()
97
+ @config_files.each { |current_file|
98
+ yamlfile = File.join(@basedir, current_file)
99
+ content = File.read(yamlfile)
100
+ # Match date fields like "date: 2021-07-10" and quote them
101
+ content.gsub!(/^(\s*)(date|history):\s*(\d{4}-\d{2}-\d{2})\s*$/, '\1\2: "\3"')
102
+ # Match date in arrays like " - 2021-07-10"
103
+ content.gsub!(/^(\s*-\s*)(\d{4}-\d{2}-\d{2})\s*$/, '\1"\2"')
104
+ File.write(yamlfile, content)
105
+ }
106
+ end
107
+
90
108
  def commentout(yamlfile, key)
91
109
  content = File.read(yamlfile)
92
110
  content.gsub!(/^(\s*)#{key}:(.*)$/, "#\\1#{key}:\\2")
@@ -128,6 +146,11 @@ module ReVIEW
128
146
  retrovert = yaml['retrovert']
129
147
  yaml.deep_merge!(retrovert)
130
148
  yaml.delete('retrovert')
149
+ # Convert Date/Time objects to strings to avoid YAML loading issues
150
+ # with Ruby 3.1+ and review 5.3 or earlier
151
+ if Gem::Version.new(ReVIEW::VERSION) < Gem::Version.new('5.4.0')
152
+ yaml = convert_dates_to_strings(yaml)
153
+ end
131
154
  # YAML.dump(yaml, File.open(yamlfile, "w"))
132
155
  content = Psych.dump(yaml)
133
156
  content.gsub!('---','')
@@ -135,9 +158,23 @@ module ReVIEW
135
158
  }
136
159
  end
137
160
 
161
+ # Recursively convert Date and Time objects to ISO 8601 strings
162
+ def convert_dates_to_strings(obj)
163
+ case obj
164
+ when Hash
165
+ obj.transform_values { |v| convert_dates_to_strings(v) }
166
+ when Array
167
+ obj.map { |v| convert_dates_to_strings(v) }
168
+ when Date, Time
169
+ obj.strftime('%Y-%m-%d')
170
+ else
171
+ obj
172
+ end
173
+ end
174
+
138
175
  def load_yaml(filepath)
139
176
  begin
140
- yaml = YAML.load_file(filepath)
177
+ yaml = YAML.load_file(filepath, permitted_classes: [Date, Time])
141
178
  rescue => e
142
179
  error "load error #{e.message}"
143
180
  end