1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
module sdp.meta.metadoc;
template SiSUabstraction() {
import sdp.meta;
import
std.getopt,
std.process;
import
sdp.meta.metadoc_summary,
sdp.meta.metadoc_from_src,
sdp.meta.conf_make_meta,
// sdp.meta.conf_make_meta_native,
sdp.meta.conf_make_meta_sdlang,
sdp.meta.conf_make_meta_composite,
sdp.meta.defaults,
sdp.meta.doc_debugs,
sdp.meta.read_config_files,
sdp.meta.read_source_files,
sdp.meta.rgx,
sdp.output.hub,
sdp.output.paths_source;
mixin SiSUrgxInit;
mixin SiSUregisters;
mixin SiSUextractSDLang;
mixin SiSUnode;
mixin SiSUbiblio;
mixin SiSUrgxInitFlags;
mixin outputHub;
enum headBody { header, body_content, insert_filelist }
enum makeMeta { make, meta }
enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images }
static auto rgx = Rgx();
auto SiSUabstraction(Fn,O,E)(
Fn fn_src,
O opts,
E env,
){
auto sdl_root_config_share = configRead!()("config_share", env);
auto sdl_root_config_local = configRead!()("config_local", env);
auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_share, sdl_root_config_local);
/+ ↓ read file (filename with path) +/
/+ ↓ file tuple of header and content +/
auto _header_body_inserts =
SiSUrawMarkupContent!()(fn_src);
static assert(!isTypeTuple!(_header_body_inserts));
static assert(_header_body_inserts.length==3);
debug(header_and_body) {
writeln(header);
writeln(_header_body_inserts.length);
writeln(_header_body_inserts.length[headBody.body_content][0]);
}
/+ ↓ split header into make and meta +/
auto _make_and_meta_struct =
docHeaderMakeAndMetaTupExtractAndConvertToStruct!()(conf_files_composite_make, _header_body_inserts[headBody.header]); // breakage ...
/+ ↓ document abstraction: process document, return abstraction as tuple +/
auto da = SiSUdocAbstraction!()(
_header_body_inserts[headBody.body_content],
_make_and_meta_struct,
opts
);
static assert(!isTypeTuple!(da));
static assert(da.length==5);
auto doc_abstraction = da[docAbst.doc_abstraction]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/
auto _document_section_keys_sequenced = da[docAbst.section_keys];
string[] _doc_html_segnames = da[docAbst.segnames];
string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4];
auto _images = da[docAbst.images];
struct DocumentMatters {
auto keys_seq() {
/+ contains .seg & .scroll sequences +/
auto _k = _document_section_keys_sequenced;
return _k;
}
string[] segnames() {
string[] _k = _doc_html_segnames;
return _k;
}
string[] segnames_lv_0_to_4() {
string[] _k = _doc_epub_segnames_0_4;
return _k;
}
auto conf_make_meta() {
auto _k = _make_and_meta_struct;
return _k;
}
auto source_filename() {
string _k = fn_src;
return _k;
}
auto src_path_info() {
string _pwd = env["pwd"];
auto _k = SiSUpathsSRC!()(_pwd, fn_src);
return _k;
}
auto opt_action() {
bool[string] _k = opts;
return _k;
}
auto environment() {
auto _k = env;
return _k;
}
auto language() {
string _k;
if (auto m = fn_src.match(rgx.language_code_and_filename)) {
_k = m.captures[1];
} else {
_k = "en";
}
return _k;
}
auto file_insert_list() {
string[] _k = _header_body_inserts[headBody.insert_filelist];
return _k;
}
auto image_list() {
auto _k = _images;
return _k;
}
}
auto doc_matters = DocumentMatters();
auto t = tuple(doc_abstraction, doc_matters);
static assert(t.length==2);
return t;
}
}
|