round of cleaning
This commit is contained in:
parent
541c6345e4
commit
34ed5cf36c
11
Makefile
11
Makefile
|
@ -6,18 +6,17 @@ format:
|
|||
./node_modules/prettier/bin-prettier.js --write gmi.css
|
||||
./node_modules/prettier/bin-prettier.js --write *.js !*.min.js
|
||||
|
||||
gmi.min.css: gmi.css
|
||||
cat $< | ./node_modules/minify/bin/minify.js --css > $@
|
||||
|
||||
gmi-web.1: gmi-web.1.scd
|
||||
scdoc < $< > $@
|
||||
|
||||
install: gmi-web.1
|
||||
install: gmi.min.css gmi-web.1
|
||||
sudo npm link
|
||||
install -Dm644 gmi-web.1 $(MANDIR)/man1/gmi-web.1
|
||||
|
||||
minify:
|
||||
cat gmi.css | ./node_modules/minify/bin/minify.js --css > gmi.min.css
|
||||
cat gmi.js | ./node_modules/minify/bin/minify.js --js > gmi.min.js
|
||||
|
||||
clean:
|
||||
rm -rf gmi.min.* gmi-web.1
|
||||
|
||||
.PHONY: install
|
||||
.PHONY: install clean
|
||||
|
|
9
cli.js
9
cli.js
|
@ -8,7 +8,7 @@ const toHTML = require("./to-html");
|
|||
require("yargs")
|
||||
.scriptName("gmi-web")
|
||||
.command(
|
||||
"$0 [--css] [files..]",
|
||||
"$0 [--css] <files..>",
|
||||
"Convert .gmi to .html. See gmi-web(1) for more details.",
|
||||
(yargs) =>
|
||||
yargs
|
||||
|
@ -31,6 +31,12 @@ require("yargs")
|
|||
default: false,
|
||||
description: "Include video",
|
||||
})
|
||||
.option("silent", {
|
||||
alias: "s",
|
||||
type: "boolean",
|
||||
default: false,
|
||||
description: "No logging to stdout",
|
||||
})
|
||||
.option("css", {
|
||||
type: "boolean",
|
||||
default: true,
|
||||
|
@ -48,6 +54,7 @@ require("yargs")
|
|||
audio: argv.audio,
|
||||
video: argv.video,
|
||||
},
|
||||
silent: argv.silent,
|
||||
})
|
||||
)
|
||||
)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
gmi-web(1) "1.0.0"
|
||||
gmi-web(1) "0.1.0"
|
||||
|
||||
# NAME
|
||||
|
||||
|
@ -6,11 +6,11 @@ gmi-web - A bridge between Gemini and HTML
|
|||
|
||||
# SYNOPSIS
|
||||
|
||||
*gmi-web* [--images] [--audio] [--video] [--no-css] _files_
|
||||
*gmi-web* [_OPTIONS_...] [_FILES_...]
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
Convert your Gemini files to semantic HTML styled in a readable, predictable
|
||||
Convert your Gemini _FILES_ to semantic HTML styled in a readable, predictable
|
||||
and mobile-friendly fashion!
|
||||
|
||||
# OPTIONS
|
||||
|
@ -21,6 +21,9 @@ and mobile-friendly fashion!
|
|||
*--no-css*
|
||||
Do not include gmi.css in the rendered HTML markup.
|
||||
|
||||
*--silent*
|
||||
Do not log anything to stdout
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
The following example will create .html converted files next to their .gmi counterparts on the filesystem.
|
||||
|
|
15
gmi.css
15
gmi.css
|
@ -3,13 +3,18 @@
|
|||
--background: white;
|
||||
--p-size: 1.25rem;
|
||||
--p-indent: 0rem;
|
||||
--p-line-height: 1.5;
|
||||
--a-size: var(--p-size);
|
||||
--pre-size: 1rem;
|
||||
--pre-line-height: 1;
|
||||
--h1-size: 3rem;
|
||||
--h2-size: 2.25rem;
|
||||
--h3-size: 1.5rem;
|
||||
--heading-line-height: 1.25;
|
||||
--ul-size: var(--p-size);
|
||||
--ul-line-height: 1.25;
|
||||
--blockquote-size: var(--p-size);
|
||||
--blockquote-line-height: 1.25;
|
||||
--mono: Consolas, monaco, monospace;
|
||||
--serif: georgia, times, serif;
|
||||
--sans-serif: -apple-system, BlinkMacSystemFont, "avenir next", avenir,
|
||||
|
@ -45,14 +50,14 @@ h1,
|
|||
h2,
|
||||
h3 {
|
||||
font-family: var(--sans-serif);
|
||||
line-height: 1.25;
|
||||
line-height: var(--heading-line-height);
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: var(--p-size);
|
||||
font-family: var(--serif);
|
||||
text-indent: var(--p-indent);
|
||||
line-height: 1.5;
|
||||
line-height: var(--p-line-height);
|
||||
}
|
||||
|
||||
a::before {
|
||||
|
@ -72,7 +77,7 @@ a {
|
|||
pre {
|
||||
font-size: var(--pre-size);
|
||||
font-family: var(--mono);
|
||||
line-height: 1;
|
||||
line-height: var(--pre-line-height);
|
||||
padding: 1.25rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
@ -92,7 +97,7 @@ h3 {
|
|||
ul {
|
||||
font-size: var(--p-size);
|
||||
font-family: var(--serif);
|
||||
line-height: 1.25;
|
||||
line-height: var(--ul-line-height);
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
|
@ -107,7 +112,7 @@ li::before {
|
|||
blockquote {
|
||||
font-size: var(--p-size);
|
||||
font-family: var(--serif);
|
||||
line-height: 1.5;
|
||||
line-height: var(--blockquote-line-height);
|
||||
padding-left: 0.75rem;
|
||||
}
|
||||
|
||||
|
|
2
package-lock.json
generated
2
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "gmi-web",
|
||||
"version": "1.0.0",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "gmi-web",
|
||||
"version": "1.0.0",
|
||||
"version": "0.1.0",
|
||||
"description": "A bridge between the HTML and Gemini",
|
||||
"main": "gmi.css",
|
||||
"bin": {
|
||||
|
|
13
to-html.js
13
to-html.js
|
@ -1,3 +1,5 @@
|
|||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const TOKENS_EXT = /\.tokens\.json$/;
|
||||
// https://developer.mozilla.org/en-US/docs/Web/Media/Formats
|
||||
const IMG_EXT = /\.(apng|avif|gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp)$/;
|
||||
|
@ -5,15 +7,18 @@ const AUDIO_EXT = /\.(mp3|wav|aac|aacp|mpeg|off|flac)$/;
|
|||
const VIDEO_EXT = /\.(mp4|webm)$/;
|
||||
|
||||
module.exports = (options) => (file, cb) => {
|
||||
if (!TOKENS_EXT.test(file.path)) return cb(null, file);
|
||||
if (!TOKENS_EXT.test(file.path)) return cb(null);
|
||||
|
||||
// TODO: meta: author, copyright, keywords, content-type, language, description, canonical
|
||||
// TODO: meta: language, description, canonical
|
||||
file.contents = Buffer.from(`<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">${
|
||||
options.css
|
||||
? '\n<meta name="color-scheme" content="dark light">\n<link rel="stylesheet" href="/gmi.min.css">'
|
||||
? `\n<meta name="color-scheme" content="dark light">\n<style>${fs.readFileSync(
|
||||
path.resolve(__dirname, "./gmi.min.css"),
|
||||
"utf8"
|
||||
)}</style>`
|
||||
: ""
|
||||
}
|
||||
<body>
|
||||
|
@ -23,6 +28,7 @@ ${toHTML(JSON.parse(file.contents.toString("utf8")), options)}
|
|||
`);
|
||||
|
||||
file.path = file.path.replace(TOKENS_EXT, ".html");
|
||||
if (!options.silent) console.log(file.path);
|
||||
return cb(null, file);
|
||||
};
|
||||
|
||||
|
@ -56,7 +62,6 @@ function line(
|
|||
{ text, href, title, pre, alt, h1, h2, h3, li, quote },
|
||||
{ inline }
|
||||
) {
|
||||
console.log(inline)
|
||||
if (text) return `<p>${text}</p>`;
|
||||
if (href) {
|
||||
if (inline.images && IMG_EXT.test(href))
|
||||
|
|
Loading…
Reference in a new issue