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.
Files changed (201) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +105 -0
  3. data/CLAUDE.md +173 -0
  4. data/Gemfile +2 -3
  5. data/README.adoc +456 -179
  6. data/Rakefile +100 -0
  7. data/TODO.roadmap/00-architecture.md +139 -0
  8. data/TODO.roadmap/01-autoload-migration.md +39 -0
  9. data/TODO.roadmap/02-isolate-dormant-code.md +51 -0
  10. data/TODO.roadmap/03-domain-model.md +66 -0
  11. data/TODO.roadmap/04-lexer.md +40 -0
  12. data/TODO.roadmap/05-parser.md +43 -0
  13. data/TODO.roadmap/06-graphics-state.md +45 -0
  14. data/TODO.roadmap/07-matrix-and-color.md +37 -0
  15. data/TODO.roadmap/08-svg-builder.md +51 -0
  16. data/TODO.roadmap/09-renderer.md +52 -0
  17. data/TODO.roadmap/10-visitor.md +58 -0
  18. data/TODO.roadmap/11-operator-coverage.md +103 -0
  19. data/TODO.roadmap/12-svg-domain.md +62 -0
  20. data/TODO.roadmap/13-translation-handlers.md +69 -0
  21. data/TODO.roadmap/14-ps-serializer.md +49 -0
  22. data/TODO.roadmap/15-cli-and-public-api.md +47 -0
  23. data/TODO.roadmap/16-specs.md +84 -0
  24. data/TODO.roadmap/17-docs-sync.md +47 -0
  25. data/TODO.roadmap/18-performance-and-determinism.md +47 -0
  26. data/TODO.roadmap/19-error-model.md +45 -0
  27. data/TODO.roadmap/20-font-and-text.md +46 -0
  28. data/TODO.roadmap/21-images.md +45 -0
  29. data/TODO.roadmap/22-forms-and-resources.md +25 -0
  30. data/TODO.roadmap/23-level2-level3.md +52 -0
  31. data/TODO.roadmap/24-ci-and-release.md +42 -0
  32. data/TODO.roadmap/README.md +77 -0
  33. data/docs/.gitignore +29 -0
  34. data/docs/CHANGELOG.md +114 -0
  35. data/docs/COMPLETE_DOCUMENTATION_STATUS.md +376 -0
  36. data/docs/DEPLOYMENT.md +456 -0
  37. data/docs/DEPLOYMENT_INSTRUCTIONS.md +229 -0
  38. data/docs/DOCUMENTATION_PLAN.md +425 -0
  39. data/docs/FINAL_SUMMARY.md +657 -0
  40. data/docs/Gemfile +15 -0
  41. data/docs/README.md +327 -0
  42. data/docs/_config.yml +99 -0
  43. data/docs/advanced-topics.adoc +370 -0
  44. data/docs/api-reference/colors.adoc +705 -0
  45. data/docs/api-reference/converter.adoc +699 -0
  46. data/docs/api-reference/execution-context.adoc +1210 -0
  47. data/docs/api-reference/graphics-state.adoc +1070 -0
  48. data/docs/api-reference/interpreter.adoc +810 -0
  49. data/docs/api-reference/matrix.adoc +1179 -0
  50. data/docs/api-reference/path-builder.adoc +1284 -0
  51. data/docs/api-reference/postsvg-module.adoc +388 -0
  52. data/docs/api-reference/svg-generator.adoc +891 -0
  53. data/docs/api-reference/tokenizer.adoc +925 -0
  54. data/docs/api-reference.adoc +221 -0
  55. data/docs/architecture/command-registry.adoc +1191 -0
  56. data/docs/architecture/conversion-pipeline.adoc +746 -0
  57. data/docs/architecture/design-decisions.adoc +999 -0
  58. data/docs/architecture/generator-stage.adoc +1115 -0
  59. data/docs/architecture/graphics-state-model.adoc +1089 -0
  60. data/docs/architecture/interpreter-stage.adoc +1125 -0
  61. data/docs/architecture/parser-stage.adoc +1051 -0
  62. data/docs/architecture.adoc +354 -0
  63. data/docs/cli-reference/batch-command.adoc +616 -0
  64. data/docs/cli-reference/check-command.adoc +677 -0
  65. data/docs/cli-reference/cli-options.adoc +802 -0
  66. data/docs/cli-reference/convert-command.adoc +462 -0
  67. data/docs/cli-reference/version-command.adoc +296 -0
  68. data/docs/cli-reference.adoc +317 -0
  69. data/docs/concepts/conversion-pipeline.adoc +903 -0
  70. data/docs/concepts/coordinate-systems.adoc +836 -0
  71. data/docs/concepts/graphics-state.adoc +861 -0
  72. data/docs/concepts/path-operations.adoc +1076 -0
  73. data/docs/concepts/postscript-language.adoc +859 -0
  74. data/docs/concepts/svg-generation.adoc +937 -0
  75. data/docs/concepts.adoc +198 -0
  76. data/docs/contributing.adoc +443 -0
  77. data/docs/development.adoc +420 -0
  78. data/docs/faq.adoc +493 -0
  79. data/docs/getting-started/basic-usage.adoc +538 -0
  80. data/docs/getting-started/common-workflows.adoc +577 -0
  81. data/docs/getting-started/first-conversion.adoc +492 -0
  82. data/docs/getting-started/installation.adoc +534 -0
  83. data/docs/getting-started.adoc +94 -0
  84. data/docs/index.adoc +248 -0
  85. data/docs/optimization.adoc +196 -0
  86. data/docs/ps2svg_compatibility.adoc +149 -0
  87. data/docs/quick-reference.adoc +453 -0
  88. data/docs/sitemap.adoc +337 -0
  89. data/docs/troubleshooting.adoc +486 -0
  90. data/docs/validation.adoc +772 -0
  91. data/exe/postsvg +1 -0
  92. data/lib/postsvg/cli.rb +104 -57
  93. data/lib/postsvg/color.rb +132 -0
  94. data/lib/postsvg/errors.rb +68 -3
  95. data/lib/postsvg/format_number.rb +22 -0
  96. data/lib/postsvg/graphics_context.rb +80 -0
  97. data/lib/postsvg/graphics_stack.rb +43 -0
  98. data/lib/postsvg/model/literals/array.rb +41 -0
  99. data/lib/postsvg/model/literals/dictionary.rb +34 -0
  100. data/lib/postsvg/model/literals/hex.rb +37 -0
  101. data/lib/postsvg/model/literals/name.rb +40 -0
  102. data/lib/postsvg/model/literals/number.rb +36 -0
  103. data/lib/postsvg/model/literals/procedure.rb +41 -0
  104. data/lib/postsvg/model/literals/string.rb +30 -0
  105. data/lib/postsvg/model/literals.rb +19 -0
  106. data/lib/postsvg/model/operator.rb +58 -0
  107. data/lib/postsvg/model/operators/arithmetic.rb +264 -0
  108. data/lib/postsvg/model/operators/boolean.rb +182 -0
  109. data/lib/postsvg/model/operators/color.rb +74 -0
  110. data/lib/postsvg/model/operators/container.rb +186 -0
  111. data/lib/postsvg/model/operators/control_flow.rb +119 -0
  112. data/lib/postsvg/model/operators/device.rb +21 -0
  113. data/lib/postsvg/model/operators/dictionary.rb +118 -0
  114. data/lib/postsvg/model/operators/font.rb +121 -0
  115. data/lib/postsvg/model/operators/graphics_state.rb +84 -0
  116. data/lib/postsvg/model/operators/painting.rb +29 -0
  117. data/lib/postsvg/model/operators/path.rb +169 -0
  118. data/lib/postsvg/model/operators/stack.rb +72 -0
  119. data/lib/postsvg/model/operators/transformations.rb +103 -0
  120. data/lib/postsvg/model/operators.rb +89 -0
  121. data/lib/postsvg/model/program.rb +68 -0
  122. data/lib/postsvg/model/token.rb +43 -0
  123. data/lib/postsvg/model.rb +17 -0
  124. data/lib/postsvg/options.rb +29 -0
  125. data/lib/postsvg/renderer.rb +85 -0
  126. data/lib/postsvg/serializer.rb +325 -0
  127. data/lib/postsvg/source/ast_builder.rb +308 -0
  128. data/lib/postsvg/source/lexer.rb +322 -0
  129. data/lib/postsvg/source/operand_stack.rb +55 -0
  130. data/lib/postsvg/source.rb +21 -0
  131. data/lib/postsvg/svg/attribute_parser.rb +45 -0
  132. data/lib/postsvg/svg/clip_path_registry.rb +44 -0
  133. data/lib/postsvg/svg/document.rb +22 -0
  134. data/lib/postsvg/svg/element.rb +84 -0
  135. data/lib/postsvg/svg/elements/circle.rb +36 -0
  136. data/lib/postsvg/svg/elements/clip_path.rb +26 -0
  137. data/lib/postsvg/svg/elements/defs.rb +24 -0
  138. data/lib/postsvg/svg/elements/ellipse.rb +38 -0
  139. data/lib/postsvg/svg/elements/group.rb +37 -0
  140. data/lib/postsvg/svg/elements/image.rb +35 -0
  141. data/lib/postsvg/svg/elements/line.rb +36 -0
  142. data/lib/postsvg/svg/elements/path.rb +32 -0
  143. data/lib/postsvg/svg/elements/polygon.rb +12 -0
  144. data/lib/postsvg/svg/elements/polyline.rb +32 -0
  145. data/lib/postsvg/svg/elements/rect.rb +44 -0
  146. data/lib/postsvg/svg/elements/svg.rb +39 -0
  147. data/lib/postsvg/svg/elements/text.rb +42 -0
  148. data/lib/postsvg/svg/elements.rb +31 -0
  149. data/lib/postsvg/svg/paint.rb +34 -0
  150. data/lib/postsvg/svg/parser.rb +39 -0
  151. data/lib/postsvg/svg/path_data/command.rb +27 -0
  152. data/lib/postsvg/svg/path_data/parser.rb +82 -0
  153. data/lib/postsvg/svg/path_data.rb +17 -0
  154. data/lib/postsvg/svg/stroke.rb +31 -0
  155. data/lib/postsvg/svg/transform_list.rb +59 -0
  156. data/lib/postsvg/svg.rb +22 -0
  157. data/lib/postsvg/svg_builder.rb +249 -0
  158. data/lib/postsvg/translation/arc_converter.rb +86 -0
  159. data/lib/postsvg/translation/bounding_box.rb +59 -0
  160. data/lib/postsvg/translation/context.rb +34 -0
  161. data/lib/postsvg/translation/handler_registry.rb +38 -0
  162. data/lib/postsvg/translation/handlers/circle_handler.rb +28 -0
  163. data/lib/postsvg/translation/handlers/clip_path_handler.rb +13 -0
  164. data/lib/postsvg/translation/handlers/defs_handler.rb +15 -0
  165. data/lib/postsvg/translation/handlers/ellipse_handler.rb +31 -0
  166. data/lib/postsvg/translation/handlers/group_handler.rb +21 -0
  167. data/lib/postsvg/translation/handlers/image_handler.rb +20 -0
  168. data/lib/postsvg/translation/handlers/line_handler.rb +23 -0
  169. data/lib/postsvg/translation/handlers/open_handler.rb +18 -0
  170. data/lib/postsvg/translation/handlers/path_handler.rb +356 -0
  171. data/lib/postsvg/translation/handlers/polygon_handler.rb +33 -0
  172. data/lib/postsvg/translation/handlers/polyline_handler.rb +31 -0
  173. data/lib/postsvg/translation/handlers/rect_handler.rb +27 -0
  174. data/lib/postsvg/translation/handlers/shared.rb +110 -0
  175. data/lib/postsvg/translation/handlers/svg_handler.rb +25 -0
  176. data/lib/postsvg/translation/handlers/text_handler.rb +56 -0
  177. data/lib/postsvg/translation/handlers.rb +25 -0
  178. data/lib/postsvg/translation/ps_renderer.rb +105 -0
  179. data/lib/postsvg/translation/record_emitter.rb +35 -0
  180. data/lib/postsvg/translation.rb +17 -0
  181. data/lib/postsvg/version.rb +1 -1
  182. data/lib/postsvg/visitors/ps_visitor/arithmetic.rb +125 -0
  183. data/lib/postsvg/visitors/ps_visitor/boolean.rb +105 -0
  184. data/lib/postsvg/visitors/ps_visitor/color.rb +53 -0
  185. data/lib/postsvg/visitors/ps_visitor/common.rb +66 -0
  186. data/lib/postsvg/visitors/ps_visitor/container.rb +164 -0
  187. data/lib/postsvg/visitors/ps_visitor/control_flow.rb +110 -0
  188. data/lib/postsvg/visitors/ps_visitor/device.rb +20 -0
  189. data/lib/postsvg/visitors/ps_visitor/dictionary.rb +89 -0
  190. data/lib/postsvg/visitors/ps_visitor/font.rb +93 -0
  191. data/lib/postsvg/visitors/ps_visitor/graphics_state.rb +55 -0
  192. data/lib/postsvg/visitors/ps_visitor/painting.rb +90 -0
  193. data/lib/postsvg/visitors/ps_visitor/path.rb +112 -0
  194. data/lib/postsvg/visitors/ps_visitor/stack.rb +47 -0
  195. data/lib/postsvg/visitors/ps_visitor/transformations.rb +101 -0
  196. data/lib/postsvg/visitors/ps_visitor.rb +208 -0
  197. data/lib/postsvg/visitors.rb +9 -0
  198. data/lib/postsvg.rb +93 -59
  199. data/lychee.toml +86 -0
  200. metadata +216 -11
  201. data/postsvg.gemspec +0 -38
@@ -0,0 +1,534 @@
1
+ = Installation
2
+ :page-nav_order: 1
3
+ :page-parent: Getting Started
4
+
5
+ == Purpose
6
+
7
+ This guide provides detailed instructions for installing Postsvg on various platforms and environments. Whether you're installing for development, production use, or integration into an existing project, this guide covers all installation methods.
8
+
9
+ == References
10
+
11
+ * link:../index.adoc[Documentation Home]
12
+ * link:../getting-started.adoc[Getting Started Overview]
13
+ * link:basic-usage.adoc[Basic Usage]
14
+ * link:https://rubygems.org/gems/postsvg[RubyGems Package]
15
+
16
+ == Concepts
17
+
18
+ **RubyGems**:: The Ruby package manager used to distribute and install Ruby libraries.
19
+
20
+ **Bundler**:: A dependency management tool for Ruby that ensures consistent gem versions across environments.
21
+
22
+ **Gem**:: A packaged Ruby library or application that can be installed and managed by RubyGems.
23
+
24
+ == System Requirements
25
+
26
+ === Ruby Version
27
+
28
+ Postsvg requires **Ruby 2.7 or higher**.
29
+
30
+ Check your Ruby version:
31
+
32
+ [source,sh]
33
+ ----
34
+ ruby -v
35
+ # Should output: ruby 2.7.0 or higher
36
+ ----
37
+
38
+ === Operating Systems
39
+
40
+ Postsvg works on all platforms that support Ruby:
41
+
42
+ * **macOS**: 10.15 (Catalina) or higher
43
+ * **Linux**: Any modern distribution (Ubuntu, Debian, CentOS, etc.)
44
+ * **Windows**: Windows 10 or higher with Ruby installed
45
+
46
+ === Dependencies
47
+
48
+ **None!** Postsvg is a pure Ruby library with no external dependencies. You don't need:
49
+
50
+ * ❌ Ghostscript
51
+ * ❌ Inkscape
52
+ * ❌ ImageMagick
53
+ * ❌ Native compilation tools
54
+
55
+ == Installation Methods
56
+
57
+ === Method 1: Install from RubyGems (Recommended)
58
+
59
+ The simplest way to install Postsvg:
60
+
61
+ [source,sh]
62
+ ----
63
+ gem install postsvg
64
+ ----
65
+
66
+ This installs:
67
+ * The `postsvg` gem and all its Ruby dependencies
68
+ * The `postsvg` command-line tool
69
+ * API documentation
70
+
71
+ .Verify installation
72
+ [example]
73
+ ====
74
+ [source,sh]
75
+ ----
76
+ postsvg version
77
+ # Output: postsvg version 0.1.0
78
+
79
+ which postsvg
80
+ # Output: /path/to/bin/postsvg
81
+ ----
82
+ ====
83
+
84
+ === Method 2: Install with Bundler (For Projects)
85
+
86
+ For Ruby projects using Bundler:
87
+
88
+ **1. Add to Gemfile:**
89
+
90
+ [source,ruby]
91
+ ----
92
+ # Gemfile
93
+ source 'https://rubygems.org'
94
+
95
+ gem 'postsvg'
96
+ ----
97
+
98
+ **2. Install dependencies:**
99
+
100
+ [source,sh]
101
+ ----
102
+ bundle install
103
+ ----
104
+
105
+ **3. Use in your project:**
106
+
107
+ [source,ruby]
108
+ ----
109
+ require 'postsvg'
110
+
111
+ svg = Postsvg.convert(ps_content)
112
+ ----
113
+
114
+ **4. Run CLI via Bundler:**
115
+
116
+ [source,sh]
117
+ ----
118
+ bundle exec postsvg convert input.ps output.svg
119
+ ----
120
+
121
+ .Lock to specific version
122
+ [example]
123
+ ====
124
+ [source,ruby]
125
+ ----
126
+ # Gemfile - lock to exact version
127
+ gem 'postsvg', '0.1.0'
128
+
129
+ # Gemfile - lock to minor version
130
+ gem 'postsvg', '~> 0.1'
131
+
132
+ # Gemfile - latest version
133
+ gem 'postsvg'
134
+ ----
135
+ ====
136
+
137
+ === Method 3: Install from Source (For Development)
138
+
139
+ For contributing to Postsvg or using unreleased features:
140
+
141
+ [source,sh]
142
+ ----
143
+ # Clone repository
144
+ git clone https://github.com/metanorma/postsvg.git
145
+ cd postsvg
146
+
147
+ # Install dependencies
148
+ bundle install
149
+
150
+ # Build and install gem locally
151
+ gem build postsvg.gemspec
152
+ gem install postsvg-*.gem
153
+
154
+ # Or use directly via bundle exec
155
+ bundle exec postsvg version
156
+ ----
157
+
158
+ == Installation by Platform
159
+
160
+ === macOS
161
+
162
+ **1. Install Ruby (if not present):**
163
+
164
+ [source,sh]
165
+ ----
166
+ # Using Homebrew
167
+ brew install ruby
168
+
169
+ # Or using rbenv (recommended)
170
+ brew install rbenv
171
+ rbenv install 3.2.0
172
+ rbenv global 3.2.0
173
+ ----
174
+
175
+ **2. Install Postsvg:**
176
+
177
+ [source,sh]
178
+ ----
179
+ gem install postsvg
180
+ ----
181
+
182
+ **3. Verify installation:**
183
+
184
+ [source,sh]
185
+ ----
186
+ postsvg version
187
+ ----
188
+
189
+ .Troubleshooting macOS installation
190
+ [example]
191
+ ====
192
+ If `postsvg` command is not found, add gem bin directory to PATH:
193
+
194
+ [source,sh]
195
+ ----
196
+ # Find gem bin directory
197
+ gem environment | grep "EXECUTABLE DIRECTORY"
198
+
199
+ # Add to ~/.zshrc or ~/.bash_profile
200
+ export PATH="$PATH:/usr/local/lib/ruby/gems/3.2.0/bin"
201
+
202
+ # Reload shell
203
+ source ~/.zshrc
204
+ ----
205
+ ====
206
+
207
+ === Linux (Ubuntu/Debian)
208
+
209
+ **1. Install Ruby:**
210
+
211
+ [source,sh]
212
+ ----
213
+ # Update package list
214
+ sudo apt-get update
215
+
216
+ # Install Ruby
217
+ sudo apt-get install ruby-full
218
+
219
+ # Verify
220
+ ruby -v
221
+ ----
222
+
223
+ **2. Install Postsvg:**
224
+
225
+ [source,sh]
226
+ ----
227
+ # Install for current user (recommended)
228
+ gem install --user-install postsvg
229
+
230
+ # Or system-wide (requires sudo)
231
+ sudo gem install postsvg
232
+ ----
233
+
234
+ **3. Add to PATH (if using --user-install):**
235
+
236
+ [source,sh]
237
+ ----
238
+ # Add to ~/.bashrc
239
+ echo 'export PATH="$HOME/.gem/ruby/3.0.0/bin:$PATH"' >> ~/.bashrc
240
+ source ~/.bashrc
241
+ ----
242
+
243
+ === Linux (CentOS/RHEL)
244
+
245
+ **1. Install Ruby:**
246
+
247
+ [source,sh]
248
+ ----
249
+ # Install Ruby via yum
250
+ sudo yum install ruby ruby-devel
251
+
252
+ # Or use rbenv
253
+ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash
254
+ ----
255
+
256
+ **2. Install Postsvg:**
257
+
258
+ [source,sh]
259
+ ----
260
+ gem install postsvg
261
+ ----
262
+
263
+ === Windows
264
+
265
+ **1. Install Ruby:**
266
+
267
+ Download and install from link:https://rubyinstaller.org/[RubyInstaller for Windows]
268
+
269
+ * Download Ruby+Devkit installer
270
+ * Run installer with default options
271
+ * Select "Add Ruby executables to PATH"
272
+
273
+ **2. Install Postsvg:**
274
+
275
+ [source,cmd]
276
+ ----
277
+ gem install postsvg
278
+ ----
279
+
280
+ **3. Verify:**
281
+
282
+ [source,cmd]
283
+ ----
284
+ postsvg version
285
+ ----
286
+
287
+ .Windows PATH issues
288
+ [example]
289
+ ====
290
+ If `postsvg` is not recognized:
291
+
292
+ 1. Find gem bin directory:
293
+ [source,cmd]
294
+ ----
295
+ gem environment
296
+ ----
297
+
298
+ 2. Add to System PATH via Environment Variables:
299
+ * Settings → System → Advanced system settings
300
+ * Environment Variables
301
+ * Edit PATH variable
302
+ * Add gem bin directory
303
+ ====
304
+
305
+ == Docker Installation
306
+
307
+ For containerized deployments:
308
+
309
+ **Dockerfile:**
310
+
311
+ [source,dockerfile]
312
+ ----
313
+ FROM ruby:3.2-slim
314
+
315
+ # Install Postsvg
316
+ RUN gem install postsvg
317
+
318
+ # Set working directory
319
+ WORKDIR /app
320
+
321
+ # Default command
322
+ CMD ["postsvg", "version"]
323
+ ----
324
+
325
+ **Build and run:**
326
+
327
+ [source,sh]
328
+ ----
329
+ # Build image
330
+ docker build -t postsvg .
331
+
332
+ # Run conversion
333
+ docker run -v $(pwd):/app postsvg convert input.ps output.svg
334
+
335
+ # Interactive shell
336
+ docker run -it -v $(pwd):/app postsvg bash
337
+ ----
338
+
339
+ == CI/CD Installation
340
+
341
+ === GitHub Actions
342
+
343
+ [source,yaml]
344
+ ----
345
+ name: Convert PostScript
346
+
347
+ on: [push]
348
+
349
+ jobs:
350
+ convert:
351
+ runs-on: ubuntu-latest
352
+ steps:
353
+ - uses: actions/checkout@v3
354
+
355
+ - name: Set up Ruby
356
+ uses: ruby/setup-ruby@v1
357
+ with:
358
+ ruby-version: '3.2'
359
+
360
+ - name: Install Postsvg
361
+ run: gem install postsvg
362
+
363
+ - name: Convert files
364
+ run: postsvg batch ps_files/ svg_files/
365
+ ----
366
+
367
+ === GitLab CI
368
+
369
+ [source,yaml]
370
+ ----
371
+ convert:
372
+ image: ruby:3.2
373
+ script:
374
+ - gem install postsvg
375
+ - postsvg batch ps_files/ svg_files/
376
+ artifacts:
377
+ paths:
378
+ - svg_files/
379
+ ----
380
+
381
+ == Verifying Installation
382
+
383
+ After installation, verify Postsvg is working correctly:
384
+
385
+ [source,sh]
386
+ ----
387
+ # Check version
388
+ postsvg version
389
+
390
+ # Get help
391
+ postsvg help
392
+
393
+ # Test conversion (create test file first)
394
+ echo '%!PS-Adobe-3.0
395
+ %%BoundingBox: 0 0 100 100
396
+ newpath
397
+ 50 50 moveto
398
+ 90 50 lineto
399
+ stroke' > test.ps
400
+
401
+ postsvg convert test.ps test.svg
402
+ cat test.svg
403
+ ----
404
+
405
+ Expected output should include valid SVG markup.
406
+
407
+ == Updating Postsvg
408
+
409
+ === Update via RubyGems
410
+
411
+ [source,sh]
412
+ ----
413
+ # Update to latest version
414
+ gem update postsvg
415
+
416
+ # Check installed version
417
+ gem list postsvg
418
+
419
+ # Install specific version
420
+ gem install postsvg -v '0.2.0'
421
+ ----
422
+
423
+ === Update via Bundler
424
+
425
+ [source,sh]
426
+ ----
427
+ # Update Gemfile.lock
428
+ bundle update postsvg
429
+
430
+ # Or update all gems
431
+ bundle update
432
+ ----
433
+
434
+ == Uninstalling
435
+
436
+ === Remove gem
437
+
438
+ [source,sh]
439
+ ----
440
+ # Uninstall Postsvg
441
+ gem uninstall postsvg
442
+
443
+ # Remove all versions
444
+ gem uninstall postsvg --all
445
+ ----
446
+
447
+ === Clean Bundler
448
+
449
+ [source,sh]
450
+ ----
451
+ # Remove from Gemfile
452
+ # Then update bundle
453
+ bundle install
454
+ ----
455
+
456
+ == Troubleshooting
457
+
458
+ === Permission Denied
459
+
460
+ **Problem:**
461
+ [source]
462
+ ----
463
+ ERROR: While executing gem ... (Errno::EACCES)
464
+ Permission denied
465
+ ----
466
+
467
+ **Solution:**
468
+
469
+ [source,sh]
470
+ ----
471
+ # Use user install
472
+ gem install --user-install postsvg
473
+
474
+ # Or use sudo (not recommended)
475
+ sudo gem install postsvg
476
+ ----
477
+
478
+ === Command Not Found
479
+
480
+ **Problem:**
481
+ [source]
482
+ ----
483
+ bash: postsvg: command not found
484
+ ----
485
+
486
+ **Solution:**
487
+
488
+ [source,sh]
489
+ ----
490
+ # Find gem bin directory
491
+ gem environment gemdir
492
+
493
+ # Add to PATH
494
+ export PATH="$PATH:$(gem environment gemdir)/bin"
495
+ ----
496
+
497
+ === Wrong Ruby Version
498
+
499
+ **Problem:**
500
+ [source]
501
+ ----
502
+ Postsvg requires Ruby >= 2.7
503
+ ----
504
+
505
+ **Solution:**
506
+
507
+ [source,sh]
508
+ ----
509
+ # Check current version
510
+ ruby -v
511
+
512
+ # Install newer Ruby via rbenv
513
+ rbenv install 3.2.0
514
+ rbenv global 3.2.0
515
+
516
+ # Verify
517
+ ruby -v
518
+ ----
519
+
520
+ == Next Steps
521
+
522
+ After successful installation:
523
+
524
+ * Try link:basic-usage.adoc[Basic Usage] examples
525
+ * Follow link:first-conversion.adoc[First Conversion] tutorial
526
+ * Explore link:../cli-reference.adoc[CLI Reference]
527
+ * Review link:../api-reference.adoc[API Reference] for programmatic use
528
+
529
+ == Bibliography
530
+
531
+ * link:https://rubygems.org/gems/postsvg[Postsvg on RubyGems]
532
+ * link:https://bundler.io/[Bundler Documentation]
533
+ * link:https://www.ruby-lang.org/[Ruby Programming Language]
534
+ * link:basic-usage.adoc[Basic Usage Guide]
@@ -0,0 +1,94 @@
1
+ = Getting Started
2
+ :page-nav_order: 2
3
+
4
+ == Purpose
5
+
6
+ This guide helps you get started with Postsvg, from installation through your first successful PostScript to SVG conversion.
7
+
8
+ Whether you're converting a single file or processing batches, validating PostScript documents, or integrating Postsvg into your application, this section provides the foundational knowledge you need.
9
+
10
+ == References
11
+
12
+ * link:index.adoc[Documentation Home]
13
+ * link:api-reference.adoc[API Reference]
14
+ * link:cli-reference.adoc[CLI Reference]
15
+ * link:https://github.com/metanorma/postsvg[GitHub Repository]
16
+
17
+ == Concepts
18
+
19
+ **PostScript**:: A page description language used for printing and graphics. PostScript files contain commands that describe how to draw vector graphics.
20
+
21
+ **EPS (Encapsulated PostScript)**:: A subset of PostScript designed for embedding graphics in documents. EPS files include a BoundingBox comment that defines the graphic's dimensions.
22
+
23
+ **SVG (Scalable Vector Graphics)**:: An XML-based vector graphics format supported by all modern web browsers. SVG can scale to any size without loss of quality.
24
+
25
+ **Conversion Pipeline**:: The process of reading PostScript commands, interpreting them, and generating equivalent SVG markup.
26
+
27
+ == Getting Started Topics
28
+
29
+ link:getting-started/installation.adoc[**Installation**]::
30
+ How to install Postsvg using RubyGems or Bundler, system requirements, and verifying your installation.
31
+
32
+ link:getting-started/basic-usage.adoc[**Basic Usage**]::
33
+ Convert your first PostScript file using both the Ruby API and command-line interface.
34
+
35
+ link:getting-started/first-conversion.adoc[**First Conversion Tutorial**]::
36
+ Step-by-step walkthrough of converting a PostScript file to SVG, understanding the output, and troubleshooting common issues.
37
+
38
+ link:getting-started/common-workflows.adoc[**Common Workflows**]::
39
+ Typical usage patterns including batch conversion, validation workflows, and integration with build systems.
40
+
41
+ == Quick Reference
42
+
43
+ === Installation
44
+
45
+ [source,sh]
46
+ ----
47
+ # Install from RubyGems
48
+ gem install postsvg
49
+
50
+ # Or add to Gemfile
51
+ gem 'postsvg'
52
+ ----
53
+
54
+ === Ruby API
55
+
56
+ [source,ruby]
57
+ ----
58
+ require 'postsvg'
59
+
60
+ # Convert content
61
+ svg = Postsvg.convert(ps_content)
62
+
63
+ # Convert file
64
+ Postsvg.convert_file('input.eps', 'output.svg')
65
+ ----
66
+
67
+ === Command Line
68
+
69
+ [source,sh]
70
+ ----
71
+ # Convert single file
72
+ postsvg convert input.eps output.svg
73
+
74
+ # Batch convert directory
75
+ postsvg batch ps_files/ svg_files/
76
+
77
+ # Validate file
78
+ postsvg check document.ps
79
+ ----
80
+
81
+ == Next Steps
82
+
83
+ After completing the getting started guides, explore:
84
+
85
+ * link:concepts.adoc[Core Concepts] - Understand how Postsvg works internally
86
+ * link:cli-reference.adoc[CLI Reference] - Complete command-line reference
87
+ * link:api-reference.adoc[API Reference] - Detailed Ruby API documentation
88
+ * link:postscript.adoc[PostScript Language] - Learn about supported PostScript operators
89
+
90
+ == Bibliography
91
+
92
+ * link:https://rubygems.org/gems/postsvg[Postsvg on RubyGems]
93
+ * link:getting-started/installation.adoc[Installation Guide]
94
+ * link:getting-started/basic-usage.adoc[Basic Usage Guide]