Adding blocks in editor

1

Adding blocks in editor

2
@Add(global elements)
void add_block(Read_State state) {
@put(add block);
}
@End(global elements);
3
@Add(run loop)
if (cmd == "h" || cmd == "header") {
add_block(RS::header);
continue;
}
@End(run loop)
4
@Add(run loop)
if (cmd == "c" || cmd == "code") {
add_block(RS::code);
continue;
}
@End(run loop)
5
@Add(run loop)
if (cmd == "o" || cmd == "other") {
add_block(RS::para);
continue;
}
@End(run loop)
6
@def(add block)
if (curInput != inputs.end()) {
@put(increase block);
int i = curBlock - curInput->second.blocks.begin();
@put(insert block);
curBlock = curInput->second.blocks.begin() + i;
} else {
std::cerr << "! no file\n";
}
draw_block();
@end(add block)
7
@def(increase block)
if (curBlock != curInput->second.blocks.end()) {
++curBlock;
}
@end(increase block)
8
@def(insert block)
curInput->second.blocks.insert(curBlock, {
state, { "REPLACE" }, {},
state == RS::header ? 1 : 0
});
@end(insert block)

Duplicating the current block

9

Duplicating the current block

10
@Add(run loop)
if (cmd == "d" || cmd == "dup") {
if (curInput != inputs.end()) {
if (curBlock != curInput->second.blocks.end()) {
@put(duplicate);
}
} else {
std::cerr << "! no file\n";
}
continue;
}
@End(run loop)
11
@def(duplicate)
int i = curBlock - curInput->second.blocks.begin();
curInput->second.blocks.insert(curBlock, *curBlock);
curBlock = curInput->second.blocks.begin() + i + 1;
@end(duplicate)