aboutsummaryrefslogtreecommitdiffstats
path: root/src/asciideck_block_parser.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-06-11 12:38:07 +0200
committerLoïc Hoguin <[email protected]>2018-06-11 12:38:07 +0200
commit976dfc5d92e3e23f356cb19f17ff51b22c75e634 (patch)
tree2589053dfc25bd6f38afdd9a06bdbbf63680464c /src/asciideck_block_parser.erl
parent524777054be30c848c1883ffd15b245c29f73004 (diff)
downloadasciideck-976dfc5d92e3e23f356cb19f17ff51b22c75e634.tar.gz
asciideck-976dfc5d92e3e23f356cb19f17ff51b22c75e634.tar.bz2
asciideck-976dfc5d92e3e23f356cb19f17ff51b22c75e634.zip
Add scripts/asciidoc ad-hoc replacement and HTML output
This allows me to build ninenines.eu using Asciideck and while the results are not perfect yet things are looking pretty, pretty good. Adding source-highlight support, showing images and fixing a few minor issues should bring me to the point where I can drop Asciidoc.
Diffstat (limited to 'src/asciideck_block_parser.erl')
-rw-r--r--src/asciideck_block_parser.erl28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/asciideck_block_parser.erl b/src/asciideck_block_parser.erl
index ad63fa6..e0faceb 100644
--- a/src/asciideck_block_parser.erl
+++ b/src/asciideck_block_parser.erl
@@ -51,11 +51,15 @@ define_NOT_test() ->
ok.
-endif.
--spec parse(binary()) -> ast().
-parse(Data) ->
+-spec parse(binary() | pid()) -> ast().
+parse(Data) when is_binary(Data) ->
%% @todo Might want to start it supervised.
%% @todo Might want to stop it also.
{ok, ReaderPid} = asciideck_line_reader:start_link(Data),
+ parse(ReaderPid);
+parse(Data) when is_list(Data) ->
+ parse(iolist_to_binary(Data));
+parse(ReaderPid) when is_pid(ReaderPid) ->
blocks(#state{reader=ReaderPid}).
blocks(St) ->
@@ -1049,37 +1053,37 @@ para_test() ->
%% Control functions.
-oneof([], St) ->
- throw({error, St}); %% @todo
+oneof([], St=#state{reader=ReaderPid}) ->
+ throw({error, St, sys:get_state(ReaderPid)});
oneof([Parse|Tail], St=#state{reader=ReaderPid}) ->
- Ln = asciideck_line_reader:get_position(ReaderPid),
+ Ln = asciideck_reader:get_position(ReaderPid),
try
Parse(St)
catch _:_ ->
- asciideck_line_reader:set_position(ReaderPid, Ln),
+ asciideck_reader:set_position(ReaderPid, Ln),
oneof(Tail, St)
end.
skip(Parse, St=#state{reader=ReaderPid}) ->
- Ln = asciideck_line_reader:get_position(ReaderPid),
+ Ln = asciideck_reader:get_position(ReaderPid),
try
_ = Parse(St),
skip(Parse, St)
catch _:_ ->
- asciideck_line_reader:set_position(ReaderPid, Ln),
+ asciideck_reader:set_position(ReaderPid, Ln),
ok
end.
%% Line functions.
read_line(#state{reader=ReaderPid}) ->
- asciideck_line_reader:read_line(ReaderPid).
+ asciideck_reader:read_line(ReaderPid).
read_while(St=#state{reader=ReaderPid}, F, Acc) ->
- Ln = asciideck_line_reader:get_position(ReaderPid),
+ Ln = asciideck_reader:get_position(ReaderPid),
case F(read_line(St)) of
done ->
- asciideck_line_reader:set_position(ReaderPid, Ln),
+ asciideck_reader:set_position(ReaderPid, Ln),
Acc;
{more, Line} ->
case Acc of
@@ -1089,7 +1093,7 @@ read_while(St=#state{reader=ReaderPid}, F, Acc) ->
end.
ann(#state{reader=ReaderPid}) ->
- #{line => asciideck_line_reader:get_position(ReaderPid)}.
+ #{line => asciideck_reader:get_position(ReaderPid)}.
trim(Line) ->
trim(Line, both).