diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dumbymap.mjs | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index f85251a..04d40b5 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
@@ -30,7 +30,8 @@ export const markdown2HTML = (container, mdContent) => { | |||
30 | 30 | ||
31 | const md = MarkdownIt({ | 31 | const md = MarkdownIt({ |
32 | html: true, | 32 | html: true, |
33 | breaks: true | 33 | breaks: true, |
34 | linkify: true | ||
34 | }) | 35 | }) |
35 | .use(MarkdownItAnchor, { | 36 | .use(MarkdownItAnchor, { |
36 | permalink: MarkdownItAnchor.permalink.linkInsideHeader({ | 37 | permalink: MarkdownItAnchor.permalink.linkInsideHeader({ |
@@ -41,14 +42,31 @@ export const markdown2HTML = (container, mdContent) => { | |||
41 | .use(MarkdownItFrontMatter) | 42 | .use(MarkdownItFrontMatter) |
42 | .use(MarkdownItTocDoneRight) | 43 | .use(MarkdownItTocDoneRight) |
43 | 44 | ||
45 | // Create links with geo scheme | ||
46 | const coordinateRegex = /^(\D*)(-?\d+\.?\d*)\s*([,\x2F\uFF0C])\s*(-?\d+\.?\d*)/g | ||
47 | const coordinateValue = { | ||
48 | validate: coordinateRegex, | ||
49 | normalize: function (match) { | ||
50 | const matches = [...match.raw.matchAll(coordinateRegex)] | ||
51 | if (!matches[0]) return match | ||
52 | const [, , x, sep, y] = matches[0] | ||
53 | match.url = `geo:${y},${x}?xy=${x},${y}` | ||
54 | match.text = `${x}${sep}${y}` | ||
55 | match.index = match.raw.indexOf(x) | ||
56 | return match | ||
57 | } | ||
58 | } | ||
59 | const patterns = ['(', '📍', '\uFF08', '@', 'geo:', 'twd'] | ||
60 | patterns.forEach(prefix => | ||
61 | md.linkify.add(prefix, coordinateValue) | ||
62 | ) | ||
63 | |||
44 | // FIXME A better way to generate blocks | 64 | // FIXME A better way to generate blocks |
45 | md.renderer.rules.dumby_block_open = () => '<div>' | 65 | md.renderer.rules.dumby_block_open = () => '<div>' |
46 | md.renderer.rules.dumby_block_close = () => '</div>' | 66 | md.renderer.rules.dumby_block_close = () => '</div>' |
47 | |||
48 | md.core.ruler.before('block', 'dumby_block', state => { | 67 | md.core.ruler.before('block', 'dumby_block', state => { |
49 | state.tokens.push(new state.Token('dumby_block_open', '', 1)) | 68 | state.tokens.push(new state.Token('dumby_block_open', '', 1)) |
50 | }) | 69 | }) |
51 | |||
52 | // Add close tag for block with more than 2 empty lines | 70 | // Add close tag for block with more than 2 empty lines |
53 | md.block.ruler.before('table', 'dumby_block', (state, startLine) => { | 71 | md.block.ruler.before('table', 'dumby_block', (state, startLine) => { |
54 | if ( | 72 | if ( |