[e-users] e16: better comment parsing in AclassConfigLineParse
"Dennis Nezic" <[email protected]>
| Newsgroups | gmane.comp.window-managers.enlightenment.user |
|---|---|
| Message-ID | <ZJh3u04qnCd-AsH5@panther> |
Currently comments in bindings.cfg are parsed dumbly (but efficiently) as the first occurrence of '#', even if it occurs in a pair of quotes. Attached is a more intelligent way that handles such quotes. "eesh exec" in a terminal, and the exec commands in the .menu files are both able to handle this, I guess because the shell is doing that parsing. Eg. eesh exec logger http://hello#world eesh exec logger 'http://hello #world' _______________________________________________ enlightenment-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-users
better-comment-parsing.patch
(text/plain, 976 B)
--- a/src/aclass.c 2023-06-25 12:32:51.000000000 -0400
+++ b/src/aclass.c 2023-06-25 12:47:03.000000000 -0400
@@ -692,12 +692,34 @@
ActionClass *ac = *pac;
Action *aa = *paa;
int len, len2;
-
- len = strcspn(s, "#\r\n");
+ char *s2, *s3;
+ int quoteclosed;
+
+ len = strcspn(s, "\r\n");
if (len <= 0)
return;
s[len] = '\0';
+ s2 = s - 1;
+ quoteclosed = 0;
+ while (!quoteclosed && (s2 = strchr(s2+1, '#'))) {
+ quoteclosed = 1;
+ for (s3=s; s3<s2; s3++)
+ if (*s3 == '\'') {
+ while (++s3<s2 && *s3 != '\'' && *(s3 - 1) != '\\' ) ;
+ if (s3 == s2)
+ quoteclosed = 0;
+ }
+ else if (*s3 == '\"') {
+ while (++s3<s2 && *s3 != '\"' && *(s3 - 1) != '\\' ) ;
+ if (s3 == s2)
+ quoteclosed = 0;
+ }
+ }
+ if (s2)
+ s[s2-s] = '\0';
+
+
prm2[0] = prm3[0] = '\0';
len2 = 0;
len = sscanf(s, "%16s %n%127s %16s", prm1, &len2, prm2, prm3);