Created
February 24, 2013 01:07
-
-
Save brandonmwest/5022138 to your computer and use it in GitHub Desktop.
Jekyll filter for pretty-printing HTML
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'json' | |
require 'nokogiri' | |
require 'nokogiri-pretty' | |
require 'fileutils' | |
module Jekyll | |
module PrettyPrintFilter | |
def pretty_print(input) | |
#seeing some ASCII-8 come in | |
input = input.encode("UTF-8") | |
#Parsing with nokogiri first cleans up some things the XSLT can't handle | |
content = Nokogiri::HTML::DocumentFragment.parse input | |
parsed_content = content.to_html | |
#Unfortunately nokogiri-pretty can't use DocumentFragments... | |
html = Nokogiri::HTML parsed_content | |
pretty = html.human | |
#...so now we need to remove the stuff it added to make valid HTML | |
output = PrettyPrintFilter.strip_extra_html(pretty) | |
output | |
end | |
def PrettyPrintFilter.strip_extra_html(html) | |
#type declaration | |
html = html.sub('<?xml version="1.0" encoding="ISO-8859-1"?>','') | |
#second <html> tag | |
first = true | |
html = html.gsub('<html>') do |match| | |
if first = true | |
first = false | |
next | |
else | |
'' | |
end | |
end | |
#first </html> tag | |
html = html.sub('</html>','') | |
#second <head> tag | |
first = true | |
html = html.gsub('<head>') do |match| | |
if first = true | |
first = false | |
next | |
else | |
'' | |
end | |
end | |
#first </head> tag | |
html = html.sub('</head>','') | |
#second <body> tag | |
first = true | |
html = html.gsub('<body>') do |match| | |
if first = true | |
first = false | |
next | |
else | |
'' | |
end | |
end | |
#first </body> tag | |
html = html.sub('</body>','') | |
html | |
end | |
end | |
end | |
Liquid::Template.register_filter(Jekyll::PrettyPrintFilter) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment