마크다운을 이용한 블로깅
Sublime 에디터를 사용하다 보니 이 블로깅도 에디터로 할 수 있으면 좋겠다는 생각이 듭니다. Markdown Extended와 같은 패키지를 사용하면 마크다운에 맞춰서 색을 표시해 주는 등, 웹에 접속하지 않고 간편하고 빠르게 사용하기 좋을 것 같습니다. 찾아보니 대부분 마크다운을 이용해서 마크업을 하며 다음과 같은 몇가지 방법들이 있습니다.
도대체 언제?
PS. Prettify의 출력을 보니 눈이 어질하네요. 그림 업로드는 Blogger API에서 지원해주지 않기 때문에 HTML 파일업로드 후 웹 인터페이스를 사용해서 에디터의 스크린샷을 올려봅니다. Sublime의 MarkDown Extended와 Monokai Extended를 사용해서 하이라이트를 적용한 상태입니다.
- 워드프레스용 패키지
어떻게 사용하는지 모르겠지만현재 사용하는 Blogger에는 쓰기 어려울것 같습니다. Blogger용으로 포스팅 목록도 볼 수 있고 마크다운도 쓰고 하는 패키지를 만들어보고 싶은 마음도 들었습니다만, 파이썬은 1.X 버전때 사용해서 이제는 거의 새로 배워야 할것 같고 sublime 패키지 작성법에다 Blogger API까지 공부해야 하니 그냥 넘어가기로 합니다. - 드랍박스를 사용하는 방법. 마크다운으로 작성한 파일을 드랍박스에다 저장하면 원격 서버에서 읽어서 포스팅을 해 줍니다. 포스팅을 올린 다음 홈페이지에 접속해서 Publish 명령을 내려줘야 하거나 소스 코드의 하이라이트닝을 지원해 주지 않아서 탈락.
- 간이 블로그 서버를 하나 만들어 볼까 고민하다 떠오른 생각이 사용자 컴퓨터에서 마크다운 파일을 읽어 HTML로 변환한 다음 Blogger에 올려주는 방법입니다.
이용한 자바 라이브러리들
다음과 같은 라이브러리들을 참조했습니다- Markdown4j 자바용 마크다운 변환 라이브러리입니다. 시험삼아 몇가지 돌려보니 이상하게 동작하는 경우도 있지만 PegDown도 마찬가지였고 PegDown에 비해 간단하게 플러그인을 지원해 주기 때문에 소스 코드 하이라이트를 사용할 수 있었습니다.
- java-prettify 자바용 소스 코드 하이라이트 라이브러리입니다. 구글 Prettify를 자바용으로 포팅한 것인데 스윙용 에디터까지 만들어져 있습니다. 같은 제작자가 SyntaxHighlighter를 포팅한 java-syntax-hilighter도 있습니다.
TODO
- Blogger API를 사용해서 직접 Blogger에 파일을 관리한다
- GUI를 작성한다
import org.markdown4j.{Markdown4jProcessor, Plugin} import io.Source._ import java.nio.file.{Files, Paths} import prettify.PrettifyParser import syntaxhighlight.ParseResult object Md2Blogger { private val mdcode = new util.matching.Regex("""(?ms)^```\s*(\w{2,})\s*$(.+?)^```""", "lang", "code") def markdown2html(md:String):String = { val converted = mdcode.replaceAllIn(md, { m => """%%%code lang=$1$2%%%""" } ) println(converted) new Markdown4jProcessor().registerPlugins(new CodeHighlight()). } def splitFileName(name:String):(String, String) = { val dot = name.lastIndexOf('.') if (dot < 0) (name, "") else (name.take(dot-1), name.drop(dot)) } def writeToFile(fn:String, content:String):Unit = { val pw = new java.io.PrintWriter(new java.io.File(fn)) try pw.write(content) finally pw.close } def main(args:Array[String]) { if (args.isEmpty) throw new Exception("Missing file name") val (name, ext) = splitFileName(args(0)) val fname = if (ext.size == 0) s"$name.md" else "$name.$ext" val file = java.nio.file.FileSystems.getDefault.getPath(fname) if (!Files.exists(file)) throw new Exception(s"Cannot find ${file.toString}") val htmlContent = markdown2html(io.Source.fromFile(file.toFile).mkString) writeToFile(s"$name.html", htmlContent) } }
PS. Prettify의 출력을 보니 눈이 어질하네요. 그림 업로드는 Blogger API에서 지원해주지 않기 때문에 HTML 파일업로드 후 웹 인터페이스를 사용해서 에디터의 스크린샷을 올려봅니다. Sublime의 MarkDown Extended와 Monokai Extended를 사용해서 하이라이트를 적용한 상태입니다.

댓글