| @@ -0,0 +1,62 @@ | |||||
| # Convert Jekyll blog posts to DokuWiki pages | |||||
| # Adrian Short (https://adrianshort.org/) 15 Feb 2015 | |||||
| require 'fileutils' | |||||
| require 'yaml' | |||||
| require 'pp' | |||||
| require 'pandoc-ruby' | |||||
| INPUT_DIR = "./_posts" | |||||
| OUTPUT_BASEDIR = "./blog" | |||||
| unpublished_files = [] # collect drafts, i.e. files where published == false | |||||
| # Loop through Markdown files | |||||
| Dir.glob(File.join(INPUT_DIR, "*.{md,markdown}")) do |fn| | |||||
| f = File.open(fn) | |||||
| contents = f.read | |||||
| metadata = YAML.load(contents) | |||||
| # skip drafts | |||||
| if metadata['published'] == false | |||||
| unpublished_files << metadata['title'] | |||||
| next | |||||
| end | |||||
| output = "====== %s ======\n\n" % metadata['title'] | |||||
| output += PandocRuby.convert(contents, :from => :markdown, :to => :dokuwiki) | |||||
| # convert <!-- more --> tags | |||||
| output.gsub!(/<HTML>\n<!-- more -->\n<\/HTML>/, '===== =====') | |||||
| # fix blockquotes (I'm using the DokuWiki blockquote plugin) | |||||
| output.gsub!(/<HTML><blockquote>\n(.+)<\/blockquote><\/HTML>/m, \ | |||||
| "<blockquote>\n\\1</blockquote>\n") | |||||
| # Merge categories and tags | |||||
| tags = metadata['tags'] || [] | |||||
| categories = metadata['categories'] || [] | |||||
| tags = tags.concat(categories).uniq | |||||
| if tags | |||||
| # wrap tags containing spaces in double quotes | |||||
| output += "{{tag>%s}}\n" % tags \ | |||||
| .map{ |t| t.include?(' ') ? "\"%s\"" % t : t } \ | |||||
| .sort_by(&:downcase).join(' ') | |||||
| end | |||||
| f.close | |||||
| # write to new file | |||||
| out_dir = File.join(OUTPUT_BASEDIR, metadata['date'].year.to_s) | |||||
| FileUtils.mkdir_p out_dir | |||||
| out_fn = File.join(out_dir, fn.match(/\d{4}-\d\d-\d\d-(.+)\./)[1] + '.txt') | |||||
| out_f = File.open(out_fn, 'w') { |f| f << output } | |||||
| # Set the modified and last access time for the file | |||||
| # Use `cp -p` to preserve these times when copying | |||||
| File.utime(metadata['date'], metadata['date'], out_fn) | |||||
| end | |||||
| puts "Drafts skipped:" | |||||
| unpublished_files.each{ |f| puts f } | |||||