CoffeeScriptで、markdown用のソースコード引用をちゃっちゃと生成する


雑記

苦労人の小説家や漫画家とかの、独特の重さ、シンデレラボーイorガールの小説家や漫画家とかの、独特の軽さ、というのは、多分「運」に対する見方というか「相場感」が影響しているのだと思う。それが、水木しげるみたいな域に達すると苦労人とは言え、「命が繋がるかどうかの運」というレベルになるので、重さや軽さを超越するんだと思うけど。まあ、普通の人は、デビューの早い人は、基本的に「運」が味方になってくれる感じの物語になりやすいし、そうでない人では「運」が災厄となる物語が多い。そのあたり、客観視してもう一段自由に「運」の相場を書き分けられたら、トルストイみたいなもんが書けるんじゃないかな。安易なように見えて面白い視点だと思う。本題と全然関係ないけどな!

いや、ちょっと書いたので

しょーもない小技シリーズ、とでも言えば良いのだろうか。ちまちましたソースコード群からmarkdown用のソースコード引用作るってとき、僕と同世代のみんなは、sh,sed,awkでやるよね。若いみんなはperl or ruby or pythonとかでやるんかな。世代を問わず、lispでやる人はいるかもな。きのこ派、じゃなくてemacs派の人びとだ。

どうでもいいね。とりあえず、coffeeでやる。なんでもかんでもcoffeeでやるんだい。

使い方

下記のfiles2markdown.coffeeを保存します。

> ls >ls.txt
> vi ls.txt
(ファイルの順番変えたり、見出し付けたり、邪魔なの消したり)
> coffee ./files2markdown.coffee -e ls.txt >newpost.md

こんな感じです。\$で始まる行は、\$を抜いてそのまま出力するようになっているので、例えばls.txtはこんな風に編集します

ls.txt
$
$#はじめに
$
$
$#if,switchなどの条件分岐からの合流
$
test-coffee-if,switch.html
test-javascript-if,switch.html
$
$#単純な順次実行
$
test-coffee-simple.html
test-javascript-simple.html
$
$#同時実行はこれくらいでいい?
$
test-coffee-each.html
test-javascript-each.html
$
$#伝統的なforによる繰り返し
$
test-coffee-for.html
test-javascript-for.html
$
$#配列やオブジェクトの巡回
$
test-coffee-forin.html
test-javascript-forin.html
$
$#シンプルなwhile
$
test-coffee-while.html
test-javascript-while.html
$
$#例外機構
$
test-coffee-exc.html
test-javascript-exc.html
$
$#あとがき
$

ちゅうわけで、なんか次の投稿記事が想像できますね!

では、処理するコード。

files2markdown.coffee
#!/usr/bin/env coffee

fs = require('fs')

sources = ""
for str in process.argv
  if str.match(/\.txt$/)?
    sources = str

files = (fs.readFileSync sources,'utf8').split('\n')

for fname in files
  result = fname.match(/^\$(.*)$/)
  if result?
    console.log result[1]
  else if fname.length > 0
    result = fname.match(/\.([^\.]*)$/)
    if result?
      ext = result[1]
    switch ext
      when 'coffee'    then lang = 'CoffeeScript'
      #add other extentions
      else                  lang = ext
    console.log '```'+lang+':'+fname
    console.log fs.readFileSync(fname,'utf8').trim()
    console.log '```'
    console.log
  else
    #skip
    0

なぜcoffeeでやるのか。