zclsyntax: change template control sequence introducer to %{

Previously it was !{, but in real examples this looked confusing since
an exclamation point after a word looks (to humans) like literal
punctuation rather than syntax.

% is not ideal either since it's also the marker traditionally used for
printf, but has the advantage that programmers are already primed for it
to be syntax.
This commit is contained in:
Martin Atkins 2017-06-17 18:33:56 -07:00
parent e7d33665d0
commit e594a232b3
4 changed files with 65 additions and 66 deletions

View File

@ -130,43 +130,43 @@ trim`,
},
{
`!{ if true ~} hello !{~ endif }`,
`%{ if true ~} hello %{~ endif }`,
nil,
cty.StringVal("hello"),
0,
},
{
`!{ if false ~} hello !{~ endif}`,
`%{ if false ~} hello %{~ endif}`,
nil,
cty.StringVal(""),
0,
},
{
`!{ if true ~} hello !{~ else ~} goodbye !{~ endif }`,
`%{ if true ~} hello %{~ else ~} goodbye %{~ endif }`,
nil,
cty.StringVal("hello"),
0,
},
{
`!{ if false ~} hello !{~ else ~} goodbye !{~ endif }`,
`%{ if false ~} hello %{~ else ~} goodbye %{~ endif }`,
nil,
cty.StringVal("goodbye"),
0,
},
{
`!{ if true ~} !{~ if false ~} hello !{~ else ~} goodbye !{~ endif ~} !{~ endif }`,
`%{ if true ~} %{~ if false ~} hello %{~ else ~} goodbye %{~ endif ~} %{~ endif }`,
nil,
cty.StringVal("goodbye"),
0,
},
{
`!{ if false ~} !{~ if false ~} hello !{~ else ~} goodbye !{~ endif ~} !{~ endif }`,
`%{ if false ~} %{~ if false ~} hello %{~ else ~} goodbye %{~ endif ~} %{~ endif }`,
nil,
cty.StringVal(""),
0,
},
{
`!{ of true ~} hello !{~ endif}`,
`%{ of true ~} hello %{~ endif}`,
nil,
cty.UnknownVal(cty.String),
2, // "of" is not a valid control keyword, and "endif" is therefore also unexpected

View File

@ -972,27 +972,27 @@ var _zcltok_trans_keys []byte = []byte{
163, 165, 186, 144, 145, 146, 147, 148,
150, 151, 152, 155, 157, 158, 160, 170,
171, 172, 175, 128, 159, 161, 169, 173,
191, 128, 191, 10, 13, 33, 34, 36,
191, 128, 191, 10, 13, 34, 36, 37,
92, 128, 191, 192, 223, 224, 239, 240,
247, 248, 255, 10, 13, 33, 34, 36,
92, 128, 191, 192, 223, 224, 239, 240,
247, 248, 255, 10, 13, 33, 36, 92,
247, 248, 255, 10, 13, 34, 92, 36,
37, 128, 191, 192, 223, 224, 239, 240,
247, 248, 255, 10, 13, 92, 36, 37,
128, 191, 192, 223, 224, 239, 240, 247,
248, 255, 33, 36, 92, 192, 223, 224,
239, 240, 247, 10, 13, 33, 34, 36,
92, 192, 223, 224, 239, 240, 247, 248,
255, 10, 13, 33, 34, 36, 92, 128,
248, 255, 92, 36, 37, 192, 223, 224,
239, 240, 247, 10, 13, 34, 92, 36,
37, 192, 223, 224, 239, 240, 247, 248,
255, 10, 13, 34, 92, 36, 37, 128,
223, 224, 239, 240, 247, 248, 255, 10,
13, 33, 34, 36, 92, 128, 191, 192,
13, 34, 92, 36, 37, 128, 191, 192,
223, 224, 239, 240, 247, 248, 255, 123,
126, 123, 126, 128, 191, 128, 191, 128,
191, 10, 13, 33, 36, 128, 191, 192,
191, 10, 13, 36, 37, 128, 191, 192,
223, 224, 239, 240, 247, 248, 255, 10,
13, 33, 36, 128, 191, 192, 223, 224,
13, 36, 37, 128, 191, 192, 223, 224,
239, 240, 247, 248, 255, 126, 126, 128,
191, 128, 191, 128, 191, 10, 13, 33,
36, 128, 191, 192, 223, 224, 239, 240,
247, 248, 255, 10, 13, 33, 36, 128,
191, 128, 191, 128, 191, 10, 13, 36,
37, 128, 191, 192, 223, 224, 239, 240,
247, 248, 255, 10, 13, 36, 37, 128,
191, 192, 223, 224, 239, 240, 247, 248,
255, 126, 126, 128, 191, 128, 191, 128,
191,
@ -1124,9 +1124,9 @@ var _zcltok_single_lengths []byte = []byte{
1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 1, 30, 47, 13, 9, 3,
0, 1, 28, 2, 0, 18, 16, 0,
6, 6, 5, 3, 6, 6, 6, 1,
1, 1, 1, 0, 0, 0, 4, 4,
1, 1, 0, 0, 0, 4, 4, 1,
6, 4, 3, 1, 4, 4, 4, 1,
1, 1, 1, 0, 0, 0, 4, 2,
1, 1, 0, 0, 0, 4, 2, 1,
1, 0, 0, 0,
}
@ -1256,9 +1256,9 @@ var _zcltok_range_lengths []byte = []byte{
0, 2, 2, 5, 2, 3, 5, 3,
2, 3, 5, 1, 1, 1, 3, 1,
1, 2, 2, 3, 1, 2, 3, 1,
5, 5, 5, 3, 4, 4, 5, 0,
0, 0, 0, 1, 1, 1, 5, 5,
0, 0, 1, 1, 1, 5, 5, 0,
5, 6, 6, 4, 5, 5, 6, 0,
0, 0, 0, 1, 1, 1, 5, 6,
0, 0, 1, 1, 1, 5, 6, 0,
0, 1, 1, 1,
}
@ -1388,10 +1388,10 @@ var _zcltok_index_offsets []int16 = []int16{
4941, 4943, 4946, 4949, 4955, 4958, 4963, 4970,
4975, 4978, 4982, 4989, 5021, 5070, 5085, 5098,
5103, 5105, 5109, 5140, 5146, 5148, 5169, 5189,
5191, 5203, 5215, 5226, 5233, 5244, 5255, 5267,
5269, 5271, 5273, 5275, 5277, 5279, 5281, 5291,
5301, 5303, 5305, 5307, 5309, 5311, 5321, 5331,
5333, 5335, 5337, 5339,
5191, 5203, 5214, 5224, 5230, 5240, 5250, 5261,
5263, 5265, 5267, 5269, 5271, 5273, 5275, 5285,
5294, 5296, 5298, 5300, 5302, 5304, 5314, 5323,
5325, 5327, 5329, 5331,
}
var _zcltok_indicies []int16 = []int16{
@ -2045,22 +2045,21 @@ var _zcltok_indicies []int16 = []int16{
1022, 1023, 1024, 1025, 1021, 1027, 1028, 1029,
1030, 1014, 1026, 1014, 887, 1014, 887, 1031,
1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
1039, 1036, 767, 1040, 1040, 1041, 1040, 1041,
1035, 1040, 768, 769, 1042, 1040, 767, 1040,
1040, 1043, 1043, 1035, 1040, 768, 769, 1042,
1040, 767, 1043, 1043, 1035, 1044, 1045, 1046,
767, 1040, 1040, 1041, 1040, 1041, 1035, 768,
769, 1042, 1040, 767, 1040, 1040, 1041, 1040,
1041, 1035, 768, 769, 1042, 1040, 767, 1040,
1040, 1041, 1040, 1041, 1035, 769, 768, 769,
1042, 1040, 767, 1048, 767, 1050, 1049, 1051,
767, 1053, 1052, 767, 1054, 771, 1054, 1055,
1054, 773, 1056, 1057, 1058, 1059, 1060, 1061,
1062, 1059, 775, 773, 1056, 1064, 1064, 1063,
776, 777, 1065, 1063, 775, 1067, 1066, 1069,
1068, 775, 1070, 776, 1070, 777, 1070, 781,
1071, 1072, 1073, 1074, 1075, 1076, 1077, 1074,
783, 781, 1071, 1079, 1079, 1078, 784, 785,
1039, 1036, 767, 1040, 1040, 1040, 1035, 1041,
1040, 768, 769, 1042, 1040, 767, 1040, 1040,
1035, 1043, 1040, 768, 769, 1042, 1040, 767,
1035, 1043, 1044, 1045, 1046, 767, 1040, 1040,
1040, 1035, 1041, 768, 769, 1042, 1040, 767,
1040, 1040, 1040, 1035, 1041, 768, 769, 1042,
1040, 767, 1040, 1040, 1040, 1035, 1041, 769,
768, 769, 1042, 1040, 767, 1048, 767, 1050,
1049, 1051, 767, 1053, 1052, 767, 1054, 771,
1054, 1055, 1054, 773, 1056, 1057, 1058, 1059,
1060, 1061, 1062, 1059, 775, 773, 1056, 1064,
1063, 776, 777, 1065, 1063, 775, 1067, 1066,
1069, 1068, 775, 1070, 776, 1070, 777, 1070,
781, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
1074, 783, 781, 1071, 1079, 1078, 784, 785,
1080, 1078, 783, 1082, 1081, 1084, 1083, 783,
1085, 784, 1085, 785, 1085,
}
@ -2195,7 +2194,7 @@ var _zcltok_trans_targs []int16 = []int16{
819, 820, 821, 822, 823, 824, 825, 826,
855, 880, 883, 884, 886, 893, 894, 897,
901, 913, 918, 919, 921, 924, 926, 1000,
1007, 1000, 1009, 1002, 1000, 1011, 1012, 1013,
1000, 1007, 1009, 1002, 1000, 1011, 1012, 1013,
1000, 928, 931, 1003, 1004, 1005, 1006, 1000,
1008, 1000, 1000, 1010, 1000, 1000, 1000, 933,
934, 939, 940, 1014, 1018, 1019, 1020, 1014,
@ -2334,13 +2333,13 @@ var _zcltok_trans_actions []byte = []byte{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 13,
0, 11, 0, 5, 15, 0, 5, 5,
11, 0, 0, 5, 15, 0, 5, 5,
21, 0, 0, 0, 5, 5, 5, 23,
0, 19, 9, 0, 17, 7, 25, 0,
0, 17, 7, 0, 19, 9, 25, 0,
0, 0, 0, 37, 0, 139, 139, 43,
0, 0, 41, 33, 39, 31, 45, 0,
0, 0, 39, 31, 41, 33, 45, 0,
0, 0, 57, 0, 145, 145, 63, 0,
0, 61, 53, 59, 51, 65,
0, 59, 51, 61, 53, 65,
}
var _zcltok_to_state_actions []byte = []byte{
@ -2803,7 +2802,7 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
f.emitToken(TokenType(b[0]), ts, te)
}
// line 2815 "scan_tokens.go"
// line 2814 "scan_tokens.go"
{
top = 0
ts = 0
@ -2811,7 +2810,7 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
act = 0
}
// line 2823 "scan_tokens.go"
// line 2822 "scan_tokens.go"
{
var _klen int
var _trans int
@ -2836,7 +2835,7 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
ts = p
// line 2847 "scan_tokens.go"
// line 2846 "scan_tokens.go"
}
}
@ -3715,7 +3714,7 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
}
}
// line 3591 "scan_tokens.go"
// line 3590 "scan_tokens.go"
}
}
@ -3736,7 +3735,7 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
act = 0
// line 3611 "scan_tokens.go"
// line 3610 "scan_tokens.go"
}
}

View File

@ -193,24 +193,24 @@ func scanTokens(data []byte, filename string, start zcl.Pos, mode scanMode) []To
}
TemplateInterp = "${" ("~")?;
TemplateControl = "!{" ("~")?;
TemplateControl = "%{" ("~")?;
EndStringTmpl = '"';
StringLiteralChars = (AnyUTF8 - ("\r"|"\n"));
TemplateStringLiteral = (
('$' ^'{') |
('!' ^'{') |
('%' ^'{') |
('\\' StringLiteralChars) |
(StringLiteralChars - ("$" | "!" | '"'))
(StringLiteralChars - ("$" | '%' | '"'))
)+;
HeredocStringLiteral = (
('$' ^'{') |
('!' ^'{') |
(StringLiteralChars - ("$" | "!"))
('%' ^'{') |
(StringLiteralChars - ("$" | '%'))
)*;
BareStringLiteral = (
('$' ^'{') |
('!' ^'{') |
(StringLiteralChars - ("$" | "!"))
('%' ^'{') |
(StringLiteralChars - ("$" | '%'))
)* Newline?;
stringTemplate := |*

View File

@ -365,7 +365,7 @@ func TestScanTokens_normal(t *testing.T) {
},
},
{
`"!{a}"`,
`"%{a}"`,
[]Token{
{
Type: TokenOQuote,
@ -377,7 +377,7 @@ func TestScanTokens_normal(t *testing.T) {
},
{
Type: TokenTemplateControl,
Bytes: []byte(`!{`),
Bytes: []byte(`%{`),
Range: zcl.Range{
Start: zcl.Pos{Byte: 1, Line: 1, Column: 2},
End: zcl.Pos{Byte: 3, Line: 1, Column: 4},