aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2016-10-31 19:30:26 +0200
committerLoïc Hoguin <[email protected]>2016-10-31 19:30:26 +0200
commit00a7d8d6e6125c171c46190bdb40ecaa08347cca (patch)
tree02b5d3972170c0923687ec6178df0eef47a0b6cd
parentc64ba0a7927e5c7706e3874e3acb7a35558ac526 (diff)
downloadasciideck-00a7d8d6e6125c171c46190bdb40ecaa08347cca.tar.gz
asciideck-00a7d8d6e6125c171c46190bdb40ecaa08347cca.tar.bz2
asciideck-00a7d8d6e6125c171c46190bdb40ecaa08347cca.zip
Add a check for mandatory name section for man pages
-rw-r--r--src/asciideck_to_manpage.erl9
-rw-r--r--test/man_SUITE.erl29
2 files changed, 38 insertions, 0 deletions
diff --git a/src/asciideck_to_manpage.erl b/src/asciideck_to_manpage.erl
index 47eb932..fffd250 100644
--- a/src/asciideck_to_manpage.erl
+++ b/src/asciideck_to_manpage.erl
@@ -33,6 +33,7 @@ translate(AST, Opts) ->
end.
translate_man([{title, #{level := 0}, Title0, _Ann}|AST], Opts) ->
+ ensure_name_section(AST),
[Title, << Section:1/binary, _/bits >>] = binary:split(Title0, <<"(">>),
Extra1 = maps:get(extra1, Opts, today()),
Extra2 = maps:get(extra2, Opts, ""),
@@ -44,6 +45,14 @@ translate_man([{title, #{level := 0}, Title0, _Ann}|AST], Opts) ->
man(AST, [])
]}.
+ensure_name_section([{title, #{level := 1}, Title, _}|_]) ->
+ case string:to_lower(string:strip(binary_to_list(Title))) of
+ "name" -> ok;
+ _ -> error(badarg)
+ end;
+ensure_name_section(_) ->
+ error(badarg).
+
today() ->
{{Y, M, D}, _} = calendar:universal_time(),
io_lib:format("~b-~2.10.0b-~2.10.0b", [Y, M, D]).
diff --git a/test/man_SUITE.erl b/test/man_SUITE.erl
new file mode 100644
index 0000000..30eec4f
--- /dev/null
+++ b/test/man_SUITE.erl
@@ -0,0 +1,29 @@
+%% Copyright (c) 2016, Loïc Hoguin <[email protected]>
+%%
+%% Permission to use, copy, modify, and/or distribute this software for any
+%% purpose with or without fee is hereby granted, provided that the above
+%% copyright notice and this permission notice appear in all copies.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-module(man_SUITE).
+-compile(export_all).
+
+-import(ct_helper, [doc/1]).
+
+all() ->
+ ct_helper:all(?MODULE).
+
+%% @todo We should try to see if it accepts all valid AST.
+%% @todo Test all options.
+
+missing_name_section(_) ->
+ AST = asciideck:parse("= missing_name(3)\n\n== Not name\n\nFail!"),
+ {'EXIT', _} = (catch asciideck:to_manpage(AST)),
+ ok.