Last active
September 11, 2017 14:27
-
-
Save defHLT/80312907590514526f76dad61bb1b21e to your computer and use it in GitHub Desktop.
Parser from markdown to wordpress for RayWenderlich website
This file contains hidden or 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
#!/usr/bin/ruby | |
require 'redcarpet' | |
class RayParser < Redcarpet::Render::HTML | |
# *important concept* | |
def emphasis(text) | |
"<i>#{text}</i>" | |
end | |
# filenames, menus. e.g.: **App.java** | |
def double_emphasis(text) | |
"<em>#{text}</em>" | |
end | |
def header(text, level) | |
case level | |
when 1 | |
"<h2>#{text}</h2>\n" | |
when 2 | |
"<h3>#{text}</h3>\n" | |
when 3 | |
"<em>#{text}</em>\n" | |
else | |
throw "Unsupported header level #{level}" | |
end | |
end | |
def block_code(code, language) | |
"<pre lang=\"#{language}\">\n#{code}</pre>" | |
end | |
# Wordpress will insert <p> tags | |
def paragraph(text) | |
"\n#{text}\n" | |
end | |
# Wordpress will escape ampersands and single quotes | |
def postprocess(doc) | |
doc.gsub("&", ?&) | |
.gsub("'", ?') | |
end | |
end | |
if ARGV.size != 1 | |
puts "Usage: #{$PROGRAM_NAME} file.md" | |
exit | |
end | |
markdown = Redcarpet::Markdown.new(RayParser, extensions = { fenced_code_blocks: true, disable_indented_code_blocks: true } ) | |
text = File.read(ARGV[0]) | |
puts markdown.render(text) |
Code blocks:
```java
code
```
Output:
<pre lang="java">
code
</pre>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example text:
Output: