tessella 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 +7 -0
- data/LICENSE +21 -0
- data/README.md +900 -0
- data/doc/README.md +74 -0
- data/doc/bitfield.md +123 -0
- data/doc/charts.md +1370 -0
- data/doc/check.rb +75 -0
- data/doc/cli.md +483 -0
- data/doc/composition.md +599 -0
- data/doc/getting-started.md +121 -0
- data/doc/glyphs.md +134 -0
- data/doc/images.md +325 -0
- data/doc/library.md +239 -0
- data/doc/lint.md +270 -0
- data/doc/meter.md +210 -0
- data/doc/rule.md +51 -0
- data/doc/seq.md +169 -0
- data/doc/sparkline.md +63 -0
- data/doc/table.md +347 -0
- data/doc/targets.md +222 -0
- data/doc/text.md +84 -0
- data/doc/tree.md +108 -0
- data/doc/wave.md +122 -0
- data/examples/README.md +103 -0
- data/examples/ages.txt +9 -0
- data/examples/bad.csv +3 -0
- data/examples/boxes.txt +3 -0
- data/examples/broken.txt +4 -0
- data/examples/calibration.rb +12 -0
- data/examples/cities.csv +4 -0
- data/examples/cjk.rb +13 -0
- data/examples/comment.rb +9 -0
- data/examples/comment.sh +13 -0
- data/examples/cpu.txt +60 -0
- data/examples/dashboard.sh +25 -0
- data/examples/datasheet.rb +16 -0
- data/examples/disc.pgm +0 -0
- data/examples/disks.sh +18 -0
- data/examples/disks.txt +5 -0
- data/examples/dose.txt +7 -0
- data/examples/drift.txt +4 -0
- data/examples/ethernet.txt +3 -0
- data/examples/figure.c +5 -0
- data/examples/fit.rb +16 -0
- data/examples/floors.rb +21 -0
- data/examples/gallery.sh +20 -0
- data/examples/gauges.sh +31 -0
- data/examples/gradient.rb +16 -0
- data/examples/growth.txt +6 -0
- data/examples/hosts.csv +4 -0
- data/examples/icmp.txt +3 -0
- data/examples/ipv4.txt +12 -0
- data/examples/kinds.csv +4 -0
- data/examples/langs.csv +4 -0
- data/examples/lint.rb +16 -0
- data/examples/load.rb +14 -0
- data/examples/login.txt +10 -0
- data/examples/neg.csv +4 -0
- data/examples/normal.txt +200 -0
- data/examples/note.txt +2 -0
- data/examples/notes-fixed.md +17 -0
- data/examples/notes.md +17 -0
- data/examples/ohlc.txt +7 -0
- data/examples/os.csv +10 -0
- data/examples/outline.txt +8 -0
- data/examples/plot.txt +5 -0
- data/examples/refusals.rb +17 -0
- data/examples/report.sh +21 -0
- data/examples/rfc.sh +22 -0
- data/examples/samples.txt +7 -0
- data/examples/shapes.pgm +0 -0
- data/examples/sizes.tsv +3 -0
- data/examples/spi.txt +6 -0
- data/examples/status.sh +23 -0
- data/examples/stem.txt +12 -0
- data/examples/table-drift.txt +4 -0
- data/examples/temps.txt +31 -0
- data/examples/trig.sh +13 -0
- data/examples/trig.txt +102 -0
- data/examples/week.txt +8 -0
- data/examples/wide.txt +2 -0
- data/exe/tessella +6 -0
- data/lib/tessella/axis.rb +71 -0
- data/lib/tessella/bitfield.rb +194 -0
- data/lib/tessella/block.rb +56 -0
- data/lib/tessella/borders.rb +85 -0
- data/lib/tessella/canvas/area.rb +155 -0
- data/lib/tessella/canvas/ascii.rb +120 -0
- data/lib/tessella/canvas/block.rb +40 -0
- data/lib/tessella/canvas/braille.rb +30 -0
- data/lib/tessella/canvas/clip.rb +49 -0
- data/lib/tessella/canvas/density.rb +51 -0
- data/lib/tessella/canvas/dot.rb +27 -0
- data/lib/tessella/canvas/eighths.rb +43 -0
- data/lib/tessella/canvas/half.rb +51 -0
- data/lib/tessella/canvas/sextant.rb +36 -0
- data/lib/tessella/canvas.rb +168 -0
- data/lib/tessella/cell.rb +10 -0
- data/lib/tessella/chart.rb +211 -0
- data/lib/tessella/check.rb +52 -0
- data/lib/tessella/cli/bitfield.rb +121 -0
- data/lib/tessella/cli/chart.rb +615 -0
- data/lib/tessella/cli/chart_candle.rb +36 -0
- data/lib/tessella/cli/chart_heatmap.rb +21 -0
- data/lib/tessella/cli/chart_help.rb +85 -0
- data/lib/tessella/cli/chart_pie.rb +38 -0
- data/lib/tessella/cli/compose.rb +156 -0
- data/lib/tessella/cli/compose_options.rb +259 -0
- data/lib/tessella/cli/glyphs.rb +97 -0
- data/lib/tessella/cli/image.rb +250 -0
- data/lib/tessella/cli/input.rb +44 -0
- data/lib/tessella/cli/iso_time.rb +28 -0
- data/lib/tessella/cli/lint.rb +102 -0
- data/lib/tessella/cli/lint_options.rb +99 -0
- data/lib/tessella/cli/main.rb +121 -0
- data/lib/tessella/cli/meter.rb +80 -0
- data/lib/tessella/cli/rule.rb +57 -0
- data/lib/tessella/cli/seq.rb +117 -0
- data/lib/tessella/cli/sparkline.rb +72 -0
- data/lib/tessella/cli/table.rb +167 -0
- data/lib/tessella/cli/text.rb +78 -0
- data/lib/tessella/cli/tree.rb +100 -0
- data/lib/tessella/cli/wave.rb +148 -0
- data/lib/tessella/cli.rb +36 -0
- data/lib/tessella/color.rb +106 -0
- data/lib/tessella/compose.rb +243 -0
- data/lib/tessella/compose_fill.rb +176 -0
- data/lib/tessella/compose_grid.rb +36 -0
- data/lib/tessella/compose_shadow.rb +41 -0
- data/lib/tessella/error.rb +13 -0
- data/lib/tessella/frame.rb +170 -0
- data/lib/tessella/glyphs.rb +106 -0
- data/lib/tessella/image.rb +454 -0
- data/lib/tessella/image_octant.rb +46 -0
- data/lib/tessella/image_petscii.rb +116 -0
- data/lib/tessella/kinds/bar.rb +344 -0
- data/lib/tessella/kinds/box.rb +213 -0
- data/lib/tessella/kinds/box_upright.rb +110 -0
- data/lib/tessella/kinds/candlestick.rb +164 -0
- data/lib/tessella/kinds/columns.rb +259 -0
- data/lib/tessella/kinds/date_axis.rb +102 -0
- data/lib/tessella/kinds/error_bars.rb +71 -0
- data/lib/tessella/kinds/heatmap.rb +130 -0
- data/lib/tessella/kinds/line.rb +173 -0
- data/lib/tessella/kinds/multibar.rb +98 -0
- data/lib/tessella/kinds/multibar_columns.rb +130 -0
- data/lib/tessella/kinds/multibar_fine.rb +45 -0
- data/lib/tessella/kinds/multibar_rows.rb +93 -0
- data/lib/tessella/kinds/pie.rb +123 -0
- data/lib/tessella/kinds/pie_rim.rb +78 -0
- data/lib/tessella/kinds/sideways.rb +62 -0
- data/lib/tessella/kinds/stem.rb +134 -0
- data/lib/tessella/kinds/threshold.rb +73 -0
- data/lib/tessella/legend.rb +31 -0
- data/lib/tessella/lint/alphabet.rb +56 -0
- data/lib/tessella/lint/drift.rb +82 -0
- data/lib/tessella/lint/fences.rb +51 -0
- data/lib/tessella/lint/geometry.rb +120 -0
- data/lib/tessella/lint/geometry_checks.rb +224 -0
- data/lib/tessella/lint/lines.rb +115 -0
- data/lib/tessella/lint/mixing.rb +61 -0
- data/lib/tessella/lint/runner.rb +73 -0
- data/lib/tessella/lint/shadows.rb +120 -0
- data/lib/tessella/lint/target_rows.rb +66 -0
- data/lib/tessella/lint.rb +158 -0
- data/lib/tessella/meter.rb +133 -0
- data/lib/tessella/meter_upright.rb +43 -0
- data/lib/tessella/png.rb +456 -0
- data/lib/tessella/raster.rb +92 -0
- data/lib/tessella/rmagick_reader.rb +52 -0
- data/lib/tessella/rule.rb +59 -0
- data/lib/tessella/seq.rb +522 -0
- data/lib/tessella/sparkline.rb +57 -0
- data/lib/tessella/stats.rb +199 -0
- data/lib/tessella/table.rb +547 -0
- data/lib/tessella/table_cells.rb +225 -0
- data/lib/tessella/target.rb +105 -0
- data/lib/tessella/text.rb +76 -0
- data/lib/tessella/text_forms.rb +150 -0
- data/lib/tessella/tree.rb +221 -0
- data/lib/tessella/version.rb +5 -0
- data/lib/tessella/wave.rb +353 -0
- data/lib/tessella/width.rb +122 -0
- data/lib/tessella/width_class.rb +77 -0
- data/lib/tessella/width_invisible.rb +66 -0
- data/lib/tessella/width_invisible_high.rb +60 -0
- data/lib/tessella.rb +94 -0
- metadata +226 -0
data/doc/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# tessella documentation
|
|
2
|
+
|
|
3
|
+
tessella draws text figures on a monospace grid, in Unicode or pure
|
|
4
|
+
ASCII: charts, trees, tables, bit-field, timing and sequence
|
|
5
|
+
diagrams, and pictures, all of which compose into one figure. Its
|
|
6
|
+
output is meant for documents first: no trailing blank, no escape
|
|
7
|
+
code unless asked, ASCII from the first byte when asked.
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
$ ruby datasheet.rb
|
|
11
|
+
CTRL (0x04)
|
|
12
|
+
|
|
13
|
+
0 1
|
|
14
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
|
15
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
16
|
+
| MODE | DIV | EN |
|
|
17
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
18
|
+
|
|
19
|
+
─────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
──┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
|
|
22
|
+
sclk └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─
|
|
23
|
+
|
|
24
|
+
────┐ ┌───
|
|
25
|
+
cs └───────────────────────┘
|
|
26
|
+
|
|
27
|
+
▒▒▒▒╳ ╳ ╳ ▒▒▒▒
|
|
28
|
+
mosi ▒▒▒▒╳──CMD──╳─ADDR──╳─DATA──▒▒▒▒
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Guide
|
|
32
|
+
|
|
33
|
+
1. [Getting started](getting-started.md): install, a first chart, a
|
|
34
|
+
first diagram, the library.
|
|
35
|
+
2. [Charts](charts.md): line, scatter, stairs, density, bar,
|
|
36
|
+
histogram, box, stem, heatmap, candlestick and pie; input formats,
|
|
37
|
+
options, canvases, colour, ASCII.
|
|
38
|
+
3. [Composition](composition.md): blocks; frame, beside, stack, grid,
|
|
39
|
+
indent, caption, shadow, fill.
|
|
40
|
+
4. Diagrams: [trees](tree.md), [tables](table.md),
|
|
41
|
+
[bit fields](bitfield.md), [timing diagrams](wave.md),
|
|
42
|
+
[sequence diagrams](seq.md).
|
|
43
|
+
5. [Pictures](images.md): images as text.
|
|
44
|
+
6. One-liners: [sparklines](sparkline.md), charts one line high;
|
|
45
|
+
[meters](meter.md), progress bars and gauges;
|
|
46
|
+
[rules](rule.md), dividers; [text styles](text.md), Unicode's
|
|
47
|
+
styled alphabets.
|
|
48
|
+
7. [Linting](lint.md): checking a figure, drawn or hand-made, for
|
|
49
|
+
what breaks it on someone else's screen.
|
|
50
|
+
8. [Glyph sets](glyphs.md): width classes, the named glyph sets, and
|
|
51
|
+
checking a set of one's own.
|
|
52
|
+
9. [Width targets](targets.md): drawing for a Western terminal, a CJK
|
|
53
|
+
one, or a browser.
|
|
54
|
+
|
|
55
|
+
## Reference
|
|
56
|
+
|
|
57
|
+
- [The `tessella` command](cli.md): every command and option, exit
|
|
58
|
+
statuses, pipelines.
|
|
59
|
+
- [The library](library.md): every factory, `Block`, `Raster`,
|
|
60
|
+
`Width`, errors, the output rules, vendoring.
|
|
61
|
+
- [DESIGN.md](../DESIGN.md): the internal interfaces, and why the
|
|
62
|
+
project is shaped as it is.
|
|
63
|
+
|
|
64
|
+
## Examples
|
|
65
|
+
|
|
66
|
+
Every figure in these pages is real output. The input files and the
|
|
67
|
+
Ruby scripts are in [examples/](../examples/); each `$` command runs
|
|
68
|
+
in that directory. `doc/check.rb` re-runs every one of them and
|
|
69
|
+
compares the output byte for byte:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
ruby doc/check.rb # report any figure that changed
|
|
73
|
+
ruby doc/check.rb --update # rewrite the pages from what runs now
|
|
74
|
+
```
|
data/doc/bitfield.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Bit fields
|
|
2
|
+
|
|
3
|
+
`bitfield` draws a packet header or a register as RFC 2360 draws one:
|
|
4
|
+
a bit ruler, `+-+` ticks, one row per word, each field's name centred
|
|
5
|
+
in its cell. It is always ASCII, as the genre is.
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
Tessella.bitfield(fields, word: 32, octets: false, ruler: true,
|
|
9
|
+
abbrev: false) # => Block
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
tessella bitfield [--word N] [--octets] [--no-ruler] [--abbrev]
|
|
14
|
+
[--max-width N] [file]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Input
|
|
18
|
+
|
|
19
|
+
One field per line, `name:bits`, in order from the most significant
|
|
20
|
+
bit; or, in Ruby, an Array of `[name, bits]` pairs.
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
$ cat ipv4.txt
|
|
24
|
+
Version:4
|
|
25
|
+
IHL:4
|
|
26
|
+
DSCP:6
|
|
27
|
+
ECN:2
|
|
28
|
+
Total Length:16
|
|
29
|
+
Identification:16
|
|
30
|
+
Flags:3
|
|
31
|
+
Fragment Offset:13
|
|
32
|
+
TTL:8
|
|
33
|
+
Protocol:8
|
|
34
|
+
Header Checksum:16
|
|
35
|
+
Source Address:32
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
$ tessella bitfield ipv4.txt
|
|
40
|
+
0 1 2 3
|
|
41
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
42
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
43
|
+
|Version| IHL | DSCP |ECN| Total Length |
|
|
44
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
45
|
+
| Identification |Flags| Fragment Offset |
|
|
46
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
47
|
+
| TTL | Protocol | Header Checksum |
|
|
48
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
49
|
+
| Source Address |
|
|
50
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
A field longer than what is left of its row continues on the next,
|
|
54
|
+
as an Ethernet header's addresses do:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
$ tessella bitfield ethernet.txt
|
|
58
|
+
0 1 2 3
|
|
59
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
60
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
61
|
+
| Destination MAC |
|
|
62
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
63
|
+
| Destination MAC | Source MAC |
|
|
64
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
65
|
+
| Source MAC |
|
|
66
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
67
|
+
| EtherType |
|
|
68
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Options
|
|
72
|
+
|
|
73
|
+
- `--word N` (`word:`): bits per row, 8, 16, 32 (the default) or 64.
|
|
74
|
+
- `--octets`: byte-oriented, one tick per octet instead of per bit,
|
|
75
|
+
and no bit ruler.
|
|
76
|
+
- `--no-ruler` (`ruler: false`): drop the two ruler rows.
|
|
77
|
+
- `--abbrev`: truncate a name too wide for its cell, instead of
|
|
78
|
+
refusing it.
|
|
79
|
+
- `--ascii` is accepted and changes nothing.
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
$ tessella bitfield --word 16 --octets icmp.txt
|
|
83
|
+
+---------------+---------------+
|
|
84
|
+
| Type | Code |
|
|
85
|
+
+---------------+---------------+
|
|
86
|
+
| Checksum |
|
|
87
|
+
+---------------+---------------+
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
$ tessella bitfield --no-ruler icmp.txt
|
|
92
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
93
|
+
| Type | Code | Checksum |
|
|
94
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
A bit is two columns wide, so a 1-bit field has room for one
|
|
98
|
+
character and a 4-bit field for seven:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
$ printf 'Destination:4\nx:4\n' | tessella bitfield --word 8
|
|
102
|
+
tessella bitfield: name "Destination" needs 11 columns, this cell only has 7
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
$ printf 'Destination:4\nx:4\n' | tessella bitfield --word 8 --abbrev
|
|
107
|
+
0
|
|
108
|
+
0 1 2 3 4 5 6 7
|
|
109
|
+
+-+-+-+-+-+-+-+-+
|
|
110
|
+
|Destin.| x |
|
|
111
|
+
+-+-+-+-+-+-+-+-+
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Errors
|
|
115
|
+
|
|
116
|
+
A line that is not `name:bits`, a field of zero bits, a name too wide
|
|
117
|
+
without `--abbrev`, a name that is not ASCII, or an output wider than `--max-width` exits 1,
|
|
118
|
+
naming the line. An unsupported `--word` exits 2.
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
$ printf 'Type:8\nCode\n' | tessella bitfield
|
|
122
|
+
tessella bitfield: line 2: "Code" not name:bits
|
|
123
|
+
```
|