/+
assertions
ao_assertions.d
+/
mixin template AssertionsOnMarkupDocumentStructure() {
auto assertions_doc_structure(string[string] object, uint[string] lv) {
if (lv["h3"] > 0) {
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] > 0);
assert(lv["h3"] > 0);
} else if (lv["h2"] > 0) {
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] > 0);
assert(lv["h3"] == 0);
} else if (lv["h1"] > 0) {
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
} else if (lv["h0"] > 0) {
assert(lv["h0"] > 0);
assert(lv["h1"] == 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
} else {
assert(lv["h0"] == 0);
assert(lv["h1"] == 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
}
if (lv["h7"] > 0) {
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] > 0);
assert(lv["h7"] > 0);
} else if (lv["h6"] > 0) {
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] > 0);
assert(lv["h7"] == 0);
} else if (lv["h5"] > 0) {
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
} else if (lv["h4"] > 0) {
assert(lv["h4"] > 0);
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
} else {
assert(lv["h4"] == 0);
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
}
if (lv["h0"] == 0) {
assert(lv["h0"] == 0);
assert(lv["h1"] == 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
assert(lv["h4"] == 0);
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
}
if (lv["h1"] == 0) {
assert(lv["h1"] == 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
}
if (lv["h2"] == 0) {
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
}
if (lv["h3"] == 0) {
assert(lv["h3"] == 0);
}
if (lv["h4"] == 0) {
assert(lv["h4"] == 0);
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
}
if (lv["h5"] == 0) {
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
}
if (lv["h6"] == 0) {
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
}
if (lv["h6"] == 0) {
assert(lv["h7"] == 0);
}
switch (to!string(object["lev"])) {
case "A":
if (lv["h0"]==0) {
assert(lv["h0"] == 0);
assert(lv["h1"] == 0);
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
assert(lv["h4"] == 0);
assert(lv["h5"] == 0);
assert(lv["h6"] == 0);
assert(lv["h7"] == 0);
} else { // (lv["h0"] >0)
assert(lv["h0"] == 0,"error should not enter level A a second time");
}
break;
case "B":
if (lv["h1"]==0) {
assert(lv["h0"] > 0);
assert(lv["h1"] == 0); //
assert(lv["h2"] == 0);
assert(lv["h3"] == 0);
} else { // (lv["h1"] >0)
assert(lv["h0"] > 0);
assert(lv["h1"] > 0); //
}
break;
case "C":
if (lv["h2"]==0) {
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] == 0); //
assert(lv["h3"] == 0);
} else { // (lv["h2"] > 0)
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] > 0); //
}
break;
case "D":
if (lv["h3"]==0) {
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] > 0);
assert(lv["h3"] == 0); //
} else { // (lv["h3"] >0)
assert(lv["h0"] > 0);
assert(lv["h1"] > 0);
assert(lv["h2"] > 0);
assert(lv["h3"] > 0);
}
break;
case "1":
if (lv["h4"]==0) {
assert(lv["h0"] > 0);
assert(lv["h4"] == 0); //
} else { // (lv["h4"] >0)
assert(lv["h0"] > 0);
assert(lv["h4"] > 0); //
}
break;
case "2":
if (lv["h5"]==0) {
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] == 0); //
} else { // (lv["h5"] >0)
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] > 0); //
}
break;
case "3":
if (lv["h6"]==0) {
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] == 0); //
} else { // (lv["h6"] >0)
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] > 0); //
}
break;
case "4":
if (lv["h7"]==0) {
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] > 0);
assert(lv["h7"] == 0); //
} else { // (lv["h7"] >0)
assert(lv["h0"] > 0);
assert(lv["h4"] > 0);
assert(lv["h5"] > 0);
assert(lv["h6"] > 0);
assert(lv["h7"] > 0); //
}
break;
default:
break;
}
}
}
mixin template AssertionsOnBlocks() {
auto assertions_flag_types_block_status_none_or_closed(int[string] flag_type) {
assert(
(flag_type["code"] == 0) || (flag_type["code"] == 2),
"code block status: none or closed");
assert(
(flag_type["poem"] == 0) || (flag_type["poem"] == 2),
"poem status: none or closed");
assert(
(flag_type["table"] == 0) || (flag_type["table"] == 2),
"table status: none or closed");
assert(
(flag_type["group"] == 0) || (flag_type["group"] == 2),
"group block status: none or closed");
assert(
(flag_type["block"] == 0) || (flag_type["block"] == 2),
"block status: none or closed");
}
}