buninu-linux 0.3.1 → 0.4.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 (45) hide show
  1. package/LICENSES/Apache-2.0.txt +202 -0
  2. package/LICENSES/BSD-3-Clause-Skia.txt +29 -0
  3. package/LICENSES/Bitstream-Vera.txt +44 -0
  4. package/LICENSES/MIT-xterm.js.txt +21 -0
  5. package/LICENSES/OFL-1.1.txt +91 -0
  6. package/NOTICE.md +18 -1
  7. package/README.md +48 -1
  8. package/graphics.md +213 -0
  9. package/initramfs/bin/bunterm +66 -0
  10. package/initramfs/buninu/CHANGELOG.md +40 -0
  11. package/initramfs/buninu/apps/jsgotty/gotty.js +4 -3
  12. package/initramfs/buninu/apps/jsgotty/package.json +1 -1
  13. package/initramfs/buninu/package.json +1 -1
  14. package/initramfs/init.js +6 -0
  15. package/initramfs/lib/bunterm/glyphs.js +446 -0
  16. package/initramfs/lib/bunterm/images.js +225 -0
  17. package/initramfs/lib/bunterm/input.js +140 -0
  18. package/initramfs/lib/bunterm/renderer.js +424 -0
  19. package/initramfs/lib/bunterm/terminal.js +203 -0
  20. package/initramfs/lib/canvas.js +181 -0
  21. package/initramfs/lib/canvaskit/LICENSE +29 -0
  22. package/initramfs/lib/canvaskit/canvaskit.js +264 -0
  23. package/initramfs/lib/canvaskit/canvaskit.wasm +0 -0
  24. package/initramfs/lib/dlopen.js +14 -2
  25. package/initramfs/lib/fbdev.js +581 -0
  26. package/initramfs/lib/xterm/LICENSE +21 -0
  27. package/initramfs/lib/xterm/addon-unicode-graphemes.mjs +44 -0
  28. package/initramfs/lib/xterm/xterm-headless.mjs +46 -0
  29. package/initramfs/usr/share/doc/buninu-linux/bunterm.md +83 -0
  30. package/initramfs/usr/share/doc/buninu-linux/canvas.md +91 -0
  31. package/initramfs/usr/share/doc/buninu-linux/fbdev.md +113 -0
  32. package/initramfs/usr/share/fonts/DejaVuSansMono-Bold.ttf +0 -0
  33. package/initramfs/usr/share/fonts/DejaVuSansMono.ttf +0 -0
  34. package/initramfs/usr/share/fonts/LICENSE-Apache-2.0.txt +202 -0
  35. package/initramfs/usr/share/fonts/LICENSE-DejaVu.txt +44 -0
  36. package/initramfs/usr/share/fonts/LICENSE-OFL-1.1.txt +91 -0
  37. package/initramfs/usr/share/fonts/NotoColorEmoji.ttf +0 -0
  38. package/initramfs/usr/share/fonts/NotoColorEmojiFlags.ttf +0 -0
  39. package/initramfs/usr/share/fonts/NotoSansCJK-Regular.ttc +0 -0
  40. package/initramfs/usr/share/fonts/NotoSansSymbols-Regular-Subsetted.ttf +0 -0
  41. package/initramfs/usr/share/fonts/NotoSansSymbols-Regular-Subsetted2.ttf +0 -0
  42. package/initramfs/usr/share/fonts/Roboto-Regular.ttf +0 -0
  43. package/initramfs/usr/share/fonts/fonts.json +28 -0
  44. package/package.json +2 -2
  45. package/run-qemu.sh +1 -1
@@ -0,0 +1,83 @@
1
+ # bunterm — a graphical terminal on the Linux framebuffer
2
+
3
+ `bunterm` runs a program on a pseudo-terminal and draws its screen on
4
+ `/dev/fb0` with Skia (CanvasKit), so a real Linux console gets an
5
+ xterm-compatible terminal with anti-aliased text, CJK, colour emoji, seamless
6
+ box drawing and kitty graphics protocol images — no X11, Wayland or GPU.
7
+
8
+ ```sh
9
+ bunterm # run /bin/sh on the console you are on
10
+ bunterm /dev/tty1 # use virtual console 1 for graphics and keys
11
+ bunterm --font-size 20
12
+ bunterm -e bun /buninu/apps/jsmdcui/src/index.js --demo
13
+ bunterm -h
14
+ ```
15
+
16
+ The program's `TERM` is `xterm-256color`, `COLORTERM=truecolor`,
17
+ `TERM_PROGRAM=bunterm` and `JSMDCUI_KITTY_MODE=extended` (so `jsmdcui` shows
18
+ Markdown images without `--kitty`). When it exits, the console returns to
19
+ text mode and `bunterm` exits with its status.
20
+
21
+ ## Options
22
+
23
+ | Option | Meaning |
24
+ | --- | --- |
25
+ | `/dev/ttyN` | The virtual console to use for graphics and the keyboard. If another console is on screen, the display switches to this one first and back when `bunterm` exits. Without it the process's own console and stdin are used, so run it from a VT (not a serial line or a PTY). |
26
+ | `-e command [argument...]` | The program to run; everything after `-e` belongs to it. Default `/bin/sh`. |
27
+ | `--font-size N` | Font size in pixels (default 16). The cell is 0.6 × N wide and 1.16 × N tall with DejaVu Sans Mono, so 1024×768 at 16 px gives 106 × 41 cells. |
28
+ | `--line-height F` | Multiplies the cell height (default 1). |
29
+ | `--fb /dev/fbN` | The framebuffer device (default `/dev/fb0`). |
30
+ | `--no-blink` | A steady cursor. |
31
+
32
+ ## What is drawn
33
+
34
+ - **Text** comes from `/usr/share/fonts`: DejaVu Sans Mono (regular and
35
+ bold) sets the grid; Noto Sans CJK TC, Noto Color Emoji (+ Flags) and Noto
36
+ Sans Symbols fill in what it lacks. A glyph is centred in the one or two
37
+ cells the terminal assigned it; wide characters take two.
38
+ - **Box drawing, block elements, shades and Powerline symbols** (U+2500–259F,
39
+ U+E0A0–E0BF, U+1FB70–1FB97) are drawn as vectors, ported from xterm.js, so
40
+ they join without seams at any size.
41
+ - **Attributes**: 16 / 256 / 24-bit colours, bold (brighter for the eight base
42
+ colours), italic, dim, underline, strikethrough, inverse, invisible.
43
+ - **Grapheme clusters** such as 🇹🇼 and 👨‍👩‍👧 occupy one cell each (xterm.js's
44
+ unicode-graphemes addon) and are shaped by Skia's paragraph engine.
45
+ - **Images**: the kitty graphics protocol (`ESC _ G … ESC \`) with direct
46
+ transmission (`t=d`), PNG (`f=100`) or raw RGB/RGBA (`f=24`/`32`), zlib
47
+ (`o=z`), chunking (`m=`), cropping (`x,y,w,h`), sizing in cells (`c,r`),
48
+ cell offsets (`X,Y`), placements (`p=`), deletion (`a=d`) and queries
49
+ (`a=q`). An image is anchored to its line and scrolls with the text; on the
50
+ alternate screen it stays at its row and is removed when the program
51
+ leaves that screen. Any encoding Skia decodes (PNG, JPEG, WebP, GIF) is
52
+ accepted under `f=100`, as with jsgotty's `U=` extension.
53
+
54
+ ## Keyboard
55
+
56
+ The console stays in the kernel's translated keyboard mode, so
57
+ `Ctrl-Alt-F2` and friends still switch consoles; coming back repaints the
58
+ screen. A few console-specific
59
+ sequences are rewritten to xterm's (`F1`–`F5`, `Home`, `End`), and arrow keys
60
+ follow the program's application cursor mode.
61
+
62
+ ## Limits
63
+
64
+ - Needs a framebuffer: `linux-lts` has one built in, while the default
65
+ `linux-virt` builds it as modules the image does not ship, so build with
66
+ `--linux-lts` or `--real` (efifb/simpledrm from UEFI).
67
+ - No mouse, no selection, no scrollback viewing (the buffer keeps 1000
68
+ lines for programs that query it).
69
+ - A program that prints a terminal reply while the tty echoes (that is, one
70
+ not in raw mode) will see the reply echoed, as on any terminal.
71
+ - Kitty images are drawn above text; `z` ordering below text and animation
72
+ frames are not implemented, and file transmission (`t=f`/`t=t`) works only
73
+ for files under `/tmp`, `/dev/shm` or `$TMPDIR`.
74
+ - One framebuffer, one session. For panes and tabs run `jsmdcui` inside it.
75
+
76
+ ## See also
77
+
78
+ - `/lib/bunterm/terminal.js` — `createSession()` and `runTerminal()`, the
79
+ pieces `bunterm` is built from
80
+ - `/lib/canvas.js` — CanvasKit on the framebuffer (`canvas.md`)
81
+ - `/lib/fbdev.js` — the framebuffer itself (`fbdev.md`)
82
+ - `/buninu/apps/jsgotty/gotty.js` — the PTY backend and kitty packet parser
83
+ that are reused
@@ -0,0 +1,91 @@
1
+ # canvas — CanvasKit (Skia) on the Linux framebuffer
2
+
3
+ `/lib/canvas.js` runs Skia, compiled to WebAssembly as CanvasKit, on top of
4
+ `/lib/fbdev.js`. Skia rasterizes straight into a buffer that already has the
5
+ framebuffer's pixel layout, so a frame reaches `/dev/fb0` with one `memcpy`
6
+ and no per-pixel conversion in JavaScript.
7
+
8
+ ## Drawing with Skia
9
+
10
+ ```js
11
+ import { runGraphics } from "/lib/fbdev.js";
12
+ import { loadCanvasKit, openCanvas, loadFontSet } from "/lib/canvas.js";
13
+
14
+ const CanvasKit = await loadCanvasKit();
15
+ const fonts = loadFontSet(CanvasKit, "ui");
16
+
17
+ await runGraphics(async (display, { onRestore }) => {
18
+ const screen = openCanvas(CanvasKit, display);
19
+ const paint = new CanvasKit.Paint();
20
+ paint.setAntiAlias(true);
21
+ paint.setColor(CanvasKit.Color(64, 200, 255));
22
+ const font = new CanvasKit.Font(fonts.regular, 32);
23
+
24
+ screen.canvas.clear(CanvasKit.BLACK);
25
+ screen.canvas.drawCircle(display.width / 2, display.height / 2, 120, paint);
26
+ screen.canvas.drawText("Buninu 你好 😀", 40, 60, paint, font);
27
+ screen.flush();
28
+
29
+ await new Promise((resolve) => setTimeout(resolve, 3000));
30
+ screen.close();
31
+ });
32
+ ```
33
+
34
+ `screen.canvas` is a Skia `Canvas` with the full CanvasKit API: paths,
35
+ gradients, shaders, image filters, `drawImage`, `drawGlyphs`, `Paragraph`
36
+ layout with font fallback, PNG/JPEG decoding, and so on.
37
+
38
+ ## Exports
39
+
40
+ | Export | Purpose |
41
+ | --- | --- |
42
+ | `loadCanvasKit()` | Loads `/lib/canvaskit/canvaskit.wasm` once per process and resolves to the `CanvasKit` object. The wasm heap starts at 128 MiB. |
43
+ | `openCanvas(CanvasKit, display)` | Binds a raster surface to an open `Framebuffer`. Returns `{ canvas, surface, width, height, colorType, flush(), close() }`. While open, `display.pixels` is the surface's own memory, so `drawLine()`, `fillPolygon()` and `flush()` from `fbdev.js` keep working on the same frame. `close()` hands the last frame back to the JavaScript buffer. |
44
+ | `pickColorType(CanvasKit, display)` | The Skia `ColorType` matching the framebuffer: `BGRA_8888` for the usual 32-bit XRGB (efifb, simpledrm), `RGBA_8888`, `RGB_565`; `null` for anything else, which `openCanvas` rejects. |
45
+ | `loadFontSet(CanvasKit, name)` | A font set from `/usr/share/fonts/fonts.json` (`"terminal"` or `"ui"`) as `{ regular, bold, fallback, typefaces, fontMgr, families, delete() }`. `fontMgr` and `families` are what `ParagraphStyle` wants; a collection such as Noto Sans CJK registers every face and yields its preferred one (TC). |
46
+ | `fontCatalogue()`, `fontPath(name)`, `loadFontData(name)` | The parsed `fonts.json`, a font's path, and its bytes (cached). |
47
+
48
+ ## Formats
49
+
50
+ The framebuffer reports its channels as bit offsets. Skia can rasterize
51
+ directly into three of the layouts Linux uses:
52
+
53
+ | Framebuffer | Skia |
54
+ | --- | --- |
55
+ | 32 bpp, red@16 green@8 blue@0 (XRGB8888) | `BGRA_8888` |
56
+ | 32 bpp, red@0 green@8 blue@16 (XBGR8888) | `RGBA_8888` |
57
+ | 16 bpp, 5-6-5 | `RGB_565` |
58
+
59
+ For a 24 bpp or paletted framebuffer, draw with the HTML canvas emulation
60
+ instead and copy through `blitImageData()`:
61
+
62
+ ```js
63
+ const canvas = CanvasKit.MakeCanvas(display.width, display.height);
64
+ const ctx = canvas.getContext("2d");
65
+ ctx.fillStyle = "#40c8ff";
66
+ ctx.fillRect(0, 0, 200, 100);
67
+ blitImageData(display, ctx.getImageData(0, 0, display.width, display.height));
68
+ flush(display);
69
+ ```
70
+
71
+ That path converts every pixel in JavaScript and is fine for static screens.
72
+
73
+ ## Fonts
74
+
75
+ `/usr/share/fonts/fonts.json` lists the bundled files and two sets:
76
+
77
+ | Set | Regular | Fallback order |
78
+ | --- | --- | --- |
79
+ | `terminal` | DejaVu Sans Mono (+ Bold) | Noto Color Emoji, Noto Color Emoji Flags, Noto Sans CJK, Noto Sans Symbols, Noto Sans Symbols2 |
80
+ | `ui` | Roboto | Noto Sans CJK, Noto Color Emoji, Noto Color Emoji Flags, Noto Sans Symbols, Noto Sans Symbols2 |
81
+
82
+ Files load on first use and are copied into the wasm heap; the CJK
83
+ collection is 32 MiB, so a program that never draws CJK text should not
84
+ load a set containing it. Each file's license sits beside it.
85
+
86
+ ## See also
87
+
88
+ - `/lib/canvas.js`, `/lib/canvaskit/` (CanvasKit 0.41.1, BSD-3-Clause)
89
+ - `/lib/fbdev.js` — `fbdev.md`
90
+ - `/lib/bunterm/` — the terminal built on this (`bunterm.md`)
91
+ - CanvasKit API: https://skia.org/docs/user/modules/canvaskit/
@@ -0,0 +1,113 @@
1
+ # fbdev — draw directly on the Linux framebuffer
2
+
3
+ `/lib/fbdev.js` is both an importable drawing module and a small executable
4
+ demo. It uses `/dev/fb0`, framebuffer ioctls, a shared `mmap`, and `KDSETMODE`
5
+ through Bun FFI; it does not require X11, Wayland, SDL, or a window manager.
6
+
7
+ ## Demo
8
+
9
+ Run it on Buninu's physical Linux console:
10
+
11
+ ```sh
12
+ bun /lib/fbdev.js
13
+ ```
14
+
15
+ The demo switches the active console to graphics mode, clears the framebuffer,
16
+ draws a cyan triangle, and waits. Press any key to restore text mode and exit.
17
+ Ordinary failures, direct process exit, `SIGHUP`, `SIGINT`, `SIGQUIT`, and
18
+ `SIGTERM` also restore the prior keyboard raw state and attempt to return the
19
+ console to text mode.
20
+
21
+ Each repeatable `-p`/`--points` supplies one polygon as x,y coordinate pairs:
22
+
23
+ ```sh
24
+ bun /lib/fbdev.js -p '100,50 40,250 300,250'
25
+ bun /lib/fbdev.js \
26
+ -p '100,50 40,250 300,250' \
27
+ -p '400,80 350,220 450,220'
28
+ ```
29
+
30
+ Every occurrence draws a separate filled polygon. Comma and whitespace
31
+ separators may be mixed inside its quoted value; the clearest form uses a
32
+ comma within each `x,y` point and spaces between points. If one polygon
33
+ contains an odd number of numeric values, its final unpaired value is ignored.
34
+ A `-p` containing only one number is therefore ignored as a whole. Each
35
+ non-empty polygon needs at least three complete points; more than three points
36
+ remain one polygon rather than starting another. If no drawable `-p` remains,
37
+ the demo draws its default triangle.
38
+
39
+ ## JavaScript API
40
+
41
+ ```js
42
+ import {
43
+ openFramebuffer,
44
+ clear,
45
+ drawPoint,
46
+ drawLine,
47
+ drawLines,
48
+ fillPolygon,
49
+ flush,
50
+ } from "/lib/fbdev.js";
51
+
52
+ const display = openFramebuffer();
53
+ try {
54
+ clear(display);
55
+ fillPolygon(display, [[100, 50], [40, 250], [300, 250]], {
56
+ r: 64, g: 200, b: 255, a: 255,
57
+ });
58
+ drawLine(display, 0, 0, display.width - 1, display.height - 1, {
59
+ r: 255, g: 255, b: 255,
60
+ });
61
+ flush(display);
62
+ } finally {
63
+ display.close();
64
+ }
65
+ ```
66
+
67
+ The API uses short drawing names because it operates on a framebuffer rather
68
+ than an X11 `Display`. Colours are `{ r, g, b, a }` objects.
69
+
70
+ ### Export reference
71
+
72
+ | Export | Purpose |
73
+ | --- | --- |
74
+ | `Framebuffer`, `openFramebuffer(path?)` | Open and describe a packed-pixel framebuffer. |
75
+ | `normalizePoints(values)` | Accept flat numbers, `[x,y]` arrays, or `{x,y}` objects. An unpaired flat value is ignored. |
76
+ | `parsePoints(strings)` | Parse comma/whitespace-separated CLI-style coordinates. |
77
+ | `drawPoint(display, x, y, color?)` | Draw one clipped pixel. |
78
+ | `drawLine(display, x1, y1, x2, y2, color?)` | Draw a clipped Bresenham line. |
79
+ | `drawLines(display, points, color?, close?)` | Join a sequence of points. |
80
+ | `fillPolygon(display, points, color?)` | Fill a polygon with the even-odd scanline rule. |
81
+ | `clear(display, color?)` | Fill the in-memory frame, black by default. |
82
+ | `flush(display)` | Copy the in-memory frame to the shared `/dev/fb0` mapping and synchronize it. |
83
+ | `blitImageData(display, imageData, x?, y?)` | Copy an RGBA `ImageData` (for example from CanvasKit's HTML canvas emulation) into the frame, converting to the framebuffer's format and clipping. |
84
+ | `openConsole`, `setConsoleGraphics`, `setConsoleText` | Explicit Linux virtual-console control for callers that need it. |
85
+ | `activeConsole(console)`, `activateConsole(console, n)`, `consoleNumber(path)` | `VT_GETSTATE` / `VT_ACTIVATE` + `VT_WAITACTIVE`, and the number in a `/dev/ttyN` path. |
86
+ | `watchConsoleSwitches(console, onAcquire)` | `VT_SETMODE` with `VT_PROCESS`: answers the kernel's switch-away and switch-back signals and calls `onAcquire` when the display returns. Returns a function restoring automatic switching. |
87
+ | `runGraphics(draw, { device, console, switchConsole }?)` | Open the framebuffer, put the console in graphics mode, run `await draw(display, { console, onRestore, onAcquire })`, and restore text mode however the call ends (return, throw, `process.exit()`, `SIGHUP`/`SIGINT`/`SIGQUIT`/`SIGTERM`). `console` lists console devices to try, such as `["/dev/tty1"]`; when the one opened is a `/dev/ttyN` other than the console on screen, the display is switched to it first and back afterwards (`switchConsole: false` disables this). Console switches with Ctrl-Alt-Fn keep working; `onAcquire(callback)` runs when the display comes back so the caller can repaint, and `onRestore(callback)` registers cleanup to run before text mode returns. |
88
+ | `runDemo({ polygons, device }?)` | Run the CLI demo through `runGraphics()`. Each item in `polygons` is drawn separately. |
89
+
90
+ The module supports 16-, 24-, and 32-bit packed-pixel framebuffers and uses
91
+ the kernel-reported stride, offsets, and RGB bitfields. Paletted and unusual
92
+ non-packed framebuffer formats are rejected rather than drawn incorrectly.
93
+
94
+ ## Operational limits
95
+
96
+ - Run the demo from a real Linux virtual console. A PTY, serial console, SSH
97
+ session, or terminal pane cannot accept `KDSETMODE`.
98
+ - The framebuffer device and active virtual console must be accessible to the
99
+ process; Buninu normally runs as root.
100
+ - Imported drawing calls modify an in-memory frame until `flush()` is called.
101
+ - Importing the module does not switch console mode. Only `runDemo()` or an
102
+ explicit `setConsoleGraphics()` call does so.
103
+ - No userspace cleanup can run after `SIGKILL`, a kernel panic, power loss, or
104
+ a native runtime crash. If one leaves the virtual console in graphics mode,
105
+ switch to another VT or reboot to recover it.
106
+
107
+ ## See also
108
+
109
+ - Source: `/lib/fbdev.js`
110
+ - Shared native binding: `/lib/dlopen.js`
111
+ - Skia on this framebuffer: `/lib/canvas.js` (`canvas.md`); the terminal
112
+ built on both: `bunterm`
113
+ - Linux UAPI: `linux/fb.h` and `linux/kd.h`
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
@@ -0,0 +1,44 @@
1
+ Bitstream Vera License (DejaVu Sans Mono; DejaVu changes are in the public domain)
2
+ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
3
+ Bitstream Vera is a trademark of Bitstream, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of the fonts accompanying this license ("Fonts") and associated
7
+ documentation files (the "Font Software"), to reproduce and distribute the
8
+ Font Software, including without limitation the rights to use, copy, merge,
9
+ publish, distribute, and/or sell copies of the Font Software, and to permit
10
+ persons to whom the Font Software is furnished to do so, subject to the
11
+ following conditions:
12
+
13
+ The above copyright and trademark notices and this permission notice shall
14
+ be included in all copies of one or more of the Font Software typefaces.
15
+
16
+ The Font Software may be modified, altered, or added to, and in particular
17
+ the designs of glyphs or characters in the Fonts may be modified and
18
+ additional glyphs or characters may be added to the Fonts, only if the fonts
19
+ are renamed to names not containing either the words "Bitstream" or the word
20
+ "Vera".
21
+
22
+ This License becomes null and void to the extent applicable to Fonts or Font
23
+ Software that has been modified and is distributed under the "Bitstream
24
+ Vera" names.
25
+
26
+ The Font Software may be sold as part of a larger software package but no
27
+ copy of one or more of the Font Software typefaces may be sold by itself.
28
+
29
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
30
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
31
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
32
+ TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
33
+ FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
34
+ ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
35
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
36
+ THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
37
+ FONT SOFTWARE.
38
+
39
+ Except as contained in this notice, the names of Gnome, the Gnome
40
+ Foundation, and Bitstream Inc., shall not be used in advertising or
41
+ otherwise to promote the sale, use or other dealings in this Font Software
42
+ without prior written authorization from the Gnome Foundation or Bitstream
43
+ Inc., respectively. For further information, contact: fonts at gnome dot
44
+ org.
@@ -0,0 +1,91 @@
1
+ -----------------------------------------------------------
2
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
3
+ -----------------------------------------------------------
4
+
5
+ PREAMBLE
6
+
7
+ The goals of the Open Font License (OFL) are to stimulate worldwide
8
+ development of collaborative font projects, to support the font
9
+ creation efforts of academic and linguistic communities, and to provide
10
+ a free and open framework in which fonts may be shared and improved in
11
+ partnership with others.
12
+
13
+ The OFL allows the licensed fonts to be used, studied, modified and
14
+ redistributed freely as long as they are not sold by themselves. The
15
+ fonts, including any derivative works, can be bundled, embedded,
16
+ redistributed and/or sold with any software provided that any reserved
17
+ names are not used by derivative works. The fonts and derivatives,
18
+ however, cannot be released under any other type of license. The
19
+ requirement for fonts to remain under this license does not apply to
20
+ any document created using the fonts or their derivatives.
21
+
22
+ DEFINITIONS
23
+
24
+ "Font Software" refers to the set of files released by the Copyright
25
+ Holder(s) under this license and clearly marked as such. This may
26
+ include source files, build scripts and documentation.
27
+
28
+ "Reserved Font Name" refers to any names specified as such after the
29
+ copyright statement(s).
30
+
31
+ "Original Version" refers to the collection of Font Software components
32
+ as distributed by the Copyright Holder(s).
33
+
34
+ "Modified Version" refers to any derivative made by adding to,
35
+ deleting, or substituting -- in part or in whole -- any of the
36
+ components of the Original Version, by changing formats or by porting
37
+ the Font Software to a new environment.
38
+
39
+ "Author" refers to any designer, engineer, programmer, technical writer
40
+ or other person who contributed to the Font Software.
41
+
42
+ PERMISSION & CONDITIONS
43
+
44
+ Permission is hereby granted, free of charge, to any person obtaining a
45
+ copy of the Font Software, to use, study, copy, merge, embed, modify,
46
+ redistribute, and sell modified and unmodified copies of the Font
47
+ Software, subject to the following conditions:
48
+
49
+ 1) Neither the Font Software nor any of its individual components, in
50
+ Original or Modified Versions, may be sold by itself.
51
+
52
+ 2) Original or Modified Versions of the Font Software may be bundled,
53
+ redistributed and/or sold with any software, provided that each copy
54
+ contains the above copyright notice and this license. These can be
55
+ included either as stand-alone text files, human-readable headers or
56
+ in the appropriate machine-readable metadata fields within text or
57
+ binary files as long as those fields can be easily viewed by the user.
58
+
59
+ 3) No Modified Version of the Font Software may use the Reserved Font
60
+ Name(s) unless explicit written permission is granted by the
61
+ corresponding Copyright Holder. This restriction only applies to the
62
+ primary font name as presented to the users.
63
+
64
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
65
+ Software shall not be used to promote, endorse or advertise any
66
+ Modified Version, except to acknowledge the contribution(s) of the
67
+ Copyright Holder(s) and the Author(s) or with their explicit written
68
+ permission.
69
+
70
+ 5) The Font Software, modified or unmodified, in part or in whole, must
71
+ be distributed entirely under this license, and must not be distributed
72
+ under any other license. The requirement for fonts to remain under this
73
+ license does not apply to any document created using the Font Software.
74
+
75
+ TERMINATION
76
+
77
+ This license becomes null and void if any of the above conditions are
78
+ not met.
79
+
80
+ DISCLAIMER
81
+
82
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
83
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
84
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
85
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
86
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
87
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
88
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
89
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
90
+ OTHER DEALINGS IN THE FONT SOFTWARE.
91
+