Răsfoiți Sursa

feat: allow dots and hyphens in identifiers

dzp 3 ani în urmă
părinte
comite
efacfd205e
1 a modificat fișierele cu 8 adăugiri și 6 ștergeri
  1. 8 6
      src/substitute.c

+ 8 - 6
src/substitute.c

@@ -302,6 +302,8 @@ int valid_escape(struct session *ses, char *str)
 	return FALSE;
 }
 
+#define IS_IDENT(ch) (is_alnum(ch) || (ch) == '_' || (ch) == '-' || (ch) == '.')
+
 int is_variable(struct session *ses, char *str)
 {
 	struct listroot *root;
@@ -325,7 +327,7 @@ int is_variable(struct session *ses, char *str)
 
 	ptt = temp;
 
-	while (is_alnum(str[i]) || str[i] == '_')
+	while (IS_IDENT(str[i]))
 	{
 		*ptt++ = str[i];
 
@@ -365,7 +367,7 @@ int is_function(struct session *ses, char *str)
 
 	ptt = temp;
 
-	while (is_alnum(str[i]) || str[i] == '_')
+	while (IS_IDENT(str[i]))
 	{
 		*ptt++ = str[i];
 
@@ -1136,7 +1138,7 @@ int substitute(struct session *ses, char *string, char *result, int flags)
 					}
 					else
 					{
-						for (ptt = temp ; is_alnum(pti[i]) || pti[i] == '_' ; i++)
+						for (ptt = temp ; IS_IDENT(pti[i]) ; i++)
 						{
 							*ptt++ = pti[i];
 						}
@@ -1292,7 +1294,7 @@ int substitute(struct session *ses, char *string, char *result, int flags)
 					{
 						ptt = temp;
 
-						while (is_alnum(pti[i]) || pti[i] == '_')
+						while (IS_IDENT(pti[i]))
 						{
 							*ptt++ = pti[i];
 
@@ -1398,7 +1400,7 @@ int substitute(struct session *ses, char *string, char *result, int flags)
 					{
 						ptt = temp;
 
-						while (is_alnum(pti[i]) || pti[i] == '_')
+						while (IS_IDENT(pti[i]))
 						{
 							*ptt++ = pti[i];
 
@@ -1532,7 +1534,7 @@ int substitute(struct session *ses, char *string, char *result, int flags)
 					{
 						ptt = temp;
 
-						while (is_alnum(pti[i]) || pti[i] == '_')
+						while (IS_IDENT(pti[i]))
 						{
 							*ptt++ = pti[i];