For now remove markdoc
This commit is contained in:
parent
c717cc6280
commit
da19f4e2e5
|
@ -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",
|
||||
|
|
121
pnpm-lock.yaml
121
pnpm-lock.yaml
|
@ -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'}
|
||||
|
|
|
@ -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]) : [];
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
|
@ -11,7 +11,6 @@ album:
|
|||
- Mei Ayakura
|
||||
---
|
||||
|
||||
{% lyrics %}
|
||||
# Japanese
|
||||
- 瞬きをして 切り取る時間
|
||||
- 何気なくても 大切な今を
|
||||
|
@ -37,4 +36,3 @@ album:
|
|||
- Kireina mama nokosareteku
|
||||
- Itsuka omoidashite
|
||||
- Iroasete shimattemo
|
||||
{% /lyrics %}
|
|
@ -7,7 +7,6 @@ album:
|
|||
track: 7
|
||||
---
|
||||
|
||||
{% lyrics %}
|
||||
# Japanese
|
||||
- こんなにも 綺麗な月は
|
||||
- どうしても 届かないけど
|
||||
|
@ -25,4 +24,3 @@ album:
|
|||
- todo
|
||||
- 「I」してた 閉じ込めるほどに
|
||||
- だけどもう違うから
|
||||
{% /lyrics %}
|
|
@ -7,8 +7,6 @@ album:
|
|||
track: 5
|
||||
---
|
||||
|
||||
{% lyrics %}
|
||||
# Japanese
|
||||
- どこまでも続いていく階段 [降]{くだ}った途方もないほど
|
||||
- 行きたい場所はもう決まっている 幻想の声のする所
|
||||
{% /lyrics %}
|
|
@ -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">
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
62
src/utils/songs/parse.ts
Normal 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));
|
||||
}
|
Loading…
Reference in a new issue