Permalink
Please sign in to comment.
Showing
with
153 additions
and 1 deletion.
- +22 −0 LICENSE.md
- +35 −1 README.md
- +55 −0 tomd
- +10 −0 tomd_post.awk
- +31 −0 tomd_pre.awk
22
LICENSE.md
| @@ -0,0 +1,22 @@ | ||
| +(The MIT License) | ||
| + | ||
| +Copyright (c) 2015-2016 Jürgen Leschner -- github.com/jldec | ||
| + | ||
| +Permission is hereby granted, free of charge, to any person obtaining | ||
| +a copy of this software and associated documentation files (the | ||
| +'Software'), to deal in the Software without restriction, including | ||
| +without limitation the rights to use, copy, modify, merge, publish, | ||
| +distribute, sublicense, and/or sell copies of the Software, and to | ||
| +permit persons to whom the Software is furnished to do so, subject to | ||
| +the following conditions: | ||
| + | ||
| +The above copyright notice and this permission notice shall be | ||
| +included in all copies or substantial portions of the Software. | ||
| + | ||
| +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, | ||
| +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
| +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
| +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
| +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
| +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
| +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
36
README.md
| @@ -1,2 +1,36 @@ | ||
| # tomd | ||
| -Shell script for upgrading textile posts to markdown. | ||
| + | ||
| +### Automated conversion from .textile to .md with pandoc | ||
| + | ||
| +Users with many textile files in their Jekyll Pages site should consider using [pandoc](http://pandoc.org), a utility for converting between different markup formats. E.g. for converting from textile to markdown: | ||
| + | ||
| +```sh | ||
| +pandoc --wrap=preserve -f textile -t markdown_github <foo.textile >foo.md | ||
| +``` | ||
| + | ||
| +##### limitations | ||
| +Unfortunately pandoc may change content in unwanted ways when it encounters: | ||
| + | ||
| +- YAML frontmatter at the top of .textile files | ||
| +- `{% highlight %}` blocks | ||
| +- `<notextile>` blocks | ||
| + | ||
| +To get around these limitations, this `tomd` shell script calls [awk](http://www.grymoire.com/Unix/Awk.html) and [sed](http://www.grymoire.com/Unix/Sed.html) to filter out those sections and then re-insert them after pandoc has converted the rest the file. | ||
| + | ||
| +##### to run `tomd` | ||
| +Copy `tomd` and the 2 awk scripts from this repo into your jekyll project folder (or a subdirectory if you prefer) | ||
| + | ||
| +Then invoke with `./tomd`. | ||
| + | ||
| +``` | ||
| +$ ./tomd | ||
| +checking for sed, awk, and pandoc | ||
| +/usr/bin/sed | ||
| +awk version 20070501 | ||
| +pandoc 1.16.0.2 | ||
| +looking for .textile files in _posts moving them to _old_posts | ||
| +226 textile files converted | ||
| +``` | ||
| + | ||
| +#### NOTE | ||
| +The `tomd` script has been run successfully on OSX on a couple of repos - YMMV. |
55
tomd
| @@ -0,0 +1,55 @@ | ||
| +#!/bin/sh | ||
| + | ||
| +# shell script to convert textile content to markdown using sed, awk and pandoc. | ||
| +# copy this file and tomd_pre.awk and tomd_post.awk into your local jekyll project folder | ||
| +# then `chmod +x tomd` and invoke with `tomd [_posts] [_old_posts]` | ||
| +# remember to keep a backup of everything, and USE THIS AT YOUR OWN RISK. | ||
| + | ||
| +set -e | ||
| + | ||
| +# make sure the following exist | ||
| +echo "checking for sed, awk, and pandoc" | ||
| +which sed | sed | ||
| +awk --version | ||
| +pandoc -v | sed '1 q' | ||
| + | ||
| +# script dir | ||
| +DIR=`dirname $0` | ||
| + | ||
| +# posts dir | ||
| +if [ $1 ] ; then | ||
| + POSTSDIR=$1 | ||
| +else | ||
| + POSTSDIR=_posts | ||
| +fi | ||
| + | ||
| +# archive dir | ||
| +if [ $2 ] ; then | ||
| + OLDDIR=$1 | ||
| +else | ||
| + OLDDIR=_old_posts | ||
| +fi | ||
| + | ||
| +echo "looking for .textile files in $POSTSDIR moving them to $OLDDIR" | ||
| +mkdir -p -v $OLDDIR | ||
| + | ||
| +# find all the textile files | ||
| +find $POSTSDIR -name \*.textile | sed 's/\.textile$//' >tomd_files.txt | ||
| + | ||
| +while read foo; do | ||
| + | ||
| + # save YAML header | ||
| + sed -n '1,/^---/ p' $foo.textile >tomd_head.txt | ||
| + | ||
| + # textile (minus header) | tomd_pre | pandoc | tomd_post | ||
| + sed '1,/^---/ d' $foo.textile | awk -f $DIR/tomd_pre.awk | pandoc -B tomd_head.txt -f textile -t markdown_github | awk -f $DIR/tomd_post.awk >$foo.md | ||
| + | ||
| + # archive | ||
| + mv $foo.textile $OLDDIR | ||
| + | ||
| +done <tomd_files.txt | ||
| + | ||
| +echo `wc -l <tomd_files.txt` textile files converted | ||
| + | ||
| +# clean up | ||
| +rm -f tomd_files.txt tomd_head.txt tomd-include-*.txt |
10
tomd_post.awk
| @@ -0,0 +1,10 @@ | ||
| +# awk post-processor - after pandoc | ||
| +# re-creates !include sections extracted by tomd_pre.awk | ||
| + | ||
| +/^!include tomd-include-/ { | ||
| + while ((getline line < $2) > 0) { print line } | ||
| + close($2); | ||
| + next; | ||
| +} | ||
| + | ||
| +{ print } |
31
tomd_pre.awk
| @@ -0,0 +1,31 @@ | ||
| +# tomd awk pre-processor (before pandoc) | ||
| +# redirects {% highlight %} sections to numbered files | ||
| +# and passes through <notextile> blocks | ||
| + | ||
| +BEGIN { nme = "tomd-include-"; cnt = 0; } | ||
| + | ||
| +/{% +highlight/ { | ||
| + including = "yes"; | ||
| + incfile = (nme cnt++ ".txt"); | ||
| + print ("!include " incfile); | ||
| +} | ||
| + | ||
| +/{% +endhighlight/ { | ||
| + including = ""; | ||
| + print >incfile; | ||
| + next; | ||
| +} | ||
| + | ||
| +/^<notextile>/ { | ||
| + including = "yes"; | ||
| + incfile = (nme cnt++ ".txt"); | ||
| + print ("!include " incfile); | ||
| + next; | ||
| +} | ||
| + | ||
| +/^<\/notextile>/ { | ||
| + including = ""; | ||
| + next; | ||
| +} | ||
| + | ||
| +{ if(including) { print >incfile } else { print }} |
0 comments on commit
795bb8b