NoPaste

bbcode.lua

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

Quellcode

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