Files
bookorbit/koreader-plugin/bookorbit.koplugin/bookorbit_board_icons.lua
T
neon 80244ea4e2 feat(koreader): rebuild the plugin interface and fix four-way annotation sync
Squash of feat/koreader-widget-board. KOReader plugin 2.0.0 gets the widget-board dashboard, redesigned
book details, menus, lists and dialogs, Decor page and reading companions. Highlights, notes and bookmarks
now stay in step across web, Kobo, KOReader and the phones (defects D-00 to D-20, migration 0121), and
reading progress and narration hand off cleanly between devices.
2026-10-20 16:05:27 -06:00

232 lines
31 KiB
Lua

--[[--
Icons for the widget dashboard, drawn from Lucide (https://lucide.dev, ISC
license) path data so they match the web app.
KOReader renders SVG files, so each icon is written once per colour, stroke
width and fill into the plugin's cache directory and reused after that. An
icon is a few hundred bytes; a full board needs a few dozen.
]]
local DataStorage = require("datastorage")
local IconWidget = require("ui/widget/iconwidget")
local lfs = require("libs/libkoreader-lfs")
local util = require("util")
local BoardIcons = {}
local NODES = {
["menu"] = { { "path", { ["d"] = "M4 5h16" } }, { "path", { ["d"] = "M4 12h16" } }, { "path", { ["d"] = "M4 19h16" } } },
["search"] = { { "path", { ["d"] = "m21 21-4.34-4.34" } }, { "circle", { ["cx"] = "11", ["cy"] = "11", ["r"] = "8" } } },
["refresh-cw"] = { { "path", { ["d"] = "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" } }, { "path", { ["d"] = "M21 3v5h-5" } }, { "path", { ["d"] = "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" } }, { "path", { ["d"] = "M8 16H3v5" } } },
["cloud"] = { { "path", { ["d"] = "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z" } } },
["cloud-off"] = { { "path", { ["d"] = "M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057" } }, { "path", { ["d"] = "M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78" } }, { "path", { ["d"] = "m2 2 20 20" } } },
["cloud-check"] = { { "path", { ["d"] = "m17 15-5.5 5.5L9 18" } }, { "path", { ["d"] = "M5.516 16.07A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 3.501 7.327" } } },
["wifi"] = { { "path", { ["d"] = "M12 20h.01" } }, { "path", { ["d"] = "M2 8.82a15 15 0 0 1 20 0" } }, { "path", { ["d"] = "M5 12.859a10 10 0 0 1 14 0" } }, { "path", { ["d"] = "M8.5 16.429a5 5 0 0 1 7 0" } } },
["wifi-off"] = { { "path", { ["d"] = "M12 20h.01" } }, { "path", { ["d"] = "M8.5 16.429a5 5 0 0 1 7 0" } }, { "path", { ["d"] = "M5 12.859a10 10 0 0 1 5.17-2.69" } }, { "path", { ["d"] = "M19 12.859a10 10 0 0 0-2.007-1.523" } }, { "path", { ["d"] = "M2 8.82a15 15 0 0 1 4.177-2.643" } }, { "path", { ["d"] = "M22 8.82a15 15 0 0 0-11.288-3.764" } }, { "path", { ["d"] = "m2 2 20 20" } } },
["play"] = { { "path", { ["d"] = "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z" } } },
["book-open"] = { { "path", { ["d"] = "M12 5v16" } }, { "path", { ["d"] = "M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z" } } },
["book-copy"] = { { "path", { ["d"] = "M5 7a2 2 0 0 0-2 2v11" } }, { "path", { ["d"] = "M5.803 18H5a2 2 0 0 0 0 4h9.5a.5.5 0 0 0 .5-.5V21" } }, { "path", { ["d"] = "M9 15V4a2 2 0 0 1 2-2h9.5a.5.5 0 0 1 .5.5v14a.5.5 0 0 1-.5.5H11a2 2 0 0 1 0-4h10" } } },
["aperture"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "m14.31 8 5.74 9.94" } }, { "path", { ["d"] = "M9.69 8h11.48" } }, { "path", { ["d"] = "m7.38 12 5.74-9.94" } }, { "path", { ["d"] = "M9.69 16 3.95 6.06" } }, { "path", { ["d"] = "M14.31 16H2.83" } }, { "path", { ["d"] = "m16.62 12-5.74 9.94" } } },
["folder-open"] = { { "path", { ["d"] = "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2" } } },
["feather"] = { { "path", { ["d"] = "M14.086 18.412A2 2 0 0112.67 19H5v-7.672a2 2 0 01.586-1.414L11.75 3.75a6 6 0 118.49 8.49z" } }, { "path", { ["d"] = "M16 8 2 22" } }, { "path", { ["d"] = "M17.488 15H9" } } },
["layers-2"] = { { "path", { ["d"] = "M13 13.74a2 2 0 0 1-2 0L2.5 8.87a1 1 0 0 1 0-1.74L11 2.26a2 2 0 0 1 2 0l8.5 4.87a1 1 0 0 1 0 1.74z" } }, { "path", { ["d"] = "m20 14.285 1.5.845a1 1 0 0 1 0 1.74L13 21.74a2 2 0 0 1-2 0l-8.5-4.87a1 1 0 0 1 0-1.74l1.5-.845" } } },
["tablet"] = { { "rect", { ["width"] = "16", ["height"] = "20", ["x"] = "4", ["y"] = "2", ["rx"] = "2", ["ry"] = "2" } }, { "line", { ["x1"] = "12", ["x2"] = "12.01", ["y1"] = "18", ["y2"] = "18" } } },
["download"] = { { "path", { ["d"] = "M12 15V3" } }, { "path", { ["d"] = "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" } }, { "path", { ["d"] = "m7 10 5 5 5-5" } } },
["shuffle"] = { { "path", { ["d"] = "m18 14 4 4-4 4" } }, { "path", { ["d"] = "m18 2 4 4-4 4" } }, { "path", { ["d"] = "M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22" } }, { "path", { ["d"] = "M2 6h1.972a4 4 0 0 1 3.6 2.2" } }, { "path", { ["d"] = "M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45" } } },
["chevron-left"] = { { "path", { ["d"] = "m15 18-6-6 6-6" } } },
["chevron-right"] = { { "path", { ["d"] = "m9 18 6-6-6-6" } } },
["arrow-right"] = { { "path", { ["d"] = "M5 12h14" } }, { "path", { ["d"] = "m12 5 7 7-7 7" } } },
["flame"] = { { "path", { ["d"] = "M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4" } } },
["clock"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "M12 6v6l4 2" } } },
["target"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "6" } }, { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "2" } } },
["trophy"] = { { "path", { ["d"] = "M10 14.66V17a1 1 0 0 1-1 1 2 2 0 0 0-2 2v2" } }, { "path", { ["d"] = "M14 14.66V17a1 1 0 0 0 1 1 2 2 0 0 1 2 2v2" } }, { "path", { ["d"] = "M17.916 10H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3" } }, { "path", { ["d"] = "M4 22h16" } }, { "path", { ["d"] = "M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z" } }, { "path", { ["d"] = "M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3" } } },
["award"] = { { "path", { ["d"] = "m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526" } }, { "circle", { ["cx"] = "12", ["cy"] = "8", ["r"] = "6" } } },
["sun-moon"] = { { "path", { ["d"] = "M12 2v2" } }, { "path", { ["d"] = "M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715" } }, { "path", { ["d"] = "M16 12a4 4 0 0 0-4-4" } }, { "path", { ["d"] = "m19 5-1.256 1.256" } }, { "path", { ["d"] = "M20 12h2" } } },
["quote"] = { { "path", { ["d"] = "M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z" } }, { "path", { ["d"] = "M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z" } } },
["ellipsis"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "1" } }, { "circle", { ["cx"] = "19", ["cy"] = "12", ["r"] = "1" } }, { "circle", { ["cx"] = "5", ["cy"] = "12", ["r"] = "1" } } },
["x"] = { { "path", { ["d"] = "M18 6 6 18" } }, { "path", { ["d"] = "m6 6 12 12" } } },
["plus"] = { { "path", { ["d"] = "M5 12h14" } }, { "path", { ["d"] = "M12 5v14" } } },
["minus"] = { { "path", { ["d"] = "M5 12h14" } } },
["sun"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "4" } }, { "path", { ["d"] = "M12 2v2" } }, { "path", { ["d"] = "M12 20v2" } }, { "path", { ["d"] = "m4.93 4.93 1.41 1.41" } }, { "path", { ["d"] = "m17.66 17.66 1.41 1.41" } }, { "path", { ["d"] = "M2 12h2" } }, { "path", { ["d"] = "M20 12h2" } }, { "path", { ["d"] = "m6.34 17.66-1.41 1.41" } }, { "path", { ["d"] = "m19.07 4.93-1.41 1.41" } } },
["thermometer-sun"] = { { "path", { ["d"] = "M12 2v2" } }, { "path", { ["d"] = "M12 8a4 4 0 0 0-1.645 7.647" } }, { "path", { ["d"] = "M2 12h2" } }, { "path", { ["d"] = "M20 14.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0z" } }, { "path", { ["d"] = "m4.93 4.93 1.41 1.41" } }, { "path", { ["d"] = "m6.34 17.66-1.41 1.41" } } },
["moon"] = { { "path", { ["d"] = "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" } } },
["rotate-cw-square"] = { { "path", { ["d"] = "M12 5H6a2 2 0 0 0-2 2v3" } }, { "path", { ["d"] = "m9 8 3-3-3-3" } }, { "path", { ["d"] = "M4 14v4a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2" } } },
["hourglass"] = { { "path", { ["d"] = "M5 22h14" } }, { "path", { ["d"] = "M5 2h14" } }, { "path", { ["d"] = "M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22" } }, { "path", { ["d"] = "M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2" } } },
["calendar-clock"] = { { "path", { ["d"] = "M16 14v2.2l1.6 1" } }, { "path", { ["d"] = "M16 2v3" } }, { "path", { ["d"] = "M21 7.338V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h2.338" } }, { "path", { ["d"] = "M3 9h5.859" } }, { "path", { ["d"] = "M8 2v3" } }, { "circle", { ["cx"] = "16", ["cy"] = "16", ["r"] = "6" } } },
["whole-word"] = { { "circle", { ["cx"] = "7", ["cy"] = "12", ["r"] = "3" } }, { "path", { ["d"] = "M10 9v6" } }, { "circle", { ["cx"] = "17", ["cy"] = "12", ["r"] = "3" } }, { "path", { ["d"] = "M14 7v8" } }, { "path", { ["d"] = "M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1" } } },
["layout-grid"] = { { "rect", { ["width"] = "7", ["height"] = "7", ["x"] = "3", ["y"] = "3", ["rx"] = "1" } }, { "rect", { ["width"] = "7", ["height"] = "7", ["x"] = "14", ["y"] = "3", ["rx"] = "1" } }, { "rect", { ["width"] = "7", ["height"] = "7", ["x"] = "14", ["y"] = "14", ["rx"] = "1" } }, { "rect", { ["width"] = "7", ["height"] = "7", ["x"] = "3", ["y"] = "14", ["rx"] = "1" } } },
["check"] = { { "path", { ["d"] = "M20 6 9 17l-5-5" } } },
["library"] = { { "path", { ["d"] = "m16 6 4 14" } }, { "path", { ["d"] = "M12 6v14" } }, { "path", { ["d"] = "M8 8v12" } }, { "path", { ["d"] = "M4 4v16" } } },
["chevron-down"] = { { "path", { ["d"] = "m6 9 6 6 6-6" } } },
["star"] = { { "path", { ["d"] = "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" } } },
["book-check"] = { { "path", { ["d"] = "M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" } }, { "path", { ["d"] = "m9 9.5 2 2 4-4" } } },
["bookmark"] = { { "path", { ["d"] = "M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z" } } },
["circle-pause"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "line", { ["x1"] = "10", ["x2"] = "10", ["y1"] = "15", ["y2"] = "9" } }, { "line", { ["x1"] = "14", ["x2"] = "14", ["y1"] = "15", ["y2"] = "9" } } },
["rotate-ccw"] = { { "path", { ["d"] = "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" } }, { "path", { ["d"] = "M3 3v5h5" } } },
["info"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "M12 16v-4" } }, { "path", { ["d"] = "M12 8h.01" } } },
["file-text"] = { { "path", { ["d"] = "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" } }, { "path", { ["d"] = "M14 2v5a1 1 0 0 0 1 1h5" } }, { "path", { ["d"] = "M10 9H8" } }, { "path", { ["d"] = "M16 13H8" } }, { "path", { ["d"] = "M16 17H8" } } },
["circle-check"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "m16 9-5.5 5.5L8 12" } } },
["pen-line"] = { { "path", { ["d"] = "M13 21h8" } }, { "path", { ["d"] = "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" } } },
["highlighter"] = { { "path", { ["d"] = "m9 11-6 6v3h9l3-3" } }, { "path", { ["d"] = "m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4" } } },
["user"] = { { "path", { ["d"] = "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" } }, { "circle", { ["cx"] = "12", ["cy"] = "7", ["r"] = "4" } } },
["trash"] = { { "path", { ["d"] = "M10 11v6" } }, { "path", { ["d"] = "M14 11v6" } }, { "path", { ["d"] = "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" } }, { "path", { ["d"] = "M3 6h18" } }, { "path", { ["d"] = "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" } } },
["headphones"] = { { "path", { ["d"] = "M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3" } } },
-- The BookOrbit menu, settings and sync pages.
["sliders-horizontal"] = { { "path", { ["d"] = "M10 5H3" } }, { "path", { ["d"] = "M12 19H3" } }, { "path", { ["d"] = "M14 3v4" } }, { "path", { ["d"] = "M16 17v4" } }, { "path", { ["d"] = "M21 12h-9" } }, { "path", { ["d"] = "M21 19h-5" } }, { "path", { ["d"] = "M21 5h-7" } }, { "path", { ["d"] = "M8 10v4" } }, { "path", { ["d"] = "M8 12H3" } } },
["activity"] = { { "path", { ["d"] = "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" } } },
["circle-help"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" } }, { "path", { ["d"] = "M12 17h.01" } } },
["door-open"] = { { "path", { ["d"] = "M10 21H2" } }, { "path", { ["d"] = "M10 3H7a2 2 0 00-2 2v16" } }, { "path", { ["d"] = "M14 12h.01" } }, { "path", { ["d"] = "M19 21V5a2 2 0 00-1.675-1.974l-6.163-1.013A1 1 0 0010 3v18a1 1 0 001.124.992z" } }, { "path", { ["d"] = "M22 21h-3" } } },
["circle-user-round"] = { { "path", { ["d"] = "M17.925 20.056a6 6 0 0 0-11.851.001" } }, { "circle", { ["cx"] = "12", ["cy"] = "11", ["r"] = "4" } }, { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } } },
["house"] = { { "path", { ["d"] = "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" } }, { "path", { ["d"] = "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" } } },
["arrow-up-right"] = { { "path", { ["d"] = "M7 7h10v10" } }, { "path", { ["d"] = "M7 17 17 7" } } },
["arrow-down"] = { { "path", { ["d"] = "M12 5v14" } }, { "path", { ["d"] = "m19 12-7 7-7-7" } } },
["book-open-text"] = { { "path", { ["d"] = "M12 5v16" } }, { "path", { ["d"] = "M16 13h2" } }, { "path", { ["d"] = "M16 9h2" } }, { "path", { ["d"] = "M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z" } }, { "path", { ["d"] = "M6 13h2" } }, { "path", { ["d"] = "M6 9h2" } } },
["tag"] = { { "path", { ["d"] = "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" } }, { "circle", { ["cx"] = "7.5", ["cy"] = "7.5", ["r"] = ".5", ["fill"] = "currentColor" } } },
["list-checks"] = { { "path", { ["d"] = "M13 5h8" } }, { "path", { ["d"] = "M13 12h8" } }, { "path", { ["d"] = "M13 19h8" } }, { "path", { ["d"] = "m3 17 2 2 4-4" } }, { "path", { ["d"] = "m3 7 2 2 4-4" } } },
["book-x"] = { { "path", { ["d"] = "m14.5 7.5-5 5" } }, { "path", { ["d"] = "M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" } }, { "path", { ["d"] = "m9.5 7.5 5 5" } } },
["globe"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" } }, { "path", { ["d"] = "M2 12h20" } } },
["key-round"] = { { "path", { ["d"] = "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" } }, { "circle", { ["cx"] = "16.5", ["cy"] = "7.5", ["r"] = ".5", ["fill"] = "currentColor" } } },
["eye"] = { { "path", { ["d"] = "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" } }, { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "3" } } },
["eye-off"] = { { "path", { ["d"] = "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" } }, { "path", { ["d"] = "M14.084 14.158a3 3 0 0 1-4.242-4.242" } }, { "path", { ["d"] = "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" } }, { "path", { ["d"] = "m2 2 20 20" } } },
["user-round"] = { { "circle", { ["cx"] = "12", ["cy"] = "8", ["r"] = "5" } }, { "path", { ["d"] = "M20 21a8 8 0 0 0-16 0" } } },
["log-out"] = { { "path", { ["d"] = "m16 17 5-5-5-5" } }, { "path", { ["d"] = "M21 12H9" } }, { "path", { ["d"] = "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" } } },
["triangle-alert"] = { { "path", { ["d"] = "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" } }, { "path", { ["d"] = "M12 9v4" } }, { "path", { ["d"] = "M12 17h.01" } } },
["library-big"] = { { "rect", { ["width"] = "8", ["height"] = "18", ["x"] = "3", ["y"] = "3", ["rx"] = "1" } }, { "path", { ["d"] = "M7 3v18" } }, { "path", { ["d"] = "M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z" } } },
["folder-search"] = { { "path", { ["d"] = "M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1" } }, { "path", { ["d"] = "m21 21-1.9-1.9" } }, { "circle", { ["cx"] = "17", ["cy"] = "17", ["r"] = "3" } } },
["list-filter"] = { { "path", { ["d"] = "M2 5h20" } }, { "path", { ["d"] = "M6 12h12" } }, { "path", { ["d"] = "M9 19h6" } } },
["chevron-up"] = { { "path", { ["d"] = "m18 15-6-6-6 6" } } },
["list"] = { { "path", { ["d"] = "M3 5h.01" } }, { "path", { ["d"] = "M3 12h.01" } }, { "path", { ["d"] = "M3 19h.01" } }, { "path", { ["d"] = "M8 5h13" } }, { "path", { ["d"] = "M8 12h13" } }, { "path", { ["d"] = "M8 19h13" } } },
["arrow-up-down"] = { { "path", { ["d"] = "m21 16-4 4-4-4" } }, { "path", { ["d"] = "M17 20V4" } }, { "path", { ["d"] = "m3 8 4-4 4 4" } }, { "path", { ["d"] = "M7 4v16" } } },
["check-check"] = { { "path", { ["d"] = "M18 6 7 17l-5-5" } }, { "path", { ["d"] = "m22 10-7.5 7.5L13 16" } } },
["chevrons-left"] = { { "path", { ["d"] = "m11 17-5-5 5-5" } }, { "path", { ["d"] = "m18 17-5-5 5-5" } } },
["chevrons-right"] = { { "path", { ["d"] = "m6 17 5-5-5-5" } }, { "path", { ["d"] = "m13 17 5-5-5-5" } } },
["book"] = { { "path", { ["d"] = "M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" } } },
-- The plugin's on-device glyph (assets/bookorbit.on-device.svg) on the 24 grid.
["bo-device"] = { { "rect", { ["x"] = "6.5", ["y"] = "2.5", ["width"] = "11", ["height"] = "19", ["rx"] = "2" } }, { "path", { ["d"] = "M10 18h4" } } },
["sparkle"] = { { "path", { ["d"] = "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" } } },
-- The icons BookOrbit's achievements are drawn with, for the Next badge widget's
-- medals, plus the Chapter line's train.
["arrow-left-right"] = { { "path", { ["d"] = "M8 3 4 7l4 4" } }, { "path", { ["d"] = "M4 7h16" } }, { "path", { ["d"] = "m16 21 4-4-4-4" } }, { "path", { ["d"] = "M20 17H4" } } },
["book-heart"] = { { "path", { ["d"] = "M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" } }, { "path", { ["d"] = "M8.62 9.8A2.25 2.25 0 1 1 12 6.836a2.25 2.25 0 1 1 3.38 2.966l-2.626 2.856a.998.998 0 0 1-1.507 0z" } } },
["book-marked"] = { { "path", { ["d"] = "M10 2v7.751a.25.25 0 00.407.195l2.28-1.834a.5.5 0 01.627 0l2.28 1.834A.25.25 0 0016 9.751V2" } }, { "path", { ["d"] = "M4 19.5v-15A2.5 2.5 0 016.5 2H19a1 1 0 011 1v18a1 1 0 01-1 1H6.5a1 1 0 010-5H20" } } },
["bookmark-check"] = { { "path", { ["d"] = "M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z" } }, { "path", { ["d"] = "m9 10 2 2 4-4" } } },
["calendar"] = { { "path", { ["d"] = "M8 2v3" } }, { "path", { ["d"] = "M16 2v3" } }, { "rect", { ["x"] = "3", ["y"] = "3", ["width"] = "18", ["height"] = "18", ["rx"] = "2" } }, { "path", { ["d"] = "M3 9h18" } } },
["calendar-check"] = { { "path", { ["d"] = "M8 2v3" } }, { "path", { ["d"] = "M16 2v3" } }, { "rect", { ["x"] = "3", ["y"] = "3", ["width"] = "18", ["height"] = "18", ["rx"] = "2" } }, { "path", { ["d"] = "M3 9h18" } }, { "path", { ["d"] = "m9 15 2 2 4-4" } } },
["calendar-range"] = { { "rect", { ["x"] = "3", ["y"] = "3", ["width"] = "18", ["height"] = "18", ["rx"] = "2" } }, { "path", { ["d"] = "M16 2v3" } }, { "path", { ["d"] = "M3 9h18" } }, { "path", { ["d"] = "M8 2v3" } }, { "path", { ["d"] = "M17 13h-6" } }, { "path", { ["d"] = "M13 17H7" } }, { "path", { ["d"] = "M7 13h.01" } }, { "path", { ["d"] = "M17 17h.01" } } },
["coffee"] = { { "path", { ["d"] = "M10 2v2" } }, { "path", { ["d"] = "M14 2v2" } }, { "path", { ["d"] = "M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1" } }, { "path", { ["d"] = "M6 2v2" } } },
["compass"] = { { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "10" } }, { "path", { ["d"] = "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" } } },
["corner-up-right"] = { { "path", { ["d"] = "m15 14 5-5-5-5" } }, { "path", { ["d"] = "M4 20v-7a4 4 0 0 1 4-4h12" } } },
["fast-forward"] = { { "path", { ["d"] = "M12 6a2 2 0 0 1 3.414-1.414l6 6a2 2 0 0 1 0 2.828l-6 6A2 2 0 0 1 12 18z" } }, { "path", { ["d"] = "M2 6a2 2 0 0 1 3.414-1.414l6 6a2 2 0 0 1 0 2.828l-6 6A2 2 0 0 1 2 18z" } } },
["files"] = { { "path", { ["d"] = "M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8" } }, { "path", { ["d"] = "M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z" } }, { "path", { ["d"] = "M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1" } } },
["gauge"] = { { "path", { ["d"] = "m12 14 4-4" } }, { "path", { ["d"] = "M3.34 19a10 10 0 1 1 17.32 0" } } },
["gavel"] = { { "path", { ["d"] = "m14 13-8.381 8.38a1 1 0 0 1-3.001-3l8.384-8.381" } }, { "path", { ["d"] = "m16 16 6-6" } }, { "path", { ["d"] = "m21.5 10.5-8-8" } }, { "path", { ["d"] = "m8 8 6-6" } }, { "path", { ["d"] = "m8.5 7.5 8 8" } } },
["heart"] = { { "path", { ["d"] = "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5" } } },
["list-ordered"] = { { "path", { ["d"] = "M11 5h10" } }, { "path", { ["d"] = "M11 12h10" } }, { "path", { ["d"] = "M11 19h10" } }, { "path", { ["d"] = "M4 4h1v5" } }, { "path", { ["d"] = "M4 9h2" } }, { "path", { ["d"] = "M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02" } } },
["medal"] = { { "path", { ["d"] = "M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15" } }, { "path", { ["d"] = "M11 12 5.12 2.2" } }, { "path", { ["d"] = "m13 12 5.88-9.8" } }, { "path", { ["d"] = "M8 7h8" } }, { "circle", { ["cx"] = "12", ["cy"] = "17", ["r"] = "5" } }, { "path", { ["d"] = "M12 18v-2h-.5" } } },
["minimize-2"] = { { "path", { ["d"] = "m14 10 7-7" } }, { "path", { ["d"] = "M20 10h-6V4" } }, { "path", { ["d"] = "m3 21 7-7" } }, { "path", { ["d"] = "M4 14h6v6" } } },
["mountain"] = { { "path", { ["d"] = "m8 3 4 8 5-5 5 15H2L8 3z" } } },
["orbit"] = { { "path", { ["d"] = "M20.341 6.484A10 10 0 0 1 10.266 21.85" } }, { "path", { ["d"] = "M3.659 17.516A10 10 0 0 1 13.74 2.152" } }, { "circle", { ["cx"] = "12", ["cy"] = "12", ["r"] = "3" } }, { "circle", { ["cx"] = "19", ["cy"] = "5", ["r"] = "2" } }, { "circle", { ["cx"] = "5", ["cy"] = "19", ["r"] = "2" } } },
["palette"] = { { "path", { ["d"] = "M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z" } }, { "circle", { ["cx"] = "13.5", ["cy"] = "6.5", ["r"] = ".5", ["fill"] = "currentColor" } }, { "circle", { ["cx"] = "17.5", ["cy"] = "10.5", ["r"] = ".5", ["fill"] = "currentColor" } }, { "circle", { ["cx"] = "6.5", ["cy"] = "12.5", ["r"] = ".5", ["fill"] = "currentColor" } }, { "circle", { ["cx"] = "8.5", ["cy"] = "7.5", ["r"] = ".5", ["fill"] = "currentColor" } } },
["party-popper"] = { { "path", { ["d"] = "M5.8 11.3 2 22l10.7-3.79" } }, { "path", { ["d"] = "M4 3h.01" } }, { "path", { ["d"] = "M22 8h.01" } }, { "path", { ["d"] = "M15 2h.01" } }, { "path", { ["d"] = "M22 20h.01" } }, { "path", { ["d"] = "m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10" } }, { "path", { ["d"] = "m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17" } }, { "path", { ["d"] = "m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7" } }, { "path", { ["d"] = "M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z" } } },
["pen-tool"] = { { "path", { ["d"] = "m18 13-.654-4.736a4 4 0 00-2.756-3.266l-9.163-2.9a2 2 0 00-2.017.493l-.82.819a2 2 0 00-.492 2.017l2.9 9.163a4 4 0 003.266 2.756L13 18" } }, { "path", { ["d"] = "M18.648 12.352a1.205 1.205 0 011.704 0l1.296 1.296a1.205 1.205 0 010 1.704l-6.296 6.296a1.205 1.205 0 01-1.704 0l-1.296-1.296a1.205 1.205 0 010-1.704z" } }, { "path", { ["d"] = "m3 3 6.586 6.586" } }, { "circle", { ["cx"] = "11", ["cy"] = "11", ["r"] = "2" } } },
["rabbit"] = { { "path", { ["d"] = "M13 16a3 3 0 0 1 2.24 5" } }, { "path", { ["d"] = "M18 12h.01" } }, { "path", { ["d"] = "M18 21h-8a4 4 0 0 1-4-4 7 7 0 0 1 7-7h.2L9.6 6.4a1 1 0 1 1 2.8-2.8L15.8 7h.2c3.3 0 6 2.7 6 6v1a2 2 0 0 1-2 2h-1a3 3 0 0 0-3 3" } }, { "path", { ["d"] = "M20 8.54V4a2 2 0 1 0-4 0v3" } }, { "path", { ["d"] = "M7.612 12.524a3 3 0 1 0-1.6 4.3" } } },
["repeat"] = { { "path", { ["d"] = "m17 2 4 4-4 4" } }, { "path", { ["d"] = "M3 11v-1a4 4 0 0 1 4-4h14" } }, { "path", { ["d"] = "m7 22-4-4 4-4" } }, { "path", { ["d"] = "M21 13v1a4 4 0 0 1-4 4H3" } } },
["scroll"] = { { "path", { ["d"] = "M19 17V5a2 2 0 0 0-2-2H4" } }, { "path", { ["d"] = "M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3" } } },
["scroll-text"] = { { "path", { ["d"] = "M15 12h-5" } }, { "path", { ["d"] = "M15 8h-5" } }, { "path", { ["d"] = "M19 17V5a2 2 0 0 0-2-2H4" } }, { "path", { ["d"] = "M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3" } } },
["smartphone"] = { { "rect", { ["width"] = "14", ["height"] = "20", ["x"] = "5", ["y"] = "2", ["rx"] = "2", ["ry"] = "2" } }, { "path", { ["d"] = "M12 18h.01" } } },
["sparkles"] = { { "path", { ["d"] = "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" } }, { "path", { ["d"] = "M20 2v4" } }, { "path", { ["d"] = "M22 4h-4" } }, { "circle", { ["cx"] = "4", ["cy"] = "20", ["r"] = "2" } } },
["sprout"] = { { "path", { ["d"] = "M14 9.536V7a4 4 0 0 1 4-4h1.5a.5.5 0 0 1 .5.5V5a4 4 0 0 1-4 4 4 4 0 0 0-4 4c0 2 1 3 1 5a5 5 0 0 1-1 3" } }, { "path", { ["d"] = "M4 9a5 5 0 0 1 8 4 5 5 0 0 1-8-4" } }, { "path", { ["d"] = "M5 21h14" } } },
["star-half"] = { { "path", { ["d"] = "M12 18.338a2.1 2.1 0 0 0-.987.244L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16l2.309-4.679A.53.53 0 0 1 12 2" } } },
["sunrise"] = { { "path", { ["d"] = "M12 2v8" } }, { "path", { ["d"] = "m4.93 10.93 1.41 1.41" } }, { "path", { ["d"] = "M2 18h2" } }, { "path", { ["d"] = "M20 18h2" } }, { "path", { ["d"] = "m19.07 10.93-1.41 1.41" } }, { "path", { ["d"] = "M22 22H2" } }, { "path", { ["d"] = "m8 6 4-4 4 4" } }, { "path", { ["d"] = "M16 18a4 4 0 0 0-8 0" } } },
["swords"] = { { "path", { ["d"] = "m13 19 6-6" } }, { "path", { ["d"] = "M14.5 17.5 3.586 6.586A2 2 0 013 5.172V3h2.172a2 2 0 011.414.586L17.5 14.5" } }, { "path", { ["d"] = "m14.828 6.172 2.586-2.586A2 2 0 0118.828 3H21v2.172a2 2 0 01-.586 1.414l-2.586 2.586" } }, { "path", { ["d"] = "m16 16 4 4" } }, { "path", { ["d"] = "m19 21 2-2" } }, { "path", { ["d"] = "m5 14 4 4" } }, { "path", { ["d"] = "m5 21-2-2" } }, { "path", { ["d"] = "M7.5 16.5 4 20" } } },
["thumbs-down"] = { { "path", { ["d"] = "M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z" } }, { "path", { ["d"] = "M17 14V2" } } },
["timer"] = { { "line", { ["x1"] = "10", ["x2"] = "14", ["y1"] = "2", ["y2"] = "2" } }, { "line", { ["x1"] = "12", ["x2"] = "15", ["y1"] = "14", ["y2"] = "11" } }, { "circle", { ["cx"] = "12", ["cy"] = "14", ["r"] = "8" } } },
["zap"] = { { "path", { ["d"] = "M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z" } } },
["train-front"] = { { "path", { ["d"] = "M8 3.1V7a4 4 0 0 0 8 0V3.1" } }, { "path", { ["d"] = "m9 15-1-1" } }, { "path", { ["d"] = "m15 15 1-1" } }, { "path", { ["d"] = "M9 19c-2.8 0-5-2.2-5-5v-4a8 8 0 0 1 16 0v4c0 2.8-2.2 5-5 5Z" } }, { "path", { ["d"] = "m8 19-2 3" } }, { "path", { ["d"] = "m16 19 2 3" } } },
}
local dir = nil
local written = {}
local function cacheDir()
if not dir then
dir = DataStorage:getDataDir() .. "/cache/bookorbit/icons"
util.makePath(dir)
end
return dir
end
local function attrs(tbl)
local keys = {}
for k in pairs(tbl) do table.insert(keys, k) end
table.sort(keys)
local out = {}
for _, k in ipairs(keys) do
table.insert(out, k .. '="' .. tbl[k] .. '"')
end
return table.concat(out, " ")
end
-- The SVG source for one icon. fill colours the closed shapes too (the play
-- triangle, a filled quote).
function BoardIcons.svg(name, color, stroke_width, fill)
local nodes = NODES[name]
if not nodes then return nil end
local body = {}
for _, node in ipairs(nodes) do
table.insert(body, "<" .. node[1] .. " " .. attrs(node[2]) .. "/>")
end
return string.format(
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="%s" stroke="%s" stroke-width="%s" stroke-linecap="round" stroke-linejoin="round">%s</svg>',
fill and color or "none", color, tostring(stroke_width), table.concat(body))
end
-- Path to the cached SVG file, written on first use.
function BoardIcons.file(name, color, stroke_width, fill)
color = color or "#000000"
stroke_width = stroke_width or 2
local key = string.format("%s-%s-%s%s", name, color:gsub("#", ""), tostring(stroke_width):gsub("%.", "_"), fill and "-f" or "")
local path = cacheDir() .. "/" .. key .. ".svg"
if written[path] then return path end
if lfs.attributes(path, "mode") ~= "file" then
local svg = BoardIcons.svg(name, color, stroke_width, fill)
if not svg then return nil end
local f = io.open(path, "w")
if not f then return nil end
f:write(svg)
f:close()
end
written[path] = true
return path
end
-- An IconWidget of size px. opts: color (hex), sw (stroke width), fill.
function BoardIcons.widget(name, size, opts)
opts = opts or {}
local path = BoardIcons.file(name, opts.color, opts.sw or 2, opts.fill)
return IconWidget:new{
file = path,
width = size,
height = size,
alpha = true,
}
end
function BoardIcons.has(name)
return NODES[name] ~= nil
end
-- An icon as SVG elements on its 24 grid, for drawing inside a larger
-- picture (a medal). Nil when the plugin does not have it.
function BoardIcons.markup(name)
local nodes = NODES[name]
if not nodes then return nil end
local body = {}
for _, node in ipairs(nodes) do
table.insert(body, "<" .. node[1] .. " " .. attrs(node[2]) .. "/>")
end
return table.concat(body)
end
return BoardIcons