top page > computer > haskell > coding > make_license > coding.html
更新日:
文責: 重城良国

ライセンスファイルを作成する: コーディング

(工事中 5%)

makeLicense.hs

置換関数の作成

<hoge>の置換

より一般的な関数を作成する。ここでは[("OWNER", "Yoshikuni"), ("YEAR", "2015")]といった引数を与えることで、"<OWNER>"や"<YEAR>"を置き換えるような関数を作成しよう。

transpose ::
	[(String, String)] -> String -> Either String String
transpose _ "" = return ""
transpose tbl ('<' : cs) = case span (/= '>') cs of
	(k, '>' : r) -> maybe
		(fail $ "No such key: " ++ k)
		((<$> transpose tbl r) . (++)) $ lookup k tbl
	_ -> fail "There are not '>'"
transpose tbl (c : cs) = (c :) <$> transpose tbl cs

'<'があったら'>'までを読み込み、それをキーとして辞書を引く。残りの文字列もtransposeを行い、辞書から引いた値と結合する。

試してみる。

% ghci makeLicense.hs
Main> transpose [("HL", "Hello"), ("WD", "world")] "<HL>, <WD>!"
"Hello, World!"

条件判断

<if A=B>...<else>...<end>のような形で条件判断ができるようにする。こうしておくとBSD2のときに3条項目を消去することができる。

雛形ファイルを用意

3条項BSDライセンスの雛形を参照。

<YEAR>と<OWNER>とを残した3条項BSDライセンスの雛形を作成した。2条項BSDライセンスは3条目を消去することで作ることにする。

作成した雛形ファイル: templates/bsd3.txt

試してみる。

ghci makeLicense.hs
Main> t <- readFile "templates/bsd3.txt"
Main> transpose [("YEAR", "2015"), ("OWNER", "Yoshikuni")] t
Right "Copyright (x) 2015, Yoshikuni\nAll rights reserved.\n
\nRedistribution and use in source and binary forms, with
...
THE\nPOSSIBILITY OF SUCH DAMAGE.\n"

コマンドライン引数の取得

何が必要か

まずはライセンスの種類を表す引数が必要。今のところはBSD2とBSD3のみに対応とする。また西暦年と所有者名も引数から与える必要がある。

ライセンスの種類用に以下のようなデータ型を作成しておく。

data License = BSD2 | BSD3 deriving Show

GetOptモジュール

「GetOptモジュールの説明」を参照。

オプション

オプションの指定のしかたを決める。とりあえず以下のような感じで考えておく。

makeLicense
-l(--license) BSD3
-o(--owner) "Yoshikuni Jujo"
-y(--year) 2015

また、出力ファイル名の指定は-f(--file) LICENSEのような感じにする。

「ライセンスファイルの作成」トップへもどる

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics