bitgram 0.1.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 (51) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +118 -0
  5. data/exe/bitgram +6 -0
  6. data/lib/bitgram/cli/doctor.rb +34 -0
  7. data/lib/bitgram/cli/options.rb +66 -0
  8. data/lib/bitgram/cli.rb +190 -0
  9. data/lib/bitgram/config.rb +58 -0
  10. data/lib/bitgram/diagram.rb +90 -0
  11. data/lib/bitgram/dsl.rb +35 -0
  12. data/lib/bitgram/errors.rb +29 -0
  13. data/lib/bitgram/issue.rb +11 -0
  14. data/lib/bitgram/layout/cell.rb +8 -0
  15. data/lib/bitgram/layout/engine.rb +74 -0
  16. data/lib/bitgram/layout/result.rb +35 -0
  17. data/lib/bitgram/layout/row.rb +9 -0
  18. data/lib/bitgram/loader.rb +59 -0
  19. data/lib/bitgram/model/document.rb +8 -0
  20. data/lib/bitgram/model/field.rb +13 -0
  21. data/lib/bitgram/normalizer.rb +46 -0
  22. data/lib/bitgram/presets/arp.yml +13 -0
  23. data/lib/bitgram/presets/icmp.yml +10 -0
  24. data/lib/bitgram/presets/ipv4.yml +20 -0
  25. data/lib/bitgram/presets/ipv6.yml +12 -0
  26. data/lib/bitgram/presets/tcp.yml +23 -0
  27. data/lib/bitgram/presets/udp.yml +9 -0
  28. data/lib/bitgram/rasterizers/base.rb +43 -0
  29. data/lib/bitgram/rasterizers/image_magick.rb +44 -0
  30. data/lib/bitgram/rasterizers/registry.rb +33 -0
  31. data/lib/bitgram/rasterizers/rsvg.rb +35 -0
  32. data/lib/bitgram/rasterizers/vips.rb +51 -0
  33. data/lib/bitgram/renderers/ascii/box_chars.rb +44 -0
  34. data/lib/bitgram/renderers/ascii.rb +130 -0
  35. data/lib/bitgram/renderers/svg/cells.rb +93 -0
  36. data/lib/bitgram/renderers/svg/decorations.rb +98 -0
  37. data/lib/bitgram/renderers/svg/geometry.rb +53 -0
  38. data/lib/bitgram/renderers/svg/theme.rb +69 -0
  39. data/lib/bitgram/renderers/svg/xml_builder.rb +33 -0
  40. data/lib/bitgram/renderers/svg.rb +137 -0
  41. data/lib/bitgram/text/fitter.rb +132 -0
  42. data/lib/bitgram/text/measurer.rb +31 -0
  43. data/lib/bitgram/themes/dark.yml +11 -0
  44. data/lib/bitgram/themes/default.yml +11 -0
  45. data/lib/bitgram/themes/mono.yml +9 -0
  46. data/lib/bitgram/util/command.rb +53 -0
  47. data/lib/bitgram/validator.rb +174 -0
  48. data/lib/bitgram/version.rb +6 -0
  49. data/lib/bitgram.rb +82 -0
  50. data/schema/bitgram.schema.json +388 -0
  51. metadata +108 -0
@@ -0,0 +1,388 @@
1
+ {
2
+ "type": "object",
3
+ "additionalProperties": false,
4
+ "properties": {
5
+ "version": {
6
+ "type": "integer",
7
+ "const": 1
8
+ },
9
+ "title": {
10
+ "type": "string",
11
+ "maxLength": 256
12
+ },
13
+ "description": {
14
+ "type": "string",
15
+ "maxLength": 65536
16
+ },
17
+ "layout": {
18
+ "$ref": "#/$defs/layout"
19
+ },
20
+ "ascii": {
21
+ "$ref": "#/$defs/ascii"
22
+ },
23
+ "svg": {
24
+ "$ref": "#/$defs/svg"
25
+ },
26
+ "raster": {
27
+ "$ref": "#/$defs/raster"
28
+ },
29
+ "fields": {
30
+ "type": "array",
31
+ "minItems": 1,
32
+ "maxItems": 10000,
33
+ "items": {
34
+ "$ref": "#/$defs/field"
35
+ }
36
+ },
37
+ "notes": {
38
+ "type": "array",
39
+ "maxItems": 10000,
40
+ "items": {
41
+ "type": "string",
42
+ "maxLength": 65536
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "version",
48
+ "fields"
49
+ ],
50
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
51
+ "$id": "https://raw.githubusercontent.com/ydah/bitgram/main/schema/bitgram.schema.json",
52
+ "title": "bitgram diagram definition",
53
+ "$defs": {
54
+ "field": {
55
+ "type": "object",
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "name": {
59
+ "type": "string",
60
+ "minLength": 1,
61
+ "maxLength": 256
62
+ },
63
+ "id": {
64
+ "type": "string",
65
+ "pattern": "^[a-z0-9][a-z0-9_-]*$"
66
+ },
67
+ "short": {
68
+ "type": "string",
69
+ "maxLength": 64
70
+ },
71
+ "bits": {
72
+ "oneOf": [
73
+ {
74
+ "type": "integer",
75
+ "minimum": 1,
76
+ "maximum": 524288
77
+ },
78
+ {
79
+ "const": "variable"
80
+ }
81
+ ]
82
+ },
83
+ "bytes": {
84
+ "type": "integer",
85
+ "minimum": 1,
86
+ "maximum": 65536
87
+ },
88
+ "display_bits": {
89
+ "type": "integer",
90
+ "minimum": 1,
91
+ "maximum": 128
92
+ },
93
+ "description": {
94
+ "type": "string",
95
+ "maxLength": 65536
96
+ },
97
+ "value": {
98
+ "type": [
99
+ "string",
100
+ "integer"
101
+ ]
102
+ },
103
+ "reserved": {
104
+ "type": "boolean"
105
+ },
106
+ "optional": {
107
+ "type": "boolean"
108
+ },
109
+ "class": {
110
+ "oneOf": [
111
+ {
112
+ "type": "string",
113
+ "pattern": "^[a-zA-Z_][a-zA-Z0-9_-]*( [a-zA-Z_][a-zA-Z0-9_-]*)*$"
114
+ },
115
+ {
116
+ "type": "array",
117
+ "maxItems": 256,
118
+ "items": {
119
+ "type": "string",
120
+ "pattern": "^[a-zA-Z_][a-zA-Z0-9_-]*$"
121
+ }
122
+ }
123
+ ]
124
+ },
125
+ "fill": {
126
+ "type": "string",
127
+ "pattern": "^(#[0-9a-fA-F]{3}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{8}|[a-zA-Z]+|rgba?\\([0-9., %]+\\))$"
128
+ }
129
+ },
130
+ "required": [
131
+ "name"
132
+ ],
133
+ "oneOf": [
134
+ {
135
+ "required": [
136
+ "bits"
137
+ ]
138
+ },
139
+ {
140
+ "required": [
141
+ "bytes"
142
+ ]
143
+ }
144
+ ]
145
+ },
146
+ "color": {
147
+ "type": "string",
148
+ "pattern": "^(#[0-9a-fA-F]{3}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{8}|[a-zA-Z]+|rgba?\\([0-9., %]+\\))$"
149
+ },
150
+ "layout": {
151
+ "type": "object",
152
+ "additionalProperties": false,
153
+ "properties": {
154
+ "row_bits": {
155
+ "type": "integer",
156
+ "minimum": 1,
157
+ "maximum": 128
158
+ },
159
+ "bit_order": {
160
+ "type": "string",
161
+ "enum": [
162
+ "msb0",
163
+ "lsb0"
164
+ ]
165
+ },
166
+ "bit_numbers": {
167
+ "type": "boolean"
168
+ },
169
+ "offsets": {
170
+ "type": "string",
171
+ "enum": [
172
+ "none",
173
+ "dec",
174
+ "hex"
175
+ ]
176
+ },
177
+ "merge_rows": {
178
+ "type": "boolean"
179
+ },
180
+ "split_label": {
181
+ "type": "string",
182
+ "enum": [
183
+ "range",
184
+ "first",
185
+ "repeat"
186
+ ]
187
+ },
188
+ "split_suffix": {
189
+ "type": "string",
190
+ "maxLength": 256
191
+ },
192
+ "allow_partial_row": {
193
+ "type": "boolean"
194
+ }
195
+ }
196
+ },
197
+ "ascii": {
198
+ "type": "object",
199
+ "additionalProperties": false,
200
+ "properties": {
201
+ "style": {
202
+ "type": "string",
203
+ "enum": [
204
+ "rfc",
205
+ "unicode"
206
+ ]
207
+ },
208
+ "indent": {
209
+ "type": "integer",
210
+ "minimum": 0,
211
+ "maximum": 256
212
+ },
213
+ "variable_edge": {
214
+ "type": "string",
215
+ "enum": [
216
+ "dot",
217
+ "colon",
218
+ "slash"
219
+ ]
220
+ },
221
+ "max_label_lines": {
222
+ "type": "integer",
223
+ "minimum": 1,
224
+ "maximum": 256
225
+ },
226
+ "ambiguous_width": {
227
+ "type": "integer",
228
+ "enum": [
229
+ 1,
230
+ 2
231
+ ]
232
+ },
233
+ "fit_order": {
234
+ "type": "array",
235
+ "minItems": 1,
236
+ "maxItems": 7,
237
+ "uniqueItems": true,
238
+ "items": {
239
+ "type": "string",
240
+ "enum": [
241
+ "single",
242
+ "wrap",
243
+ "short",
244
+ "shrink",
245
+ "vertical",
246
+ "footnote",
247
+ "truncate"
248
+ ]
249
+ }
250
+ },
251
+ "footnote_marker": {
252
+ "type": "string",
253
+ "minLength": 1,
254
+ "maxLength": 64
255
+ },
256
+ "title": {
257
+ "type": "string",
258
+ "enum": [
259
+ "none",
260
+ "top",
261
+ "bottom"
262
+ ]
263
+ }
264
+ }
265
+ },
266
+ "svg": {
267
+ "type": "object",
268
+ "additionalProperties": false,
269
+ "properties": {
270
+ "theme": {
271
+ "type": "string",
272
+ "minLength": 1,
273
+ "maxLength": 4096
274
+ },
275
+ "bit_width": {
276
+ "type": "number",
277
+ "minimum": 1,
278
+ "maximum": 1024
279
+ },
280
+ "row_height": {
281
+ "type": "number",
282
+ "minimum": 1,
283
+ "maximum": 4096
284
+ },
285
+ "margin": {
286
+ "type": "number",
287
+ "minimum": 0,
288
+ "maximum": 4096
289
+ },
290
+ "font_family": {
291
+ "type": "string",
292
+ "minLength": 1,
293
+ "maxLength": 1024,
294
+ "pattern": "^[^;{}<>\\\\\\x00-\\x1f]+$"
295
+ },
296
+ "font_size": {
297
+ "type": "number",
298
+ "minimum": 1,
299
+ "maximum": 256
300
+ },
301
+ "min_font_size": {
302
+ "type": "number",
303
+ "minimum": 1,
304
+ "maximum": 256
305
+ },
306
+ "char_width_ratio": {
307
+ "type": "number",
308
+ "minimum": 0.1,
309
+ "maximum": 10
310
+ },
311
+ "bit_number_style": {
312
+ "type": "string",
313
+ "enum": [
314
+ "full",
315
+ "rfc"
316
+ ]
317
+ },
318
+ "ticks": {
319
+ "type": "boolean"
320
+ },
321
+ "show_title": {
322
+ "type": "boolean"
323
+ },
324
+ "inline_styles": {
325
+ "type": "boolean"
326
+ },
327
+ "id_prefix": {
328
+ "type": "string",
329
+ "minLength": 1,
330
+ "maxLength": 256,
331
+ "pattern": "^[a-zA-Z_][a-zA-Z0-9_.-]*$"
332
+ },
333
+ "fit_order": {
334
+ "type": "array",
335
+ "minItems": 1,
336
+ "maxItems": 7,
337
+ "uniqueItems": true,
338
+ "items": {
339
+ "type": "string",
340
+ "enum": [
341
+ "single",
342
+ "wrap",
343
+ "short",
344
+ "shrink",
345
+ "vertical",
346
+ "footnote",
347
+ "truncate"
348
+ ]
349
+ }
350
+ }
351
+ }
352
+ },
353
+ "raster": {
354
+ "type": "object",
355
+ "additionalProperties": false,
356
+ "properties": {
357
+ "scale": {
358
+ "type": "number",
359
+ "minimum": 0.5,
360
+ "maximum": 8
361
+ },
362
+ "background": {
363
+ "type": "string",
364
+ "pattern": "^(#[0-9a-fA-F]{3}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{8}|[a-zA-Z]+|rgba?\\([0-9., %]+\\))$"
365
+ },
366
+ "quality": {
367
+ "type": "integer",
368
+ "minimum": 1,
369
+ "maximum": 100
370
+ },
371
+ "rasterizer": {
372
+ "type": "string",
373
+ "enum": [
374
+ "auto",
375
+ "vips",
376
+ "rsvg",
377
+ "imagemagick"
378
+ ]
379
+ },
380
+ "timeout": {
381
+ "type": "number",
382
+ "minimum": 0.001,
383
+ "maximum": 3600
384
+ }
385
+ }
386
+ }
387
+ }
388
+ }
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bitgram
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yudai Takada
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: unicode-display_width
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.1'
26
+ description: Render declarative bit-field diagrams as ASCII, Unicode, SVG, PNG, and
27
+ JPEG.
28
+ email:
29
+ - t.yudai92@gmail.com
30
+ executables:
31
+ - bitgram
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - CHANGELOG.md
36
+ - LICENSE.txt
37
+ - README.md
38
+ - exe/bitgram
39
+ - lib/bitgram.rb
40
+ - lib/bitgram/cli.rb
41
+ - lib/bitgram/cli/doctor.rb
42
+ - lib/bitgram/cli/options.rb
43
+ - lib/bitgram/config.rb
44
+ - lib/bitgram/diagram.rb
45
+ - lib/bitgram/dsl.rb
46
+ - lib/bitgram/errors.rb
47
+ - lib/bitgram/issue.rb
48
+ - lib/bitgram/layout/cell.rb
49
+ - lib/bitgram/layout/engine.rb
50
+ - lib/bitgram/layout/result.rb
51
+ - lib/bitgram/layout/row.rb
52
+ - lib/bitgram/loader.rb
53
+ - lib/bitgram/model/document.rb
54
+ - lib/bitgram/model/field.rb
55
+ - lib/bitgram/normalizer.rb
56
+ - lib/bitgram/presets/arp.yml
57
+ - lib/bitgram/presets/icmp.yml
58
+ - lib/bitgram/presets/ipv4.yml
59
+ - lib/bitgram/presets/ipv6.yml
60
+ - lib/bitgram/presets/tcp.yml
61
+ - lib/bitgram/presets/udp.yml
62
+ - lib/bitgram/rasterizers/base.rb
63
+ - lib/bitgram/rasterizers/image_magick.rb
64
+ - lib/bitgram/rasterizers/registry.rb
65
+ - lib/bitgram/rasterizers/rsvg.rb
66
+ - lib/bitgram/rasterizers/vips.rb
67
+ - lib/bitgram/renderers/ascii.rb
68
+ - lib/bitgram/renderers/ascii/box_chars.rb
69
+ - lib/bitgram/renderers/svg.rb
70
+ - lib/bitgram/renderers/svg/cells.rb
71
+ - lib/bitgram/renderers/svg/decorations.rb
72
+ - lib/bitgram/renderers/svg/geometry.rb
73
+ - lib/bitgram/renderers/svg/theme.rb
74
+ - lib/bitgram/renderers/svg/xml_builder.rb
75
+ - lib/bitgram/text/fitter.rb
76
+ - lib/bitgram/text/measurer.rb
77
+ - lib/bitgram/themes/dark.yml
78
+ - lib/bitgram/themes/default.yml
79
+ - lib/bitgram/themes/mono.yml
80
+ - lib/bitgram/util/command.rb
81
+ - lib/bitgram/validator.rb
82
+ - lib/bitgram/version.rb
83
+ - schema/bitgram.schema.json
84
+ homepage: https://github.com/ydah/bitgram
85
+ licenses:
86
+ - MIT
87
+ metadata:
88
+ source_code_uri: https://github.com/ydah/bitgram
89
+ changelog_uri: https://github.com/ydah/bitgram/blob/main/CHANGELOG.md
90
+ rubygems_mfa_required: 'true'
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '3.3'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 4.0.16
106
+ specification_version: 4
107
+ summary: Generate packet and bit-field diagrams from YAML, JSON, or Ruby
108
+ test_files: []