NoPaste

bbcode.lua

von paedubucher
SNIPPET_DESC:
Pandoc-Filter für BBCode-Ausgabe
SNIPPET_CREATION_TIME:
03.03.2025 10:48:58
SNIPPET_PRUNE_TIME:
Unendlich

SNIPPET_TEXT:
  1. function processListPlain(p)
  2.     return string.format('\n[*] %s', pandoc.utils.stringify(p:walk(filters)))
  3. end
  4.  
  5. function processBulletList(bl)
  6.     local inner = bl:walk {
  7.         BulletList = function(l) processBulletList(l.content) end,
  8.     }
  9.     return string.format('[list]\n%s\n[/list]', pandoc.utils.stringify(inner))
  10. end
  11.  
  12. function processOrderedList(bl)
  13.     local inner = bl:walk {
  14.         BulletList = function(l) processOrderedList(l.content) end,
  15.     }
  16.     return string.format('[list=1]\n%s\n[/list]', pandoc.utils.stringify(inner))
  17. end
  18.  
  19. filters = {
  20.     Header = function(h)
  21.         local headerSizes = {
  22.             [1] = 150, [2] = 130, [3] = 120, [4] = 115, [5] = 110, [6] = 105,
  23.         }
  24.         local size = headerSizes[h.level]
  25.         local content = pandoc.utils.stringify(h.content)
  26.         return string.format('[size=%d][b]%s[/b][/size]', size, content)
  27.     end,
  28.     Strong = function(s)
  29.         return string.format('[b]%s[/b]', pandoc.utils.stringify(s))
  30.     end,
  31.     Emph = function(e)
  32.         return string.format('[i]%s[/i]', pandoc.utils.stringify(e))
  33.     end,
  34.     Code = function(c)
  35.         return string.format('[tt]%s[/tt]', pandoc.utils.stringify(c))
  36.     end,
  37.     BlockQuote = function(bq)
  38.         local str = pandoc.utils.stringify(bq)
  39.         return pandoc.RawBlock('plain', string.format('[quote]\n%s\n[/quote]', str))
  40.     end,
  41.     CodeBlock = function(cb)
  42.         return pandoc.RawBlock('plain', string.format('[code]\n%s\n[/%s]', cb.text, 'code'))
  43.     end,
  44.     Link = function(l)
  45.         local content = pandoc.utils.stringify(l.content)
  46.         return string.format('[url=%s]%s[/url]', l.target, content)
  47.     end,
  48.     Plain = processListPlain,
  49.     BulletList = processBulletList,
  50.     OrderedList = processOrderedList,
  51. }
  52.  
  53. function Writer(doc, _opts)
  54.     return pandoc.write(doc:walk(filters), 'plain', { wrap_text = 'wrap-none' })
  55. end
  56.  
  57. -- usage: pandoc -t bbcode.lua input.md -o output.txt

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN