-module(ml9_2_html). -export([exec/2]). -import(lists, [map/2, member/2]). exec(File, Parse) -> B = filename:rootname(File), Parse1 = map(fun(I) -> xform(I, Parse) end, Parse), file:write_file(B ++ ".html", [css(),Parse1]). css() -> ["", "
"]. xform({header,X}, _) -> Txt = get_data(X), ["

",Txt,"

"]; xform({addindex,_}, P) -> L = [X||{index,X}<-P], Entries = map(fun(I) -> Text = get_data(I), Tag = md5:string(Text), ["
  • ", Text,""] end, L), [""]; xform({index, X}, P) -> Txt = get_data(X), Tag = md5:string(Txt), ["

    ",Txt,"

    "]; xform({para, X}, _) -> Txt = get_data(X), Paras = ml9:parse_para(Txt), %% io:format("Paras=~p~n",[Paras]), map(fun para_to_html/1, Paras); xform({pre,X}, _) -> Str = get_data(X), Color = get_data(X, color, white), case Color of white -> [""]; C -> color(C, [""]) end; xform(Other, _) -> io:format("ignoring:~p~n",[Other]), []. color(C, X) -> ["
    ", X, "
    \n"]. get_data(Assoc, Key, Default) -> case ml9:search(Key, Assoc) of {ok, Val} -> Val; error -> Default end. get_data(X) -> {_,Str} = ml9:fetch(data, X), Str. get_data(X, Default) -> case ml9:fetch(data, X) of {ok, Val} -> Val; error -> Default end. para_to_html(X) -> ["

    ",map(fun inline_to_html/1, X)]. inline_to_html({str,S}) -> S; inline_to_html({italic, S}) -> ["",S,""]; inline_to_html({bold,S}) -> ["",S,""]; inline_to_html({code,S}) -> ["",S,""]; inline_to_html({link,Str}) -> case member($|, Str) of true -> case string:tokens(Str,"|") of [Href,Text] -> ["",Text,""]; _ -> ["",Str,""] end; false -> Ext = filename:extension(Str), case member(Ext, [".gif",".jpg",".GIF",".JPG",".png"]) of true -> [""]; false -> ["",Str,""] end end; inline_to_html(C) -> ["

    ",io_lib:format("unknown inline:~p",[C]),
    		     "
    "].