34
35:- module(swish_markdown, []). 36:- use_module(library(http/http_dispatch)). 37:- use_module(library(http/http_parameters)). 38:- use_module(library(http/http_client)). 39:- use_module(library(http/html_write)). 40:- use_module(library(http/html_head)). 41:- use_module(library(pldoc/doc_html),
42 except([ file//2
43 ])). 44:- use_module(library(pldoc/doc_wiki)). 45:- use_module(library(option)). 46:- use_module(library(filesex)). 47
48:- use_module(storage). 49:- use_module(config).
56:- http_handler(swish(markdown), markdown, [id(markdown)]).
63markdown(Request) :-
64 option(method(get), Request), !,
65 http_parameters(Request,
66 [ text(Data, [optional(true), default('')])
67 ]),
68 atom_codes(Data, Codes),
69 wiki_file_codes_to_dom(Codes, '/', DOM), 70 phrase(html(DOM), Tokens),
71 format('Content-type: text/html; charset=UTF-8\n\n'),
72 print_html(Tokens).
73markdown(Request) :-
74 option(method(post), Request), !,
75 http_read_data(Request, Codes, [to(codes)]),
76 wiki_file_codes_to_dom(Codes, '/', DOM),
77 phrase(html(DOM), Tokens),
78 format('Content-type: text/html; charset=UTF-8\n\n'),
79 print_html(Tokens).
86wiki_file_codes_to_dom(String, File, DOM) :-
87 ( nb_current(pldoc_file, OrgFile)
88 -> setup_call_cleanup(
89 b_setval(pldoc_file, File),
90 wiki_codes_to_dom(String, [], DOM),
91 b_setval(pldoc_file, OrgFile))
92 ; setup_call_cleanup(
93 b_setval(pldoc_file, File),
94 wiki_codes_to_dom(String, [], DOM),
95 nb_delete(pldoc_file))
96 ).
97
98
99 102
103:- multifile
104 prolog:doc_autolink_extension/2. 105
106prolog:doc_autolink_extension(swinb, notebook).
107
108:- public
109 file//2.
122:- multifile
123 swish_config:source_alias/2. 124
125file(File, Options) -->
126 { once(sub_atom(File, Pre, _, _Post, /)),
127 sub_atom(File, 0, Pre, _, Alias),
128 swish_config:source_alias(Alias, _Options),
129 option(label(Label), Options),
130 http_location_by_id(swish, Swish),
131 directory_file_path(Swish, File, HREF)
132 }, !,
133 html(a([class([alias,file]), href(HREF)], Label)).
134file(File, Options) -->
135 { storage_file(File),
136 option(label(Label), Options),
137 http_location_by_id(swish, Swish),
138 directory_file_path(Swish, p, StoreDir),
139 directory_file_path(StoreDir, File, HREF)
140 }, !,
141 html(a([class(store), href(HREF)], Label)).
142file(File, Options) -->
143 pldoc_html:file(File, Options)
SWISH Notebook markdown support
This module translates markdown cells for teh SWISH Notebook into HTML */