more advanced md script
[pinopress.git] / modules / md
1 #!/bin/sed -Ef
2
3 ## markdown to html module for pinopress
4 ## based off https://github.com/stamby/md-to-html
5 ## usage:
6 ##      md [md_filepath]
7
8 # remove document meta
9 ## matches block of -- at top of file
10 1,/^([^-]|-[^-]|^$)/ {
11     /^([^-]|-[^-]|^$)/ !{
12         /^-- ?/d
13     }
14 }
15
16 # special html characters
17 s/\&/\&amp\;/g
18 s/</\&lt\;/g
19 s/>/\&gt\;/g
20
21 # code blocks
22 /^ *```/ {
23     x
24     # check if hold space contains READING
25     # this is to see if this is the first ``` we read or no
26     /^ *READING/ !{
27         # if it is the first one, add READING to hold space
28         s/.*/READING/
29         x
30         # write opening tag
31         s/.*/<code>/
32         b
33     }
34     # if its the second ```, we are done
35     # first clear hold
36     s/.*//
37     x
38     # then write closing tag
39     s/.*/<\\code>/
40 }
41
42 # if we aren't reading ```, but hold space has READING in it
43 # that means we are currently processing a block, just ignore and
44 # keep going
45 x
46 /^ *READING/ {
47     x
48     b
49 }
50 x
51
52
53 # html style comments
54 /<!--(.*)-->/d
55
56 # horizontal rule
57 s/^\s*-{3,}\s*$/<hr\/>/
58
59 # inline styles
60 s/(^|[^\\\*])\*{3}([^\*]+)\*{3}([^\*]|$)/\1<strong><em>\2<\/em><\/strong>\3/g
61 s/(^|[^\\_])_{3}([^_]+)_{3}([^_]|$)/\1<strong><em>\2<\/em><\/strong>\3/g
62 s/(^|[^\\\*])\*{2}([^\*]+)\*{2}([^\*]|$)/\1<strong>\2<\/strong>\3/g
63 s/(^|[^\\_])_{2}([^\_]+)_{2}([^_]|$)/\1<strong>\2<\/strong>\3/g
64 s/(^|[^\\\*])\*([^\*]+)\*([^\*]|$)/\1<em>\2<\/em>\3/g
65 s/(^|[^\\_])_([^_]+)_([^_]|$)/\1<em>\2<\/em>\3/g
66 s/(^|[^\\`])`([^`]+)`([^`]|$)/\1<code>\2<\/code>\3/g
67 s/(^|[^\\~])~{2}([^~]+)~{2}([^~]|$)/\1<del>\2<\/del>\3/g
68
69 # images
70 s/!\[(.*)\]\((.*)\)/<img src="\2" alt="\1"\/>/g
71
72 # links
73 s/\[(.*)\]\((.*)\)/<a href="\1">\2<\/a>/g
74 s/\[(.*)\]/<a href="\1">\1<\/a>/g
75
76 # headers
77 s/^#{6} (.*)/<h6>\1<\/h6>/
78 s/^#{5} (.*)/<h5>\1<\/h5>/
79 s/^#{4} (.*)/<h4>\1<\/h4>/
80 s/^#{3} (.*)/<h3>\1<\/h3>/
81 s/^#{2} (.*)/<h2>\1<\/h2>/
82 s/^#} (.*)/<h1>\1<\/h1>/
83
84 # paragraphs
85
86 # /./{H;$!d} ; x ; s/^/\n<p>/ ; s/$/\n<\/p>/
87
88
89