diff --git a/generate-test-report.ts b/generate-test-report.ts index 3ec5143..69a810a 100644 --- a/generate-test-report.ts +++ b/generate-test-report.ts @@ -1,49 +1,47 @@ import { Parser } from './src/parser'; +import { generateHTMLReport, ReportData } from './src/utils/report-generator'; import * as fs from 'fs'; import * as path from 'path'; /** - * Script that parses both markdown and asciidoc test documents - * and generates an HTML report showing the parsing results + * Standalone script to generate HTML test report + * Run with: npm run test:report */ -interface TestData { - original: string; - result: any; -} - -interface ReportData { - markdown: TestData; - asciidoc: TestData; -} - async function main() { + console.log('📝 Generating test report...\n'); + + // Initialize parser const parser = new Parser({ linkBaseURL: 'https://example.com', wikilinkUrl: '/events?d={dtag}', hashtagUrl: '/notes?t={topic}', }); - console.log('Reading test documents...'); - // Read test documents - const markdownContent = fs.readFileSync( - path.join(__dirname, 'markdown_testdoc.md'), - 'utf-8' - ); - const asciidocContent = fs.readFileSync( - path.join(__dirname, 'asciidoc_testdoc.adoc'), - 'utf-8' - ); + const markdownPath = path.join(__dirname, 'markdown_testdoc.md'); + const asciidocPath = path.join(__dirname, 'asciidoc_testdoc.adoc'); + + if (!fs.existsSync(markdownPath)) { + console.error(`❌ Error: ${markdownPath} not found`); + process.exit(1); + } + + if (!fs.existsSync(asciidocPath)) { + console.error(`❌ Error: ${asciidocPath} not found`); + process.exit(1); + } - console.log('Parsing markdown document...'); + const markdownContent = fs.readFileSync(markdownPath, 'utf-8'); + const asciidocContent = fs.readFileSync(asciidocPath, 'utf-8'); + + console.log('📄 Parsing markdown document...'); const markdownResult = await parser.process(markdownContent); - - console.log('Parsing asciidoc document...'); + + console.log('📄 Parsing asciidoc document...'); const asciidocResult = await parser.process(asciidocContent); - console.log('Generating HTML report...'); - // Generate HTML report + console.log('🎨 Generating HTML report...'); const htmlReport = generateHTMLReport({ markdown: { original: markdownContent, @@ -55,588 +53,16 @@ async function main() { }, }); - // Write HTML report to file (force fresh write) + // Write HTML report to file const reportPath = path.join(__dirname, 'test-report.html'); - - // Delete old report if it exists to ensure fresh generation - if (fs.existsSync(reportPath)) { - fs.unlinkSync(reportPath); - } - fs.writeFileSync(reportPath, htmlReport, 'utf-8'); - const reportUrl = `file://${reportPath}`; - console.log(`\n✅ Test report generated successfully!`); - console.log(` File: ${reportPath}`); - console.log(` Size: ${(htmlReport.length / 1024).toFixed(2)} KB`); - console.log(` Timestamp: ${new Date().toISOString()}`); + console.log(`\n✅ Test report generated: ${reportPath}`); console.log(` Open this file in your browser to view the results.\n`); } -function generateHTMLReport(data: ReportData): string { - const { markdown, asciidoc } = data; - - return ` - - - - - GC Parser Test Report - - - -
-

GC Parser Test Report

-

Generated: ${new Date().toLocaleString()}

- - -
-

Markdown Document Test ✓ Parsed

- -
- - - - -
- -
-
-
-
${markdown.result.nostrLinks.length}
-
Nostr Links
-
-
-
${markdown.result.wikilinks.length}
-
Wikilinks
-
-
-
${markdown.result.hashtags.length}
-
Hashtags
-
-
-
${markdown.result.links.length}
-
Links
-
-
-
${markdown.result.media.length}
-
Media URLs
-
-
-
${markdown.result.hasLaTeX ? 'Yes' : 'No'}
-
Has LaTeX
-
-
-
${markdown.result.hasMusicalNotation ? 'Yes' : 'No'}
-
Has Music
-
-
- -

Frontmatter

- ${markdown.result.frontmatter ? ` - - ` : '

No frontmatter found

'} -
- -
-

Original Markdown Content

-
-
${escapeHtml(markdown.original)}
-
-
- -
-

Rendered HTML Output

-
- ${markdown.result.content} -
-
- View Raw HTML -
-
${escapeHtml(markdown.result.content)}
-
-
-
- -
-

Extracted Metadata

- - ${markdown.result.nostrLinks.length > 0 ? ` -

Nostr Links (${markdown.result.nostrLinks.length})

- ${markdown.result.nostrLinks.map((link: any) => ` -
- ${escapeHtml(link.type)}: ${escapeHtml(link.bech32)} - ${link.text ? ` - ${escapeHtml(link.text)}` : ''} -
- `).join('')} - ` : ''} - - ${markdown.result.wikilinks.length > 0 ? ` -

Wikilinks (${markdown.result.wikilinks.length})

- ${markdown.result.wikilinks.map((wl: any) => ` -
- ${escapeHtml(wl.original)} → dtag: ${escapeHtml(wl.dtag)} - ${wl.display ? ` (display: ${escapeHtml(wl.display)})` : ''} -
- `).join('')} - ` : ''} - - ${markdown.result.hashtags.length > 0 ? ` -

Hashtags (${markdown.result.hashtags.length})

- ${markdown.result.hashtags.map((tag: string) => ` -
- #${escapeHtml(tag)} -
- `).join('')} - ` : ''} - - ${markdown.result.links.length > 0 ? ` -

Links (${markdown.result.links.length})

- ${markdown.result.links.map((link: any) => ` -
- ${escapeHtml(link.text || link.url)} - ${link.isExternal ? 'External' : ''} -
- `).join('')} - ` : ''} - - ${markdown.result.media.length > 0 ? ` -

Media URLs (${markdown.result.media.length})

- ${markdown.result.media.map((url: string) => ` - - `).join('')} - ` : ''} - - ${markdown.result.tableOfContents ? ` -

Table of Contents

-
- ${markdown.result.tableOfContents} -
- ` : ''} -
-
- - -
-

AsciiDoc Document Test ✓ Parsed

- -
- - - - -
- -
-
-
-
${asciidoc.result.nostrLinks.length}
-
Nostr Links
-
-
-
${asciidoc.result.wikilinks.length}
-
Wikilinks
-
-
-
${asciidoc.result.hashtags.length}
-
Hashtags
-
-
-
${asciidoc.result.links.length}
-
Links
-
-
-
${asciidoc.result.media.length}
-
Media URLs
-
-
-
${asciidoc.result.hasLaTeX ? 'Yes' : 'No'}
-
Has LaTeX
-
-
-
${asciidoc.result.hasMusicalNotation ? 'Yes' : 'No'}
-
Has Music
-
-
- -

Frontmatter

- ${asciidoc.result.frontmatter ? ` - - ` : '

No frontmatter found

'} -
- -
-

Original AsciiDoc Content

-
-
${escapeHtml(asciidoc.original)}
-
-
- -
-

Rendered HTML Output

-
- ${asciidoc.result.content} -
-
- View Raw HTML -
-
${escapeHtml(asciidoc.result.content)}
-
-
-
- -
-

Extracted Metadata

- - ${asciidoc.result.nostrLinks.length > 0 ? ` -

Nostr Links (${asciidoc.result.nostrLinks.length})

- ${asciidoc.result.nostrLinks.map((link: any) => ` -
- ${escapeHtml(link.type)}: ${escapeHtml(link.bech32)} - ${link.text ? ` - ${escapeHtml(link.text)}` : ''} -
- `).join('')} - ` : ''} - - ${asciidoc.result.wikilinks.length > 0 ? ` -

Wikilinks (${asciidoc.result.wikilinks.length})

- ${asciidoc.result.wikilinks.map((wl: any) => ` -
- ${escapeHtml(wl.original)} → dtag: ${escapeHtml(wl.dtag)} - ${wl.display ? ` (display: ${escapeHtml(wl.display)})` : ''} -
- `).join('')} - ` : ''} - - ${asciidoc.result.hashtags.length > 0 ? ` -

Hashtags (${asciidoc.result.hashtags.length})

- ${asciidoc.result.hashtags.map((tag: string) => ` -
- #${escapeHtml(tag)} -
- `).join('')} - ` : ''} - - ${asciidoc.result.links.length > 0 ? ` -

Links (${asciidoc.result.links.length})

- ${asciidoc.result.links.map((link: any) => ` -
- ${escapeHtml(link.text || link.url)} - ${link.isExternal ? 'External' : ''} -
- `).join('')} - ` : ''} - - ${asciidoc.result.media.length > 0 ? ` -

Media URLs (${asciidoc.result.media.length})

- ${asciidoc.result.media.map((url: string) => ` - - `).join('')} - ` : ''} - - ${asciidoc.result.tableOfContents ? ` -

Table of Contents

-
- ${asciidoc.result.tableOfContents} -
- ` : ''} -
-
-
- - - -`; -} - -function escapeHtml(text: string): string { - const map: Record = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - }; - return text.replace(/[&<>"']/g, (m) => map[m]); -} - // Run the script main().catch((error) => { - console.error('Error generating test report:', error); + console.error('❌ Error generating test report:', error); process.exit(1); }); diff --git a/jest.config.js b/jest.config.js index 590e48b..c5a9484 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,18 +8,15 @@ module.exports = { 'src/**/*.ts', '!src/**/*.d.ts', ], - globals: { - 'ts-jest': { - tsconfig: { - target: 'ES2020', - module: 'commonjs', - lib: ['ES2020'], - types: ['node'], - strict: true, - esModuleInterop: true, - skipLibCheck: true, - forceConsistentCasingInFileNames: true, - }, - }, + transform: { + '^.+\\.ts$': ['ts-jest', { + tsconfig: 'tsconfig.test.json', + }], }, + // Don't transform AsciiDoctor packages - they use Opal runtime which breaks with Jest transformation + // AsciiDoctor uses CommonJS and Opal runtime, so we need to exclude it from transformation + // The pattern matches paths to ignore (not transform) + transformIgnorePatterns: [ + '/node_modules/@asciidoctor/', + ], }; diff --git a/src/converters/to-asciidoc.ts b/src/converters/to-asciidoc.ts index 54ba9c1..fa257fd 100644 --- a/src/converters/to-asciidoc.ts +++ b/src/converters/to-asciidoc.ts @@ -1,23 +1,251 @@ import { ContentFormat } from '../types'; -// Import node-emoji if available (optional dependency) -let emoji: any; -try { - emoji = require('node-emoji'); -} catch (e) { - // node-emoji not available, emoji conversion will be skipped - emoji = null; +export interface ConvertOptions { + enableNostrAddresses?: boolean; +} + +/** + * Converts content from various formats (Markdown, Wikipedia, Plain) to AsciiDoc + * + * Processing order: + * 1. Convert special syntax (wikilinks, hashtags, nostr links) to placeholders + * 2. Process media URLs (YouTube, Spotify, video, audio) + * 3. Process images (Markdown and bare URLs) + * 4. Process links (Markdown and bare URLs) + * 5. Clean URLs (remove tracking parameters) + */ +export function convertToAsciidoc( + content: string, + format: ContentFormat, + linkBaseURL?: string, + options: ConvertOptions = {} +): string { + let processed = content; + + // Step 1: Convert special syntax to placeholders (before other processing) + processed = convertWikilinks(processed); + processed = convertHashtags(processed); + + if (options.enableNostrAddresses !== false) { + processed = convertNostrLinks(processed); + } + + // Step 2: Process media URLs (before link processing to avoid conflicts) + processed = processMediaUrls(processed); + + // Step 3: Process images (before links to avoid conflicts) + processed = processImages(processed, format); + + // Step 4: Process links (Markdown and bare URLs) + processed = processLinks(processed, format); + + // Step 5: Convert format-specific syntax + if (format === ContentFormat.Markdown) { + processed = convertMarkdownToAsciidoc(processed); + } else if (format === ContentFormat.Wikipedia) { + processed = convertWikipediaToAsciidoc(processed); + } + + return processed; +} + +/** + * Convert wikilinks [[target]] or [[target|display]] to WIKILINK:dtag|display + */ +function convertWikilinks(content: string): string { + return content.replace(/\[\[([^|\]]+)(?:\|([^\]]+))?\]\]/g, (_match, target, display) => { + const dtag = normalizeDtag(target.trim()); + const displayText = display ? display.trim() : target.trim(); + return `WIKILINK:${dtag}|${displayText}`; + }); +} + +/** + * Normalize dtag (lowercase, replace spaces with hyphens) + */ +function normalizeDtag(dtag: string): string { + return dtag.toLowerCase().replace(/\s+/g, '-'); +} + +/** + * Convert hashtags #topic to hashtag:topic[topic] + * Skip hashtags in URLs, code blocks, and inline code + */ +function convertHashtags(content: string): string { + // Protect code blocks + const codeBlocks: string[] = []; + content = content.replace(/```[\s\S]*?```/g, (match) => { + const placeholder = `__CODEBLOCK_${codeBlocks.length}__`; + codeBlocks.push(match); + return placeholder; + }); + + // Protect inline code + const inlineCode: string[] = []; + content = content.replace(/`[^`]+`/g, (match) => { + const placeholder = `__INLINECODE_${inlineCode.length}__`; + inlineCode.push(match); + return placeholder; + }); + + // Convert hashtags (not in URLs) + content = content.replace(/(? { + const normalized = topic.toLowerCase(); + return `hashtag:${normalized}[#${topic}]`; + }); + + // Restore inline code + inlineCode.forEach((code, index) => { + content = content.replace(`__INLINECODE_${index}__`, code); + }); + + // Restore code blocks + codeBlocks.forEach((block, index) => { + content = content.replace(`__CODEBLOCK_${index}__`, block); + }); + + return content; +} + +/** + * Convert nostr: links to link:nostr:...[...] + */ +function convertNostrLinks(content: string): string { + // Match nostr:npub1..., nostr:note1..., etc. + return content.replace(/nostr:([a-z0-9]+[a-z0-9]{50,})/gi, (match, bech32Id) => { + // Extract display text (first few chars) + const display = bech32Id.substring(0, 8) + '...'; + return `link:nostr:${bech32Id}[${display}]`; + }); +} + +/** + * Process media URLs and convert to MEDIA: placeholders + */ +function processMediaUrls(content: string): string { + let processed = content; + + // YouTube URLs + processed = processed.replace( + /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]+)/g, + (_match, videoId) => `MEDIA:youtube:${videoId}` + ); + + // Spotify URLs + processed = processed.replace( + /(?:https?:\/\/)?(?:open\.)?spotify\.com\/(track|album|playlist|artist|episode|show)\/([a-zA-Z0-9]+)/g, + (_match, type, id) => `MEDIA:spotify:${type}:${id}` + ); + + // Video files + processed = processed.replace( + /(https?:\/\/[^\s<>"{}|\\^`\[\]()]+\.(mp4|webm|ogg|m4v|mov|avi|mkv|flv|wmv))/gi, + (_match, url) => `MEDIA:video:${url}` + ); + + // Audio files + processed = processed.replace( + /(https?:\/\/[^\s<>"{}|\\^`\[\]()]+\.(mp3|m4a|wav|flac|aac|opus|wma|ogg))/gi, + (_match, url) => `MEDIA:audio:${url}` + ); + + return processed; +} + +/** + * Process images (Markdown syntax and bare URLs) + */ +function processImages(content: string, format: ContentFormat): string { + let processed = content; + + // Markdown image syntax: ![alt](url) + processed = processed.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, (_match, alt, url) => { + const cleanedUrl = cleanUrl(url); + const cleanAlt = alt.trim(); + return `image::${cleanedUrl}[${cleanAlt ? cleanAlt + ',' : ''}width=100%]`; + }); + + // Bare image URLs (only if not already in a link or image tag) + if (format === ContentFormat.Markdown || format === ContentFormat.Plain) { + const imageUrlPattern = /(?"{}|\\^`\[\]()]+\.(jpeg|jpg|png|gif|webp|svg))/gi; + processed = processed.replace(imageUrlPattern, (match, url) => { + const cleanedUrl = cleanUrl(url); + return `image::${cleanedUrl}[width=100%]`; + }); + } + + return processed; +} + +/** + * Process links (Markdown syntax and bare URLs) + */ +function processLinks(content: string, format: ContentFormat): string { + let processed = content; + + // Markdown link syntax: [text](url) + processed = processed.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, text, url) => { + // Skip if this is already processed as an image + if (text.startsWith('!')) { + return _match; + } + const cleanedUrl = cleanUrl(url); + return `link:${cleanedUrl}[${text}]`; + }); + + // Bare URLs (only for Markdown and Plain formats) + if (format === ContentFormat.Markdown || format === ContentFormat.Plain) { + processed = processBareUrls(processed); + } + + return processed; +} + +/** + * Process bare URLs and convert to link: macros + * Handles http://, https://, www., and wss:// URLs + */ +function processBareUrls(content: string): string { + // URL pattern: matches http://, https://, www., and wss:// + // Negative lookbehind to avoid matching URLs after ":" (e.g., "hyperlink: www.example.com") + const urlPattern = /(?"{}|\\^`\[\]()]+|wss:\/\/[^\s<>"{}|\\^`\[\]()]+|www\.[^\s<>"{}|\\^`\[\]()]+)/gi; + + return content.replace(urlPattern, (match, url) => { + // Skip if already in a link or image macro + if (match.includes('link:') || match.includes('image::')) { + return match; + } + + let fullUrl = url; + let displayText = url; + + // Handle www. URLs + if (url.startsWith('www.')) { + fullUrl = 'https://' + url; + displayText = url; + } + // Handle wss:// URLs - convert to https:// for the link, but keep wss:// in display + else if (url.startsWith('wss://')) { + fullUrl = url.replace(/^wss:\/\//, 'https://'); + displayText = url; // Keep wss:// in display text + } + + // Clean the URL (remove tracking parameters) + fullUrl = cleanUrl(fullUrl); + + // Create AsciiDoc link macro + return `link:${fullUrl}[${displayText}]`; + }); } /** * Clean URL by removing tracking parameters - * Based on jumble's cleanUrl function */ function cleanUrl(url: string): string { try { const parsedUrl = new URL(url); - // List of tracking parameter prefixes and exact names to remove + // List of tracking parameters to remove const trackingParams = [ // Google Analytics & Ads 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', @@ -84,734 +312,19 @@ function cleanUrl(url: string): string { } } -export interface ConvertOptions { - enableNostrAddresses?: boolean; -} - /** - * Converts content to AsciiDoc format based on detected format - * This is the unified entry point - everything becomes AsciiDoc - */ -export function convertToAsciidoc( - content: string, - format: ContentFormat, - linkBaseURL: string, - options: ConvertOptions = {} -): string { - let asciidoc = ''; - - switch (format) { - case ContentFormat.AsciiDoc: - // For AsciiDoc content, ensure proper formatting - asciidoc = content.replace(/\\n/g, '\n'); - - // Ensure headers are on their own lines with proper spacing - asciidoc = asciidoc.replace(/(\S[^\n]*)\n(={1,6}\s+[^\n]+)/g, (_match, before, header) => { - return `${before}\n\n${header}`; - }); - break; - - case ContentFormat.Wikipedia: - asciidoc = convertWikipediaToAsciidoc(content); - break; - - case ContentFormat.Markdown: - asciidoc = convertMarkdownToAsciidoc(content); - break; - - case ContentFormat.Plain: - default: - asciidoc = convertPlainTextToAsciidoc(content); - break; - } - - // Process special elements for all content types - // Process wikilinks - asciidoc = processWikilinks(asciidoc, linkBaseURL); - - // Process nostr: addresses if enabled - if (options.enableNostrAddresses !== false) { - asciidoc = processNostrAddresses(asciidoc, linkBaseURL); - } - - // Process media URLs in markdown links/images first (before converting to AsciiDoc) - // This ensures media URLs in [text](url) or ![alt](url) format are detected - asciidoc = processMediaUrlsInMarkdown(asciidoc); - - // Process media URLs (YouTube, Spotify, video, audio files) - for bare URLs - asciidoc = processMediaUrls(asciidoc); - - // Process bare URLs (convert to AsciiDoc links) - asciidoc = processBareUrls(asciidoc); - - // Process hashtags (after URLs to avoid conflicts) - asciidoc = processHashtags(asciidoc); - - return asciidoc; -} - -/** - * Converts Wikipedia markup to AsciiDoc format - * Handles Wikipedia-style headings, links, and formatting - */ -function convertWikipediaToAsciidoc(content: string): string { - let asciidoc = content.replace(/\\n/g, '\n'); - - // Convert Wikipedia headings: == Heading == to AsciiDoc == Heading - // Wikipedia uses == for level 2, === for level 3, etc. - // AsciiDoc uses = for title, == for level 1, === for level 2, etc. - // So Wikipedia level 2 (==) maps to AsciiDoc level 1 (==) - asciidoc = asciidoc.replace(/^(=+)\s+(.+?)\s+\1$/gm, (match, equals, heading) => { - const level = equals.length - 1; // Count = signs, subtract 1 for AsciiDoc mapping - const asciidocEquals = '='.repeat(level + 1); // AsciiDoc uses one more = for same level - return `${asciidocEquals} ${heading.trim()}`; - }); - - // Convert Wikipedia bold: ''text'' to AsciiDoc *text* - asciidoc = asciidoc.replace(/''([^']+)''/g, '*$1*'); - - // Convert Wikipedia italic: 'text' to AsciiDoc _text_ - // Be careful not to match apostrophes in words - asciidoc = asciidoc.replace(/(^|[^'])'([^']+)'([^']|$)/g, '$1_$2_$3'); - - // Convert Wikipedia links: [[Page]] or [[Page|Display]] to wikilinks - // These will be processed by processWikilinks later, but we need to ensure - // they're in the right format. Wikipedia links are already in [[...]] format - // which matches our wikilink format, so they should work as-is. - - // Convert Wikipedia external links: [URL text] to AsciiDoc link:URL[text] - asciidoc = asciidoc.replace(/\[(https?:\/\/[^\s\]]+)\s+([^\]]+)\]/g, 'link:$1[$2]'); - asciidoc = asciidoc.replace(/\[(https?:\/\/[^\s\]]+)\]/g, 'link:$1[$1]'); - - // Convert Wikipedia lists (they use * or # similar to Markdown) - // This is handled similarly to Markdown, so we can reuse that logic - // But Wikipedia also uses : for definition lists and ; for term lists - // For now, we'll handle basic lists and let AsciiDoc handle the rest - - // Convert horizontal rules: ---- to AsciiDoc ''' - asciidoc = asciidoc.replace(/^----+$/gm, "'''"); - - return asciidoc; -} - -/** - * Converts Markdown to AsciiDoc format - * Based on jumble's conversion patterns + * Convert Markdown-specific syntax to AsciiDoc */ function convertMarkdownToAsciidoc(content: string): string { - let asciidoc = content.replace(/\\n/g, '\n'); - - // Fix spacing issues (but be careful not to break links and images) - // Process these BEFORE converting links/images to avoid conflicts - asciidoc = asciidoc.replace(/`([^`\n]+)`\s*\(([^)]+)\)/g, '`$1` ($2)'); - asciidoc = asciidoc.replace(/([a-zA-Z0-9])`([^`\n]+)`([a-zA-Z0-9])/g, '$1 `$2` $3'); - asciidoc = asciidoc.replace(/([a-zA-Z0-9])`([^`\n]+)`\s*\(/g, '$1 `$2` ('); - asciidoc = asciidoc.replace(/\)`([^`\n]+)`([a-zA-Z0-9])/g, ') `$1` $2'); - asciidoc = asciidoc.replace(/([a-zA-Z0-9])\)([a-zA-Z0-9])/g, '$1) $2'); - // Add space before == but not if it's part of a markdown link pattern - // Check that == is not immediately after ]( which would be a link - asciidoc = asciidoc.replace(/([a-zA-Z0-9])(? 🏕️) - // Only convert if node-emoji is available - if (emoji && emoji.emojify) { - asciidoc = emoji.emojify(asciidoc); - } - - // Convert code blocks (handle both \n and \r\n line endings) - // Special handling for diagram languages: latex, plantuml, puml, bpmn - asciidoc = asciidoc.replace(/```(\w+)?\r?\n([\s\S]*?)\r?\n```/g, (_match, lang, code) => { - const trimmedCode = code.trim(); - if (trimmedCode.length === 0) return ''; - - const langLower = lang ? lang.toLowerCase() : ''; - - // If it's a latex code block, always treat as code (not math) - if (langLower === 'latex') { - return `[source,latex]\n----\n${trimmedCode}\n----`; - } - - // Handle PlantUML diagrams - if (langLower === 'plantuml' || langLower === 'puml') { - // Check if it already has @startuml/@enduml or @startbpmn/@endbpmn - if (trimmedCode.includes('@start') || trimmedCode.includes('@end')) { - return `[plantuml]\n----\n${trimmedCode}\n----`; - } - // If not, wrap it in @startuml/@enduml - return `[plantuml]\n----\n@startuml\n${trimmedCode}\n@enduml\n----`; - } - - // Handle BPMN diagrams (using PlantUML BPMN syntax) - if (langLower === 'bpmn') { - // Check if it already has @startbpmn/@endbpmn - if (trimmedCode.includes('@startbpmn') && trimmedCode.includes('@endbpmn')) { - return `[plantuml]\n----\n${trimmedCode}\n----`; - } - // If not, wrap it in @startbpmn/@endbpmn - return `[plantuml]\n----\n@startbpmn\n${trimmedCode}\n@endbpmn\n----`; - } - - // Check if it's ABC notation (starts with X:) - if (!lang && /^X:\s*\d+/m.test(trimmedCode)) { - // ABC notation - keep as plain text block, will be processed by music processor - return `----\n${trimmedCode}\n----`; - } - - const hasCodePatterns = /[{}();=<>]|function|class|import|export|def |if |for |while |return |const |let |var |public |private |static |console\.log/.test(trimmedCode); - const isLikelyText = /^[A-Za-z\s.,!?\-'"]+$/.test(trimmedCode) && trimmedCode.length > 50; - const hasTooManySpaces = (trimmedCode.match(/\s{3,}/g) || []).length > 3; - const hasMarkdownPatterns = /^#{1,6}\s|^\*\s|^\d+\.\s|^\>\s|^\|.*\|/.test(trimmedCode); - - if ((!hasCodePatterns && trimmedCode.length > 100) || isLikelyText || hasTooManySpaces || hasMarkdownPatterns) { - return _match; - } - - return `[source${lang ? ',' + lang : ''}]\n----\n${trimmedCode}\n----`; - }); - - // Handle inline code: LaTeX formulas in inline code should be rendered as math - // Pattern: `$formula$` should become $formula$ (math), not code - // Handle escaped brackets: `$[ ... \]$` and `$[\sqrt{...}\]$` - asciidoc = asciidoc.replace(/`(\$[^`]+\$)`/g, (match, formula) => { - // Extract the formula (remove the $ signs) - const mathContent = formula.slice(1, -1); - return `$${mathContent}$`; // Return as math, not code - }); - asciidoc = asciidoc.replace(/`([^`]+)`/g, '`$1`'); // Regular inline code - - // Convert nested image links first: [![alt](img)](url) - image wrapped in link - // This must come before regular image processing - asciidoc = asciidoc.replace(/\[!\[([^\]]*)\]\(([^)]+?)\)\]\(([^)]+?)\)/g, (match, alt, imgUrl, linkUrl) => { - const cleanImgUrl = imgUrl.trim(); - const cleanLinkUrl = linkUrl.trim(); - const cleanAlt = alt.trim(); - - // Check if linkUrl is a media URL - if (cleanLinkUrl.startsWith('MEDIA:')) { - return cleanLinkUrl; // Return the placeholder as-is - } - - // Create a link with an image inside - don't escape brackets in URLs - // AsciiDoc can handle URLs with brackets if they're in the URL part - return `link:${cleanLinkUrl}[image:${cleanImgUrl}[${cleanAlt ? cleanAlt : 'link'}]]`; - }); - - // Convert images (but not nested ones, which we already processed) - // Match: ![alt text](url) or ![](url) - handle empty alt text - // Use negative lookbehind to avoid matching nested image links - // Format: image::url[alt,width=100%] - matching jumble's format - asciidoc = asciidoc.replace(/(? { - let processedUrl = url.trim(); - const cleanAlt = alt.trim(); - - // Check if it's already a MEDIA: placeholder (processed by processMediaUrlsInMarkdown) - if (processedUrl.startsWith('MEDIA:')) { - return processedUrl; // Return the placeholder as-is - } - - // Clean URL (remove tracking parameters) - processedUrl = cleanUrl(processedUrl); - - // Regular image - match jumble's format: image::url[alt,width=100%] - // Don't escape brackets - AsciiDoc handles URLs properly - return `image::${processedUrl}[${cleanAlt ? cleanAlt + ',' : ''}width=100%]`; - }); - - // Convert anchor links: [text](#section-id) - these are internal links - asciidoc = asciidoc.replace(/(? { - const cleanText = text.trim(); - const cleanAnchor = anchor.trim(); - // AsciiDoc uses # for anchor links, but we need to normalize the anchor ID - // Convert to lowercase and replace spaces/special chars with hyphens - const normalizedAnchor = cleanAnchor.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''); - const escapedText = cleanText.replace(/([\[\]])/g, '\\$1'); - return `<<${normalizedAnchor},${escapedText}>>`; - }); - - // Convert links (but not images or anchor links, which we already processed) - // Match: [text](url) - use negative lookbehind to avoid matching images - // Use non-greedy matching for URL to stop at first closing paren - // This ensures we don't capture trailing punctuation - asciidoc = asciidoc.replace(/(? { - let processedUrl = url.trim(); - const cleanText = text.trim(); - - // Check if it's already a MEDIA: placeholder (processed by processMediaUrlsInMarkdown) - if (processedUrl.startsWith('MEDIA:')) { - return processedUrl; // Return the placeholder as-is - } - - // Clean URL (remove tracking parameters) - processedUrl = cleanUrl(processedUrl); - - // Handle WSS URLs: convert wss:// to https:// for display - if (processedUrl.startsWith('wss://')) { - processedUrl = processedUrl.replace(/^wss:\/\//, 'https://'); - } - - // Regular link - don't escape brackets in URLs (AsciiDoc handles them) - // Only escape brackets in the link text if needed - const escapedText = cleanText.replace(/([\[\]])/g, '\\$1'); - return `link:${processedUrl}[${escapedText}]`; - }); - - // Convert horizontal rules - asciidoc = asciidoc.replace(/^---$/gm, '\'\'\''); - asciidoc = asciidoc.replace(/^\*\*\*$/gm, '\'\'\''); // Also handle *** - - // Convert lists - need to process them as blocks to preserve structure - // First, convert task lists (before regular lists) - // Task lists: - [x] or - [ ] or * [x] or * [ ] - asciidoc = asciidoc.replace(/^(\s*)([-*])\s+\[([ x])\]\s+(.+)$/gm, (_match, indent, bullet, checked, text) => { - // Use AsciiDoc checkbox syntax: * [x] Task text - // The checkbox will be rendered by AsciiDoctor - return `${indent}* [${checked === 'x' ? 'x' : ' '}] ${text}`; - }); - - // Convert lists - process entire list blocks to ensure proper AsciiDoc formatting - // AsciiDoc lists need to be on their own lines with proper spacing - // Process lists in blocks to handle nested lists correctly - const lines = asciidoc.split('\n'); - const processedLines: string[] = []; - let inList = false; - let listType: 'unordered' | 'ordered' | null = null; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - const isEmpty = line.trim() === ''; - const prevLine = i > 0 ? processedLines[processedLines.length - 1] : ''; - const prevLineIsEmpty = prevLine.trim() === ''; - - // Check if this line is a list item (but not a task list, which we already processed) - const unorderedMatch = line.match(/^(\s*)([-*+])\s+(.+)$/); - const orderedMatch = line.match(/^(\s*)(\d+)\.\s+(.+)$/); - const isTaskList = line.match(/^(\s*)([-*])\s+\[([ x])\]\s+(.+)$/); - - if (unorderedMatch && !isTaskList) { - const [, indent, , text] = unorderedMatch; - const indentLevel = indent.length; - // AsciiDoc uses 4 spaces per indentation level - // Markdown typically uses 2 or 4 spaces per level - // 2 spaces = 1 level (4 spaces), 4 spaces = 1 level (4 spaces) - const asciidocIndent = ' '.repeat(Math.ceil(indentLevel / 4)); - - // Add blank line before list if not already in a list - // But don't add blank line if we're switching list types within the same list context - if (!inList) { - // Starting a new list - add blank line if previous line has content - if (processedLines.length > 0 && !prevLineIsEmpty) { - processedLines.push(''); - } - inList = true; - listType = 'unordered'; - } else if (listType !== 'unordered') { - // Switching list types - don't add blank line, just change type - listType = 'unordered'; - } - - processedLines.push(`${asciidocIndent}* ${text}`); - } else if (orderedMatch) { - const [, indent, , text] = orderedMatch; - const indentLevel = indent.length; - // AsciiDoc uses 4 spaces per indentation level - // Markdown typically uses 2 or 4 spaces per level - // 2 spaces = 1 level (4 spaces), 4 spaces = 1 level (4 spaces) - const asciidocIndent = ' '.repeat(Math.ceil(indentLevel / 4)); - - // Add blank line before list if not already in a list - // But don't add blank line if we're switching list types within the same list context - if (!inList) { - // Starting a new list - add blank line if previous line has content - if (processedLines.length > 0 && !prevLineIsEmpty) { - processedLines.push(''); - } - inList = true; - listType = 'ordered'; - } else if (listType !== 'ordered') { - // Switching list types - don't add blank line, just change type - listType = 'ordered'; - } - - processedLines.push(`${asciidocIndent}. ${text}`); - } else { - // Not a list item - if (inList && !isEmpty) { - // End of list - add blank line after if the next line is not empty - if (i < lines.length - 1 && lines[i + 1].trim() !== '') { - processedLines.push(''); - } - inList = false; - listType = null; - } - processedLines.push(line); - } - } - - asciidoc = processedLines.join('\n'); - - // Convert blockquotes with attribution - asciidoc = asciidoc.replace(/^(>\s+.+(?:\n>\s+.+)*)/gm, (match) => { - const lines = match.split('\n').map(line => line.replace(/^>\s*/, '')); - - let quoteBodyLines: string[] = []; - let attributionLine: string | undefined; - - for (let i = lines.length - 1; i >= 0; i--) { - const line = lines[i].trim(); - if (line.startsWith('—') || line.startsWith('--')) { - attributionLine = line; - quoteBodyLines = lines.slice(0, i); - break; - } - } - - const quoteContent = quoteBodyLines.filter(l => l.trim() !== '').join('\n').trim(); - - if (attributionLine) { - let cleanedAttribution = attributionLine.replace(/^[—-]+/, '').trim(); - - let author = ''; - let source = ''; - - const linkMatch = cleanedAttribution.match(/^(.*?),?\s*link:([^[\\]]+)\[([^\\]]+)\]$/); - - if (linkMatch) { - author = linkMatch[1].trim(); - source = `link:${linkMatch[2].trim()}[${linkMatch[3].trim()}]`; - } else { - const parts = cleanedAttribution.split(',').map(p => p.trim()); - author = parts[0]; - if (parts.length > 1) { - source = parts.slice(1).join(', ').trim(); - } - } - - return `[quote, ${author}, ${source}]\n____\n${quoteContent}\n____`; - } else { - return `____\n${quoteContent}\n____`; - } - }); - - // Convert tables with alignment support - asciidoc = asciidoc.replace(/(\|.*\|[\r\n]+\|[\s\-\|:]*[\r\n]+(\|.*\|[\r\n]+)*)/g, (match) => { - const lines = match.trim().split('\n').filter(line => line.trim()); - if (lines.length < 2) return match; - - const headerRow = lines[0]; - const separatorRow = lines[1]; - const dataRows = lines.slice(2); - - if (!separatorRow.includes('-')) return match; - - // Parse alignment from separator row - // :--- = left, :----: = center, ---: = right, --- = default - const cells = separatorRow.split('|').filter(c => c.trim()); - const alignments: string[] = []; - - cells.forEach((cell, index) => { - const trimmed = cell.trim(); - if (trimmed.startsWith(':') && trimmed.endsWith(':')) { - alignments[index] = '^'; // center (AsciiDoc uses ^ for center) - } else if (trimmed.endsWith(':')) { - alignments[index] = '>'; // right - } else if (trimmed.startsWith(':')) { - alignments[index] = '<'; // left (explicit) - } else { - alignments[index] = '<'; // default left - } - }); - - // Build cols attribute with alignments - const colsAttr = alignments.length > 0 - ? `[cols="${alignments.join(',')}"]` - : ''; - - let tableAsciidoc = colsAttr ? `${colsAttr}\n` : ''; - tableAsciidoc += '|===\n'; - tableAsciidoc += headerRow + '\n'; - dataRows.forEach(row => { - tableAsciidoc += row + '\n'; - }); - tableAsciidoc += '|==='; - - return tableAsciidoc; - }); - - // Convert footnotes - const footnoteDefinitions: { [id: string]: string } = {}; - let tempAsciidoc = asciidoc; - - tempAsciidoc = tempAsciidoc.replace(/^\[\^([^\]]+)\]:\s*([\s\S]*?)(?=\n\[\^|\n---|\n##|\n###|\n####|\n#####|\n######|$)/gm, (_, id, text) => { - footnoteDefinitions[id] = text.trim(); - return ''; - }); - - asciidoc = tempAsciidoc.replace(/\[\^([^\]]+)\]/g, (match, id) => { - if (footnoteDefinitions[id]) { - return `footnote:[${footnoteDefinitions[id]}]`; - } - return match; - }); - - return asciidoc; -} - -/** - * Converts plain text to AsciiDoc format - * Preserves line breaks by converting single newlines to line continuations - */ -function convertPlainTextToAsciidoc(content: string): string { - // Preserve double newlines (paragraph breaks) - // Convert single newlines to line continuations ( +\n) - return content - .replace(/\r\n/g, '\n') // Normalize line endings - .replace(/\n\n+/g, '\n\n') // Normalize multiple newlines to double - .replace(/([^\n])\n([^\n])/g, '$1 +\n$2'); // Single newlines become line continuations -} - -/** - * Normalizes text to d-tag format - */ -function normalizeDtag(text: string): string { - return text - .toLowerCase() - .replace(/[^a-z0-9]+/g, '-') - .replace(/^-+|-+$/g, ''); -} - -/** - * Processes wikilinks: [[target]] or [[target|display text]] - * Converts to WIKILINK: placeholder format to protect from AsciiDoc processing - */ -function processWikilinks(content: string, linkBaseURL: string): string { - // Process bookstr macro wikilinks: [[book::...]] - content = content.replace(/\[\[book::([^\]]+)\]\]/g, (_match, bookContent) => { - const cleanContent = bookContent.trim(); - return `BOOKSTR:${cleanContent}`; - }); - - // Process standard wikilinks: [[Target Page]] or [[target page|see this]] - // Use placeholder format to prevent AsciiDoc from processing the brackets - content = content.replace(/\[\[([^|\]]+)(?:\|([^\]]+))?\]\]/g, (_match, target, displayText) => { - const cleanTarget = target.trim(); - const cleanDisplay = displayText ? displayText.trim() : cleanTarget; - const dTag = normalizeDtag(cleanTarget); - - // Use placeholder format: WIKILINK:dtag|display - // This prevents AsciiDoc from interpreting the brackets - return `WIKILINK:${dTag}|${cleanDisplay}`; - }); - + // Most Markdown syntax is handled by AsciiDoctor's markdown support + // This function can be extended for additional conversions if needed return content; } /** - * Processes nostr: addresses - * Only processes addresses with "nostr:" prefix - bare addresses are left as plaintext - * Converts to link:nostr:...[...] format - * Valid bech32 prefixes: npub, nprofile, nevent, naddr, note - */ -function processNostrAddresses(content: string, linkBaseURL: string): string { - // Match nostr: followed by valid bech32 prefix and identifier - // Bech32 format: prefix + separator (1) + data (at least 6 chars for valid identifiers) - // Only match if it has "nostr:" prefix - bare addresses should remain as plaintext - const nostrPattern = /nostr:((?:npub|nprofile|nevent|naddr|note)1[a-z0-9]{6,})/gi; - return content.replace(nostrPattern, (_match, bech32Id) => { - return `link:nostr:${bech32Id}[${bech32Id}]`; - }); -} - -/** - * Processes media URLs in markdown links and images - * Converts them to MEDIA: placeholders before markdown conversion + * Convert Wikipedia-specific syntax to AsciiDoc */ -function processMediaUrlsInMarkdown(content: string): string { - let processed = content; - - // Process YouTube URLs in markdown links: [text](youtube-url) - processed = processed.replace(/\[([^\]]+)\]\((?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|v\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:[?&][^?\s<>"{}|\\^`\[\]()]*)?\)/gi, (_match, text, videoId) => { - return `MEDIA:youtube:${videoId}`; - }); - - // Process Spotify URLs in markdown links: [text](spotify-url) - processed = processed.replace(/\[([^\]]+)\]\((?:https?:\/\/)?(?:open\.)?spotify\.com\/(track|album|playlist|artist|episode|show)\/([a-zA-Z0-9]+)(?:[?&][^?\s<>"{}|\\^`\[\]()]*)?\)/gi, (_match, text, type, id) => { - return `MEDIA:spotify:${type}:${id}`; - }); - - // Process video files in markdown links/images: [text](video-url) or ![alt](video-url) - processed = processed.replace(/[!]?\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+\.(mp4|webm|ogg|m4v|mov|avi|mkv|flv|wmv))(?:\?[^\s<>"{}|\\^`\[\]()]*)?\)/gi, (_match, altOrText, url) => { - const cleanUrl = url.replace(/\?.*$/, ''); // Remove query params - return `MEDIA:video:${cleanUrl}`; - }); - - // Process audio files in markdown links/images: [text](audio-url) or ![alt](audio-url) - processed = processed.replace(/[!]?\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+\.(mp3|m4a|ogg|wav|flac|aac|opus|wma))(?:\?[^\s<>"{}|\\^`\[\]()]*)?\)/gi, (_match, altOrText, url) => { - const cleanUrl = url.replace(/\?.*$/, ''); // Remove query params - return `MEDIA:audio:${cleanUrl}`; - }); - - return processed; -} - -/** - * Processes media URLs (YouTube, Spotify, video, audio files) in bare URLs - * Converts them to placeholders that will be rendered as embeds/players - */ -function processMediaUrls(content: string): string { - // Process YouTube URLs - // Match: youtube.com/watch?v=, youtu.be/, youtube.com/embed/, youtube.com/v/ - content = content.replace(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|v\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:[?&][^?\s<>"{}|\\^`\[\]()]*)?/gi, (match, videoId) => { - return `MEDIA:youtube:${videoId}`; - }); - - // Process Spotify URLs - // Match: open.spotify.com/track/, open.spotify.com/album/, open.spotify.com/playlist/, open.spotify.com/artist/ - content = content.replace(/(?:https?:\/\/)?(?:open\.)?spotify\.com\/(track|album|playlist|artist|episode|show)\/([a-zA-Z0-9]+)(?:[?&][^?\s<>"{}|\\^`\[\]()]*)?/gi, (match, type, id) => { - return `MEDIA:spotify:${type}:${id}`; - }); - - // Process video files (mp4, webm, ogg, m4v, mov, avi, etc.) - content = content.replace(/(?:https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\.(mp4|webm|ogg|m4v|mov|avi|mkv|flv|wmv)(?:\?[^\s<>"{}|\\^`\[\]()]*)?/gi, (match, ext) => { - const url = match.replace(/\?.*$/, ''); // Remove query params for cleaner URL - return `MEDIA:video:${url}`; - }); - - // Process audio files (mp3, m4a, ogg, wav, flac, aac, etc.) - content = content.replace(/(?:https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\.(mp3|m4a|ogg|wav|flac|aac|opus|wma)(?:\?[^\s<>"{}|\\^`\[\]()]*)?/gi, (match, ext) => { - const url = match.replace(/\?.*$/, ''); // Remove query params for cleaner URL - return `MEDIA:audio:${url}`; - }); - - return content; -} - -/** - * Processes bare URLs and converts them to AsciiDoc links - * Matches http://, https://, wss://, and www. URLs that aren't already in markdown links - * Also handles bare image URLs (converts to images) - * Skips URLs inside code blocks (---- blocks) and inline code (backticks) - */ -function processBareUrls(content: string): string { - // Protect code blocks and inline code from URL processing - // We'll process URLs, then restore code blocks - const codeBlockPlaceholders: string[] = []; - const inlineCodePlaceholders: string[] = []; - - // Replace code blocks with placeholders - content = content.replace(/\[source[^\]]*\]\n----\n([\s\S]*?)\n----/g, (match, code) => { - const placeholder = `__CODEBLOCK_${codeBlockPlaceholders.length}__`; - codeBlockPlaceholders.push(match); - return placeholder; - }); - - // Also handle plain code blocks (without [source]) - content = content.replace(/----\n([\s\S]*?)\n----/g, (match, code) => { - // Check if this is already a placeholder - if (match.includes('__CODEBLOCK_')) { - return match; - } - const placeholder = `__CODEBLOCK_${codeBlockPlaceholders.length}__`; - codeBlockPlaceholders.push(match); - return placeholder; - }); - - // Replace inline code with placeholders - content = content.replace(/`([^`]+)`/g, (match, code) => { - const placeholder = `__INLINECODE_${inlineCodePlaceholders.length}__`; - inlineCodePlaceholders.push(match); - return placeholder; - }); - - // First, handle bare image URLs (before regular URLs) - // Match image URLs: .jpg, .png, .gif, .webp, .svg, etc. - // Format: image::url[width=100%] - matching jumble's format - const imageUrlPattern = /(?"{}|\\^`\[\]()]+\.(jpe?g|png|gif|webp|svg|bmp|ico))(?:\?[^\s<>"{}|\\^`\[\]()]*)?/gi; - content = content.replace(imageUrlPattern, (match, url) => { - // Clean URL (remove tracking parameters) - const cleanedUrl = cleanUrl(url); - // Don't escape brackets - AsciiDoc handles URLs properly - return `image::${cleanedUrl}[width=100%]`; - }); - - // Match URLs that aren't already in markdown link format - // Pattern: http://, https://, wss://, or www. followed by valid URL characters - // Use word boundary to avoid matching URLs that are part of other text - // Don't match if immediately after colon-space (like "hyperlink: www.example.com") - const urlPattern = /(?"{}|\\^`\[\]()]+|wss:\/\/[^\s<>"{}|\\^`\[\]()]+|www\.[^\s<>"{}|\\^`\[\]()]+)/gi; - - content = content.replace(urlPattern, (match, url) => { - // Skip if this URL was already converted to an image - if (match.includes('image::')) { - return match; - } - - // Ensure URL starts with http:// or https:// - let fullUrl = url; - if (url.startsWith('www.')) { - fullUrl = 'https://' + url; - } else if (url.startsWith('wss://')) { - // Convert wss:// to https:// for display - fullUrl = url.replace(/^wss:\/\//, 'https://'); - } - - // Clean URL (remove tracking parameters) - fullUrl = cleanUrl(fullUrl); - - // Don't escape brackets in URLs - AsciiDoc handles them properly - // The URL is in the link: part, brackets in URLs are valid - // Use proper AsciiDoc link syntax: link:url[text] - return `link:${fullUrl}[${url}]`; - }); - - // Restore inline code - inlineCodePlaceholders.forEach((code, index) => { - content = content.replace(`__INLINECODE_${index}__`, code); - }); - - // Restore code blocks - codeBlockPlaceholders.forEach((code, index) => { - content = content.replace(`__CODEBLOCK_${index}__`, code); - }); - +function convertWikipediaToAsciidoc(content: string): string { + // Wikipedia-specific conversions can be added here return content; } - -/** - * Processes hashtags - * Converts to hashtag:tag[#tag] format - * Handles hashtags at the beginning of lines to prevent line breaks - */ -function processHashtags(content: string): string { - // Match # followed by word characters - // Match at word boundary OR at start of line OR after whitespace - // This ensures we don't match # in URLs or code, but do match at line start - return content.replace(/(^|\s|>)#([a-zA-Z0-9_]+)(?![a-zA-Z0-9_])/g, (match, before, hashtag) => { - const normalizedHashtag = hashtag.toLowerCase(); - // Preserve the space or line start before the hashtag to prevent line breaks - // Add a zero-width space or ensure proper spacing - const prefix = before === '' ? '' : before; - return `${prefix}hashtag:${normalizedHashtag}[#${hashtag}]`; - }); -} diff --git a/src/processors/asciidoc.ts b/src/processors/asciidoc.ts index 14fd66a..342402b 100644 --- a/src/processors/asciidoc.ts +++ b/src/processors/asciidoc.ts @@ -1,9 +1,18 @@ -import asciidoctor from '@asciidoctor/core'; import { ProcessResult } from '../types'; import { extractTOC, sanitizeHTML, processLinks } from './html-utils'; import { postProcessHtml } from './html-postprocess'; -const asciidoctorInstance = asciidoctor(); +// Lazy-load AsciiDoctor instance to avoid issues with Jest module transformation +// Use dynamic import to prevent Jest from trying to transform the Opal runtime +let asciidoctorInstance: any = null; + +async function getAsciidoctorInstance() { + if (!asciidoctorInstance) { + const asciidoctor = await import('@asciidoctor/core'); + asciidoctorInstance = asciidoctor.default(); + } + return asciidoctorInstance; +} export interface ProcessOptions { enableCodeHighlighting?: boolean; @@ -43,7 +52,8 @@ export async function processAsciidoc( } try { - const result = asciidoctorInstance.convert(content, { + const instance = await getAsciidoctorInstance(); + const result = instance.convert(content, { safe: 'safe', backend: 'html5', doctype: doctype, diff --git a/src/processors/html-postprocess.js b/src/processors/html-postprocess.js index 3ddef1c..3489302 100644 --- a/src/processors/html-postprocess.js +++ b/src/processors/html-postprocess.js @@ -70,6 +70,57 @@ function postProcessHtml(html, options = {}) { const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); return `${escapedDisplay}`; }); + // Convert any leftover link: macros that AsciiDoctor didn't convert + // This MUST run before processOpenGraphLinks which removes "link:" prefixes + // This handles cases where AsciiDoctor couldn't parse the link (e.g., link text with special chars) + // Pattern: link:url[text] where url is http/https and text can contain any characters + // Match link: macros that are still in the HTML as plain text (not converted by AsciiDoctor) + // Also handle HTML-escaped versions that might appear + processed = processed.replace(/link:(https?:\/\/[^\[]+)\[([^\]]+)\]/g, (_match, url, text) => { + // Unescape if already HTML-escaped (but be careful not to unescape actual content) + let unescapedUrl = url; + // Only unescape if it looks like it was escaped (contains & or ") + if (url.includes('&') || url.includes('"') || url.includes(''')) { + unescapedUrl = url + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, "'"); + } + let unescapedText = text; + // Only unescape if it looks like it was escaped + if (text.includes('&') || text.includes('<') || text.includes('>') || text.includes('"') || text.includes(''')) { + unescapedText = text + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, "'"); + } + // Escape URL for HTML attribute (fresh escape, no double-escaping) + const escapedUrl = unescapedUrl + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, '''); + // Escape text content for HTML (fresh escape, no double-escaping) + const escapedText = unescapedText + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + // Check if link text contains wss:// or ws:// - these are relay URLs, don't add OpenGraph + const isRelayUrl = /wss?:\/\//i.test(unescapedText); + if (isRelayUrl) { + // Simple link without OpenGraph wrapper + return `${escapedText} `; + } + else { + // Regular link - will be processed by OpenGraph handler if external + return `${escapedText} `; + } + }); // Convert nostr: links to HTML processed = processed.replace(/link:nostr:([^[]+)\[([^\]]+)\]/g, (_match, bech32Id, displayText) => { const nostrType = getNostrType(bech32Id); @@ -89,39 +140,57 @@ function postProcessHtml(html, options = {}) { return `${displayText}`; } }); - // Convert any leftover link: macros that AsciiDoctor didn't convert - // This handles cases where AsciiDoctor couldn't parse the link (e.g., link text with special chars) - // Pattern: link:url[text] where url is http/https and text can contain any characters - processed = processed.replace(/link:(https?:\/\/[^\[]+)\[([^\]]+)\]/g, (_match, url, text) => { - // Escape URL and text for HTML attributes + // Process media URLs (YouTube, Spotify, video, audio) + processed = processMedia(processed); + // Fix double-escaped quotes in href attributes FIRST (before any other processing) + // This fixes href=""url"" -> href="url" + processed = processed.replace(/href\s*=\s*["']"(https?:\/\/[^"']+)"["']/gi, (_match, url) => { const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); - const escapedText = text + return `href="${escapedUrl}"`; + }); + // Process OpenGraph links (external links that should have rich previews) + processed = processOpenGraphLinks(processed, options.linkBaseURL); + // Process images: add max-width styling and data attributes + processed = processImages(processed); + // Process musical notation if enabled + if (options.enableMusicalNotation) { + processed = (0, music_1.processMusicalNotation)(processed); + } + // Clean up any escaped HTML that appears as text (e.g., <a href=...>) + // This can happen when AsciiDoctor escapes link macros that it couldn't parse + // Pattern: <a href="url">text</a> should be converted to actual HTML + // Use a more flexible pattern that handles text with special characters like :// + // Fix regular escaped HTML links + processed = processed.replace(/<a\s+href=["'](https?:\/\/[^"']+)["']\s*>([^<]+)<\/a>/gi, (_match, url, text) => { + // Unescape the URL and text + const unescapedUrl = url + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, "'"); + const unescapedText = text + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>'); + // Re-escape properly for HTML + const escapedUrl = unescapedUrl .replace(/&/g, '&') - .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); - // Check if link text contains wss:// or ws:// - these are relay URLs, don't add OpenGraph - const isRelayUrl = /wss?:\/\//i.test(text); + const escapedText = unescapedText + .replace(/&/g, '&') + .replace(//g, '>'); + // Check if link text contains wss:// or ws:// - these are relay URLs + const isRelayUrl = /wss?:\/\//i.test(unescapedText); if (isRelayUrl) { // Simple link without OpenGraph wrapper return `${escapedText} `; } else { - // Regular link - will be processed by OpenGraph handler if external + // Regular link return `${escapedText} `; } }); - // Process media URLs (YouTube, Spotify, video, audio) - processed = processMedia(processed); - // Process OpenGraph links (external links that should have rich previews) - processed = processOpenGraphLinks(processed, options.linkBaseURL); - // Process images: add max-width styling and data attributes - processed = processImages(processed); - // Process musical notation if enabled - if (options.enableMusicalNotation) { - processed = (0, music_1.processMusicalNotation)(processed); - } // Clean up any leftover markdown syntax processed = cleanupMarkdown(processed); // Add styling classes @@ -241,12 +310,20 @@ function processOpenGraphLinks(html, linkBaseURL) { processed = processed.replace(/([^"'>\s])link:([a-zA-Z0-9])/gi, '$1$2'); // Also handle cases where "link:" appears with whitespace before anchor tags processed = processed.replace(/\s+link:\s*(?= href="url" + processed = processed.replace(/href\s*=\s*["']"(https?:\/\/[^"']+)"["']/gi, (match, url) => { + // Extract the clean URL and properly escape it + const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); + return `href="${escapedUrl}"`; + }); + // Clean up href attributes that contain HTML fragments processed = processed.replace(/href\s*=\s*["']([^"']*<[^"']*)["']/gi, (match, corruptedHref) => { // If href contains HTML tags, extract just the URL part const urlMatch = corruptedHref.match(/(https?:\/\/[^\s<>"']+)/i); if (urlMatch) { - return `href="${urlMatch[1]}"`; + const escapedUrl = urlMatch[1].replace(/"/g, '"').replace(/'/g, '''); + return `href="${escapedUrl}"`; } return match; // If we can't fix it, leave it (will be skipped by validation) }); @@ -552,17 +629,39 @@ function cleanupMarkdown(html) { return `${altText}`; }); // Clean up markdown link syntax + // Skip if the link is already inside an HTML tag or is part of escaped HTML cleaned = cleaned.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, text, url) => { - if (cleaned.includes(`href="${url}"`)) { + // Skip if this markdown link is already inside an HTML tag + // Check if there's an tag nearby that might have been created from this + if (cleaned.includes(`href="${url}"`) || cleaned.includes(`href='${url}'`)) { + return _match; + } + // Skip if the text contains HTML entities or looks like it's already processed + if (text.includes('<') || text.includes('>') || text.includes('&')) { + return _match; + } + // Skip if the URL is already in an href attribute (check for escaped versions too) + const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); + if (cleaned.includes(`href="${escapedUrl}"`) || cleaned.includes(`href='${escapedUrl}'`)) { return _match; } // Clean URL (remove tracking parameters) const cleanedUrl = cleanUrl(url); - // Escape for HTML attribute - const escapedUrl = cleanedUrl.replace(/"/g, '"').replace(/'/g, '''); - // Escape text for HTML - const escapedText = text.replace(/&/g, '&').replace(//g, '>'); - return `${escapedText} `; + // Escape for HTML attribute (but don't double-escape) + const finalEscapedUrl = cleanedUrl + .replace(/&/g, '&') // Unescape if already escaped + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, '''); + // Escape text for HTML (but don't double-escape) + const escapedText = text + .replace(/&/g, '&') // Unescape if already escaped + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/&/g, '&') + .replace(//g, '>'); + return `${escapedText} `; }); return cleaned; } diff --git a/src/processors/html-postprocess.ts b/src/processors/html-postprocess.ts index 643fc72..4da8dba 100644 --- a/src/processors/html-postprocess.ts +++ b/src/processors/html-postprocess.ts @@ -11,146 +11,153 @@ export interface PostProcessOptions { /** * Post-processes HTML output from AsciiDoctor - * Converts AsciiDoc macros to HTML with data attributes and CSS classes + * + * Processing order (critical for correct rendering): + * 1. Convert placeholders to HTML (BOOKSTR, hashtags, wikilinks, nostr links, media, link macros) + * 2. Fix corrupted HTML (double-escaped quotes, escaped HTML as text, broken links) + * 3. Process OpenGraph links (external links with previews) + * 4. Process images (add styling) + * 5. Process musical notation + * 6. Clean up leftover markdown syntax + * 7. Add styling classes + * 8. Hide raw ToC text */ export function postProcessHtml(html: string, options: PostProcessOptions = {}): string { let processed = html; - // Convert bookstr markers to HTML placeholders - processed = processed.replace(/BOOKSTR:([^<>\s]+)/g, (_match, bookContent) => { - const escaped = bookContent.replace(/"/g, '"').replace(/'/g, '''); + // ============================================ + // STEP 1: Convert placeholders to HTML + // ============================================ + processed = convertBookstrMarkers(processed); + processed = convertHashtags(processed, options); + processed = convertWikilinks(processed, options); + processed = convertNostrLinks(processed); + processed = convertMediaPlaceholders(processed); + processed = convertLinkMacros(processed); + + // ============================================ + // STEP 2: Fix corrupted HTML + // ============================================ + processed = fixDoubleEscapedQuotes(processed); + processed = fixEscapedHtmlLinks(processed); + processed = fixBrokenLinkPatterns(processed); + + // ============================================ + // STEP 3: Process OpenGraph links + // ============================================ + processed = processOpenGraphLinks(processed, options.linkBaseURL); + + // ============================================ + // STEP 4: Process images + // ============================================ + processed = processImages(processed); + + // ============================================ + // STEP 5: Process musical notation + // ============================================ + if (options.enableMusicalNotation) { + processed = processMusicalNotation(processed); + } + + // ============================================ + // STEP 6: Clean up leftover markdown + // ============================================ + processed = cleanupMarkdown(processed); + + // ============================================ + // STEP 7: Add styling classes + // ============================================ + processed = addStylingClasses(processed); + + // ============================================ + // STEP 8: Hide raw ToC text + // ============================================ + processed = hideRawTocText(processed); + + return processed; +} + +// ============================================ +// STEP 1: Convert placeholders to HTML +// ============================================ + +/** + * Convert BOOKSTR markers to HTML placeholders + */ +function convertBookstrMarkers(html: string): string { + return html.replace(/BOOKSTR:([^<>\s]+)/g, (_match, bookContent) => { + const escaped = escapeHtmlAttr(bookContent); return ``; }); +} - // Convert hashtag links to HTML - processed = processed.replace(/hashtag:([^[]+)\[([^\]]+)\]/g, (_match, normalizedHashtag, displayText) => { - // HTML escape the display text - const escapedDisplay = displayText - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); +/** + * Convert hashtag placeholders to HTML + */ +function convertHashtags(html: string, options: PostProcessOptions): string { + return html.replace(/hashtag:([^[]+)\[([^\]]+)\]/g, (_match, normalizedHashtag, displayText) => { + const escapedDisplay = escapeHtml(displayText); - // If hashtagUrl is configured, make it a clickable link if (options.hashtagUrl) { let url: string; if (typeof options.hashtagUrl === 'function') { url = options.hashtagUrl(normalizedHashtag); } else { - // String template with {topic} placeholder url = options.hashtagUrl.replace(/{topic}/g, normalizedHashtag); } - // Escape URL for HTML attribute - const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); + const escapedUrl = escapeHtmlAttr(url); + const escapedTopic = escapeHtmlAttr(normalizedHashtag); - return `${escapedDisplay}`; + return `${escapedDisplay}`; } else { - // Default: Use span instead of tag - same color as links but no underline and not clickable return `${escapedDisplay}`; } }); +} - // Convert WIKILINK:dtag|display placeholder format to HTML - // Match WIKILINK:dtag|display, ensuring we don't match across HTML tags - processed = processed.replace(/WIKILINK:([^|<>]+)\|([^<>\s]+)/g, (_match, dTag, displayText) => { - const escapedDtag = dTag.trim().replace(/"/g, '"'); - const escapedDisplay = displayText.trim() - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); +/** + * Convert wikilink placeholders to HTML + */ +function convertWikilinks(html: string, options: PostProcessOptions): string { + return html.replace(/WIKILINK:([^|<>]+)\|([^<>\s]+)/g, (_match, dTag, displayText) => { + const escapedDtag = escapeHtmlAttr(dTag.trim()); + const escapedDisplay = escapeHtml(displayText.trim()); - // Generate URL using custom format or default let url: string; if (options.wikilinkUrl) { if (typeof options.wikilinkUrl === 'function') { url = options.wikilinkUrl(dTag.trim()); } else { - // String template with {dtag} placeholder url = options.wikilinkUrl.replace(/{dtag}/g, dTag.trim()); } } else { - // Default format url = `/events?d=${escapedDtag}`; } - // Escape URL for HTML attribute - const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); + const escapedUrl = escapeHtmlAttr(url); return `${escapedDisplay}`; }); +} - // Convert nostr: links to HTML - processed = processed.replace(/link:nostr:([^[]+)\[([^\]]+)\]/g, (_match, bech32Id, displayText) => { +/** + * Convert nostr: links to HTML + */ +function convertNostrLinks(html: string): string { + return html.replace(/link:nostr:([^[]+)\[([^\]]+)\]/g, (_match, bech32Id, displayText) => { const nostrType = getNostrType(bech32Id); + const escaped = escapeHtmlAttr(bech32Id); + const escapedDisplay = escapeHtml(displayText); if (nostrType === 'nevent' || nostrType === 'naddr' || nostrType === 'note') { - // Render as embedded event placeholder - const escaped = bech32Id.replace(/"/g, '"'); return `
Loading embedded event...
`; } else if (nostrType === 'npub' || nostrType === 'nprofile') { - // Render as user handle - const escaped = bech32Id.replace(/"/g, '"'); - return `@${displayText}`; - } else { - // Fallback to regular link - const escaped = bech32Id.replace(/"/g, '"'); - return `${displayText}`; - } - }); - - // Convert any leftover link: macros that AsciiDoctor didn't convert - // This handles cases where AsciiDoctor couldn't parse the link (e.g., link text with special chars) - // Pattern: link:url[text] where url is http/https and text can contain any characters - processed = processed.replace(/link:(https?:\/\/[^\[]+)\[([^\]]+)\]/g, (_match, url, text) => { - // Escape URL and text for HTML attributes - const escapedUrl = url.replace(/"/g, '"').replace(/'/g, '''); - const escapedText = text - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); - - // Check if link text contains wss:// or ws:// - these are relay URLs, don't add OpenGraph - const isRelayUrl = /wss?:\/\//i.test(text); - - if (isRelayUrl) { - // Simple link without OpenGraph wrapper - return `${escapedText} `; + return `@${escapedDisplay}`; } else { - // Regular link - will be processed by OpenGraph handler if external - return `${escapedText} `; + return `${escapedDisplay}`; } }); - - // Process media URLs (YouTube, Spotify, video, audio) - processed = processMedia(processed); - - // Process OpenGraph links (external links that should have rich previews) - processed = processOpenGraphLinks(processed, options.linkBaseURL); - - // Process images: add max-width styling and data attributes - processed = processImages(processed); - - // Process musical notation if enabled - if (options.enableMusicalNotation) { - processed = processMusicalNotation(processed); - } - - // Clean up any leftover markdown syntax - processed = cleanupMarkdown(processed); - - // Add styling classes - processed = addStylingClasses(processed); - - // Hide raw ToC text - processed = hideRawTocText(processed); - - return processed; } /** @@ -166,15 +173,14 @@ function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'n } /** - * Process media URLs (YouTube, Spotify, video, audio) - * Converts MEDIA: placeholders to HTML embeds/players + * Convert media placeholders to HTML embeds */ -function processMedia(html: string): string { +function convertMediaPlaceholders(html: string): string { let processed = html; - // Process YouTube embeds + // YouTube embeds processed = processed.replace(/MEDIA:youtube:([a-zA-Z0-9_-]+)/g, (_match, videoId) => { - const escapedId = videoId.replace(/"/g, '"'); + const escapedId = escapeHtmlAttr(videoId); return `
-

- -
-

[Spotify link with pic](

- -
)

-
- - - - - - -
-

Tables

-
-
-

Orderly

-
-

| Syntax | Description | +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | | ----------- | ----------- | | Header | Title | -| Paragraph | Text |

-
-
-
-

Unorderly

-
-

| Syntax | Description | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | | --- | ----------- | | Header | Title | -| Paragraph | Text |

-
-
-
-

With alignment

-
-

| Syntax | Description | Test Text | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | | :--- | :----: | ---: | -| Header | Title | Here_s this | -| Paragraph | Text | And more |

-
-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
{
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+```json
+{
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
-}
-
-
-
-
-

typescript

-
-
-
/**
+    "sig": ""
+}
+```
+
+### typescript
+
+```typescript
+/**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
-}
-
-
-
-
-

shell

-
-
-
mkdir new_directory
-cp source.txt destination.txt
-
-
-
-
-

LaTeX

-
-
-
$
-M =
+}
+```
+
+### shell
+
+```shell
+
+mkdir new_directory
+cp source.txt destination.txt
+
+```
+
+### LaTeX
+
+```latex
+$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-
-
-
-
-
$
+$
+```
+
+```latex
+$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-
-
-
-
-

ABC Notation

-
-
-
X:1
+$
+```
+
+### ABC Notation
+
+```abc
+X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
 A:Seibis nahe Lichtenberg in Oberfranken
@@ -1036,1037 +912,3764 @@ dd d2 | ee e2 | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
-dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-
-
-
-
-
-
-

LateX

-
-
-

LaTex in inline-code

-
-

$[ x^n + y^n = z^n \]$ and $[\sqrt{x^2+1}\]$ and $\color{blue}{X \sim Normal \; (\mu,\sigma^2)}$

-
-
-
-
-
-

LaTex outside of code

-
-
-

This is a latex code block \mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \} and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green

-
-
-
-
-

Footnotes

-
-
-

Here_s a simple footnote,[^1] and here_s a longer one.[^bignote]

-
-
-

[^1]: This is the first footnote.

-
-
-

[^bignote]: Here_s one with multiple paragraphs and code.

-
-
-
- -
-

Formatting

-
-
-

Strikethrough

-
-

~~The world is flat.~~ We now know that the world is round. This should not be struck through.

-
-
-
-

Bold

-
-

This is bold text. So is this bold text.

-
-
-
-

Italic

-
-

This is italic text. So is this italic text.

-
-
-
-

Task List

-
-
    -
  • -

    ✓ Write the press release

    -
  • -
  • -

    ❏ Update the website

    -
  • -
  • -

    ❏ Contact the media

    -
  • -
-
-
-
-

Emoji shortcodes

-
-

Gone camping! :tent: Be back soon.

-
-
-

That is so funny! :joy:

-
-
-
-

Marking and highlighting text

-
-

I need to highlight these ==very important words==.

-
-
-
-

Subscript and Superscript

-
-

H2O

-
-
-

X2

-
-
-
-

Delimiter

-
-

based upon a -

-
-
-
-

based upon a *

-
-
-
-
-

Quotes

-
-
-
-

This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj

-
-
-
-
-
-
-

This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj

-
-
-
-
-
-
- -
- View Raw HTML -
-
<h1>Markdown Test Document</h1>
+dd d2 | ee e2 | fg ad | ed/c/ d2 :|
+```
+
+## LateX
+
+### LaTex in inline-code
+
+`$[ x^n + y^n = z^n \]# Markdown Test Document
+
+## Bullet list
 
-<div class="sect1">
-<h2 id="bullet-list"><a class="anchor" href="#bullet-list"></a><a class="link" href="#bullet-list">Bullet list</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:
+This is a test unordered list with mixed bullets:
 * First item with a number 2. in it
 * Second item
 * Third item
     - Indented item
     - Indented item
-* Fourth item</p>
-</div>
-<div class="paragraph">
-<p>Another unordered list:
+* Fourth item 
+
+Another unordered list:
 - 1st item
 - 2nd item
-- third item containing <em>italic</em> text
+- third item containing _italic_ text
   - indented item
   - second indented item
-- fourth item</p>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:
+- fourth item
+
+This is a test ordered list with indented items:
 1. First item
 2. Second item
 3. Third item
     1. Indented item
     2. Indented item
-4. Fourth item</p>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has the same number:
+4. Fourth item
+
+Ordered list where everything has the same number:
 1. First item
 1. Second item
 1. Third item
-1. Fourth item</p>
-</div>
-<div class="paragraph">
-<p>Ordered list that is wrongly numbered:
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
 1. First item
 8. Second item
 3. Third item
-5. Fourth item</p>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:
+5. Fourth item
+
+This is a mixed list with indented items:
 1. First item
 2. Second item
 3. Third item
     * Indented item
     * Indented item
-4. Fourth item</p>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:
+4. Fourth item
+
+This is another mixed list with indented items:
 - First item
 - Second item
 - Third item
     1. Indented item
     2. Indented item
-- Fourth item</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers"><a class="anchor" href="#headers"></a><a class="link" href="#headers">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header"><a class="anchor" href="#third-level-header"></a><a class="link" href="#third-level-header">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header"><a class="anchor" href="#fourth-level-header"></a><a class="link" href="#fourth-level-header">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header"><a class="anchor" href="#fifth-level-header"></a><a class="link" href="#fifth-level-header">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header"><a class="anchor" href="#sixth-level-header"></a><a class="link" href="#sixth-level-header">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links"><a class="anchor" href="#media-and-links"></a><a class="link" href="#media-and-links">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address"><a class="anchor" href="#nostr-address"></a><a class="link" href="#nostr-address">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag"><a class="anchor" href="#hashtag"></a><a class="link" href="#hashtag">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks"><a class="anchor" href="#wikilinks"></a><a class="link" href="#wikilinks">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url"><a class="anchor" href="#url"></a><a class="link" href="#url">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><a href="<a href=&quot;https://<a href=&quot;https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html&quot;>www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html</a>" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">Welt Online link <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a></p>
-</div>
-<div class=&quot;paragraph&quot;>
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class=&quot;paragraph&quot;>
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class=&quot;paragraph&quot;>
-<p>this shouild be a hyperlink to the http URL with the same address, so <a href=&quot;https://theforest.nostr1.com/&quot;>wss://theforest.nostr1.com</a> should render like " target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">&lt;a href=&quot;https://theforest.nostr1.com/&quot;&gt;wss://theforest.nostr1.com&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>(<span class="opengraph-link-container" data-og-url="https://theforest.nostr1.com">
-      <a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://theforest.nostr1.com <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>)</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="images"><a class="anchor" href="#images"></a><a class="link" href="#images">Images</a></h3>
-<div class="paragraph">
-<p>Image: image::<a href="https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png" target="_blank" rel="noopener noreferrer">https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png</a>[width=100%]</p>
-</div>
-<div class="paragraph">
-<p><img src="<a href=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; class=&quot;bare&quot;>https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png</a>" alt="test image" class="max-w-[400px] object-contain my-0" /></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media"><a class="anchor" href="#media"></a><a class="link" href="#media">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube"><a class="anchor" href="#youtube"></a><a class="link" href="#youtube">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p>[<img src="<a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&quot; class=&quot;bare&quot;>https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png</a>" alt="Youtube link with pic" class="max-w-[400px] object-contain my-0" />](<a href="https://youtube.com/shorts/ZWfvChb-i0w" class="bare" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>)</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify"><a class="anchor" href="#spotify"></a><a class="link" href="#spotify">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p>[<img src="<a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&quot; class=&quot;bare&quot;>https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png</a>" alt="Spotify link with pic" class="max-w-[400px] object-contain my-0" />](<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>)</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio"><a class="anchor" href="#audio"></a><a class="link" href="#audio">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>[!<span class="chord" data-chord="Audio link with pic">[Audio link with pic]</span>(<a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png" class="bare" target="_blank" rel="noopener noreferrer">https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png</a>)](MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>)</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video"><a class="anchor" href="#video"></a><a class="link" href="#video">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>[<img src="<a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&quot; class=&quot;bare&quot;>https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png</a>" alt="Video link with pic" class="max-w-[400px] object-contain my-0" />](MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>)</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables"><a class="anchor" href="#tables"></a><a class="link" href="#tables">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly"><a class="anchor" href="#orderly"></a><a class="link" href="#orderly">Orderly</a></h3>
-<div class="paragraph">
-<p>| Syntax      | Description |
-| ----------- | ----------- |
-| Header      | Title       |
-| Paragraph   | Text        |</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="unorderly"><a class="anchor" href="#unorderly"></a><a class="link" href="#unorderly">Unorderly</a></h3>
-<div class="paragraph">
-<p>| Syntax | Description |
-| --- | ----------- |
-| Header | Title |
-| Paragraph | Text |</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="with-alignment"><a class="anchor" href="#with-alignment"></a><a class="link" href="#with-alignment">With alignment</a></h3>
-<div class="paragraph">
-<p>| Syntax      | Description | Test Text     |
-| :---        |    :----:   |          ---: |
-| Header      | Title       | Here_s this   |
-| Paragraph   | Text        | And more      |</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks"><a class="anchor" href="#code-blocks"></a><a class="link" href="#code-blocks">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json"><a class="anchor" href="#json"></a><a class="link" href="#json">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>{
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
-    "created_at": 1725087283,
-    "kind": 30040,
-    "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
-        ["author", "Aesop"],
-    ],
-    "sig": "&lt;event_signature&gt;"
-}</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript"><a class="anchor" href="#typescript"></a><a class="link" href="#typescript">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>/**
- * Get Nostr identifier type
- */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
-  return null;
-}</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell"><a class="anchor" href="#shell"></a><a class="link" href="#shell">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>mkdir new_directory
-cp source.txt destination.txt</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="latex"><a class="anchor" href="#latex"></a><a class="link" href="#latex">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>$
-M =
-\begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
-\end{bmatrix}
-$</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>$
-f(x)=
-\begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
-\end{cases}
-$</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation"><a class="anchor" href="#abc-notation"></a><a class="link" href="#abc-notation">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>X:1
-T:Ohne Titel
-C:Aufgezeichnet 1784
-A:Seibis nahe Lichtenberg in Oberfranken
-S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784"
-M:4/4
-L:1/4
-K:D
-dd d2 | ee e2 | fg ad | cB cA |\
-dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-|:\
-fg ad | cB cA | fg ad | cB cA |\
-dd d2 | ee e2 | fg ad | ed/c/ d2 :|</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-2"><a class="anchor" href="#latex-2"></a><a class="link" href="#latex-2">LateX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code"><a class="anchor" href="#latex-in-inline-code"></a><a class="link" href="#latex-in-inline-code">LaTex in inline-code</a></h3>
-<div class="paragraph">
-<p><code>$[ x^n + y^n = z^n \]$</code> and <code>$[\sqrt{x^2+1}\]$</code> and <code>$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}$</code></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-outside-of-code"><a class="anchor" href="#latex-outside-of-code"></a><a class="link" href="#latex-outside-of-code">LaTex outside of code</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>This is a latex code block \mathbb{N} = \{ a \in \mathbb{Z} : a &gt; 0 \} and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="footnotes"><a class="anchor" href="#footnotes"></a><a class="link" href="#footnotes">Footnotes</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>Here_s a simple footnote,[^1] and here_s a longer one.[^bignote]</p>
-</div>
-<div class="paragraph">
-<p>[^1]: This is the first footnote.</p>
-</div>
-<div class="paragraph">
-<p>[^bignote]: Here_s one with multiple paragraphs and code.</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="anchor-links"><a class="anchor" href="#anchor-links"></a><a class="link" href="#anchor-links">Anchor links</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p><a href="#bullet-lists" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">Link to bullet list section <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a></p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="formatting"><a class="anchor" href="#formatting"></a><a class="link" href="#formatting">Formatting</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="strikethrough"><a class="anchor" href="#strikethrough"></a><a class="link" href="#strikethrough">Strikethrough</a></h3>
-<div class="paragraph">
-<p>~~The world is flat.~~ We now know that the world is round. This should not be <sub>struck</sub> through.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bold"><a class="anchor" href="#bold"></a><a class="link" href="#bold">Bold</a></h3>
-<div class="paragraph">
-<p>This is <strong>bold</strong> text. So is this <strong>bold</strong> text.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="italic"><a class="anchor" href="#italic"></a><a class="link" href="#italic">Italic</a></h3>
-<div class="paragraph">
-<p>This is <em>italic</em> text. So is this <em>italic</em> text.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="task-list"><a class="anchor" href="#task-list"></a><a class="link" href="#task-list">Task List</a></h3>
-<div class="ulist checklist">
-<ul class="checklist">
-<li>
-<p>&#10003; Write the press release</p>
-</li>
-<li>
-<p>&#10063; Update the website</p>
-</li>
-<li>
-<p>&#10063; Contact the media</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="emoji-shortcodes"><a class="anchor" href="#emoji-shortcodes"></a><a class="link" href="#emoji-shortcodes">Emoji shortcodes</a></h3>
-<div class="paragraph">
-<p>Gone camping! :tent: Be back soon.</p>
-</div>
-<div class="paragraph">
-<p>That is so funny! :joy:</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="marking-and-highlighting-text"><a class="anchor" href="#marking-and-highlighting-text"></a><a class="link" href="#marking-and-highlighting-text">Marking and highlighting text</a></h3>
-<div class="paragraph">
-<p>I need to highlight these ==very important words==.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="subscript-and-superscript"><a class="anchor" href="#subscript-and-superscript"></a><a class="link" href="#subscript-and-superscript">Subscript and Superscript</a></h3>
-<div class="paragraph">
-<p>H<sub>2</sub>O</p>
-</div>
-<div class="paragraph">
-<p>X<sup>2</sup></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="delimiter"><a class="anchor" href="#delimiter"></a><a class="link" href="#delimiter">Delimiter</a></h3>
-<div class="paragraph">
-<p>based upon a -</p>
-</div>
-<hr>
-<div class="paragraph">
-<p>based upon a *</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="quotes"><a class="anchor" href="#quotes"></a><a class="link" href="#quotes">Quotes</a></h3>
-<div class="quoteblock">
-<blockquote>
-<div class="paragraph">
-<p>This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj</p>
-</div>
-</blockquote>
-</div>
-<div class="quoteblock">
-<blockquote>
-<div class="paragraph">
-<p>This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
-This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
-This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj</p>
-</div>
-</blockquote>
-</div>
-</div>
-</div>
-</div>
-
-
- - -
-

Extracted Metadata

- - -

Nostr Links (5)

- -
- naddr: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l - - nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l -
- -
- npub: npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z - - nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z -
- -
- nevent: nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj - - nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj -
- -
+- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + + and `$[\sqrt{x^2+1}\]# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + +`$[ x^n + y^n = z^n \]# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + + and and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + +`$[ x^n + y^n = z^n \]# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + + and `$[\sqrt{x^2+1}\]# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + +`$[ x^n + y^n = z^n \]# Markdown Test Document + +## Bullet list + +This is a test unordered list with mixed bullets: +* First item with a number 2. in it +* Second item +* Third item + - Indented item + - Indented item +* Fourth item + +Another unordered list: +- 1st item +- 2nd item +- third item containing _italic_ text + - indented item + - second indented item +- fourth item + +This is a test ordered list with indented items: +1. First item +2. Second item +3. Third item + 1. Indented item + 2. Indented item +4. Fourth item + +Ordered list where everything has the same number: +1. First item +1. Second item +1. Third item +1. Fourth item + +Ordered list that is wrongly numbered: +1. First item +8. Second item +3. Third item +5. Fourth item + +This is a mixed list with indented items: +1. First item +2. Second item +3. Third item + * Indented item + * Indented item +4. Fourth item + +This is another mixed list with indented items: +- First item +- Second item +- Third item + 1. Indented item + 2. Indented item +- Fourth item + + +## Headers + +### Third-level header + +#### Fourth-level header + +##### Fifth-level header + +###### Sixth-level header + +## Media and Links + +### Nostr address + +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + +This is also plaintext: + +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q + +These should be turned into links: + +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] + +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] + +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] + +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] + +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] + +### Hashtag + +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle + +### Wikilinks + +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix + +### URL + +https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html + +link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link] + +this should render as plaintext: `http://www.example.com` + +this should be a hyperlink: www.example.com + +this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com] + +### Images + +Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png + +image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%] + +### Media + +#### YouTube + +https://youtube.com/shorts/ZWfvChb-i0w + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w) + +#### Spotify + +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ) + +#### Audio + +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3) + +#### Video + +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 + +[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4) + +## Tables + +### Orderly + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Unorderly + +| Syntax | Description | +| --- | ----------- | +| Header | Title | +| Paragraph | Text | + +### With alignment + +| Syntax | Description | Test Text | +| :--- | :----: | ---: | +| Header | Title | Here's this | +| Paragraph | Text | And more | + +## Code blocks + +### json + +__CODEBLOCK_0__ + +### typescript + +__CODEBLOCK_1__ + +### shell + +__CODEBLOCK_2__ + +### LaTeX + +__CODEBLOCK_3__ + +__CODEBLOCK_4__ + +### ABC Notation + +__CODEBLOCK_5__ + +## LateX + +### LaTex in inline-code + + and and + +## LaTex outside of code + +This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green + +## Footnotes + +Here's a simple footnote,[^1] and here's a longer one.[^bignote] + +[^1]: This is the first footnote. + +[^bignote]: Here's one with multiple paragraphs and code. + +## Anchor links + +link:hashtag:bullet[#bullet]-lists[Link to bullet list section] + +## Formatting + +### Strikethrough + +~~The world is flat.~~ We now know that the world is round. This should not be ~struck~ through. + +### Bold + +This is *bold* text. So is this **bold** text. + +### Italic + +This is _italic_ text. So is this __italic__ text. + +### Task List + +- [x] Write the press release +- [ ] Update the website +- [ ] Contact the media + +### Emoji shortcodes + +Gone camping! :tent: Be back soon. + +That is so funny! :joy: + +### Marking and highlighting text + +I need to highlight these ==very important words==. + +### Subscript and Superscript + +H~2~O + +X^2^ + +### Delimiter + +based upon a - + +--- + +based upon a * + +*** + +### Quotes + +> This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj + +> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj

+
+
+ View Raw HTML +
+
<p># Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+```json
+{
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
+    "created_at": 1725087283,
+    "kind": 30040,
+    "tags": [
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
+        ["author", "Aesop"],
+    ],
+    "sig": "<event_signature>"
+}
+```
+
+### typescript
+
+```typescript
+/**
+ * Get Nostr identifier type
+ */
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
+  return null;
+}
+```
+
+### shell
+
+```shell
+
+mkdir new_directory
+cp source.txt destination.txt
+
+```
+
+### LaTeX
+
+```latex
+$
+M = 
+\begin{bmatrix}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
+\end{bmatrix}
+$
+```
+
+```latex
+$
+f(x)=
+\begin{cases}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
+\end{cases}
+$
+```
+
+### ABC Notation
+
+```abc
+X:1
+T:Ohne Titel
+C:Aufgezeichnet 1784
+A:Seibis nahe Lichtenberg in Oberfranken
+S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784"
+M:4/4
+L:1/4
+K:D
+dd d2 | ee e2 | fg ad | cB cA |\
+dd d2 | ee e2 | fg ad | ed/c/ d2 :|
+|:\
+fg ad | cB cA | fg ad | cB cA |\
+dd d2 | ee e2 | fg ad | ed/c/ d2 :|
+```
+
+## LateX
+
+### LaTex in inline-code
+
+`$[ x^n + y^n = z^n \]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+ and `$[\sqrt{x^2+1}\]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+`$[ x^n + y^n = z^n \]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+ and  and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+`$[ x^n + y^n = z^n \]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+ and `$[\sqrt{x^2+1}\]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+`$[ x^n + y^n = z^n \]# Markdown Test Document
+
+## Bullet list
+
+This is a test unordered list with mixed bullets:
+* First item with a number 2. in it
+* Second item
+* Third item
+    - Indented item
+    - Indented item
+* Fourth item 
+
+Another unordered list:
+- 1st item
+- 2nd item
+- third item containing _italic_ text
+  - indented item
+  - second indented item
+- fourth item
+
+This is a test ordered list with indented items:
+1. First item
+2. Second item
+3. Third item
+    1. Indented item
+    2. Indented item
+4. Fourth item
+
+Ordered list where everything has the same number:
+1. First item
+1. Second item
+1. Third item
+1. Fourth item 
+
+Ordered list that is wrongly numbered:
+1. First item
+8. Second item
+3. Third item
+5. Fourth item
+
+This is a mixed list with indented items:
+1. First item
+2. Second item
+3. Third item
+    * Indented item
+    * Indented item
+4. Fourth item
+
+This is another mixed list with indented items:
+- First item
+- Second item
+- Third item
+    1. Indented item
+    2. Indented item
+- Fourth item
+
+
+## Headers
+
+### Third-level header
+
+#### Fourth-level header
+
+##### Fifth-level header
+
+###### Sixth-level header
+
+## Media and Links
+
+### Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+### Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+### Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+### URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:https://theforest.nostr1.com/[wss://theforest.nostr1.com]
+
+### Images
+
+Image: https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image,width=100%]
+
+### Media
+
+#### YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic,width=100%]](https://youtube.com/shorts/ZWfvChb-i0w)
+
+#### Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic,width=100%]](MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ)
+
+#### Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic,width=100%]](MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3)
+
+#### Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+[image::https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic,width=100%]](MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4)
+
+## Tables
+
+### Orderly
+
+| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |
+
+### Unorderly
+
+| Syntax | Description |
+| --- | ----------- |
+| Header | Title |
+| Paragraph | Text |
+
+### With alignment
+
+| Syntax      | Description | Test Text     |
+| :---        |    :----:   |          ---: |
+| Header      | Title       | Here's this   |
+| Paragraph   | Text        | And more      |
+
+## Code blocks
+
+### json
+
+__CODEBLOCK_0__
+
+### typescript
+
+__CODEBLOCK_1__
+
+### shell
+
+__CODEBLOCK_2__
+
+### LaTeX
+
+__CODEBLOCK_3__
+
+__CODEBLOCK_4__
+
+### ABC Notation
+
+__CODEBLOCK_5__
+
+## LateX
+
+### LaTex in inline-code
+
+ and  and 
+
+## LaTex outside of code
+
+This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green
+
+## Footnotes
+
+Here's a simple footnote,[^1] and here's a longer one.[^bignote]
+
+[^1]: This is the first footnote.
+
+[^bignote]: Here's one with multiple paragraphs and code.
+
+## Anchor links
+
+link:hashtag:bullet[#bullet]-lists[Link to bullet list section]
+
+## Formatting
+
+### Strikethrough 
+
+~~The world is flat.~~ We now know that the world is round. This should not be ~struck~ through.
+
+### Bold
+
+This is *bold* text. So is this **bold** text.
+
+### Italic
+
+This is _italic_ text. So is this __italic__ text.
+
+### Task List
+
+- [x] Write the press release
+- [ ] Update the website
+- [ ] Contact the media
+
+### Emoji shortcodes
+
+Gone camping! :tent: Be back soon.
+
+That is so funny! :joy:
+
+### Marking and highlighting text
+
+I need to highlight these ==very important words==.
+
+### Subscript and Superscript
+
+H~2~O
+
+X^2^
+
+### Delimiter
+
+based upon a -
+
+---
+
+based upon a *
+
+***
+
+### Quotes
+
+> This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj 
+
+> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj 
+> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj 
+> This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj </p>
+
+
+
+ +
+

Extracted Metadata

+ + +

Nostr Links (5)

+ +
+ naddr: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l + - nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l +
+ +
+ npub: npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z + - nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z +
+ +
+ nevent: nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj + - nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj +
+ +
nprofile: nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh - nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh
- note: note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg - - nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg + note: note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg + - nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg +
+ + + + +

Wikilinks (2)

+ +
+ [[NKBIP-01|Specification]] → dtag: nkbip-01 + (display: Specification) +
+ +
+ [[mirepoix]] → dtag: mirepoix + (display: mirepoix) +
+ + + + +

Hashtags (3)

+ +
+ #testhashtag +
+ +
+ #inlinehashtag +
+ +
+ #bullet +
+ + + + +

Links (18)

+ +
+ Welt Online link + External +
+ + + +
+ test image + External +
+ +
+ ![Youtube link with pic + External +
+ + + + + + - - - -

Wikilinks (2)

-
- [[NKBIP-01|Specification]] → dtag: nkbip-01 - (display: Specification) + http://www.example.com` + External
- [[mirepoix]] → dtag: mirepoix - (display: mirepoix) + https://theforest.nostr1.com) + External
- - - -

Hashtags (3)

-
- #inlinehashtag + https://youtube.com/shorts/ZWfvChb-i0w + External
- - - -

Links (18)

+ + + + +

Media URLs (3)

+ + + + + + + + + +
+ + + +
+

AsciiDoc Document Test ✓ Parsed

+ +
+ + + + +
+ +
+
+
+
5
+
Nostr Links
+
+
+
2
+
Wikilinks
+
+
+
4
+
Hashtags
+
+
+
15
+
Links
+
+
+
2
+
Media URLs
+
+
+
No
+
Has LaTeX
+
+
+
No
+
Has Music
+
+
+ +

Frontmatter

+ + + +
+ +
+

Original AsciiDoc Content

+
+
= AsciiDoc Test Document
+Kismet Lee 
+2.9, October 31, 2021: Fall incarnation
+:description: Test description
+:author: Kismet Lee
+:date: 2021-10-31
+:version: 2.9
+:status: Draft
+:keywords: AsciiDoc, Test, Document
+:category: Test
+:language: English
+
+== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z
+
+nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj
+
+nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh
+
+nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg
+
+=== Hashtag
+
+#testhashtag at the start of the line and #inlinehashtag in the middle
+
+=== Wikilinks
+
+[[NKBIP-01|Specification]] and [[mirepoix]]
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+https://open.spotify.com/episode/1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:https://open.spotify.com/episode/1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
+{
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
+    "created_at": 1725087283,
+    "kind": 30040,
+    "tags": [
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
+        ["author", "Aesop"],
+    ],
+    "sig": "<event_signature>"
+}
+----
+
+=== typescript
+
+[source,typescript]
+----
+/**
+ * Get Nostr identifier type
+ */
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
+  return null;
+}
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
+\begin{bmatrix}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
+\end{bmatrix}
+$$
+----
+
+[source,latex]
+----
+$$
+f(x)=
+\begin{cases}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
+\end{cases}
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
+X:1
+T:Ohne Titel
+C:Aufgezeichnet 1784
+A:Seibis nahe Lichtenberg in Oberfranken
+S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784"
+M:4/4
+L:1/4
+K:D
+dd d2 | ee e2 | fg ad | cB cA |\
+dd d2 | ee e2 | fg ad | ed/c/ d2 :|
+|:\
+fg ad | cB cA | fg ad | cB cA |\
+dd d2 | ee e2 | fg ad | ed/c/ d2 :|
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
+@startuml
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
+@enduml
+----
+
+=== BPMN
+
+[source,plantuml]
+----
+@startbpmn
+start
+:Task 1;
+:Task 2;
+stop
+@endbpmn
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]$` and `$[\sqrt{x^2+1}\]$` and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}$`
+
+== LaTeX outside of code
+
+This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green
+
+== Footnotes
+
+Here's a simple footnote,footnote:[This is the first footnote.] and here's a longer one.footnote:[Here's one with multiple paragraphs and code.]
+
+== Anchor links
+
+<<bullet-list,Link to bullet list section>>
+
+== Formatting
+
+=== Strikethrough
+
+[line-through]#The world is flat.# We now know that the world is round. This should not be ~struck~ through.
+
+=== Bold
+
+This is *bold* text. So is this *bold* text.
+
+=== Italic
+
+This is _italic_ text. So is this _italic_ text.
+
+=== Task List
+
+* [x] Write the press release
+* [ ] Update the website
+* [ ] Contact the media
+
+=== Emoji shortcodes
+
+Gone camping! :tent: Be back soon.
+
+That is so funny! :joy:
+
+=== Marking and highlighting text
+
+I need to highlight these [highlight]#very important words#.
+
+=== Subscript and Superscript
 
-this shouild be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like " target="_blank">wss://theforest.nostr1.com
-              External
-            
- - - -
- http://www.example.com` - External -
- - - - - - - - - - - - - - - - - - - - - - - - -

Media URLs (3)

- - - - - - - - - - -

Table of Contents

- - -
-
- - -
-

AsciiDoc Document Test ✓ Parsed

- -
- - - - -
- -
-
-
-
5
-
Nostr Links
-
-
-
2
-
Wikilinks
-
-
-
4
-
Hashtags
-
-
-
15
-
Links
-
-
-
2
-
Media URLs
-
-
-
Yes
-
Has LaTeX
-
-
-
No
-
Has Music
-
+H~2~O + +X^2^ + +=== Delimiter + +based upon a - + +''' + +based upon a * + +''' + +=== Quotes + +[quote] +____ +This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +____ + +[quote] +____ +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +____ +
- -

Frontmatter

- - -
-
-

Original AsciiDoc Content

-
-
= AsciiDoc Test Document
-Kismet Lee 
-2.9, October 31, 2021: Fall incarnation
-:description: Test description
-:author: Kismet Lee
-:date: 2021-10-31
-:version: 2.9
-:status: Draft
-:keywords: AsciiDoc, Test, Document
-:category: Test
-:language: English
-
-== Bullet list
+      
+

Rendered HTML Output

+
+

== Bullet list This is a test unordered list with mixed bullets: @@ -2142,23 +4745,23 @@ npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q These should be turned into links: -nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] -nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] -nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] -nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] -nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] === Hashtag -#testhashtag at the start of the line and #inlinehashtag in the middle +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle === Wikilinks -[[NKBIP-01|Specification]] and [[mirepoix]] +WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix === URL @@ -2188,27 +4791,27 @@ link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/w ==== Spotify -https://open.spotify.com/episode/1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ +MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ -link:https://open.spotify.com/episode/1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]] +link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]] ==== Audio -https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 +MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3 -link:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]] +link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]] ==== Video -https://v.nostr.build/MTjaYib4upQuf8zn.mp4 +MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4 -link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]] +link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]] == Tables === Orderly -[cols="1,2"] +[cols="1,2"] |=== |Syntax|Description |Header|Title @@ -2217,7 +4820,7 @@ link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.o === Unorderly -[cols="1,2"] +[cols="1,2"] |=== |Syntax|Description |Header|Title @@ -2226,10 +4829,10 @@ link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.o === With alignment -[cols="<,^,>"] +[cols="<,^,>"] |=== |Syntax|Description|Test Text -|Header|Title|Here's this +|Header|Title|Here's this |Paragraph|Text|And more |=== @@ -2240,16 +4843,16 @@ link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.o [source,json] ---- { - "id": "<event_id>", - "pubkey": "<event_originator_pubkey>", - "created_at": 1725087283, - "kind": 30040, - "tags": [ - ["d", "aesop's-fables-by-aesop"], - ["title", "Aesop's Fables"], - ["author", "Aesop"], + "id": "", + "pubkey": "", + "created_at": 1725087283, + "kind": 30040, + "tags": [ + ["d", "aesop's-fables-by-aesop"], + ["title", "Aesop's Fables"], + ["author", "Aesop"], ], - "sig": "<event_signature>" + "sig": "" } ---- @@ -2260,12 +4863,12 @@ link:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.o /** * Get Nostr identifier type */ -function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null { - if (id.startsWith('npub')) return 'npub'; - if (id.startsWith('nprofile')) return 'nprofile'; - if (id.startsWith('nevent')) return 'nevent'; - if (id.startsWith('naddr')) return 'naddr'; - if (id.startsWith('note')) return 'note'; +function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null { + if (id.startsWith('npub')) return 'npub'; + if (id.startsWith('nprofile')) return 'nprofile'; + if (id.startsWith('nevent')) return 'nevent'; + if (id.startsWith('naddr')) return 'naddr'; + if (id.startsWith('note')) return 'note'; return null; } ---- @@ -2287,9 +4890,9 @@ cp source.txt destination.txt $$ M = \begin{bmatrix} -\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em] -\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em] -0 & \frac{5}{6} & \frac{1}{6} +\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em] +\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em] +0 & \frac{5}{6} & \frac{1}{6} \end{bmatrix} $$ ---- @@ -2299,8 +4902,8 @@ $$ $$ f(x)= \begin{cases} -1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ -0 & \quad \text{otherwise} +1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ +0 & \quad \text{otherwise} \end{cases} $$ ---- @@ -2313,7 +4916,7 @@ X:1 T:Ohne Titel C:Aufgezeichnet 1784 A:Seibis nahe Lichtenberg in Oberfranken -S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784" +S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784" M:4/4 L:1/4 K:D @@ -2329,8 +4932,8 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :| [source,plantuml] ---- @startuml -Alice -> Bob: Authentication Request -Bob --> Alice: Authentication Response +Alice -> Bob: Authentication Request +Bob --> Alice: Authentication Response @enduml ---- @@ -2350,1286 +4953,249 @@ stop === LaTeX in inline-code -`$[ x^n + y^n = z^n \]$` and `$[\sqrt{x^2+1}\]$` and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}$` +`$[ x^n + y^n = z^n \]== Bullet list -== LaTeX outside of code +This is a test unordered list with mixed bullets: -This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green +* First item with a number 2. in it +* Second item +* Third item +** Indented item +** Indented item +* Fourth item -== Footnotes +Another unordered list: -Here's a simple footnote,footnote:[This is the first footnote.] and here's a longer one.footnote:[Here's one with multiple paragraphs and code.] +* 1st item +* 2nd item +* third item containing _italic_ text +** indented item +** second indented item +* fourth item -== Anchor links +This is a test ordered list with indented items: -<<bullet-list,Link to bullet list section>> +. First item +. Second item +. Third item +.. Indented item +.. Indented item +. Fourth item -== Formatting +Ordered list where everything has no number: -=== Strikethrough +. First item +. Second item +. Third item +. Fourth item -[line-through]#The world is flat.# We now know that the world is round. This should not be ~struck~ through. +This is a mixed list with indented items: -=== Bold +. First item +. Second item +. Third item +* Indented item +* Indented item +. Fourth item -This is *bold* text. So is this *bold* text. +This is another mixed list with indented items: -=== Italic +* First item +* Second item +* Third item +. Indented item +. Indented item +* Fourth item -This is _italic_ text. So is this _italic_ text. +== Headers -=== Task List +=== Third-level header -* [x] Write the press release -* [ ] Update the website -* [ ] Contact the media +==== Fourth-level header -=== Emoji shortcodes +===== Fifth-level header -Gone camping! :tent: Be back soon. +====== Sixth-level header -That is so funny! :joy: +== Media and Links -=== Marking and highlighting text +=== Nostr address -I need to highlight these [highlight]#very important words#. +This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l -=== Subscript and Superscript +This is also plaintext: -H~2~O +npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q -X^2^ +These should be turned into links: -=== Delimiter +link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...] -based upon a - +link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...] -''' +link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...] -based upon a * +link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...] -''' +link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...] -=== Quotes +=== Hashtag -[quote] -____ -This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -____ +hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle -[quote] -____ -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -____ -

-
-
- -
-

Rendered HTML Output

-
-
-

Bullet list

-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
-
-
-
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
-{
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
-    "created_at": 1725087283,
-    "kind": 30040,
-    "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
-        ["author", "Aesop"],
-    ],
-    "sig": "<event_signature>"
-}
-'''
-
-
-
-
-

typescript

-
-
-
'''
-/**
- * Get Nostr identifier type
- */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
-  return null;
-}
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
-\begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
-\end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
-f(x)=
-\begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
-\end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
-X:1
-T:Ohne Titel
-C:Aufgezeichnet 1784
-A:Seibis nahe Lichtenberg in Oberfranken
-S:Handschrift, bezeichnet und datiert: "Heinrich Nicol Philipp zu Seibis den 30 Junius 1784"
-M:4/4
-L:1/4
-K:D
-dd d2 | ee e2 | fg ad | cB cA |\
-dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-|:\
-fg ad | cB cA | fg ad | cB cA |\
-dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
-@startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
-@enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
-@startbpmn
-start
-:Task 1;
-:Task 2;
-stop
-@endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-

`$[ x^n + y^n = z^n \]== Bullet list

-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
-
- -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -3643,621 +5209,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-
-
and `$[\sqrt{x^2+1}\]== Bullet list
-
-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and `$[\sqrt{x^2+1}\]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -4271,619 +5493,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-

`$[ x^n + y^n = z^n \]== Bullet list

-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -4897,621 +5777,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-
-
and  and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}== Bullet list
-
-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and  and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -5525,619 +6061,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-

`$[ x^n + y^n = z^n \]== Bullet list

-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -6151,621 +6345,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-
-
and `$[\sqrt{x^2+1}\]== Bullet list
-
-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and `$[\sqrt{x^2+1}\]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -6779,619 +6629,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-

`$[ x^n + y^n = z^n \]== Bullet list

-
-
-

This is a test unordered list with mixed bullets:

-
-
-
    -
  • -

    First item with a number 2. in it

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-

Another unordered list:

-
-
-
    -
  • -

    1st item

    -
  • -
  • -

    2nd item

    -
  • -
  • -

    third item containing italic text

    -
    -
      -
    • -

      indented item

      -
    • -
    • -

      second indented item

      -
    • -
    -
    -
  • -
  • -

    fourth item

    -
  • -
-
-
-

This is a test ordered list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

Ordered list where everything has no number:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is a mixed list with indented items:

-
-
-
    -
  1. -

    First item

    -
  2. -
  3. -

    Second item

    -
  4. -
  5. -

    Third item

    -
    -
      -
    • -

      Indented item

      -
    • -
    • -

      Indented item

      -
    • -
    -
    -
  6. -
  7. -

    Fourth item

    -
  8. -
-
-
-

This is another mixed list with indented items:

-
-
-
    -
  • -

    First item

    -
  • -
  • -

    Second item

    -
  • -
  • -

    Third item

    -
    -
      -
    1. -

      Indented item

      -
    2. -
    3. -

      Indented item

      -
    4. -
    -
    -
  • -
  • -

    Fourth item

    -
  • -
-
-
-
-
- -
- -
-
-

Nostr address

-
-

This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l

-
-
-

This is also plaintext:

-
-
-

npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q

-
-
-

These should be turned into links:

-
- - - - - -
-
-

Hashtag

-
-

#testhashtag at the start of the line and #inlinehashtag in the middle

-
-
- - -
- - -
-

Video

- -
-

link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[ - Video link with pic -

- ]

-
-
-
- - -
-

Tables

-
-
-

Orderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

Unorderly

- ---- - - - - - - - - - - - - - - -

Syntax

Description

Header

Title

Paragraph

Text

-
-
-

With alignment

- ----- - - - - - - - - - - - - - - - - - -

Syntax

Description

Test Text

Header

Title

Here_s this

Paragraph

Text

And more

-
-
-
-
-

Code blocks

-
-
-

json

-
-
-
'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "<event_id>",
-    "pubkey": "<event_originator_pubkey>",
+    "id": "",
+    "pubkey": "",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "<event_signature>"
+    "sig": ""
 }
-'''
-
-
-
-
-

typescript

-
-
-
'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''
-
-
-
-
-

shell

-
-
-
'''
-
-
-
-

mkdir new_directory -cp source.txt destination.txt

-
-
-
-
-

LaTeX

-
-
-
'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
-\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
-0 & \frac{5}{6} & \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''
-
-
-
-
-
'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\
-0 & \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''
-
-
-
-
-

ABC Notation

-
-
-
'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -7405,761 +6913,356 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''
-
-
-
-
-

PlantUML

-
-
-
'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -> Bob: Authentication Request
-Bob --> Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''
-
-
-
-
-

BPMN

-
-
-
'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''
-
-
-
-
-
-
-

LaTeX

-
-
-

LaTeX in inline-code

-
-
-
and  and
-
-
-
-
-
-
-

LaTeX outside of code

-
-
-

This is a latex code block \mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \} and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green

-
-
-
-
-

Footnotes

-
-
-

Here_s a simple footnote,[1] and here_s a longer one.[2]

-
-
-
- -
-

Formatting

-
-
-

Strikethrough

-
-

The world is flat. We now know that the world is round. This should not be struck through.

-
-
-
-

Bold

-
-

This is bold text. So is this bold text.

-
-
-
-

Italic

-
-

This is italic text. So is this italic text.

-
-
-
-

Task List

-
-
    -
  • -

    ✓ Write the press release

    -
  • -
  • -

    ❏ Update the website

    -
  • -
  • -

    ❏ Contact the media

    -
  • -
-
-
-
-

Emoji shortcodes

-
-

Gone camping! :tent: Be back soon.

-
-
-

That is so funny! :joy:

-
-
-
-

Marking and highlighting text

-
-

I need to highlight these very important words.

-
-
-
-

Subscript and Superscript

-
-

H2O

-
-
-

X2

-
-
-
-

Delimiter

-
-

based upon a -

-
-
-

_*

-
-
-

based upon a *

-
-
-

*_

-
-
-
-

Quotes

-
-
-
-

This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj

-
-
-
-
-
-
-

This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +---- + +== LaTeX + +=== LaTeX in inline-code + + and and + +== LaTeX outside of code + +This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green + +== Footnotes + +Here's a simple footnote,footnote:[This is the first footnote.] and here's a longer one.footnote:[Here's one with multiple paragraphs and code.] + +== Anchor links + +<> + +== Formatting + +=== Strikethrough + +[line-through]hashtag:the[#The] world is flat.# We now know that the world is round. This should not be ~struck~ through. + +=== Bold + +This is *bold* text. So is this *bold* text. + +=== Italic + +This is _italic_ text. So is this _italic_ text. + +=== Task List + +* [x] Write the press release +* [ ] Update the website +* [ ] Contact the media + +=== Emoji shortcodes + +Gone camping! :tent: Be back soon. + +That is so funny! :joy: + +=== Marking and highlighting text + +I need to highlight these [highlight]hashtag:very[#very] important words#. + +=== Subscript and Superscript + +H~2~O + +X^2^ + +=== Delimiter + +based upon a - + +''' + +based upon a * + +''' + +=== Quotes + +[quote] +____ +This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +____ + +[quote] +____ +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj -This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj

-
-
-
-
-
-
-
-
-
-1. This is the first footnote. -
-
-2. Here_s one with multiple paragraphs and code. -
-
+____ +

View Raw HTML
-
<div class="sect1">
-<h2 id="bullet-list"><a class="anchor" href="#bullet-list"></a><a class="link" href="#bullet-list">Bullet list</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers"><a class="anchor" href="#headers"></a><a class="link" href="#headers">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header"><a class="anchor" href="#third-level-header"></a><a class="link" href="#third-level-header">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header"><a class="anchor" href="#fourth-level-header"></a><a class="link" href="#fourth-level-header">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header"><a class="anchor" href="#fifth-level-header"></a><a class="link" href="#fifth-level-header">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header"><a class="anchor" href="#sixth-level-header"></a><a class="link" href="#sixth-level-header">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links"><a class="anchor" href="#media-and-links"></a><a class="link" href="#media-and-links">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address"><a class="anchor" href="#nostr-address"></a><a class="link" href="#nostr-address">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag"><a class="anchor" href="#hashtag"></a><a class="link" href="#hashtag">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks"><a class="anchor" href="#wikilinks"></a><a class="link" href="#wikilinks">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url"><a class="anchor" href="#url"></a><a class="link" href="#url">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media"><a class="anchor" href="#media"></a><a class="link" href="#media">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube"><a class="anchor" href="#youtube"></a><a class="link" href="#youtube">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify"><a class="anchor" href="#spotify"></a><a class="link" href="#spotify">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio"><a class="anchor" href="#audio"></a><a class="link" href="#audio">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video"><a class="anchor" href="#video"></a><a class="link" href="#video">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables"><a class="anchor" href="#tables"></a><a class="link" href="#tables">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly"><a class="anchor" href="#orderly"></a><a class="link" href="#orderly">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly"><a class="anchor" href="#unorderly"></a><a class="link" href="#unorderly">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment"><a class="anchor" href="#with-alignment"></a><a class="link" href="#with-alignment">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks"><a class="anchor" href="#code-blocks"></a><a class="link" href="#code-blocks">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json"><a class="anchor" href="#json"></a><a class="link" href="#json">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+            
<p>== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript"><a class="anchor" href="#typescript"></a><a class="link" href="#typescript">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell"><a class="anchor" href="#shell"></a><a class="link" href="#shell">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex"><a class="anchor" href="#latex"></a><a class="link" href="#latex">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation"><a class="anchor" href="#abc-notation"></a><a class="link" href="#abc-notation">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -8173,619 +7276,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml"><a class="anchor" href="#plantuml"></a><a class="link" href="#plantuml">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn"><a class="anchor" href="#bpmn"></a><a class="link" href="#bpmn">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-2"><a class="anchor" href="#latex-2"></a><a class="link" href="#latex-2">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code"><a class="anchor" href="#latex-in-inline-code"></a><a class="link" href="#latex-in-inline-code">LaTeX in inline-code</a></h3>
-<div class="paragraph">
-<p>`$[ x^n + y^n = z^n \]== Bullet list</p>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-2"><a class="anchor" href="#headers-2"></a><a class="link" href="#headers-2">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-2"><a class="anchor" href="#third-level-header-2"></a><a class="link" href="#third-level-header-2">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-2"><a class="anchor" href="#fourth-level-header-2"></a><a class="link" href="#fourth-level-header-2">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-2"><a class="anchor" href="#fifth-level-header-2"></a><a class="link" href="#fifth-level-header-2">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-2"><a class="anchor" href="#sixth-level-header-2"></a><a class="link" href="#sixth-level-header-2">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-2"><a class="anchor" href="#media-and-links-2"></a><a class="link" href="#media-and-links-2">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-2"><a class="anchor" href="#nostr-address-2"></a><a class="link" href="#nostr-address-2">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-2"><a class="anchor" href="#hashtag-2"></a><a class="link" href="#hashtag-2">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-2"><a class="anchor" href="#wikilinks-2"></a><a class="link" href="#wikilinks-2">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-2"><a class="anchor" href="#url-2"></a><a class="link" href="#url-2">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-2"><a class="anchor" href="#media-2"></a><a class="link" href="#media-2">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-2"><a class="anchor" href="#youtube-2"></a><a class="link" href="#youtube-2">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-2"><a class="anchor" href="#spotify-2"></a><a class="link" href="#spotify-2">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-2"><a class="anchor" href="#audio-2"></a><a class="link" href="#audio-2">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-2"><a class="anchor" href="#video-2"></a><a class="link" href="#video-2">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-2"><a class="anchor" href="#tables-2"></a><a class="link" href="#tables-2">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-2"><a class="anchor" href="#orderly-2"></a><a class="link" href="#orderly-2">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-2"><a class="anchor" href="#unorderly-2"></a><a class="link" href="#unorderly-2">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-2"><a class="anchor" href="#with-alignment-2"></a><a class="link" href="#with-alignment-2">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-2"><a class="anchor" href="#code-blocks-2"></a><a class="link" href="#code-blocks-2">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-2"><a class="anchor" href="#json-2"></a><a class="link" href="#json-2">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-2"><a class="anchor" href="#typescript-2"></a><a class="link" href="#typescript-2">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-2"><a class="anchor" href="#shell-2"></a><a class="link" href="#shell-2">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-3"><a class="anchor" href="#latex-3"></a><a class="link" href="#latex-3">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-2"><a class="anchor" href="#abc-notation-2"></a><a class="link" href="#abc-notation-2">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -8799,621 +7560,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-2"><a class="anchor" href="#plantuml-2"></a><a class="link" href="#plantuml-2">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-2"><a class="anchor" href="#bpmn-2"></a><a class="link" href="#bpmn-2">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-4"><a class="anchor" href="#latex-4"></a><a class="link" href="#latex-4">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-2"><a class="anchor" href="#latex-in-inline-code-2"></a><a class="link" href="#latex-in-inline-code-2">LaTeX in inline-code</a></h3>
-<div class="literalblock">
-<div class="content">
-<pre>and `$[\sqrt{x^2+1}\]== Bullet list</pre>
-</div>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-3"><a class="anchor" href="#headers-3"></a><a class="link" href="#headers-3">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-3"><a class="anchor" href="#third-level-header-3"></a><a class="link" href="#third-level-header-3">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-3"><a class="anchor" href="#fourth-level-header-3"></a><a class="link" href="#fourth-level-header-3">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-3"><a class="anchor" href="#fifth-level-header-3"></a><a class="link" href="#fifth-level-header-3">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-3"><a class="anchor" href="#sixth-level-header-3"></a><a class="link" href="#sixth-level-header-3">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-3"><a class="anchor" href="#media-and-links-3"></a><a class="link" href="#media-and-links-3">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-3"><a class="anchor" href="#nostr-address-3"></a><a class="link" href="#nostr-address-3">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-3"><a class="anchor" href="#hashtag-3"></a><a class="link" href="#hashtag-3">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-3"><a class="anchor" href="#wikilinks-3"></a><a class="link" href="#wikilinks-3">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-3"><a class="anchor" href="#url-3"></a><a class="link" href="#url-3">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-3"><a class="anchor" href="#media-3"></a><a class="link" href="#media-3">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-3"><a class="anchor" href="#youtube-3"></a><a class="link" href="#youtube-3">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-3"><a class="anchor" href="#spotify-3"></a><a class="link" href="#spotify-3">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-3"><a class="anchor" href="#audio-3"></a><a class="link" href="#audio-3">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-3"><a class="anchor" href="#video-3"></a><a class="link" href="#video-3">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-3"><a class="anchor" href="#tables-3"></a><a class="link" href="#tables-3">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-3"><a class="anchor" href="#orderly-3"></a><a class="link" href="#orderly-3">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-3"><a class="anchor" href="#unorderly-3"></a><a class="link" href="#unorderly-3">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-3"><a class="anchor" href="#with-alignment-3"></a><a class="link" href="#with-alignment-3">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-3"><a class="anchor" href="#code-blocks-3"></a><a class="link" href="#code-blocks-3">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-3"><a class="anchor" href="#json-3"></a><a class="link" href="#json-3">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and `$[\sqrt{x^2+1}\]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-3"><a class="anchor" href="#typescript-3"></a><a class="link" href="#typescript-3">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-3"><a class="anchor" href="#shell-3"></a><a class="link" href="#shell-3">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-5"><a class="anchor" href="#latex-5"></a><a class="link" href="#latex-5">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-3"><a class="anchor" href="#abc-notation-3"></a><a class="link" href="#abc-notation-3">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -9427,619 +7844,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-3"><a class="anchor" href="#plantuml-3"></a><a class="link" href="#plantuml-3">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-3"><a class="anchor" href="#bpmn-3"></a><a class="link" href="#bpmn-3">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-6"><a class="anchor" href="#latex-6"></a><a class="link" href="#latex-6">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-3"><a class="anchor" href="#latex-in-inline-code-3"></a><a class="link" href="#latex-in-inline-code-3">LaTeX in inline-code</a></h3>
-<div class="paragraph">
-<p>`$[ x^n + y^n = z^n \]== Bullet list</p>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-4"><a class="anchor" href="#headers-4"></a><a class="link" href="#headers-4">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-4"><a class="anchor" href="#third-level-header-4"></a><a class="link" href="#third-level-header-4">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-4"><a class="anchor" href="#fourth-level-header-4"></a><a class="link" href="#fourth-level-header-4">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-4"><a class="anchor" href="#fifth-level-header-4"></a><a class="link" href="#fifth-level-header-4">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-4"><a class="anchor" href="#sixth-level-header-4"></a><a class="link" href="#sixth-level-header-4">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-4"><a class="anchor" href="#media-and-links-4"></a><a class="link" href="#media-and-links-4">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-4"><a class="anchor" href="#nostr-address-4"></a><a class="link" href="#nostr-address-4">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-4"><a class="anchor" href="#hashtag-4"></a><a class="link" href="#hashtag-4">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-4"><a class="anchor" href="#wikilinks-4"></a><a class="link" href="#wikilinks-4">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-4"><a class="anchor" href="#url-4"></a><a class="link" href="#url-4">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-4"><a class="anchor" href="#media-4"></a><a class="link" href="#media-4">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-4"><a class="anchor" href="#youtube-4"></a><a class="link" href="#youtube-4">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-4"><a class="anchor" href="#spotify-4"></a><a class="link" href="#spotify-4">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-4"><a class="anchor" href="#audio-4"></a><a class="link" href="#audio-4">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-4"><a class="anchor" href="#video-4"></a><a class="link" href="#video-4">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-4"><a class="anchor" href="#tables-4"></a><a class="link" href="#tables-4">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-4"><a class="anchor" href="#orderly-4"></a><a class="link" href="#orderly-4">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-4"><a class="anchor" href="#unorderly-4"></a><a class="link" href="#unorderly-4">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-4"><a class="anchor" href="#with-alignment-4"></a><a class="link" href="#with-alignment-4">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-4"><a class="anchor" href="#code-blocks-4"></a><a class="link" href="#code-blocks-4">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-4"><a class="anchor" href="#json-4"></a><a class="link" href="#json-4">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-4"><a class="anchor" href="#typescript-4"></a><a class="link" href="#typescript-4">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-4"><a class="anchor" href="#shell-4"></a><a class="link" href="#shell-4">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-7"><a class="anchor" href="#latex-7"></a><a class="link" href="#latex-7">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-4"><a class="anchor" href="#abc-notation-4"></a><a class="link" href="#abc-notation-4">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -10053,621 +8128,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-4"><a class="anchor" href="#plantuml-4"></a><a class="link" href="#plantuml-4">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-4"><a class="anchor" href="#bpmn-4"></a><a class="link" href="#bpmn-4">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-8"><a class="anchor" href="#latex-8"></a><a class="link" href="#latex-8">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-4"><a class="anchor" href="#latex-in-inline-code-4"></a><a class="link" href="#latex-in-inline-code-4">LaTeX in inline-code</a></h3>
-<div class="literalblock">
-<div class="content">
-<pre>and  and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}== Bullet list</pre>
-</div>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-5"><a class="anchor" href="#headers-5"></a><a class="link" href="#headers-5">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-5"><a class="anchor" href="#third-level-header-5"></a><a class="link" href="#third-level-header-5">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-5"><a class="anchor" href="#fourth-level-header-5"></a><a class="link" href="#fourth-level-header-5">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-5"><a class="anchor" href="#fifth-level-header-5"></a><a class="link" href="#fifth-level-header-5">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-5"><a class="anchor" href="#sixth-level-header-5"></a><a class="link" href="#sixth-level-header-5">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-5"><a class="anchor" href="#media-and-links-5"></a><a class="link" href="#media-and-links-5">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-5"><a class="anchor" href="#nostr-address-5"></a><a class="link" href="#nostr-address-5">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-5"><a class="anchor" href="#hashtag-5"></a><a class="link" href="#hashtag-5">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-5"><a class="anchor" href="#wikilinks-5"></a><a class="link" href="#wikilinks-5">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-5"><a class="anchor" href="#url-5"></a><a class="link" href="#url-5">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-5"><a class="anchor" href="#media-5"></a><a class="link" href="#media-5">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-5"><a class="anchor" href="#youtube-5"></a><a class="link" href="#youtube-5">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-5"><a class="anchor" href="#spotify-5"></a><a class="link" href="#spotify-5">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-5"><a class="anchor" href="#audio-5"></a><a class="link" href="#audio-5">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-5"><a class="anchor" href="#video-5"></a><a class="link" href="#video-5">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-5"><a class="anchor" href="#tables-5"></a><a class="link" href="#tables-5">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-5"><a class="anchor" href="#orderly-5"></a><a class="link" href="#orderly-5">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-5"><a class="anchor" href="#unorderly-5"></a><a class="link" href="#unorderly-5">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-5"><a class="anchor" href="#with-alignment-5"></a><a class="link" href="#with-alignment-5">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-5"><a class="anchor" href="#code-blocks-5"></a><a class="link" href="#code-blocks-5">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-5"><a class="anchor" href="#json-5"></a><a class="link" href="#json-5">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and  and `$\color{blue}{X \sim Normal \; (\mu,\sigma^2)}== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-5"><a class="anchor" href="#typescript-5"></a><a class="link" href="#typescript-5">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-5"><a class="anchor" href="#shell-5"></a><a class="link" href="#shell-5">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-9"><a class="anchor" href="#latex-9"></a><a class="link" href="#latex-9">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-5"><a class="anchor" href="#abc-notation-5"></a><a class="link" href="#abc-notation-5">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -10681,619 +8412,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-5"><a class="anchor" href="#plantuml-5"></a><a class="link" href="#plantuml-5">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-5"><a class="anchor" href="#bpmn-5"></a><a class="link" href="#bpmn-5">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-10"><a class="anchor" href="#latex-10"></a><a class="link" href="#latex-10">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-5"><a class="anchor" href="#latex-in-inline-code-5"></a><a class="link" href="#latex-in-inline-code-5">LaTeX in inline-code</a></h3>
-<div class="paragraph">
-<p>`$[ x^n + y^n = z^n \]== Bullet list</p>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-6"><a class="anchor" href="#headers-6"></a><a class="link" href="#headers-6">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-6"><a class="anchor" href="#third-level-header-6"></a><a class="link" href="#third-level-header-6">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-6"><a class="anchor" href="#fourth-level-header-6"></a><a class="link" href="#fourth-level-header-6">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-6"><a class="anchor" href="#fifth-level-header-6"></a><a class="link" href="#fifth-level-header-6">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-6"><a class="anchor" href="#sixth-level-header-6"></a><a class="link" href="#sixth-level-header-6">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-6"><a class="anchor" href="#media-and-links-6"></a><a class="link" href="#media-and-links-6">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-6"><a class="anchor" href="#nostr-address-6"></a><a class="link" href="#nostr-address-6">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-6"><a class="anchor" href="#hashtag-6"></a><a class="link" href="#hashtag-6">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-6"><a class="anchor" href="#wikilinks-6"></a><a class="link" href="#wikilinks-6">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-6"><a class="anchor" href="#url-6"></a><a class="link" href="#url-6">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-6"><a class="anchor" href="#media-6"></a><a class="link" href="#media-6">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-6"><a class="anchor" href="#youtube-6"></a><a class="link" href="#youtube-6">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-6"><a class="anchor" href="#spotify-6"></a><a class="link" href="#spotify-6">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-6"><a class="anchor" href="#audio-6"></a><a class="link" href="#audio-6">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-6"><a class="anchor" href="#video-6"></a><a class="link" href="#video-6">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-6"><a class="anchor" href="#tables-6"></a><a class="link" href="#tables-6">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-6"><a class="anchor" href="#orderly-6"></a><a class="link" href="#orderly-6">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-6"><a class="anchor" href="#unorderly-6"></a><a class="link" href="#unorderly-6">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-6"><a class="anchor" href="#with-alignment-6"></a><a class="link" href="#with-alignment-6">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-6"><a class="anchor" href="#code-blocks-6"></a><a class="link" href="#code-blocks-6">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-6"><a class="anchor" href="#json-6"></a><a class="link" href="#json-6">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-6"><a class="anchor" href="#typescript-6"></a><a class="link" href="#typescript-6">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-6"><a class="anchor" href="#shell-6"></a><a class="link" href="#shell-6">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-11"><a class="anchor" href="#latex-11"></a><a class="link" href="#latex-11">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-6"><a class="anchor" href="#abc-notation-6"></a><a class="link" href="#abc-notation-6">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -11307,621 +8696,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-6"><a class="anchor" href="#plantuml-6"></a><a class="link" href="#plantuml-6">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-6"><a class="anchor" href="#bpmn-6"></a><a class="link" href="#bpmn-6">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-12"><a class="anchor" href="#latex-12"></a><a class="link" href="#latex-12">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-6"><a class="anchor" href="#latex-in-inline-code-6"></a><a class="link" href="#latex-in-inline-code-6">LaTeX in inline-code</a></h3>
-<div class="literalblock">
-<div class="content">
-<pre>and `$[\sqrt{x^2+1}\]== Bullet list</pre>
-</div>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-7"><a class="anchor" href="#headers-7"></a><a class="link" href="#headers-7">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-7"><a class="anchor" href="#third-level-header-7"></a><a class="link" href="#third-level-header-7">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-7"><a class="anchor" href="#fourth-level-header-7"></a><a class="link" href="#fourth-level-header-7">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-7"><a class="anchor" href="#fifth-level-header-7"></a><a class="link" href="#fifth-level-header-7">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-7"><a class="anchor" href="#sixth-level-header-7"></a><a class="link" href="#sixth-level-header-7">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-7"><a class="anchor" href="#media-and-links-7"></a><a class="link" href="#media-and-links-7">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-7"><a class="anchor" href="#nostr-address-7"></a><a class="link" href="#nostr-address-7">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-7"><a class="anchor" href="#hashtag-7"></a><a class="link" href="#hashtag-7">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-7"><a class="anchor" href="#wikilinks-7"></a><a class="link" href="#wikilinks-7">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-7"><a class="anchor" href="#url-7"></a><a class="link" href="#url-7">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-7"><a class="anchor" href="#media-7"></a><a class="link" href="#media-7">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-7"><a class="anchor" href="#youtube-7"></a><a class="link" href="#youtube-7">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-7"><a class="anchor" href="#spotify-7"></a><a class="link" href="#spotify-7">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-7"><a class="anchor" href="#audio-7"></a><a class="link" href="#audio-7">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-7"><a class="anchor" href="#video-7"></a><a class="link" href="#video-7">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-7"><a class="anchor" href="#tables-7"></a><a class="link" href="#tables-7">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-7"><a class="anchor" href="#orderly-7"></a><a class="link" href="#orderly-7">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-7"><a class="anchor" href="#unorderly-7"></a><a class="link" href="#unorderly-7">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-7"><a class="anchor" href="#with-alignment-7"></a><a class="link" href="#with-alignment-7">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-7"><a class="anchor" href="#code-blocks-7"></a><a class="link" href="#code-blocks-7">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-7"><a class="anchor" href="#json-7"></a><a class="link" href="#json-7">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and `$[\sqrt{x^2+1}\]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-7"><a class="anchor" href="#typescript-7"></a><a class="link" href="#typescript-7">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-7"><a class="anchor" href="#shell-7"></a><a class="link" href="#shell-7">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-13"><a class="anchor" href="#latex-13"></a><a class="link" href="#latex-13">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-7"><a class="anchor" href="#abc-notation-7"></a><a class="link" href="#abc-notation-7">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -11935,619 +8980,277 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-7"><a class="anchor" href="#plantuml-7"></a><a class="link" href="#plantuml-7">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-7"><a class="anchor" href="#bpmn-7"></a><a class="link" href="#bpmn-7">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-14"><a class="anchor" href="#latex-14"></a><a class="link" href="#latex-14">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-7"><a class="anchor" href="#latex-in-inline-code-7"></a><a class="link" href="#latex-in-inline-code-7">LaTeX in inline-code</a></h3>
-<div class="paragraph">
-<p>`$[ x^n + y^n = z^n \]== Bullet list</p>
-</div>
-<div class="paragraph">
-<p>This is a test unordered list with mixed bullets:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item with a number 2. in it</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Another unordered list:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>1st item</p>
-</li>
-<li>
-<p>2nd item</p>
-</li>
-<li>
-<p>third item containing <em>italic</em> text</p>
-<div class="ulist">
-<ul>
-<li>
-<p>indented item</p>
-</li>
-<li>
-<p>second indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>fourth item</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This is a test ordered list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist loweralpha">
-<ol class="loweralpha" type="a">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Ordered list where everything has no number:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is a mixed list with indented items:</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>This is another mixed list with indented items:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First item</p>
-</li>
-<li>
-<p>Second item</p>
-</li>
-<li>
-<p>Third item</p>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Indented item</p>
-</li>
-<li>
-<p>Indented item</p>
-</li>
-</ol>
-</div>
-</li>
-<li>
-<p>Fourth item</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="headers-8"><a class="anchor" href="#headers-8"></a><a class="link" href="#headers-8">Headers</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="third-level-header-8"><a class="anchor" href="#third-level-header-8"></a><a class="link" href="#third-level-header-8">Third-level header</a></h3>
-<div class="sect3">
-<h4 id="fourth-level-header-8"><a class="anchor" href="#fourth-level-header-8"></a><a class="link" href="#fourth-level-header-8">Fourth-level header</a></h4>
-<div class="sect4">
-<h5 id="fifth-level-header-8"><a class="anchor" href="#fifth-level-header-8"></a><a class="link" href="#fifth-level-header-8">Fifth-level header</a></h5>
-<div class="sect5">
-<h6 id="sixth-level-header-8"><a class="anchor" href="#sixth-level-header-8"></a><a class="link" href="#sixth-level-header-8">Sixth-level header</a></h6>
-
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="media-and-links-8"><a class="anchor" href="#media-and-links-8"></a><a class="link" href="#media-and-links-8">Media and Links</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="nostr-address-8"><a class="anchor" href="#nostr-address-8"></a><a class="link" href="#nostr-address-8">Nostr address</a></h3>
-<div class="paragraph">
-<p>This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</p>
-</div>
-<div class="paragraph">
-<p>This is also plaintext:</p>
-</div>
-<div class="paragraph">
-<p>npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q</p>
-</div>
-<div class="paragraph">
-<p>These should be turned into links:</p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l">naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z">npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj">nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh">nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh</a></p>
-</div>
-<div class="paragraph">
-<p><a href="nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg">note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="hashtag-8"><a class="anchor" href="#hashtag-8"></a><a class="link" href="#hashtag-8">Hashtag</a></h3>
-<div class="paragraph">
-<p><a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="testhashtag" data-url="/notes?t=testhashtag" href="/notes?t=testhashtag">#testhashtag</a> at the start of the line and <a class="hashtag-link text-primary-600 dark:text-primary-500 hover:underline" data-topic="inlinehashtag" data-url="/notes?t=inlinehashtag" href="/notes?t=inlinehashtag">#inlinehashtag</a> in the middle</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="wikilinks-8"><a class="anchor" href="#wikilinks-8"></a><a class="link" href="#wikilinks-8">Wikilinks</a></h3>
-<div class="paragraph">
-<p><a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="nkbip-01" data-url="/events?d=nkbip-01" href="/events?d=nkbip-01">Specification</a> and <a class="wikilink text-primary-600 dark:text-primary-500 hover:underline" data-dtag="mirepoix" data-url="/events?d=mirepoix" href="/events?d=mirepoix">mirepoix</a></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="url-8"><a class="anchor" href="#url-8"></a><a class="link" href="#url-8">URL</a></h3>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-<div class="paragraph">
-<p><span class="opengraph-link-container" data-og-url="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html">
-      <a href="https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>[Welt Online link]</p>
-</div>
-<div class="paragraph">
-<p>this should render as plaintext: <code>http://www.example.com</code></p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink: www.example.com</p>
-</div>
-<div class="paragraph">
-<p>this should be a hyperlink to the http URL with the same address, so <a href="https://theforest.nostr1.com/" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com</a> should render like <a href="https://theforest.nostr1.com"https://theforest.nostr1.com" target="_blank" rel="noopener noreferrer">wss://theforest.nostr1.com<a href="https://theforest.nostr1.com" target="_blank" rel="noreferrer noopener" class="break-words inline-flex items-baseline gap-1">width=100%&quot;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&quot;imageblock&quot;&gt;
-&lt;div class=&quot;content&quot;&gt;
-&lt;img src=&quot;image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png&quot; alt=&quot;https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>[width=100%][test image" width="100%">
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="media-8"><a class="anchor" href="#media-8"></a><a class="link" href="#media-8">Media</a></h3>
-<div class="sect3">
-<h4 id="youtube-8"><a class="anchor" href="#youtube-8"></a><a class="link" href="#youtube-8">YouTube</a></h4>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a></p>
-</div>
-<div class="paragraph">
-<p><a href="https://youtube.com/shorts/ZWfvChb-i0w" target="_blank" rel="noopener noreferrer">https://youtube.com/shorts/ZWfvChb-i0w</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Youtube link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="spotify-8"><a class="anchor" href="#spotify-8"></a><a class="link" href="#spotify-8">Spotify</a></h4>
-<div class="paragraph">
-<p><div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div></p>
-</div>
-<div class="paragraph">
-<p><a href="<div class="media-embed spotify-embed" style="margin: 1rem 0;">
-      <iframe 
-        style="border-radius: 12px; width: 100%; max-width: 100%;" 
-        src="https://open.spotify.com/embed/episode/1GSZFA8vWltPyxYkArdRKx?utm_source=generator" 
-        width="100%" 
-        height="352" 
-        frameborder="0" 
-        allowfullscreen="" 
-        allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" 
-        loading="lazy">
-      </iframe>
-    </div>"><span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Spotify link with pic&lt;/a&gt; <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="audio-8"><a class="anchor" href="#audio-8"></a><a class="link" href="#audio-8">Audio</a></h4>
-<div class="paragraph">
-<p>MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:audio:<a href="https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3" target="_blank" rel="noopener noreferrer">https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Audio link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="video-8"><a class="anchor" href="#video-8"></a><a class="link" href="#video-8">Video</a></h4>
-<div class="paragraph">
-<p>MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a></p>
-</div>
-<div class="paragraph">
-<p>link:MEDIA:video:<a href="https://v.nostr.build/MTjaYib4upQuf8zn.mp4" target="_blank" rel="noopener noreferrer">https://v.nostr.build/MTjaYib4upQuf8zn.mp4</a>[<span class="image"><img src="image::<span class="opengraph-link-container max-w-[400px] object-contain cursor-zoom-in" data-og-url="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" data-asciidoc-image="true" data-image-index="0" data-image-src="image::<span class=">
-      <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png&amp;quot;" target="_blank" rel="noreferrer noopener" class="opengraph-link break-words inline-flex items-baseline gap-1">Video link with pic <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg> <svg style="width: 0.75rem; height: 0.75rem; flex-shrink: 0;" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>
-      <div class="opengraph-preview" data-og-loading="true" style="display: none;">
-        <div class="opengraph-card">
-          <div class="opengraph-image-container">
-            <img class="opengraph-image" src="" alt="" style="display: none;" />
-          </div>
-          <div class="opengraph-content">
-            <div class="opengraph-site"></div>
-            <div class="opengraph-title"></div>
-            <div class="opengraph-description"></div>
-          </div>
-        </div>
-      </div>
-    </span>]</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="tables-8"><a class="anchor" href="#tables-8"></a><a class="link" href="#tables-8">Tables</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="orderly-8"><a class="anchor" href="#orderly-8"></a><a class="link" href="#orderly-8">Orderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="unorderly-8"><a class="anchor" href="#unorderly-8"></a><a class="link" href="#unorderly-8">Unorderly</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Title</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Text</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="with-alignment-8"><a class="anchor" href="#with-alignment-8"></a><a class="link" href="#with-alignment-8">With alignment</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Syntax</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Description</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Test Text</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Header</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Title</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">Here_s this</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Paragraph</p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Text</p></td>
-<td class="tableblock halign-right valign-top"><p class="tableblock">And more</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="code-blocks-8"><a class="anchor" href="#code-blocks-8"></a><a class="link" href="#code-blocks-8">Code blocks</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="json-8"><a class="anchor" href="#json-8"></a><a class="link" href="#json-8">json</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+`$[ x^n + y^n = z^n \]== Bullet list
+
+This is a test unordered list with mixed bullets:
+
+* First item with a number 2. in it
+* Second item
+* Third item
+** Indented item
+** Indented item
+* Fourth item
+
+Another unordered list:
+
+* 1st item
+* 2nd item
+* third item containing _italic_ text
+** indented item
+** second indented item
+* fourth item
+
+This is a test ordered list with indented items:
+
+. First item
+. Second item
+. Third item
+.. Indented item
+.. Indented item
+. Fourth item
+
+Ordered list where everything has no number:
+
+. First item
+. Second item
+. Third item
+. Fourth item
+
+This is a mixed list with indented items:
+
+. First item
+. Second item
+. Third item
+* Indented item
+* Indented item
+. Fourth item
+
+This is another mixed list with indented items:
+
+* First item
+* Second item
+* Third item
+. Indented item
+. Indented item
+* Fourth item
+
+== Headers
+
+=== Third-level header
+
+==== Fourth-level header
+
+===== Fifth-level header
+
+====== Sixth-level header
+
+== Media and Links
+
+=== Nostr address
+
+This should be ignored and rendered as plaintext: naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l
+
+This is also plaintext:
+
+npub1gv069u6q7zkl393ad47xutpqmyfj0rrfrlnqnlfc2ld38k8nnl4st9wa6q
+
+These should be turned into links:
+
+link:nostr:naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnvv9hxgtcqy4sj6ar9wd6xv6tvv5kkvmmj94kkzuntv3hhwm3dvfuj6enyxgcrset98p3nsve2v5l[naddr1qv...]
+
+link:nostr:npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z[npub1l5s...]
+
+link:nostr:nevent1qvzqqqqqqypzp382htsmu08k277ps40wqhnfm60st89h5pvjyutghq9cjasuh38qqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qqsysletg3lqnl4uy59xsj4rp9rgw67wg23l827f4uvn5ckn20fuxcq45d8pj[nevent1q...]
+
+link:nostr:nprofile1qqsxhedgkuneycxpcdjlg6tgtxdy8gurdz64nq2h0flc288a0jag98qguy3nh[nprofile...]
+
+link:nostr:note1txyefcha2xt3pgungx4k6j077dsteyef6hzpyuuku00s4h0eymzq4k33yg[note1txy...]
+
+=== Hashtag
+
+hashtag:testhashtag[#testhashtag] at the start of the line and hashtag:inlinehashtag[#inlinehashtag] in the middle
+
+=== Wikilinks
+
+WIKILINK:nkbip-01|Specification and WIKILINK:mirepoix|mirepoix
+
+=== URL
+
+https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html
+
+link:https://www.welt.de/politik/ausland/article69a7ca00ad41f3cd65a1bc63/iran-drohte-jedes-schiff-zu-verbrennen-trump-will-oel-tanker-durch-strasse-von-hormus-eskortieren.html[Welt Online link]
+
+this should render as plaintext: `http://www.example.com`
+
+this should be a hyperlink: www.example.com
+
+this should be a hyperlink to the http URL with the same address, so wss://theforest.nostr1.com should render like link:wss://theforest.nostr1.com[https://theforest.nostr1.com]
+
+=== Images
+
+https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png
+
+image::https://blog.ronin.cloud/content/images/size/w2000/2022/02/markdown.png[test image, width=100%]
+
+=== Media
+
+==== YouTube
+
+https://youtube.com/shorts/ZWfvChb-i0w
+
+link:https://youtube.com/shorts/ZWfvChb-i0w[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Youtube link with pic]]
+
+==== Spotify
+
+MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ
+
+link:MEDIA:spotify:episode:1GSZFA8vWltPyxYkArdRKx?si=bq6-az28TcuP596feTkRFQ[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Spotify link with pic]]
+
+==== Audio
+
+MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3
+
+link:MEDIA:audio:https://media.blubrry.com/takeituneasy/ins.blubrry.com/takeituneasy/lex_ai_rick_beato.mp3[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Audio link with pic]]
+
+==== Video
+
+MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4
+
+link:MEDIA:video:https://v.nostr.build/MTjaYib4upQuf8zn.mp4[image:https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/YouTube_social_white_square_%282024%29.svg/960px-YouTube_social_white_square_%282024%29.svg.png[Video link with pic]]
+
+== Tables
+
+=== Orderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== Unorderly
+
+[cols="1,2"]
+|===
+|Syntax|Description
+|Header|Title
+|Paragraph|Text
+|===
+
+=== With alignment
+
+[cols="<,^,>"]
+|===
+|Syntax|Description|Test Text
+|Header|Title|Here's this
+|Paragraph|Text|And more
+|===
+
+== Code blocks
+
+=== json
+
+[source,json]
+----
 {
-    "id": "&lt;event_id&gt;",
-    "pubkey": "&lt;event_originator_pubkey&gt;",
+    "id": "<event_id>",
+    "pubkey": "<event_originator_pubkey>",
     "created_at": 1725087283,
     "kind": 30040,
     "tags": [
-        ["d", "aesop_s-fables-by-aesop"],
-        ["title", "Aesop_s Fables"],
+        ["d", "aesop's-fables-by-aesop"],
+        ["title", "Aesop's Fables"],
         ["author", "Aesop"],
     ],
-    "sig": "&lt;event_signature&gt;"
+    "sig": "<event_signature>"
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="typescript-8"><a class="anchor" href="#typescript-8"></a><a class="link" href="#typescript-8">typescript</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== typescript
+
+[source,typescript]
+----
 /**
  * Get Nostr identifier type
  */
-function getNostrType(id: string): _npub_ | _nprofile_ | _nevent_ | _naddr_ | _note_ | null {
-  if (id.startsWith(_npub_)) return _npub_;
-  if (id.startsWith(_nprofile_)) return _nprofile_;
-  if (id.startsWith(_nevent_)) return _nevent_;
-  if (id.startsWith(_naddr_)) return _naddr_;
-  if (id.startsWith(_note_)) return _note_;
+function getNostrType(id: string): 'npub' | 'nprofile' | 'nevent' | 'naddr' | 'note' | null {
+  if (id.startsWith('npub')) return 'npub';
+  if (id.startsWith('nprofile')) return 'nprofile';
+  if (id.startsWith('nevent')) return 'nevent';
+  if (id.startsWith('naddr')) return 'naddr';
+  if (id.startsWith('note')) return 'note';
   return null;
 }
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="shell-8"><a class="anchor" href="#shell-8"></a><a class="link" href="#shell-8">shell</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>mkdir new_directory
-cp source.txt destination.txt</p>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="latex-15"><a class="anchor" href="#latex-15"></a><a class="link" href="#latex-15">LaTeX</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
-M =
+----
+
+=== shell
+
+[source,shell]
+----
+
+mkdir new_directory
+cp source.txt destination.txt
+
+----
+
+=== LaTeX
+
+[source,latex]
+----
+$$
+M = 
 \begin{bmatrix}
-\frac{5}{6} &amp; \frac{1}{6} &amp; 0 \\[0.3em]
-\frac{5}{6} &amp; 0 &amp; \frac{1}{6} \\[0.3em]
-0 &amp; \frac{5}{6} &amp; \frac{1}{6}
+\frac{5}{6} & \frac{1}{6} & 0 \\[0.3em]
+\frac{5}{6} & 0 & \frac{1}{6} \\[0.3em]
+0 & \frac{5}{6} & \frac{1}{6}
 \end{bmatrix}
-$
-'''</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
-$
+$$
+----
+
+[source,latex]
+----
+$$
 f(x)=
 \begin{cases}
-1/d_{ij} &amp; \quad \text{when $d_{ij} \leq 160$}\\
-0 &amp; \quad \text{otherwise}
+1/d_{ij} & \quad \text{when $d_{ij} \leq 160$}\\ 
+0 & \quad \text{otherwise}
 \end{cases}
-$
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="abc-notation-8"><a class="anchor" href="#abc-notation-8"></a><a class="link" href="#abc-notation-8">ABC Notation</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+$$
+----
+
+=== ABC Notation
+
+[source,abc]
+----
 X:1
 T:Ohne Titel
 C:Aufgezeichnet 1784
@@ -12561,184 +9264,109 @@ dd d2 | ee e2 | fg ad | ed/c/ d2 :|
 |:\
 fg ad | cB cA | fg ad | cB cA |\
 dd d2 | ee e2 | fg ad | ed/c/ d2 :|
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="plantuml-8"><a class="anchor" href="#plantuml-8"></a><a class="link" href="#plantuml-8">PlantUML</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== PlantUML
+
+[source,plantuml]
+----
 @startuml
-Alice -&gt; Bob: Authentication Request
-Bob --&gt; Alice: Authentication Response
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
 @enduml
-'''</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bpmn-8"><a class="anchor" href="#bpmn-8"></a><a class="link" href="#bpmn-8">BPMN</a></h3>
-<div class="listingblock">
-<div class="content">
-<pre><code>'''
+----
+
+=== BPMN
+
+[source,plantuml]
+----
 @startbpmn
 start
 :Task 1;
 :Task 2;
 stop
 @endbpmn
-'''</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-16"><a class="anchor" href="#latex-16"></a><a class="link" href="#latex-16">LaTeX</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="latex-in-inline-code-8"><a class="anchor" href="#latex-in-inline-code-8"></a><a class="link" href="#latex-in-inline-code-8">LaTeX in inline-code</a></h3>
-<div class="literalblock">
-<div class="content">
-<pre>and  and</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="latex-outside-of-code"><a class="anchor" href="#latex-outside-of-code"></a><a class="link" href="#latex-outside-of-code">LaTeX outside of code</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>This is a latex code block \mathbb{N} = \{ a \in \mathbb{Z} : a &gt; 0 \} and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="footnotes"><a class="anchor" href="#footnotes"></a><a class="link" href="#footnotes">Footnotes</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>Here_s a simple footnote,<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup> and here_s a longer one.<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup></p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="anchor-links"><a class="anchor" href="#anchor-links"></a><a class="link" href="#anchor-links">Anchor links</a></h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p><a href="#bullet-list">Link to bullet list section</a></p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="formatting"><a class="anchor" href="#formatting"></a><a class="link" href="#formatting">Formatting</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="strikethrough"><a class="anchor" href="#strikethrough"></a><a class="link" href="#strikethrough">Strikethrough</a></h3>
-<div class="paragraph">
-<p><span class="line-through line-through-2">The world is flat.</span> We now know that the world is round. This should not be <sub>struck</sub> through.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="bold"><a class="anchor" href="#bold"></a><a class="link" href="#bold">Bold</a></h3>
-<div class="paragraph">
-<p>This is <strong>bold</strong> text. So is this <strong>bold</strong> text.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="italic"><a class="anchor" href="#italic"></a><a class="link" href="#italic">Italic</a></h3>
-<div class="paragraph">
-<p>This is <em>italic</em> text. So is this <em>italic</em> text.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="task-list"><a class="anchor" href="#task-list"></a><a class="link" href="#task-list">Task List</a></h3>
-<div class="ulist checklist">
-<ul class="checklist">
-<li>
-<p>&#10003; Write the press release</p>
-</li>
-<li>
-<p>&#10063; Update the website</p>
-</li>
-<li>
-<p>&#10063; Contact the media</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="emoji-shortcodes"><a class="anchor" href="#emoji-shortcodes"></a><a class="link" href="#emoji-shortcodes">Emoji shortcodes</a></h3>
-<div class="paragraph">
-<p>Gone camping! :tent: Be back soon.</p>
-</div>
-<div class="paragraph">
-<p>That is so funny! :joy:</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="marking-and-highlighting-text"><a class="anchor" href="#marking-and-highlighting-text"></a><a class="link" href="#marking-and-highlighting-text">Marking and highlighting text</a></h3>
-<div class="paragraph">
-<p>I need to highlight these <span class="highlight">very important words</span>.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="subscript-and-superscript"><a class="anchor" href="#subscript-and-superscript"></a><a class="link" href="#subscript-and-superscript">Subscript and Superscript</a></h3>
-<div class="paragraph">
-<p>H<sub>2</sub>O</p>
-</div>
-<div class="paragraph">
-<p>X<sup>2</sup></p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="delimiter"><a class="anchor" href="#delimiter"></a><a class="link" href="#delimiter">Delimiter</a></h3>
-<div class="paragraph">
-<p>based upon a -</p>
-</div>
-<div class="paragraph">
-<p>_*</p>
-</div>
-<div class="paragraph">
-<p>based upon a *</p>
-</div>
-<div class="paragraph">
-<p>*_</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="quotes"><a class="anchor" href="#quotes"></a><a class="link" href="#quotes">Quotes</a></h3>
-<div class="quoteblock">
-<blockquote>
-<div class="paragraph">
-<p>This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj</p>
-</div>
-</blockquote>
-</div>
-<div class="quoteblock">
-<blockquote>
-<div class="paragraph">
-<p>This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
+----
+
+== LaTeX
+
+=== LaTeX in inline-code
+
+ and  and 
+
+== LaTeX outside of code
+
+This is a latex code block $$\mathbb{N} = \{ a \in \mathbb{Z} : a > 0 \}$$ and another that is an inline latex $\color{green}{X \sim Normal \; (\mu,\sigma^2)}$ and should be green
+
+== Footnotes
+
+Here's a simple footnote,footnote:[This is the first footnote.] and here's a longer one.footnote:[Here's one with multiple paragraphs and code.]
+
+== Anchor links
+
+<<bullet-list,Link to bullet list section>>
+
+== Formatting
+
+=== Strikethrough
+
+[line-through]hashtag:the[#The] world is flat.# We now know that the world is round. This should not be ~struck~ through.
+
+=== Bold
+
+This is *bold* text. So is this *bold* text.
+
+=== Italic
+
+This is _italic_ text. So is this _italic_ text.
+
+=== Task List
+
+* [x] Write the press release
+* [ ] Update the website
+* [ ] Contact the media
+
+=== Emoji shortcodes
+
+Gone camping! :tent: Be back soon.
+
+That is so funny! :joy:
+
+=== Marking and highlighting text
+
+I need to highlight these [highlight]hashtag:very[#very] important words#.
+
+=== Subscript and Superscript
+
+H~2~O
+
+X^2^
+
+=== Delimiter
+
+based upon a -
+
+'''
+
+based upon a *
+
+'''
+
+=== Quotes
+
+[quote]
+____
+This is a single line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
+____
+
+[quote]
+____
+This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
 This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
 This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj
-This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd  kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj</p>
-</div>
-</blockquote>
-</div>
-</div>
-</div>
-</div>
-<div id="footnotes">
-<hr>
-<div class="footnote" id="_footnotedef_1">
-<a href="#_footnoteref_1">1</a>. This is the first footnote.
-</div>
-<div class="footnote" id="_footnotedef_2">
-<a href="#_footnoteref_2">2</a>. Here_s one with multiple paragraphs and code.
-</div>
-</div>
+This is a multi line blockequote sdfjsdlfkjasldkfjsdölfkjsdlfkjsadlöfkjsdlöfkjsadölfkjsdlf kjsldfkjsdalkjslkdfjlöskdfjlösdkjfsldkfjsöldkfjlösdkfjalsd kfjlsdkfjlödkfjlaksdfjlkjdfslkjalsdkfjlasdkfj alsdkjflskdfj sdfklj +____ +</p>
@@ -12908,485 +9536,6 @@ this should be a hyperlink to the http URL with the same address, so wss://thefo -

Table of Contents

-
- -
- diff --git a/tsconfig.json b/tsconfig.json index 4aed97e..d502406 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "target": "ES2020", "module": "commonjs", "lib": ["ES2020"], - "types": ["node"], + "types": ["node", "jest"], "outDir": "./dist", "rootDir": "./src", "strict": true, diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 0000000..555a1ca --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "types": ["node", "jest"], + "noEmit": true + }, + "include": ["src/**/*", "**/*.test.ts", "generate-test-report.ts"], + "exclude": ["node_modules", "dist"] +}