X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FHlMod.pm;h=36e311060dcf52bb41eed5f6a2cff38bbb2de006;hb=7826c91ef37f9b5fb5396e1168d84a6574385915;hp=014d82fdbc52cb9293a96e0a8829154bb0e85ad3;hpb=60917f384645df7798a9b81ef26ca06df1986072;p=public-inbox.git diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm index 014d82fd..36e31106 100644 --- a/lib/PublicInbox/HlMod.pm +++ b/lib/PublicInbox/HlMod.pm @@ -16,7 +16,7 @@ package PublicInbox::HlMod; use strict; use warnings; use highlight; # SWIG-generated stuff -use PublicInbox::Hval qw(src_escape); +use PublicInbox::Hval qw(src_escape ascii_html); my $hl; sub _parse_filetypes ($) { @@ -127,4 +127,23 @@ sub do_hl_lang { \$out; } +# Highlight text, but support Markdown "```$LANG" notation +# while preserving WYSIWYG of plain-text documentation. +# This is NOT to be enabled by default or encouraged for parsing +# emails, since it is NOT stable and can lead to standards +# proliferation of email. +sub do_hl_text { + my ($self, $str) = @_; + + $$str = join('', map { + if (/\A(``` ?)(\w+)\s*?\n(.+)(^```\s*)\z/sm) { + my ($pfx, $lang, $code, $post) = ($1, $2, $3, $4); + my $hl = do_hl_lang($self, \$code, $lang) || \$code; + $pfx . $lang . "\n" . $$hl . $post; + } else { + ascii_html($_); + } + } split(/(^``` ?\w+\s*?\n.+?^```\s*$)/sm, $$str)); +} + 1;