26 lines
582 B
Ruby
26 lines
582 B
Ruby
![]() |
module Banzai
|
||
|
module Filter
|
||
|
class YamlFrontMatterFilter < HTML::Pipeline::Filter
|
||
|
DELIM = '---'.freeze
|
||
|
|
||
|
# Hat-tip to Middleman: https://git.io/v2e0z
|
||
|
PATTERN = %r{
|
||
|
\A(?:[^\r\n]*coding:[^\r\n]*\r?\n)?
|
||
|
(?<start>#{DELIM})[ ]*\r?\n
|
||
|
(?<frontmatter>.*?)[ ]*\r?\n?
|
||
|
^(?<stop>#{DELIM})[ ]*\r?\n?
|
||
|
\r?\n?
|
||
|
(?<content>.*)
|
||
|
}mx.freeze
|
||
|
|
||
|
def call
|
||
|
match = PATTERN.match(html)
|
||
|
|
||
|
return html unless match
|
||
|
|
||
|
"```yaml\n#{match['frontmatter']}\n```\n\n#{match['content']}"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|