読者です 読者をやめる 読者になる 読者になる

少しだけマークダウンしたい

要求仕様

  • 少しだけマークダウンしたい
    • 場合によってはHTMLタグも自由に書きたいのでパッケージは使いたくない
    • 頻繁に使用する箇条書きやテーブルだけマークダウンで対応したい

設計

  • convert.bat に hoge.txt をドロップしたらテンプレートをもとに hoge.html がつくられてブラウザで開くところまで走ればいい
    • templete.html
    • convert.bat
    • convert.py
    • hoge.txt(入力)
    • hoge.html(出力)

プロトタイプ

  • 一階層の箇条書きにしか対応していないしそれもめちゃくちゃ穴だらけだけどとりあえず動けばいいので後は需要に応じてエンハンスする

templete.html

<html>
<head>
<title>
TITLE_HERE
</title>
</head>
<body>
CONTENTS_HERE
</body>
</html>

convert.py

# -*- coding: utf-8 -*-
import sys
import codecs
import re

if __name__ == "__main__":
  args = sys.argv
  if len(args) != 3:
    print "argument error"
    quit()
  
  raw_text=args[1]
  fout = codecs.open(args[2], "w", "shift_jis")
  fin_templete = codecs.open("templete.html", "r", "shift_jis")

  for line in fin_templete:
    if "TITLE_HERE" in line:
      fout.write(re.sub(r'.*\\', "", re.sub(r'\.txt', "", raw_text)) + "\r\n")
    elif "CONTENTS_HERE" in line:
      fin_text = codecs.open(args[1], "r", "shift_jis")
      stock = []
      for line_text in fin_text:
        if re.match(r'^-', line_text):
          stock.append(re.sub(r'\r\n', "", re.sub(r'^-', "", line_text)))
        elif len(stock) > 0:
          fout.write("<ul>\r\n")
          for i in range(0, len(stock)):
            fout.write("<li>" + stock[i] + "</li>\r\n")
          fout.write("</ul>\r\n")
          stock = []
        else:
          fout.write(line_text + "<br/>\r\n")
      fin_text.close()
    else:
      fout.write(line)

  fin_templete.close()
  fout.close()

convert.bat

@echo off
set chrome="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
cd /d %~dp0
set rawText=%1
set outHtml=%rawText:txt=html%
python convert.py %rawText% %outHtml%
%chrome% %outHtml%
pause


動作確認

hoge.txt

動物 - 適当
- 犬 - 柴犬
- 猫
- ハムスター

hoge.html

<html>
<head>
<title>
hoge
</title>
</head>
<body>
動物 - 適当
<br/>
<ul>
<li> 犬 - 柴犬</li>
<li></li>
<li> ハムスター</li>
</ul>
</body>
</html>