*)
module R = Helm_registry
+module X = HExtlib
+module T = Types
+module G = Grafite
type script = {
name: string;
- contents: Types.items
+ contents: T.items
}
type status = {
heading_path: string;
heading_lines: int;
package: string;
- base_uri: string;
+ input_base_uri: string;
+ output_base_uri: string;
input_path: string;
output_path: string;
script_ext: string;
heading_path = R.get_string "transcript.heading_path";
heading_lines = R.get_int "transcript.heading_lines";
package = R.get_string "package.name";
- base_uri = R.get_string "package.base_uri";
+ input_base_uri = R.get_string "package.input_base_uri";
+ output_base_uri = R.get_string "package.output_base_uri";
input_path = R.get_string "package.input_path";
output_path = R.get_string "package.output_path";
script_ext = R.get_string "package.script_type";
let set_heading st name =
let heading = Filename.concat st.helm_dir st.heading_path, st.heading_lines in
- set_items st name [Types.Heading heading]
+ set_items st name [T.Heading heading]
let set_baseuri st name =
- let baseuri = Filename.concat st.base_uri name in
- set_items st name [Types.BaseUri baseuri]
+ let baseuri = Filename.concat st.output_base_uri name in
+ set_items st name [T.BaseUri baseuri]
let commit st name =
let i = get_index st name in
let cmd = Printf.sprintf "mkdir -p %s" path in
let _ = Sys.command cmd in
let och = open_out name in
- Grafite.commit och script.contents;
+ G.commit och script.contents;
close_out och;
st.scripts.(i) <- default_script
let produce st =
let init name = set_heading st name; set_baseuri st name in
+ let partition = function
+ | T.Coercion _
+ | T.Notation _ -> false
+ | _ -> true
+ in
let produce st name =
+ let base_uri = Filename.concat st.input_base_uri name in
+ let filter = function
+ | T.Inline (k, obj) ->
+ let s = obj ^ G.string_of_inline_kind k in
+ Some (T.Inline (k, Filename.concat base_uri s))
+ | item -> Some item
+ in
Printf.eprintf "processing file name: %s ...\n" name; flush stderr;
let file = Filename.concat st.input_path (name ^ st.script_ext) in
let ich = open_in file in
try
let items = V8Parser.items V8Lexer.token lexbuf in
close_in ich;
- init name; set_items st name items; commit st name
+ let items = List.rev (X.list_rev_map_filter filter items) in
+ let local_items, global_items = List.partition partition items in
+ let comment = T.Line (Printf.sprintf "From %s" name) in
+ if global_items <> [] then
+ set_items st st.package (comment :: global_items);
+ init name; set_items st name local_items; commit st name
with e ->
prerr_endline (Printexc.to_string e); close_in ich
in