mirror of
https://github.com/swaywm/sway.git
synced 2024-11-29 19:31:29 +00:00
stringop: Properly handle criteria strings.
A criteria string (e.g. '[class="something" title="something"]') is now correctly treated as a single argument.
This commit is contained in:
parent
e7c0573a98
commit
b7e3d05ace
|
@ -117,6 +117,7 @@ char **split_args(const char *start, int *argc) {
|
||||||
bool in_token = false;
|
bool in_token = false;
|
||||||
bool in_string = false;
|
bool in_string = false;
|
||||||
bool in_char = false;
|
bool in_char = false;
|
||||||
|
bool in_brackets = false; // brackets are used for critera
|
||||||
bool escaped = false;
|
bool escaped = false;
|
||||||
const char *end = start;
|
const char *end = start;
|
||||||
if (start) {
|
if (start) {
|
||||||
|
@ -129,10 +130,14 @@ char **split_args(const char *start, int *argc) {
|
||||||
in_string = !in_string;
|
in_string = !in_string;
|
||||||
} else if (*end == '\'' && !in_string && !escaped) {
|
} else if (*end == '\'' && !in_string && !escaped) {
|
||||||
in_char = !in_char;
|
in_char = !in_char;
|
||||||
|
} else if (*end == '[' && !in_string && !in_char && !in_brackets && !escaped) {
|
||||||
|
in_brackets = true;
|
||||||
|
} else if (*end == ']' && !in_string && !in_char && in_brackets && !escaped) {
|
||||||
|
in_brackets = false;
|
||||||
} else if (*end == '\\') {
|
} else if (*end == '\\') {
|
||||||
escaped = !escaped;
|
escaped = !escaped;
|
||||||
} else if (*end == '\0' || (!in_string && !in_char && !escaped
|
} else if (*end == '\0' || (!in_string && !in_char && !in_brackets
|
||||||
&& strchr(whitespace, *end))) {
|
&& !escaped && strchr(whitespace, *end))) {
|
||||||
goto add_token;
|
goto add_token;
|
||||||
}
|
}
|
||||||
if (*end != '\\') {
|
if (*end != '\\') {
|
||||||
|
|
Loading…
Reference in a new issue