Edit blocks in place

1

Edit blocks in place

2
@Add(global elements)
void insert_before(const std::string &prefix,
std::vector<std::string> &c
) {
@put(insert before);
}
@End(global elements)
3
@Add(run loop)
if (cmd == "l" || cmd == "list") {
insert_before("l", curBlock->notes);
continue;
}
@End(run loop)
4
@Add(run loop)
if (cmd == "a" || cmd == "add") {
std::string prefix;
@put(find add prefix);
insert_before(prefix, curBlock->value);
continue;
}
@End(run loop)
5
@def(find add prefix)
switch (curBlock->state) {
case RS::header:
prefix = "h"; break;
case RS::code:
prefix = "c"; break;
case RS::para:
prefix = "p"; break;
default:
prefix = "?"; break;
}
@end(find add prefix)
6
@def(insert before)
int next = c.size();
@Put(do str range);
std::string l;
for (;;) {
@put(insert next line);
break;
}
draw_block();
@end(insert before)
7
@def(insert next line)
std::cout << prefix << ' ' << (next + 1) << "? ";
std::getline(std::cin, l);
auto b = l.begin();
auto e = l.end();
while (b != e && *b <= ' ') { ++b; }
std::string t { b, e };
if (t.empty()) { continue; }
if (t == ".") { break; }
c.insert(c.begin() + next, l);
++next;
continue;
@end(insert next line)
8
@Add(run loop)
if (cmd == ">>") {
if (curBlock->state == RS::header) {
++curBlock->level;
draw_block();
continue;
}
}
@End(run loop)
9
@Add(run loop)
if (cmd == "<<") {
if (curBlock->level > 1) {
--curBlock->level;
draw_block();
continue;
}
}
@End(run loop)