W dniu 17.05.2022 o 00:31, Lynn McGuire pisze:
Here is code of get_next_line(). Variable source_lines is vector<string>
but trace "inside get_next_line" is not displayed.
bool source_file::get_next_line(string &line) { // get next source line
(only PHP code)
TRACE("inside get_next_line");
if (current_source_line_no == -1) {
if (num_source_lines == 0) {
line = "";
return false;
}
}
TRACE("before if");
if (current_source_line_no < num_source_lines - 1) {
TRACE("inside if");
current_source_line_no++;
} else {
TRACE("inside else");
line = "";
current_source_line_no = -1;
return false;
}
TRACE("after if");
assert(current_source_line_no >= 0 && current_source_line_no <
(int)source_lines.size() && current_source_line_no < num_source_lines);
line = source_lines[current_source_line_no];
start_inside_php = inside_php;
bool inside_apostr = false, inside_quotat = false;
for (size_t j = 0, len = line.length(); j < len; j++) {
if (inside_php) {
if (line.substr(j, 2) == "?>" && !inside_apostr && !inside_quotat) {
j++;
inside_php = false;
} else if (line.substr(j, 1) == "'" && !inside_quotat) {
inside_apostr = !inside_apostr;
} else if (line.substr(j, 1) == "\"" && !inside_apostr) {
inside_quotat = !inside_quotat;
}
} else { // outside PHP
if (line.substr(j, 2) == "<?" && line.substr(j + 2, 3) != "xml") {
j++;
inside_php = true;
inside_apostr = inside_quotat = false;
} else {
line[j] = ' ';
}
}
}
return true;
}