out(A) -> [{ssi, "TAB.inc","%%",[{"index", "choosen"}]}, {ehtml, [{'div', [{id, "entry"}], [{h1,[],"Yaws"}, {p,[],"Yaws is a HTTP high perfomance 1.1 webserver particularly" " well suited for dynamic-content web applications. Two separate modes of operations are supported:"}, {ul,[], [{li,[], {p,[],"Standalone mode where Yaws runs as a regular webserver " "daemon. This is the default mode."}}, {li,[], {p,[], "Embedded mode where Yaws runs as an embedded webserver in " "another Erlang application."}} ]}, {p,[], ["Yaws is entirely written in ", {a, [{href, "http://www.erlang.org"}], "Erlang"}, ", and furthermore it is a multithreaded webserver where one " "Erlang lightweight process is used to handle each client."]}, {p,[], "The main advantages of Yaws compared to other Web technologies" " are performance and elegance. The performance comes from the " " underlying Erlang system and its ability to handle concurrent " " processes in an efficent way. Its elegance comes from Erlang as " "well. Web applications don't have to be written in ugly ad hoc " "languages."}, {h2,[], "yaws.hyber.org"}, {p,[], ["The www page for Yaws is ", {a ,[{href,"http://yaws.hyber.org"}], "yaws.hyber.org"}, ". The documentation, examples as well as releases can be " "found there, and of course, ", {a ,[{href,"http://yaws.hyber.org"}],"yaws.hyber.org"}, " is itself powered by Yaws."]}, {p,[], ["A mailing list exists at: ", {a,[{href,"https://lists.sourceforge.net/lists/listinfo/""erlyaws-list"}], "https://lists.sourceforge.net/lists/listinfo/erlyaws-list"}]}, {p, [], ["A lot of excellent" " engineers have contributed to Yaws over the years, " "we keep a list of all " ,{a ,[{href,"contributors.txt"}], "contributors"} ]}, {p, [], ["A high resolution logo created by Tomas Selander exists at ", {a, [{href, "yaws.eps"}], "yaws.eps"}]}, {h2, [], "News"}, {p, [], ["To see all the most recent changes and activity in Yaws " "development, please visit the ", {a, [{href, "https://github.com/klacke/yaws"}], "Yaws github repository"}, "."]}, gen_news(A)]}]}, {ssi, "END2",[],[]}]. gen_news(A) -> case file:open(A#arg.docroot ++ "/news",[read]) of {ok, Fd} -> gen_news(Fd, io:get_line(Fd,'')); Err -> {p,[], f("No news: ~p",[Err])} end. gen_news(Fd, eof) -> file:close(Fd), []; gen_news(Fd, Line) -> Items = gen_items(Fd, io:get_line(Fd, '')), case Items of [] -> gen_news(Fd, io:get_line(Fd,'')); _ -> X = [{'div', [{class, "news"}], [{h3, [], Line}, {ul, [], Items}]} ], [X | gen_news(Fd, io:get_line(Fd,''))] end. gen_items(Fd, [10]) -> []; gen_items(Fd,eof) -> []; gen_items(Fd,Line) -> [{li, [], {p, [], Line}} |gen_items(Fd, io:get_line(Fd, ''))].