postsvg 0.1.0 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +105 -0
- data/CLAUDE.md +173 -0
- data/Gemfile +2 -3
- data/README.adoc +456 -179
- data/Rakefile +100 -0
- data/TODO.roadmap/00-architecture.md +139 -0
- data/TODO.roadmap/01-autoload-migration.md +39 -0
- data/TODO.roadmap/02-isolate-dormant-code.md +51 -0
- data/TODO.roadmap/03-domain-model.md +66 -0
- data/TODO.roadmap/04-lexer.md +40 -0
- data/TODO.roadmap/05-parser.md +43 -0
- data/TODO.roadmap/06-graphics-state.md +45 -0
- data/TODO.roadmap/07-matrix-and-color.md +37 -0
- data/TODO.roadmap/08-svg-builder.md +51 -0
- data/TODO.roadmap/09-renderer.md +52 -0
- data/TODO.roadmap/10-visitor.md +58 -0
- data/TODO.roadmap/11-operator-coverage.md +103 -0
- data/TODO.roadmap/12-svg-domain.md +62 -0
- data/TODO.roadmap/13-translation-handlers.md +69 -0
- data/TODO.roadmap/14-ps-serializer.md +49 -0
- data/TODO.roadmap/15-cli-and-public-api.md +47 -0
- data/TODO.roadmap/16-specs.md +84 -0
- data/TODO.roadmap/17-docs-sync.md +47 -0
- data/TODO.roadmap/18-performance-and-determinism.md +47 -0
- data/TODO.roadmap/19-error-model.md +45 -0
- data/TODO.roadmap/20-font-and-text.md +46 -0
- data/TODO.roadmap/21-images.md +45 -0
- data/TODO.roadmap/22-forms-and-resources.md +25 -0
- data/TODO.roadmap/23-level2-level3.md +52 -0
- data/TODO.roadmap/24-ci-and-release.md +42 -0
- data/TODO.roadmap/README.md +77 -0
- data/docs/.gitignore +29 -0
- data/docs/CHANGELOG.md +114 -0
- data/docs/COMPLETE_DOCUMENTATION_STATUS.md +376 -0
- data/docs/DEPLOYMENT.md +456 -0
- data/docs/DEPLOYMENT_INSTRUCTIONS.md +229 -0
- data/docs/DOCUMENTATION_PLAN.md +425 -0
- data/docs/FINAL_SUMMARY.md +657 -0
- data/docs/Gemfile +15 -0
- data/docs/README.md +327 -0
- data/docs/_config.yml +99 -0
- data/docs/advanced-topics.adoc +370 -0
- data/docs/api-reference/colors.adoc +705 -0
- data/docs/api-reference/converter.adoc +699 -0
- data/docs/api-reference/execution-context.adoc +1210 -0
- data/docs/api-reference/graphics-state.adoc +1070 -0
- data/docs/api-reference/interpreter.adoc +810 -0
- data/docs/api-reference/matrix.adoc +1179 -0
- data/docs/api-reference/path-builder.adoc +1284 -0
- data/docs/api-reference/postsvg-module.adoc +388 -0
- data/docs/api-reference/svg-generator.adoc +891 -0
- data/docs/api-reference/tokenizer.adoc +925 -0
- data/docs/api-reference.adoc +221 -0
- data/docs/architecture/command-registry.adoc +1191 -0
- data/docs/architecture/conversion-pipeline.adoc +746 -0
- data/docs/architecture/design-decisions.adoc +999 -0
- data/docs/architecture/generator-stage.adoc +1115 -0
- data/docs/architecture/graphics-state-model.adoc +1089 -0
- data/docs/architecture/interpreter-stage.adoc +1125 -0
- data/docs/architecture/parser-stage.adoc +1051 -0
- data/docs/architecture.adoc +354 -0
- data/docs/cli-reference/batch-command.adoc +616 -0
- data/docs/cli-reference/check-command.adoc +677 -0
- data/docs/cli-reference/cli-options.adoc +802 -0
- data/docs/cli-reference/convert-command.adoc +462 -0
- data/docs/cli-reference/version-command.adoc +296 -0
- data/docs/cli-reference.adoc +317 -0
- data/docs/concepts/conversion-pipeline.adoc +903 -0
- data/docs/concepts/coordinate-systems.adoc +836 -0
- data/docs/concepts/graphics-state.adoc +861 -0
- data/docs/concepts/path-operations.adoc +1076 -0
- data/docs/concepts/postscript-language.adoc +859 -0
- data/docs/concepts/svg-generation.adoc +937 -0
- data/docs/concepts.adoc +198 -0
- data/docs/contributing.adoc +443 -0
- data/docs/development.adoc +420 -0
- data/docs/faq.adoc +493 -0
- data/docs/getting-started/basic-usage.adoc +538 -0
- data/docs/getting-started/common-workflows.adoc +577 -0
- data/docs/getting-started/first-conversion.adoc +492 -0
- data/docs/getting-started/installation.adoc +534 -0
- data/docs/getting-started.adoc +94 -0
- data/docs/index.adoc +248 -0
- data/docs/optimization.adoc +196 -0
- data/docs/ps2svg_compatibility.adoc +149 -0
- data/docs/quick-reference.adoc +453 -0
- data/docs/sitemap.adoc +337 -0
- data/docs/troubleshooting.adoc +486 -0
- data/docs/validation.adoc +772 -0
- data/exe/postsvg +1 -0
- data/lib/postsvg/cli.rb +104 -57
- data/lib/postsvg/color.rb +132 -0
- data/lib/postsvg/errors.rb +68 -3
- data/lib/postsvg/format_number.rb +22 -0
- data/lib/postsvg/graphics_context.rb +80 -0
- data/lib/postsvg/graphics_stack.rb +43 -0
- data/lib/postsvg/model/literals/array.rb +41 -0
- data/lib/postsvg/model/literals/dictionary.rb +34 -0
- data/lib/postsvg/model/literals/hex.rb +37 -0
- data/lib/postsvg/model/literals/name.rb +40 -0
- data/lib/postsvg/model/literals/number.rb +36 -0
- data/lib/postsvg/model/literals/procedure.rb +41 -0
- data/lib/postsvg/model/literals/string.rb +30 -0
- data/lib/postsvg/model/literals.rb +19 -0
- data/lib/postsvg/model/operator.rb +58 -0
- data/lib/postsvg/model/operators/arithmetic.rb +264 -0
- data/lib/postsvg/model/operators/boolean.rb +182 -0
- data/lib/postsvg/model/operators/color.rb +74 -0
- data/lib/postsvg/model/operators/container.rb +186 -0
- data/lib/postsvg/model/operators/control_flow.rb +119 -0
- data/lib/postsvg/model/operators/device.rb +21 -0
- data/lib/postsvg/model/operators/dictionary.rb +118 -0
- data/lib/postsvg/model/operators/font.rb +121 -0
- data/lib/postsvg/model/operators/graphics_state.rb +84 -0
- data/lib/postsvg/model/operators/painting.rb +29 -0
- data/lib/postsvg/model/operators/path.rb +169 -0
- data/lib/postsvg/model/operators/stack.rb +72 -0
- data/lib/postsvg/model/operators/transformations.rb +103 -0
- data/lib/postsvg/model/operators.rb +89 -0
- data/lib/postsvg/model/program.rb +68 -0
- data/lib/postsvg/model/token.rb +43 -0
- data/lib/postsvg/model.rb +17 -0
- data/lib/postsvg/options.rb +29 -0
- data/lib/postsvg/renderer.rb +85 -0
- data/lib/postsvg/serializer.rb +325 -0
- data/lib/postsvg/source/ast_builder.rb +308 -0
- data/lib/postsvg/source/lexer.rb +322 -0
- data/lib/postsvg/source/operand_stack.rb +55 -0
- data/lib/postsvg/source.rb +21 -0
- data/lib/postsvg/svg/attribute_parser.rb +45 -0
- data/lib/postsvg/svg/clip_path_registry.rb +44 -0
- data/lib/postsvg/svg/document.rb +22 -0
- data/lib/postsvg/svg/element.rb +84 -0
- data/lib/postsvg/svg/elements/circle.rb +36 -0
- data/lib/postsvg/svg/elements/clip_path.rb +26 -0
- data/lib/postsvg/svg/elements/defs.rb +24 -0
- data/lib/postsvg/svg/elements/ellipse.rb +38 -0
- data/lib/postsvg/svg/elements/group.rb +37 -0
- data/lib/postsvg/svg/elements/image.rb +35 -0
- data/lib/postsvg/svg/elements/line.rb +36 -0
- data/lib/postsvg/svg/elements/path.rb +32 -0
- data/lib/postsvg/svg/elements/polygon.rb +12 -0
- data/lib/postsvg/svg/elements/polyline.rb +32 -0
- data/lib/postsvg/svg/elements/rect.rb +44 -0
- data/lib/postsvg/svg/elements/svg.rb +39 -0
- data/lib/postsvg/svg/elements/text.rb +42 -0
- data/lib/postsvg/svg/elements.rb +31 -0
- data/lib/postsvg/svg/paint.rb +34 -0
- data/lib/postsvg/svg/parser.rb +39 -0
- data/lib/postsvg/svg/path_data/command.rb +27 -0
- data/lib/postsvg/svg/path_data/parser.rb +82 -0
- data/lib/postsvg/svg/path_data.rb +17 -0
- data/lib/postsvg/svg/stroke.rb +31 -0
- data/lib/postsvg/svg/transform_list.rb +59 -0
- data/lib/postsvg/svg.rb +22 -0
- data/lib/postsvg/svg_builder.rb +249 -0
- data/lib/postsvg/translation/arc_converter.rb +86 -0
- data/lib/postsvg/translation/bounding_box.rb +59 -0
- data/lib/postsvg/translation/context.rb +34 -0
- data/lib/postsvg/translation/handler_registry.rb +38 -0
- data/lib/postsvg/translation/handlers/circle_handler.rb +28 -0
- data/lib/postsvg/translation/handlers/clip_path_handler.rb +13 -0
- data/lib/postsvg/translation/handlers/defs_handler.rb +15 -0
- data/lib/postsvg/translation/handlers/ellipse_handler.rb +31 -0
- data/lib/postsvg/translation/handlers/group_handler.rb +21 -0
- data/lib/postsvg/translation/handlers/image_handler.rb +20 -0
- data/lib/postsvg/translation/handlers/line_handler.rb +23 -0
- data/lib/postsvg/translation/handlers/open_handler.rb +18 -0
- data/lib/postsvg/translation/handlers/path_handler.rb +356 -0
- data/lib/postsvg/translation/handlers/polygon_handler.rb +33 -0
- data/lib/postsvg/translation/handlers/polyline_handler.rb +31 -0
- data/lib/postsvg/translation/handlers/rect_handler.rb +27 -0
- data/lib/postsvg/translation/handlers/shared.rb +110 -0
- data/lib/postsvg/translation/handlers/svg_handler.rb +25 -0
- data/lib/postsvg/translation/handlers/text_handler.rb +56 -0
- data/lib/postsvg/translation/handlers.rb +25 -0
- data/lib/postsvg/translation/ps_renderer.rb +105 -0
- data/lib/postsvg/translation/record_emitter.rb +35 -0
- data/lib/postsvg/translation.rb +17 -0
- data/lib/postsvg/version.rb +1 -1
- data/lib/postsvg/visitors/ps_visitor/arithmetic.rb +125 -0
- data/lib/postsvg/visitors/ps_visitor/boolean.rb +105 -0
- data/lib/postsvg/visitors/ps_visitor/color.rb +53 -0
- data/lib/postsvg/visitors/ps_visitor/common.rb +66 -0
- data/lib/postsvg/visitors/ps_visitor/container.rb +164 -0
- data/lib/postsvg/visitors/ps_visitor/control_flow.rb +110 -0
- data/lib/postsvg/visitors/ps_visitor/device.rb +20 -0
- data/lib/postsvg/visitors/ps_visitor/dictionary.rb +89 -0
- data/lib/postsvg/visitors/ps_visitor/font.rb +93 -0
- data/lib/postsvg/visitors/ps_visitor/graphics_state.rb +55 -0
- data/lib/postsvg/visitors/ps_visitor/painting.rb +90 -0
- data/lib/postsvg/visitors/ps_visitor/path.rb +112 -0
- data/lib/postsvg/visitors/ps_visitor/stack.rb +47 -0
- data/lib/postsvg/visitors/ps_visitor/transformations.rb +101 -0
- data/lib/postsvg/visitors/ps_visitor.rb +208 -0
- data/lib/postsvg/visitors.rb +9 -0
- data/lib/postsvg.rb +93 -59
- data/lychee.toml +86 -0
- metadata +216 -11
- data/postsvg.gemspec +0 -38
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
= Quick Reference
|
|
2
|
+
:page-nav_order: 12
|
|
3
|
+
|
|
4
|
+
== Purpose
|
|
5
|
+
|
|
6
|
+
This quick reference provides fast access to the most commonly used Postsvg commands, API methods, and workflows. Perfect for experienced users who need a quick reminder.
|
|
7
|
+
|
|
8
|
+
== Installation
|
|
9
|
+
|
|
10
|
+
[source,sh]
|
|
11
|
+
----
|
|
12
|
+
# Via RubyGems
|
|
13
|
+
gem install postsvg
|
|
14
|
+
|
|
15
|
+
# Via Bundler - add to Gemfile
|
|
16
|
+
gem 'postsvg'
|
|
17
|
+
bundle install
|
|
18
|
+
----
|
|
19
|
+
|
|
20
|
+
== Command-Line Interface
|
|
21
|
+
|
|
22
|
+
=== Convert Commands
|
|
23
|
+
|
|
24
|
+
[source,sh]
|
|
25
|
+
----
|
|
26
|
+
# Convert single file
|
|
27
|
+
postsvg convert input.ps output.svg
|
|
28
|
+
|
|
29
|
+
# Convert to stdout
|
|
30
|
+
postsvg convert input.ps > output.svg
|
|
31
|
+
|
|
32
|
+
# Batch convert directory
|
|
33
|
+
postsvg batch input_dir/ output_dir/
|
|
34
|
+
|
|
35
|
+
# Convert in place
|
|
36
|
+
postsvg batch files/
|
|
37
|
+
----
|
|
38
|
+
|
|
39
|
+
=== Validation Commands
|
|
40
|
+
|
|
41
|
+
[source,sh]
|
|
42
|
+
----
|
|
43
|
+
# Basic validation
|
|
44
|
+
postsvg check document.ps
|
|
45
|
+
|
|
46
|
+
# Syntax only (fast)
|
|
47
|
+
postsvg check --level=syntax document.ps
|
|
48
|
+
|
|
49
|
+
# Full validation (complete conversion test)
|
|
50
|
+
postsvg check --level=full document.ps
|
|
51
|
+
|
|
52
|
+
# Multiple files
|
|
53
|
+
postsvg check *.ps
|
|
54
|
+
|
|
55
|
+
# JSON output for CI/CD
|
|
56
|
+
postsvg check --format=json --no-color document.ps
|
|
57
|
+
----
|
|
58
|
+
|
|
59
|
+
=== Common Options
|
|
60
|
+
|
|
61
|
+
[cols="1,3"]
|
|
62
|
+
|===
|
|
63
|
+
| Option | Description
|
|
64
|
+
|
|
65
|
+
| `--strict`
|
|
66
|
+
| Enable strict mode (fail on unknown operators)
|
|
67
|
+
|
|
68
|
+
| `--verbose`
|
|
69
|
+
| Show detailed information
|
|
70
|
+
|
|
71
|
+
| `--quiet`
|
|
72
|
+
| Suppress success messages
|
|
73
|
+
|
|
74
|
+
| `--no-color`
|
|
75
|
+
| Disable colored output
|
|
76
|
+
|
|
77
|
+
| `--fail-fast`
|
|
78
|
+
| Stop at first error
|
|
79
|
+
|
|
80
|
+
| `--level=LEVEL`
|
|
81
|
+
| Validation level: syntax, semantic, full
|
|
82
|
+
|
|
83
|
+
| `--format=FORMAT`
|
|
84
|
+
| Output format: text, yaml, json
|
|
85
|
+
|
|
86
|
+
| `--eps-version=VER`
|
|
87
|
+
| Validate EPS version (1.0, 2.0, 3.0)
|
|
88
|
+
|===
|
|
89
|
+
|
|
90
|
+
== Ruby API
|
|
91
|
+
|
|
92
|
+
=== Module Methods
|
|
93
|
+
|
|
94
|
+
[source,ruby]
|
|
95
|
+
----
|
|
96
|
+
require 'postsvg'
|
|
97
|
+
|
|
98
|
+
# Convert content
|
|
99
|
+
svg = Postsvg.convert(ps_content)
|
|
100
|
+
|
|
101
|
+
# Convert file
|
|
102
|
+
Postsvg.convert_file('input.ps', 'output.svg')
|
|
103
|
+
|
|
104
|
+
# Get SVG without saving
|
|
105
|
+
svg = Postsvg.convert_file('input.ps')
|
|
106
|
+
----
|
|
107
|
+
|
|
108
|
+
=== Converter Class
|
|
109
|
+
|
|
110
|
+
[source,ruby]
|
|
111
|
+
----
|
|
112
|
+
require 'postsvg'
|
|
113
|
+
|
|
114
|
+
# Basic conversion
|
|
115
|
+
converter = Postsvg::Converter.new(ps_content)
|
|
116
|
+
svg = converter.convert
|
|
117
|
+
|
|
118
|
+
# With strict mode
|
|
119
|
+
converter = Postsvg::Converter.new(
|
|
120
|
+
ps_content,
|
|
121
|
+
strict_mode: true
|
|
122
|
+
)
|
|
123
|
+
svg = converter.convert
|
|
124
|
+
----
|
|
125
|
+
|
|
126
|
+
=== Error Handling
|
|
127
|
+
|
|
128
|
+
[source,ruby]
|
|
129
|
+
----
|
|
130
|
+
begin
|
|
131
|
+
svg = Postsvg.convert(ps_content)
|
|
132
|
+
rescue Postsvg::ParseError => e
|
|
133
|
+
puts "Parse error: #{e.message}"
|
|
134
|
+
rescue Postsvg::ConversionError => e
|
|
135
|
+
puts "Conversion error: #{e.message}"
|
|
136
|
+
rescue Postsvg::Error => e
|
|
137
|
+
puts "Error: #{e.message}"
|
|
138
|
+
end
|
|
139
|
+
----
|
|
140
|
+
|
|
141
|
+
== Common Workflows
|
|
142
|
+
|
|
143
|
+
=== Validate Then Convert
|
|
144
|
+
|
|
145
|
+
[source,sh]
|
|
146
|
+
----
|
|
147
|
+
# Shell script
|
|
148
|
+
if postsvg check document.ps; then
|
|
149
|
+
postsvg convert document.ps document.svg
|
|
150
|
+
fi
|
|
151
|
+
----
|
|
152
|
+
|
|
153
|
+
[source,ruby]
|
|
154
|
+
----
|
|
155
|
+
# Ruby script
|
|
156
|
+
if system("postsvg check #{file}")
|
|
157
|
+
Postsvg.convert_file(file, output)
|
|
158
|
+
end
|
|
159
|
+
----
|
|
160
|
+
|
|
161
|
+
=== Batch Processing
|
|
162
|
+
|
|
163
|
+
[source,ruby]
|
|
164
|
+
----
|
|
165
|
+
Dir.glob('*.ps').each do |file|
|
|
166
|
+
begin
|
|
167
|
+
Postsvg.convert_file(file, file.sub('.ps', '.svg'))
|
|
168
|
+
puts "✓ #{file}"
|
|
169
|
+
rescue => e
|
|
170
|
+
puts "✗ #{file}: #{e.message}"
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
----
|
|
174
|
+
|
|
175
|
+
=== CI/CD Integration
|
|
176
|
+
|
|
177
|
+
**GitHub Actions:**
|
|
178
|
+
[source,yaml]
|
|
179
|
+
----
|
|
180
|
+
- uses: ruby/setup-ruby@v1
|
|
181
|
+
with:
|
|
182
|
+
ruby-version: '3.2'
|
|
183
|
+
- run: gem install postsvg
|
|
184
|
+
- run: postsvg check --format=json *.ps
|
|
185
|
+
----
|
|
186
|
+
|
|
187
|
+
**GitLab CI:**
|
|
188
|
+
[source,yaml]
|
|
189
|
+
----
|
|
190
|
+
validate:
|
|
191
|
+
image: ruby:3.2
|
|
192
|
+
script:
|
|
193
|
+
- gem install postsvg
|
|
194
|
+
- postsvg check --level=full *.ps
|
|
195
|
+
----
|
|
196
|
+
|
|
197
|
+
== PostScript Basics
|
|
198
|
+
|
|
199
|
+
=== File Structure
|
|
200
|
+
|
|
201
|
+
[source,postscript]
|
|
202
|
+
----
|
|
203
|
+
%!PS-Adobe-3.0 EPSF-3.0 # Header
|
|
204
|
+
%%BoundingBox: 0 0 612 792 # Required for EPS
|
|
205
|
+
%%Title: My Document # Optional metadata
|
|
206
|
+
|
|
207
|
+
% Your PostScript commands here
|
|
208
|
+
newpath
|
|
209
|
+
100 100 moveto
|
|
210
|
+
200 200 lineto
|
|
211
|
+
stroke
|
|
212
|
+
|
|
213
|
+
showpage # End
|
|
214
|
+
----
|
|
215
|
+
|
|
216
|
+
=== Common Operations
|
|
217
|
+
|
|
218
|
+
**Path Construction:**
|
|
219
|
+
[source,postscript]
|
|
220
|
+
----
|
|
221
|
+
newpath % Start new path
|
|
222
|
+
x y moveto % Move to point
|
|
223
|
+
x y lineto % Line to point
|
|
224
|
+
x y r a1 a2 arc % Arc
|
|
225
|
+
closepath % Close path
|
|
226
|
+
----
|
|
227
|
+
|
|
228
|
+
**Painting:**
|
|
229
|
+
[source,postscript]
|
|
230
|
+
----
|
|
231
|
+
stroke % Draw path outline
|
|
232
|
+
fill % Fill path interior
|
|
233
|
+
eofill % Even-odd fill
|
|
234
|
+
clip % Set clipping path
|
|
235
|
+
----
|
|
236
|
+
|
|
237
|
+
**Colors:**
|
|
238
|
+
[source,postscript]
|
|
239
|
+
----
|
|
240
|
+
r g b setrgbcolor % RGB (0-1)
|
|
241
|
+
gray setgray % Grayscale (0-1)
|
|
242
|
+
c m y k setcmykcolor % CMYK (0-1)
|
|
243
|
+
----
|
|
244
|
+
|
|
245
|
+
**Transformations:**
|
|
246
|
+
[source,postscript]
|
|
247
|
+
----
|
|
248
|
+
dx dy translate % Move origin
|
|
249
|
+
sx sy scale % Scale coordinates
|
|
250
|
+
angle rotate % Rotate (degrees)
|
|
251
|
+
----
|
|
252
|
+
|
|
253
|
+
**Graphics State:**
|
|
254
|
+
[source,postscript]
|
|
255
|
+
----
|
|
256
|
+
gsave % Save state
|
|
257
|
+
grestore % Restore state
|
|
258
|
+
width setlinewidth % Set line width
|
|
259
|
+
----
|
|
260
|
+
|
|
261
|
+
== Supported Features
|
|
262
|
+
|
|
263
|
+
✅ **Fully Supported:**
|
|
264
|
+
- Path construction (moveto, lineto, curveto)
|
|
265
|
+
- Basic painting (stroke, fill)
|
|
266
|
+
- RGB and grayscale colors
|
|
267
|
+
- Coordinate transformations
|
|
268
|
+
- Graphics state management
|
|
269
|
+
- Stack operations
|
|
270
|
+
|
|
271
|
+
⚠️ **Partially Supported:**
|
|
272
|
+
- CMYK colors (converted to RGB)
|
|
273
|
+
- Basic clipping paths
|
|
274
|
+
|
|
275
|
+
❌ **Not Yet Supported:**
|
|
276
|
+
- Text rendering
|
|
277
|
+
- Gradients and patterns
|
|
278
|
+
- Raster images
|
|
279
|
+
- Advanced Level 2/3 features
|
|
280
|
+
|
|
281
|
+
== Troubleshooting
|
|
282
|
+
|
|
283
|
+
**Command not found:**
|
|
284
|
+
[source,sh]
|
|
285
|
+
----
|
|
286
|
+
export PATH="$PATH:$(gem environment gemdir)/bin"
|
|
287
|
+
----
|
|
288
|
+
|
|
289
|
+
**Empty SVG output:**
|
|
290
|
+
- Check BoundingBox is present
|
|
291
|
+
- Ensure paths are stroked or filled
|
|
292
|
+
- Validate with `postsvg check --level=full`
|
|
293
|
+
|
|
294
|
+
**Unknown operator error:**
|
|
295
|
+
- Disable strict mode in Ruby API
|
|
296
|
+
- Check operator support in documentation
|
|
297
|
+
- Report missing operators as feature request
|
|
298
|
+
|
|
299
|
+
**Memory issues:**
|
|
300
|
+
[source,ruby]
|
|
301
|
+
----
|
|
302
|
+
# Process in batches
|
|
303
|
+
files.each_slice(10) do |batch|
|
|
304
|
+
batch.each { |f| convert(f) }
|
|
305
|
+
GC.start
|
|
306
|
+
end
|
|
307
|
+
----
|
|
308
|
+
|
|
309
|
+
## File Formats
|
|
310
|
+
|
|
311
|
+
**Input Formats:**
|
|
312
|
+
- `.ps` - PostScript files
|
|
313
|
+
- `.eps` - Encapsulated PostScript files
|
|
314
|
+
|
|
315
|
+
**Output Format:**
|
|
316
|
+
- `.svg` - Scalable Vector Graphics (XML-based)
|
|
317
|
+
|
|
318
|
+
**BoundingBox Formats:**
|
|
319
|
+
[source,postscript]
|
|
320
|
+
----
|
|
321
|
+
%%BoundingBox: 0 0 612 792 # Standard
|
|
322
|
+
%%BoundingBox: (atend) # Deferred
|
|
323
|
+
%%HiResBoundingBox: 0.0 0.0 612.5 792.5 # High-res
|
|
324
|
+
----
|
|
325
|
+
|
|
326
|
+
## Environment Variables
|
|
327
|
+
|
|
328
|
+
**Ruby Version:**
|
|
329
|
+
[source,sh]
|
|
330
|
+
----
|
|
331
|
+
ruby -v # Check version (need 2.7+)
|
|
332
|
+
----
|
|
333
|
+
|
|
334
|
+
**Gem Paths:**
|
|
335
|
+
[source,sh]
|
|
336
|
+
----
|
|
337
|
+
gem environment # Show all gem paths
|
|
338
|
+
which postsvg # Show postsvg location
|
|
339
|
+
----
|
|
340
|
+
|
|
341
|
+
## Performance Tips
|
|
342
|
+
|
|
343
|
+
**For Large Files:**
|
|
344
|
+
- Process sequentially with GC
|
|
345
|
+
- Monitor memory usage
|
|
346
|
+
- Consider chunking if possible
|
|
347
|
+
|
|
348
|
+
**For Batch Operations:**
|
|
349
|
+
- Use batch command for directories
|
|
350
|
+
- Process in slices for many files
|
|
351
|
+
- Log errors for later review
|
|
352
|
+
|
|
353
|
+
**For Production:**
|
|
354
|
+
- Cache converted files
|
|
355
|
+
- Validate before conversion
|
|
356
|
+
- Use strict mode in development only
|
|
357
|
+
|
|
358
|
+
== Exit Codes
|
|
359
|
+
|
|
360
|
+
[cols="1,3"]
|
|
361
|
+
|===
|
|
362
|
+
| Code | Meaning
|
|
363
|
+
|
|
364
|
+
| 0
|
|
365
|
+
| Success - operation completed
|
|
366
|
+
|
|
367
|
+
| 1
|
|
368
|
+
| Failure - errors occurred
|
|
369
|
+
|===
|
|
370
|
+
|
|
371
|
+
== Common Patterns
|
|
372
|
+
|
|
373
|
+
**Safe Conversion:**
|
|
374
|
+
[source,ruby]
|
|
375
|
+
----
|
|
376
|
+
def safe_convert(input, output)
|
|
377
|
+
Postsvg.convert_file(input, output)
|
|
378
|
+
true
|
|
379
|
+
rescue => e
|
|
380
|
+
puts "Error: #{e.message}"
|
|
381
|
+
false
|
|
382
|
+
end
|
|
383
|
+
----
|
|
384
|
+
|
|
385
|
+
**With Validation:**
|
|
386
|
+
[source,ruby]
|
|
387
|
+
----
|
|
388
|
+
def convert_if_valid(file)
|
|
389
|
+
return unless system("postsvg check #{file}")
|
|
390
|
+
Postsvg.convert_file(file, file.sub('.ps', '.svg'))
|
|
391
|
+
end
|
|
392
|
+
----
|
|
393
|
+
|
|
394
|
+
**Batch with Stats:**
|
|
395
|
+
[source,ruby]
|
|
396
|
+
----
|
|
397
|
+
stats = { success: 0, failed: 0 }
|
|
398
|
+
Dir.glob('*.ps').each do |f|
|
|
399
|
+
Postsvg.convert_file(f, f.sub('.ps', '.svg'))
|
|
400
|
+
stats[:success] += 1
|
|
401
|
+
rescue
|
|
402
|
+
stats[:failed] += 1
|
|
403
|
+
end
|
|
404
|
+
puts "Success: #{stats[:success]}, Failed: #{stats[:failed]}"
|
|
405
|
+
----
|
|
406
|
+
|
|
407
|
+
== Resource Links
|
|
408
|
+
|
|
409
|
+
**Documentation:**
|
|
410
|
+
- link:getting-started.adoc[Getting Started Guide]
|
|
411
|
+
- link:api-reference.adoc[Complete API Reference]
|
|
412
|
+
- link:cli-reference.adoc[CLI Command Reference]
|
|
413
|
+
- link:troubleshooting.adoc[Troubleshooting Guide]
|
|
414
|
+
|
|
415
|
+
**External Resources:**
|
|
416
|
+
- link:https://rubygems.org/gems/postsvg[Postsvg on RubyGems]
|
|
417
|
+
- link:https://github.com/metanorma/postsvg[GitHub Repository]
|
|
418
|
+
- link:https://www.adobe.com/products/postscript/pdfs/PLRM.pdf[PostScript Language Reference]
|
|
419
|
+
|
|
420
|
+
== Version Information
|
|
421
|
+
|
|
422
|
+
Check your Postsvg version:
|
|
423
|
+
[source,sh]
|
|
424
|
+
----
|
|
425
|
+
postsvg version
|
|
426
|
+
# Output: postsvg version 0.1.0
|
|
427
|
+
----
|
|
428
|
+
|
|
429
|
+
Check gem information:
|
|
430
|
+
[source,sh]
|
|
431
|
+
----
|
|
432
|
+
gem list postsvg
|
|
433
|
+
gem info postsvg
|
|
434
|
+
----
|
|
435
|
+
|
|
436
|
+
== Getting Help
|
|
437
|
+
|
|
438
|
+
1. Check link:troubleshooting.adoc[Troubleshooting Guide]
|
|
439
|
+
2. Review link:faq.adoc[FAQ]
|
|
440
|
+
3. Search link:https://github.com/metanorma/postsvg/issues[GitHub Issues]
|
|
441
|
+
4. Create new issue if needed
|
|
442
|
+
|
|
443
|
+
== Next Steps
|
|
444
|
+
|
|
445
|
+
**New Users:**
|
|
446
|
+
- link:getting-started/installation.adoc[Install Postsvg]
|
|
447
|
+
- link:getting-started/first-conversion.adoc[First Conversion Tutorial]
|
|
448
|
+
- link:getting-started/basic-usage.adoc[Learn Basic Usage]
|
|
449
|
+
|
|
450
|
+
**Experienced Users:**
|
|
451
|
+
- link:advanced-topics.adoc[Advanced Topics]
|
|
452
|
+
- link:api-reference.adoc[Full API Reference]
|
|
453
|
+
- link:development.adoc[Contributing Guide]
|