2014-09-15 22:05:36 -05:00
""" Convert Markdown to HTML file.
Required Markdown module : http : / / pypi . python . org / pypi / Markdown / 2.1 .1
"""
# Usage:
# shell> python markdown2html.py path/to/file.md path/to/output/dir
import sys
import commands
import web
import markdown
# Markdown extensions
2016-02-29 06:43:32 -06:00
MD_EXTENSIONS = [ ' toc ' , ' meta ' , ' extra ' , ' footnotes ' , ' admonition ' ]
2014-09-15 22:05:36 -05:00
# Get file name
filename = sys . argv [ 1 ]
# Get file name without file extension
filename_without_ext = filename . split ( ' / ' ) [ - 1 ] . replace ( ' .md ' , ' ' )
# Get output directory
output_dir = sys . argv [ 2 ]
2014-09-16 09:54:05 -05:00
# Get other options and convert them to a dict.
args = sys . argv [ 3 : ]
cmd_opts = { }
for arg in args :
if ' = ' in arg :
( var , value ) = arg . split ( ' = ' )
cmd_opts [ var ] = value
if not ' css ' in cmd_opts :
2014-09-22 22:17:52 -05:00
cmd_opts [ ' css ' ] = ' ./css/markdown.css '
2014-09-16 09:54:05 -05:00
2014-09-15 22:05:36 -05:00
# Get article title
2014-09-17 08:14:03 -05:00
if not ' title ' in cmd_opts :
cmd_opts [ ' title ' ] = commands . getoutput ( """ grep ' Title: ' %s |awk -F ' Title: ' ' { print $2} ' """ % filename )
2014-09-20 23:35:18 -05:00
cmd_opts [ ' title ' ] = cmd_opts [ ' title ' ] . strip ( )
2014-09-15 22:05:36 -05:00
2014-09-26 10:56:15 -05:00
# Set output file name
output_html_file = output_dir + ' / ' + filename_without_ext + ' .html '
if ' output_filename ' in cmd_opts :
output_html_file = output_dir + ' / ' + cmd_opts [ ' output_filename ' ]
2014-09-15 22:05:36 -05:00
# Set HTML head
html = """ \
< html >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " / >
< title > % ( title ) s < / title >
2015-07-31 23:14:52 -05:00
< link rel = " stylesheet " type = " text/css " href = " %(css)s " / >
2014-09-15 22:05:36 -05:00
< / head >
< body >
2014-09-16 09:54:05 -05:00
""" % c md_opts
2014-09-15 22:05:36 -05:00
2014-09-20 09:32:14 -05:00
# Add navigation items.
# Link to iRedMail.org
html + = """
< div id = " navigation " >
2016-03-15 08:23:02 -06:00
< a href = " /index.html " target = " _blank " > < img alt = " iRedMail web site " src = " images/logo-iredmail.png " style = " vertical-align: middle; height: 30px; " / > < span > iRedMail < / span > < / a >
2014-09-20 09:32:14 -05:00
"""
# Add link to index page in article pages.
if ' add_index_link ' in cmd_opts :
2016-02-29 02:15:19 -06:00
html + = """ // <a href= " ./index.html " >Document Index</a> """
2014-09-20 09:32:14 -05:00
html + = """ </div> """
2015-08-13 10:08:13 -05:00
# Convert to unicode first.
html = web . safeunicode ( html )
2014-09-15 22:05:36 -05:00
# Read markdown file and render as HTML body
# Handle unicode characters with web.safeunicode
orig_content = web . safeunicode ( open ( filename ) . read ( ) )
html + = markdown . markdown ( orig_content , extensions = MD_EXTENSIONS )
2015-12-13 23:04:21 -06:00
html + = """ <p style= " text-align: center; color: grey; " >All documents are available in <a href= " https://bitbucket.org/zhb/iredmail-docs/src " >BitBucket repository</a>, and published under <a href= " http://creativecommons.org/licenses/by-nd/3.0/us/ " target= " _blank " >Creative Commons</a> license. If you found something wrong, please do <a href= " http://www.iredmail.org/contact.html " >contact us</a> to fix it. """
2014-10-18 22:49:55 -05:00
2014-10-13 19:28:43 -05:00
2014-09-15 22:05:36 -05:00
html + = """ \
2015-02-05 07:02:53 -06:00
< script >
( function ( i , s , o , g , r , a , m ) { i [ ' GoogleAnalyticsObject ' ] = r ; i [ r ] = i [ r ] | | function ( ) {
( i [ r ] . q = i [ r ] . q | | [ ] ) . push ( arguments ) } , i [ r ] . l = 1 * new Date ( ) ; a = s . createElement ( o ) ,
m = s . getElementsByTagName ( o ) [ 0 ] ; a . async = 1 ; a . src = g ; m . parentNode . insertBefore ( a , m )
} ) ( window , document , ' script ' , ' //www.google-analytics.com/analytics.js ' , ' ga ' ) ;
ga ( ' create ' , ' UA-3293801-21 ' , ' auto ' ) ;
ga ( ' send ' , ' pageview ' ) ;
2014-09-15 22:05:36 -05:00
< / script >
"""
html + = ' </body></html> '
# Write to file
f = open ( output_html_file , ' w ' )
2015-07-12 01:13:08 -05:00
f . write ( html . encode ( ' utf-8 ' ) )
2014-09-15 22:05:36 -05:00
f . close ( )