deepclause-sdk 0.0.58 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2199,14 +2199,15 @@ flatten_conjunction((A1, A2), B, Result) :- !,
|
|
|
2199
2199
|
flatten_conjunction(A, B, (A, B)).
|
|
2200
2200
|
|
|
2201
2201
|
%% string_needs_interpolation(+String)
|
|
2202
|
-
%% Check if a string contains {VarName} patterns
|
|
2202
|
+
%% Check if a string contains identifier-like {VarName} patterns
|
|
2203
2203
|
string_needs_interpolation(String) :-
|
|
2204
2204
|
( string(String) -> S = String
|
|
2205
2205
|
; atom(String) -> atom_string(String, S)
|
|
2206
2206
|
; fail
|
|
2207
2207
|
),
|
|
2208
|
-
|
|
2209
|
-
|
|
2208
|
+
string_codes(S, Codes),
|
|
2209
|
+
extract_vars_from_codes(Codes, VarNames, _),
|
|
2210
|
+
VarNames \= [].
|
|
2210
2211
|
|
|
2211
2212
|
%% build_format_call(+Template, +Bindings, -TempVar, -FormatGoal)
|
|
2212
2213
|
%% Build a format/3 call that produces the interpolated string
|
|
@@ -2247,11 +2248,17 @@ extract_interpolation_vars(Template, VarNames, FormatString) :-
|
|
|
2247
2248
|
extract_vars_from_codes([], [], []) :- !.
|
|
2248
2249
|
|
|
2249
2250
|
% Found opening brace
|
|
2250
|
-
extract_vars_from_codes([0'{|Rest], [VarName|VarNames], [0'~, 0'w|FormatRest]) :-
|
|
2251
|
+
extract_vars_from_codes([0'{|Rest], [VarName|VarNames], [0'~, 0'w|FormatRest]) :-
|
|
2251
2252
|
extract_var_until_close(Rest, VarNameCodes, AfterClose),
|
|
2253
|
+
valid_placeholder_codes(VarNameCodes),
|
|
2254
|
+
!,
|
|
2252
2255
|
atom_codes(VarName, VarNameCodes),
|
|
2253
2256
|
extract_vars_from_codes(AfterClose, VarNames, FormatRest).
|
|
2254
2257
|
|
|
2258
|
+
% Invalid placeholder syntax - keep the opening brace literal
|
|
2259
|
+
extract_vars_from_codes([0'{|Rest], VarNames, [0'{|FormatRest]) :- !,
|
|
2260
|
+
extract_vars_from_codes(Rest, VarNames, FormatRest).
|
|
2261
|
+
|
|
2255
2262
|
% Escape tilde for format/3
|
|
2256
2263
|
extract_vars_from_codes([0'~|Rest], VarNames, [0'~, 0'~|FormatRest]) :- !,
|
|
2257
2264
|
extract_vars_from_codes(Rest, VarNames, FormatRest).
|
|
@@ -2266,6 +2273,20 @@ extract_var_until_close([C|Rest], [C|VarRest], Final) :-
|
|
|
2266
2273
|
extract_var_until_close(Rest, VarRest, Final).
|
|
2267
2274
|
extract_var_until_close([], [], []).
|
|
2268
2275
|
|
|
2276
|
+
%% valid_placeholder_codes(+Codes)
|
|
2277
|
+
%% Placeholder names must look like identifiers: [A-Za-z_][A-Za-z0-9_]*
|
|
2278
|
+
valid_placeholder_codes([First|Rest]) :-
|
|
2279
|
+
valid_placeholder_start(First),
|
|
2280
|
+
maplist(valid_placeholder_char, Rest).
|
|
2281
|
+
|
|
2282
|
+
valid_placeholder_start(Code) :-
|
|
2283
|
+
code_type(Code, alpha)
|
|
2284
|
+
; Code =:= 0'_.
|
|
2285
|
+
|
|
2286
|
+
valid_placeholder_char(Code) :-
|
|
2287
|
+
code_type(Code, alnum)
|
|
2288
|
+
; Code =:= 0'_.
|
|
2289
|
+
|
|
2269
2290
|
%% lookup_vars_with_params(+VarNames, +Bindings, -VarList, -ParamGoals)
|
|
2270
2291
|
%% Look up each variable name:
|
|
2271
2292
|
%% - If in Bindings (local Prolog variable) → use directly
|
|
@@ -36,10 +36,11 @@ interpolate_atom(Template, Bindings, Result) :-
|
|
|
36
36
|
%% Process character codes, replacing {var} patterns
|
|
37
37
|
interpolate_codes([], _, []) :- !.
|
|
38
38
|
|
|
39
|
-
% Found opening brace -
|
|
39
|
+
% Found opening brace - replace only identifier-like placeholders
|
|
40
40
|
interpolate_codes([0'{|Rest], Bindings, Result) :-
|
|
41
|
-
!,
|
|
42
41
|
extract_var_name(Rest, VarNameCodes, AfterVar),
|
|
42
|
+
valid_placeholder_codes(VarNameCodes),
|
|
43
|
+
!,
|
|
43
44
|
atom_codes(VarName, VarNameCodes),
|
|
44
45
|
( find_binding(VarName, Bindings, Value)
|
|
45
46
|
-> format(atom(ValueAtom), '~w', [Value]),
|
|
@@ -51,6 +52,11 @@ interpolate_codes([0'{|Rest], Bindings, Result) :-
|
|
|
51
52
|
append([0'{|VarNameCodes], [0'}|RestResult], Result)
|
|
52
53
|
).
|
|
53
54
|
|
|
55
|
+
% Invalid placeholder syntax - keep the opening brace literal
|
|
56
|
+
interpolate_codes([0'{|Rest], Bindings, [0'{|Result]) :-
|
|
57
|
+
!,
|
|
58
|
+
interpolate_codes(Rest, Bindings, Result).
|
|
59
|
+
|
|
54
60
|
% Regular character - keep it
|
|
55
61
|
interpolate_codes([C|Rest], Bindings, [C|Result]) :-
|
|
56
62
|
interpolate_codes(Rest, Bindings, Result).
|
|
@@ -63,6 +69,20 @@ extract_var_name([C|Rest], [C|VarRest], Final) :-
|
|
|
63
69
|
extract_var_name(Rest, VarRest, Final).
|
|
64
70
|
extract_var_name([], [], []). % Handle unclosed brace gracefully
|
|
65
71
|
|
|
72
|
+
%% valid_placeholder_codes(+Codes)
|
|
73
|
+
%% Placeholder names must look like identifiers: [A-Za-z_][A-Za-z0-9_]*
|
|
74
|
+
valid_placeholder_codes([First|Rest]) :-
|
|
75
|
+
valid_placeholder_start(First),
|
|
76
|
+
maplist(valid_placeholder_char, Rest).
|
|
77
|
+
|
|
78
|
+
valid_placeholder_start(Code) :-
|
|
79
|
+
code_type(Code, alpha)
|
|
80
|
+
; Code =:= 0'_.
|
|
81
|
+
|
|
82
|
+
valid_placeholder_char(Code) :-
|
|
83
|
+
code_type(Code, alnum)
|
|
84
|
+
; Code =:= 0'_.
|
|
85
|
+
|
|
66
86
|
%% find_binding(+VarName, +Bindings, -Value)
|
|
67
87
|
%% Look up a variable in the bindings list
|
|
68
88
|
find_binding(VarName, Bindings, Value) :-
|
package/package.json
CHANGED
|
@@ -2199,14 +2199,15 @@ flatten_conjunction((A1, A2), B, Result) :- !,
|
|
|
2199
2199
|
flatten_conjunction(A, B, (A, B)).
|
|
2200
2200
|
|
|
2201
2201
|
%% string_needs_interpolation(+String)
|
|
2202
|
-
%% Check if a string contains {VarName} patterns
|
|
2202
|
+
%% Check if a string contains identifier-like {VarName} patterns
|
|
2203
2203
|
string_needs_interpolation(String) :-
|
|
2204
2204
|
( string(String) -> S = String
|
|
2205
2205
|
; atom(String) -> atom_string(String, S)
|
|
2206
2206
|
; fail
|
|
2207
2207
|
),
|
|
2208
|
-
|
|
2209
|
-
|
|
2208
|
+
string_codes(S, Codes),
|
|
2209
|
+
extract_vars_from_codes(Codes, VarNames, _),
|
|
2210
|
+
VarNames \= [].
|
|
2210
2211
|
|
|
2211
2212
|
%% build_format_call(+Template, +Bindings, -TempVar, -FormatGoal)
|
|
2212
2213
|
%% Build a format/3 call that produces the interpolated string
|
|
@@ -2247,11 +2248,17 @@ extract_interpolation_vars(Template, VarNames, FormatString) :-
|
|
|
2247
2248
|
extract_vars_from_codes([], [], []) :- !.
|
|
2248
2249
|
|
|
2249
2250
|
% Found opening brace
|
|
2250
|
-
extract_vars_from_codes([0'{|Rest], [VarName|VarNames], [0'~, 0'w|FormatRest]) :-
|
|
2251
|
+
extract_vars_from_codes([0'{|Rest], [VarName|VarNames], [0'~, 0'w|FormatRest]) :-
|
|
2251
2252
|
extract_var_until_close(Rest, VarNameCodes, AfterClose),
|
|
2253
|
+
valid_placeholder_codes(VarNameCodes),
|
|
2254
|
+
!,
|
|
2252
2255
|
atom_codes(VarName, VarNameCodes),
|
|
2253
2256
|
extract_vars_from_codes(AfterClose, VarNames, FormatRest).
|
|
2254
2257
|
|
|
2258
|
+
% Invalid placeholder syntax - keep the opening brace literal
|
|
2259
|
+
extract_vars_from_codes([0'{|Rest], VarNames, [0'{|FormatRest]) :- !,
|
|
2260
|
+
extract_vars_from_codes(Rest, VarNames, FormatRest).
|
|
2261
|
+
|
|
2255
2262
|
% Escape tilde for format/3
|
|
2256
2263
|
extract_vars_from_codes([0'~|Rest], VarNames, [0'~, 0'~|FormatRest]) :- !,
|
|
2257
2264
|
extract_vars_from_codes(Rest, VarNames, FormatRest).
|
|
@@ -2266,6 +2273,20 @@ extract_var_until_close([C|Rest], [C|VarRest], Final) :-
|
|
|
2266
2273
|
extract_var_until_close(Rest, VarRest, Final).
|
|
2267
2274
|
extract_var_until_close([], [], []).
|
|
2268
2275
|
|
|
2276
|
+
%% valid_placeholder_codes(+Codes)
|
|
2277
|
+
%% Placeholder names must look like identifiers: [A-Za-z_][A-Za-z0-9_]*
|
|
2278
|
+
valid_placeholder_codes([First|Rest]) :-
|
|
2279
|
+
valid_placeholder_start(First),
|
|
2280
|
+
maplist(valid_placeholder_char, Rest).
|
|
2281
|
+
|
|
2282
|
+
valid_placeholder_start(Code) :-
|
|
2283
|
+
code_type(Code, alpha)
|
|
2284
|
+
; Code =:= 0'_.
|
|
2285
|
+
|
|
2286
|
+
valid_placeholder_char(Code) :-
|
|
2287
|
+
code_type(Code, alnum)
|
|
2288
|
+
; Code =:= 0'_.
|
|
2289
|
+
|
|
2269
2290
|
%% lookup_vars_with_params(+VarNames, +Bindings, -VarList, -ParamGoals)
|
|
2270
2291
|
%% Look up each variable name:
|
|
2271
2292
|
%% - If in Bindings (local Prolog variable) → use directly
|
|
@@ -36,10 +36,11 @@ interpolate_atom(Template, Bindings, Result) :-
|
|
|
36
36
|
%% Process character codes, replacing {var} patterns
|
|
37
37
|
interpolate_codes([], _, []) :- !.
|
|
38
38
|
|
|
39
|
-
% Found opening brace -
|
|
39
|
+
% Found opening brace - replace only identifier-like placeholders
|
|
40
40
|
interpolate_codes([0'{|Rest], Bindings, Result) :-
|
|
41
|
-
!,
|
|
42
41
|
extract_var_name(Rest, VarNameCodes, AfterVar),
|
|
42
|
+
valid_placeholder_codes(VarNameCodes),
|
|
43
|
+
!,
|
|
43
44
|
atom_codes(VarName, VarNameCodes),
|
|
44
45
|
( find_binding(VarName, Bindings, Value)
|
|
45
46
|
-> format(atom(ValueAtom), '~w', [Value]),
|
|
@@ -51,6 +52,11 @@ interpolate_codes([0'{|Rest], Bindings, Result) :-
|
|
|
51
52
|
append([0'{|VarNameCodes], [0'}|RestResult], Result)
|
|
52
53
|
).
|
|
53
54
|
|
|
55
|
+
% Invalid placeholder syntax - keep the opening brace literal
|
|
56
|
+
interpolate_codes([0'{|Rest], Bindings, [0'{|Result]) :-
|
|
57
|
+
!,
|
|
58
|
+
interpolate_codes(Rest, Bindings, Result).
|
|
59
|
+
|
|
54
60
|
% Regular character - keep it
|
|
55
61
|
interpolate_codes([C|Rest], Bindings, [C|Result]) :-
|
|
56
62
|
interpolate_codes(Rest, Bindings, Result).
|
|
@@ -63,6 +69,20 @@ extract_var_name([C|Rest], [C|VarRest], Final) :-
|
|
|
63
69
|
extract_var_name(Rest, VarRest, Final).
|
|
64
70
|
extract_var_name([], [], []). % Handle unclosed brace gracefully
|
|
65
71
|
|
|
72
|
+
%% valid_placeholder_codes(+Codes)
|
|
73
|
+
%% Placeholder names must look like identifiers: [A-Za-z_][A-Za-z0-9_]*
|
|
74
|
+
valid_placeholder_codes([First|Rest]) :-
|
|
75
|
+
valid_placeholder_start(First),
|
|
76
|
+
maplist(valid_placeholder_char, Rest).
|
|
77
|
+
|
|
78
|
+
valid_placeholder_start(Code) :-
|
|
79
|
+
code_type(Code, alpha)
|
|
80
|
+
; Code =:= 0'_.
|
|
81
|
+
|
|
82
|
+
valid_placeholder_char(Code) :-
|
|
83
|
+
code_type(Code, alnum)
|
|
84
|
+
; Code =:= 0'_.
|
|
85
|
+
|
|
66
86
|
%% find_binding(+VarName, +Bindings, -Value)
|
|
67
87
|
%% Look up a variable in the bindings list
|
|
68
88
|
find_binding(VarName, Bindings, Value) :-
|