For now remove markdoc

This commit is contained in:
Maciej Jur 2023-04-29 16:37:08 +02:00
parent c717cc6280
commit da19f4e2e5
11 changed files with 71 additions and 207 deletions

View file

@ -10,7 +10,6 @@
"astro": "astro"
},
"dependencies": {
"@astrojs/markdoc": "^0.1.1",
"@astrojs/mdx": "^0.19.0",
"@astrojs/solid-js": "^2.1.0",
"astro": "^2.3.2",
@ -18,7 +17,6 @@
"leaflet": "^1.9.3",
"leaflet.markercluster": "^1.5.3",
"lunr": "^2.3.9",
"node-html-parser": "^6.1.5",
"rehype-katex": "^6.0.3",
"rehype-raw": "^6.1.1",
"rehype-stringify": "^9.0.3",

View file

@ -1,9 +1,6 @@
lockfileVersion: '6.0'
dependencies:
'@astrojs/markdoc':
specifier: ^0.1.1
version: 0.1.1(astro@2.3.2)
'@astrojs/mdx':
specifier: ^0.19.0
version: 0.19.0(astro@2.3.2)(rollup@3.21.0)
@ -25,9 +22,6 @@ dependencies:
lunr:
specifier: ^2.3.9
version: 2.3.9
node-html-parser:
specifier: ^6.1.5
version: 6.1.5
rehype-katex:
specifier: ^6.0.3
version: 6.0.3
@ -121,23 +115,6 @@ packages:
vscode-uri: 3.0.7
dev: false
/@astrojs/markdoc@0.1.1(astro@2.3.2):
resolution: {integrity: sha512-NJgMTZWTCcL+4qmDim/wi53Mc6X7hk12hyI3JHWW7oiWVchdrvbdvG5i3c2bmT73+bMtG8XOEt2vvapQRixAKw==}
engines: {node: '>=16.12.0'}
peerDependencies:
astro: ^2.2.0
dependencies:
'@markdoc/markdoc': 0.2.2
astro: 2.3.2(sass@1.62.1)
esbuild: 0.17.18
gray-matter: 4.0.3
kleur: 4.1.5
zod: 3.21.4
transitivePeerDependencies:
- '@types/react'
- react
dev: false
/@astrojs/markdown-remark@2.1.4(astro@2.3.2):
resolution: {integrity: sha512-z5diCcFo2xkBAJ11KySAIKpZZkULZmzUvWsZ2VWIOrR6QrEgEfVl5jTpgPSedx4m+xUPuemlUviOotGB7ItNsQ==}
peerDependencies:
@ -722,21 +699,6 @@ packages:
resolution: {integrity: sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==}
dev: false
/@markdoc/markdoc@0.2.2:
resolution: {integrity: sha512-0TiD9jmA5h5znN4lxo7HECAu3WieU5g5vUsfByeucrdR/x88hEilpt16EydFyJwJddQ/3w5HQgW7Ovy62r4cyw==}
engines: {node: '>=14.7.0'}
peerDependencies:
'@types/react': '*'
react: '*'
peerDependenciesMeta:
'@types/react':
optional: true
react:
optional: true
optionalDependencies:
'@types/markdown-it': 12.2.3
dev: false
/@mdx-js/mdx@2.3.0:
resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
dependencies:
@ -908,35 +870,16 @@ packages:
'@types/geojson': 7946.0.10
dev: true
/@types/linkify-it@3.0.2:
resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
dev: false
optional: true
/@types/lunr@2.3.4:
resolution: {integrity: sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g==}
dev: true
/@types/markdown-it@12.2.3:
resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==}
requiresBuild: true
dependencies:
'@types/linkify-it': 3.0.2
'@types/mdurl': 1.0.2
dev: false
optional: true
/@types/mdast@3.0.11:
resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
dependencies:
'@types/unist': 2.0.6
dev: false
/@types/mdurl@1.0.2:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
dev: false
optional: true
/@types/mdx@2.0.5:
resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==}
dev: false
@ -1170,10 +1113,6 @@ packages:
readable-stream: 3.6.2
dev: false
/boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: false
/boxen@6.2.1:
resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@ -1363,21 +1302,6 @@ packages:
which: 2.0.2
dev: false
/css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
dependencies:
boolbase: 1.0.0
css-what: 6.1.0
domhandler: 5.0.3
domutils: 3.0.1
nth-check: 2.1.1
dev: false
/css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
dev: false
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
dev: false
@ -1438,33 +1362,6 @@ packages:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: false
/dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
dev: false
/domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: false
/domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
dependencies:
domelementtype: 2.3.0
dev: false
/domutils@3.0.1:
resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==}
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dev: false
/dset@3.1.2:
resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==}
engines: {node: '>=4'}
@ -1911,11 +1808,6 @@ packages:
space-separated-tokens: 2.0.2
dev: false
/he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
dev: false
/html-entities@2.3.3:
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
dev: false
@ -2815,13 +2707,6 @@ packages:
lodash: 4.17.21
dev: false
/node-html-parser@6.1.5:
resolution: {integrity: sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg==}
dependencies:
css-select: 5.1.0
he: 1.2.0
dev: false
/node-releases@2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
dev: false
@ -2837,12 +2722,6 @@ packages:
path-key: 4.0.0
dev: false
/nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
boolbase: 1.0.0
dev: false
/onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}

View file

@ -1,10 +1,10 @@
---
import Ruby from "../Ruby.astro";
import { transform } from "./transform";
import { transform } from "../../../utils/songs/parse";
const html = await Astro.slots.render('default');
const lyrics = transform(html);
const cols = Object.keys(lyrics[0]);
const data = await Astro.slots.render('default');
const lyrics = transform(data, true);
const cols = lyrics.length ? Object.keys(lyrics[0]) : [];
---

View file

@ -1,68 +0,0 @@
import { Node, HTMLElement, parse } from 'node-html-parser';
interface Stack {
[key: string]: string[][];
}
interface Verse {
[key: string]: string[];
}
function extractLines(nodes: Node[]): string[] {
return nodes
.map(node => node.text)
.filter(text => text != '\n');
}
function createVerse(data: Stack, lang: string) {
(lang in data)
? data[lang].push([])
: data[lang] = [[]];
}
function toStack(html: string): Stack {
const root = parse(html);
const stack: Stack = {};
const nodes = root.childNodes as HTMLElement[];
nodes.reduce((lang, node) => {
const tag = node.rawTagName;
// Change language context
if (tag.match(/h\d/))
return node.text;
// Parse list as verse
if (tag === 'ul') {
createVerse(stack, lang);
const lines = extractLines(node.childNodes);
stack[lang].at(-1)!.push(...lines);
}
return lang;
}, '');
return stack;
}
function reduceStack(stack: Stack): Verse[] {
const langs = Object.keys(stack);
const length = langs.map(lang => stack[lang].length).reduce((a, b) => Math.max(a, b));
const verses: Verse[] = [];
for (const _ of Array(length)) {
const verse: Verse = {};
for (const lang of langs) {
const lines = stack[lang].pop();
verse[lang] = lines ? lines : [];
}
verses.push(verse);
}
return verses.reverse();
}
export function transform(html: string) {
return reduceStack(toStack(html));
}

View file

@ -11,7 +11,6 @@ album:
- Mei Ayakura
---
{% lyrics %}
# Japanese
- 瞬きをして 切り取る時間
- 何気なくても 大切な今を
@ -37,4 +36,3 @@ album:
- Kireina mama nokosareteku
- Itsuka omoidashite
- Iroasete shimattemo
{% /lyrics %}

View file

@ -7,7 +7,6 @@ album:
track: 7
---
{% lyrics %}
# Japanese
- こんなにも 綺麗な月は
- どうしても 届かないけど
@ -25,4 +24,3 @@ album:
- todo
- 「I」してた 閉じ込めるほどに
- だけどもう違うから
{% /lyrics %}

View file

@ -7,8 +7,6 @@ album:
track: 5
---
{% lyrics %}
# Japanese
- どこまでも続いていく階段 [降]{くだ}った途方もないほど
- 行きたい場所はもう決まっている 幻想の声のする所
{% /lyrics %}

View file

@ -2,7 +2,8 @@
import Base from "../../layouts/Base.astro";
import Song from "../../components/markdown/Song.astro";
import { CollectionEntry, getCollection } from "astro:content";
import { ALBUMS } from "../../utils/songs";
import { ALBUMS } from "../../utils/songs/data";
import Lyrics from "../../components/markdown/lyrics/Lyrics.astro";
export async function getStaticPaths() {
return (await getCollection('songs'))
@ -40,7 +41,7 @@ const metadata = {
<header class="p-header">
<h1 class="p-header__heading">{song.data.title}</h1>
</header>
<Content />
<Lyrics markdown={true}>{song.body}</Lyrics>
</article>
<aside class="l-song__aside">

View file

@ -2,8 +2,6 @@ import type { Node, Parent } from 'unist';
import { visit } from "unist-util-visit";
const regex = /\[([^\]]+)\]\{([^}]+)\}/g;
interface Ruby {
text: string;
ruby: string;
@ -15,6 +13,7 @@ type Annotated =
export function transform(input: string): Annotated[] {
const regex = /\[([^\]]+)\]\{([^}]+)\}/g;
const parts: Annotated[] = [];
let lastIndex = 0;
@ -34,7 +33,6 @@ export function transform(input: string): Annotated[] {
if (lastIndex < input.length)
parts.push(input.slice(lastIndex));
regex.lastIndex = 0;
return parts;
}

View file

@ -1,4 +1,4 @@
import circles from "../data/circles.json";
import circles from "../../data/circles.json";
import type { CollectionEntry } from "astro:content";

62
src/utils/songs/parse.ts Normal file
View file

@ -0,0 +1,62 @@
interface Stack {
[key: string]: string[][];
}
interface Verse {
[key: string]: string[];
}
function increaseStack(data: Stack, lang: string) {
lang in data
? data[lang].push([])
: data[lang] = [[]];
}
function fromMarkdown(markdown: string): Stack {
const stack: Stack = {};
let space = true;
let lang = '';
for (const line of markdown.split('\n').map(x => x.trim())) {
if (line.startsWith('#')) {
lang = line.match(/#+ (.+)/)![1];
space = true;
}
if (line === '' || line.startsWith('---'))
space = true;
if (line.startsWith('- ')) {
if (space === true) {
increaseStack(stack, lang);
space = false;
}
const text = line.match(/- (.+)/)![1];
stack[lang].at(-1)!.push(text);
}
}
return stack
}
function reduceStack(stack: Stack): Verse[] {
const langs = Object.keys(stack);
const length = langs.reduce((acc, lang) => Math.max(acc, stack[lang].length), 0);
const verses: Verse[] = [];
for (const _ of Array(length)) {
const verse: Verse = {};
for (const lang of langs) {
const lines = stack[lang].pop();
verse[lang] = lines ? lines : [];
}
verses.push(verse);
}
return verses.reverse();
}
export function transform(data: string, markdown = false) {
return reduceStack(fromMarkdown(data));
}