Лмао, Адель, харе carriage return ставить в конце каждой строки(((
This commit is contained in:
parent
91aaf51410
commit
01176052d7
@ -43,7 +43,7 @@ namespace nytl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isSPACE(char ch) {
|
bool isSPACE(char ch) {
|
||||||
return ch == ' ' || ch == '\r' || ch == '\t' || ch == '\r';
|
return ch == ' ' || ch == '\r' || ch == '\t' || ch == '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isUname(const std::string &str) {
|
bool isUname(const std::string &str) {
|
||||||
|
@ -26,7 +26,8 @@ namespace nytl {
|
|||||||
|
|
||||||
std::vector<std::string> splitIntoLines(const std::string& str);
|
std::vector<std::string> splitIntoLines(const std::string& str);
|
||||||
std::string concatenateLines(const std::vector<std::string>& lines);
|
std::string concatenateLines(const std::vector<std::string>& lines);
|
||||||
|
void one_part_update_min_start_wsp_non_empty(const std::string& str, bool is_first, size_t& min);
|
||||||
|
std::string one_part_cut_excess_tab(const std::string& str, bool is_first, size_t cut);
|
||||||
|
|
||||||
void parse_bare_file(const std::string& filename, const std::string& content,
|
void parse_bare_file(const std::string& filename, const std::string& content,
|
||||||
global_elem_set_t& result);
|
global_elem_set_t& result);
|
||||||
|
@ -34,54 +34,6 @@ namespace nytl {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_bare_file(const std::string& filename, const std::string& content,
|
|
||||||
global_elem_set_t& result)
|
|
||||||
{
|
|
||||||
ASSERT(result.count(filename) == 0, "Repeated element " + filename);
|
|
||||||
std::vector<std::string> lines;
|
|
||||||
bool had_nw_line = false;
|
|
||||||
size_t smallest_tab;
|
|
||||||
std::string current_line;
|
|
||||||
auto finish = [&]() {
|
|
||||||
size_t tab_sz = first_nw_char(current_line);
|
|
||||||
if (tab_sz == current_line.size()) {
|
|
||||||
if (had_nw_line)
|
|
||||||
lines.emplace_back();
|
|
||||||
} else {
|
|
||||||
if (had_nw_line) {
|
|
||||||
if (smallest_tab > tab_sz)
|
|
||||||
smallest_tab = tab_sz;
|
|
||||||
} else {
|
|
||||||
smallest_tab = tab_sz;
|
|
||||||
had_nw_line = true;
|
|
||||||
}
|
|
||||||
lines.push_back(current_line);
|
|
||||||
}
|
|
||||||
current_line.clear();
|
|
||||||
};
|
|
||||||
for (char ch: content) {
|
|
||||||
if (ch == '\n') {
|
|
||||||
finish();
|
|
||||||
} else {
|
|
||||||
current_line += ch;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finish();
|
|
||||||
while (!lines.empty() && lines.back().empty())
|
|
||||||
lines.pop_back();
|
|
||||||
|
|
||||||
for (std::string& line: lines) {
|
|
||||||
if (!line.empty()) {
|
|
||||||
assert(line.size() > smallest_tab);
|
|
||||||
line = line.substr(smallest_tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Element& el = result[filename];
|
|
||||||
el.parts = {ElementPart{element_part_types::code}};
|
|
||||||
std::string lines_cat = concatenateLines(lines);
|
|
||||||
el.parts[0].when_code.lines = mv(lines_cat);
|
|
||||||
}
|
|
||||||
|
|
||||||
int peep(ParsingContext &ctx) {
|
int peep(ParsingContext &ctx) {
|
||||||
if (ctx.text.size() <= ctx.pos)
|
if (ctx.text.size() <= ctx.pos)
|
||||||
return EOFVAL;
|
return EOFVAL;
|
||||||
@ -115,7 +67,7 @@ namespace nytl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> splitIntoLines(const std::string &str) {
|
std::vector<std::string> splitIntoLines(const std::string &str) {
|
||||||
std::vector<std::string> result;
|
std::vector<std::string> result = {""};
|
||||||
for (char ch: str) {
|
for (char ch: str) {
|
||||||
if (ch == '\n')
|
if (ch == '\n')
|
||||||
result.emplace_back();
|
result.emplace_back();
|
||||||
@ -136,9 +88,43 @@ namespace nytl {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void one_part_update_min_start_wsp_non_empty(const std::string& str, bool is_first, size_t& min) {
|
||||||
|
std::vector<std::string> lines = splitIntoLines(str);
|
||||||
|
size_t L = lines.size();
|
||||||
|
for (size_t i = is_first ? 0 : 1; i < L; i++) {
|
||||||
|
size_t first_nw = first_nw_char(lines[i]);
|
||||||
|
if (first_nw < lines[i].size())
|
||||||
|
min = std::min(min, first_nw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string one_part_cut_excess_tab(const std::string& str, bool is_first, size_t cut) {
|
||||||
|
std::vector<std::string> lines = splitIntoLines(str);
|
||||||
|
size_t L = lines.size();
|
||||||
|
for (size_t i = is_first ? 0 : 1; i < L; i++) {
|
||||||
|
if (!is_space_only(lines[i]))
|
||||||
|
lines[i] = lines[i].substr(cut);
|
||||||
|
}
|
||||||
|
return concatenateLines(lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_bare_file(const std::string& filename, const std::string& content,
|
||||||
|
global_elem_set_t& result)
|
||||||
|
{
|
||||||
|
ASSERT(result.count(filename) == 0, "Repeated element " + filename);
|
||||||
|
std::string P = clement_lstrip(content);
|
||||||
|
rstrip(P);
|
||||||
|
size_t cut = 9999999999999;
|
||||||
|
one_part_update_min_start_wsp_non_empty(P, true, cut);
|
||||||
|
P = one_part_cut_excess_tab(P, true, cut);
|
||||||
|
Element& el = result[filename];
|
||||||
|
el.parts = {ElementPart{element_part_types::code}};
|
||||||
|
el.parts[0].when_code.lines = mv(P);
|
||||||
|
}
|
||||||
|
|
||||||
void parse_special_file(const std::string& filename, const std::string& content,
|
void parse_special_file(const std::string& filename, const std::string& content,
|
||||||
std::map<std::string, Element>& result)
|
std::map<std::string, Element>& result)
|
||||||
{
|
{
|
||||||
THROW("Don't know how to parse it yet");
|
// THROW("Don't know how to parse it yet");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ int main(int argc, char** argv) {
|
|||||||
std::string dir_path = argv[1];
|
std::string dir_path = argv[1];
|
||||||
nytl::Templater templater(nytl::TemplaterSettings{nytl::TemplaterDetourRules{dir_path}});
|
nytl::Templater templater(nytl::TemplaterSettings{nytl::TemplaterDetourRules{dir_path}});
|
||||||
templater.update();
|
templater.update();
|
||||||
std::string answer = templater.render("chat", {});
|
std::string answer = templater.render("list-rooms", {});
|
||||||
printf("%s\n<a><f><t><e><r><><l><f>\n", answer.c_str());
|
printf("%s\n<a><f><t><e><r><><l><f>\n", answer.c_str());
|
||||||
std::string answer2 = templater.render("test", {});
|
std::string answer2 = templater.render("test", {});
|
||||||
printf("%s\n<a><f><t><e><r><><l><f>\n", answer.c_str());
|
printf("%s\n<a><f><t><e><r><><l><f>\n", answer.c_str());
|
||||||
|
Loading…
Reference in New Issue
Block a user