Skip to content

Commit a647fd0

Browse files
committed
Added a new command line option -g e that prevents the flattening of EXPLICIT groups. Added new field loop expression tokens <IF UNFLATTENED_GROUP>, <IF UNFLATTENED_EXPLICIT_GROUP> and <IF UNFLATTENED_IMPLICIT_GROUP>.
1 parent 11e1e0b commit a647fd0

12 files changed

Lines changed: 233 additions & 106 deletions

File tree

CodeGen/CodeGen.dbl

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ proc
104104
ok = false
105105
end
106106

107-
.ifndef D_NETSTANDARD
107+
.ifndef D_NETSTANDARD
108108

109109
;;-------------------------------------------------------------------------
110110
;;Is an auto update check scheduled and due?
@@ -231,12 +231,12 @@ proc
231231
end
232232
end
233233

234-
.endc
234+
.endc
235235

236236
;;-------------------------------------------------------------------------
237237
;;Just a little fun!
238238

239-
.ifndef D_NETSTANDARD
239+
.ifndef D_NETSTANDARD
240240
if (ok && (CommandLineParser.Parse("goat")))
241241
begin
242242
Console.WriteLine(StringTools.GetGoat(false))
@@ -252,7 +252,7 @@ proc
252252
end
253253
endtry
254254
end
255-
.endc
255+
.endc
256256

257257
;;-------------------------------------------------------------------------
258258
;;OK, looks like we're going to be generating some code, start the clock
@@ -1588,7 +1588,7 @@ proc
15881588
ok = false
15891589
exitCode = 1
15901590
end
1591-
(>3),
1591+
(>4),
15921592
begin
15931593
Console.WriteLine("ERROR: Too many group processing options were found after the -g option!")
15941594
ok = false
@@ -1600,12 +1600,17 @@ proc
16001600
for ix from 0 thru ClValues.Count-1
16011601
begin
16021602
using (ClValues[ix]).ToLower() select
1603-
("f"),task.GroupFieldNoGroupPrefix = true
1604-
("i"),task.GroupNoExpand = true
1605-
("r"), task.GroupFieldNoRpsPrefix = true
1603+
("e"),
1604+
task.ExplicitGroupNoExpand = true
1605+
("f"),
1606+
task.GroupFieldNoGroupPrefix = true
1607+
("i"),
1608+
task.ImplicitGroupNoExpand = true
1609+
("r"),
1610+
task.GroupFieldNoRpsPrefix = true
16061611
(),
16071612
begin
1608-
Console.WriteLine("ERROR: An invalid group processing option -f " + ClValues[ix] + " was encountered!")
1613+
Console.WriteLine("ERROR: An invalid group processing option -g " + ClValues[ix] + " was encountered!")
16091614
ok = false
16101615
exitCode = 1
16111616
exitloop
@@ -1711,9 +1716,9 @@ proc
17111716

17121717
Environment.ExitCode = exitCode
17131718

1714-
.ifndef D_NETSTANDARD
1719+
.ifndef D_NETSTANDARD
17151720
;;TODO: Portable doesn't like this right now (11/17)
17161721
stop exitCode
1717-
.endc
1722+
.endc
17181723

17191724
endmain

CodeGen/Usage.dbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ proc
234234
;;Limit for text -------------------------------------------------------------------------------
235235
Console.WriteLine(" -g f|r|i")
236236
Console.WriteLine(" Override default group processing rules")
237+
Console.WriteLine(" -g e Don't expand explicit groups to individual fields")
237238
Console.WriteLine(" -g f Don't prefix group fields with group name")
238239
Console.WriteLine(" -g i Don't expand implicit groups to individual fields")
239240
Console.WriteLine(" -g r Don't use repository group field prefix")

CodeGenEngine/CodeGenTask.dbl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ namespace CodeGen.Engine
186186
endmethod
187187
endproperty
188188

189+
;;; <summary>
190+
;;; Don't expand explicit groups to individual fields.
191+
;;; Setting this property to true is equivalent to using the -g e command line option.
192+
;;; </summary>
193+
public readwrite property ExplicitGroupNoExpand, Boolean
194+
189195
;;; <summary>
190196
;;; Don't prefix group fields with group name.
191197
;;; Setting this property to true is equivalent to using the -g f command line option.
@@ -202,7 +208,7 @@ namespace CodeGen.Engine
202208
;;; Don't expand implicit groups to individual fields.
203209
;;; Setting this property to true is equivalent to using the -g i command line option.
204210
;;; </summary>
205-
public readwrite property GroupNoExpand, Boolean
211+
public readwrite property ImplicitGroupNoExpand, Boolean
206212

207213
;;; <summary>
208214
;;; Exclude fields which are 'Excluded by ReportWriter'.

CodeGenEngine/CodeGenerator.dbl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,7 +1476,7 @@ namespace CodeGen.Engine
14761476

14771477
if (!errStatus)
14781478
begin
1479-
if (context.CurrentTask.GroupFieldNoGroupPrefix||context.CurrentTask.GroupFieldNoRpsPrefix||context.CurrentTask.GroupNoExpand)
1479+
if (context.CurrentTask.GroupFieldNoGroupPrefix||context.CurrentTask.GroupFieldNoRpsPrefix||context.CurrentTask.ExplicitGroupNoExpand||context.CurrentTask.ImplicitGroupNoExpand)
14801480
begin
14811481
if (!String.IsNullOrWhiteSpace(context.CurrentTask.WindowScript)) then
14821482
begin
@@ -1486,9 +1486,11 @@ namespace CodeGen.Engine
14861486
else if (context.DebugLoggingEnabled)
14871487
begin
14881488
context.CurrentTask.Log("Custom group processing rules are in use", true, false)
1489+
if (context.CurrentTask.ExplicitGroupNoExpand)
1490+
context.CurrentTask.Log(" - Explicit groups will not be expanded to individual fields")
14891491
if (context.CurrentTask.GroupFieldNoGroupPrefix) ;;Do not prefix group fields with group name
14901492
context.CurrentTask.Log(" - Group fields will not be prefixed with the group name")
1491-
if (context.CurrentTask.GroupNoExpand)
1493+
if (context.CurrentTask.ImplicitGroupNoExpand)
14921494
context.CurrentTask.Log(" - Implicit groups will not be expanded to individual fields")
14931495
if (context.CurrentTask.GroupFieldNoRpsPrefix) ;;Do not use repository group field prefix
14941496
context.CurrentTask.Log(" - Repository group field prefix will not be used")

CodeGenEngine/ExpressionEvaluators/ExpressionEvaluatorFieldLoop.dbl

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ namespace CodeGen.Engine
130130
fieldLoopExpressionEvaluators.Add("FIELD_POSITION", evaluateFieldPosition)
131131
fieldLoopExpressionEvaluators.Add("FIRST_UNIQUE_KEY_SEGMENT", evaluateFirstUniqueKeySegment)
132132
fieldLoopExpressionEvaluators.Add("FORMAT", evaluateFieldFormat)
133-
fieldLoopExpressionEvaluators.Add("GROUP_EXPAND", evaluateFieldGroupExpand)
134-
fieldLoopExpressionEvaluators.Add("GROUP_NO_EXPAND", evaluateFieldGroupNoExpand)
133+
fieldLoopExpressionEvaluators.Add("EXPLICIT_GROUP_NO_EXPAND", evaluateFieldExplicitGroupNoExpand)
134+
fieldLoopExpressionEvaluators.Add("IMPLICIT_GROUP_NO_EXPAND", evaluateFieldImplicitGroupNoExpand)
135135
fieldLoopExpressionEvaluators.Add("HARMONY_ROLES", evaluateFieldHarmonyRoles)
136136
fieldLoopExpressionEvaluators.Add("HEADING", evaluateFieldHeading)
137137
fieldLoopExpressionEvaluators.Add("HELPID", evaluateFieldHelpID)
@@ -246,6 +246,9 @@ namespace CodeGen.Engine
246246
fieldLoopExpressionEvaluators.Add("TIMEOUT", evaluateFieldTimeout)
247247
fieldLoopExpressionEvaluators.Add("TOOLKIT", evaluateFieldToolkit)
248248
fieldLoopExpressionEvaluators.Add("UNDERLINE", evaluateFieldUnderline)
249+
fieldLoopExpressionEvaluators.Add("UNFLATTENED_GROUP", evaluateFieldUnflattenedGroup)
250+
fieldLoopExpressionEvaluators.Add("UNFLATTENED_EXPLICIT_GROUP", evaluateFieldUnflattenedExplicitGroup)
251+
fieldLoopExpressionEvaluators.Add("UNFLATTENED_IMPLICIT_GROUP", evaluateFieldUnflattenedImplicitGroup)
249252
fieldLoopExpressionEvaluators.Add("UPPERCASE", evaluateFieldUppercase)
250253
fieldLoopExpressionEvaluators.Add("USED_IN_RELATION", evaluateFieldUsedInRelation)
251254
fieldLoopExpressionEvaluators.Add("USER", evaluateFieldUser)
@@ -1091,23 +1094,23 @@ namespace CodeGen.Engine
10911094
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
10921095
endmethod
10931096

1094-
private static method evaluateFieldGroupExpand, boolean
1097+
private static method evaluateFieldExplicitGroupNoExpand, boolean
10951098
tkn, @Token
10961099
template, @FileNode
10971100
loops, @IEnumerable<LoopNode>
10981101
endparams
10991102
proc
1100-
lambda doEvaluate(str, field, index) (!template.Context.CurrentTask.GroupNoExpand)
1103+
lambda doEvaluate(str, field, index) (template.Context.CurrentTask.ExplicitGroupNoExpand)
11011104
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
11021105
endmethod
11031106

1104-
private static method evaluateFieldGroupNoExpand, boolean
1107+
private static method evaluateFieldImplicitGroupNoExpand, boolean
11051108
tkn, @Token
11061109
template, @FileNode
11071110
loops, @IEnumerable<LoopNode>
11081111
endparams
11091112
proc
1110-
lambda doEvaluate(str, field, index) (template.Context.CurrentTask.GroupNoExpand)
1113+
lambda doEvaluate(str, field, index) (template.Context.CurrentTask.ImplicitGroupNoExpand)
11111114
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
11121115
endmethod
11131116

@@ -2415,6 +2418,36 @@ namespace CodeGen.Engine
24152418
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
24162419
endmethod
24172420

2421+
private static method evaluateFieldUnflattenedGroup, boolean
2422+
tkn, @Token
2423+
template, @FileNode
2424+
loops, @IEnumerable<LoopNode>
2425+
endparams
2426+
proc
2427+
lambda doEvaluate(str, field, index) (field.GroupType == RpsFieldGroup.Yes)
2428+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
2429+
endmethod
2430+
2431+
private static method evaluateFieldUnflattenedExplicitGroup, boolean
2432+
tkn, @Token
2433+
template, @FileNode
2434+
loops, @IEnumerable<LoopNode>
2435+
endparams
2436+
proc
2437+
lambda doEvaluate(str, field, index) (field.GroupType == RpsFieldGroup.Yes && String.IsNullOrWhiteSpace(field.GroupStructure))
2438+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
2439+
endmethod
2440+
2441+
private static method evaluateFieldUnflattenedImplicitGroup, boolean
2442+
tkn, @Token
2443+
template, @FileNode
2444+
loops, @IEnumerable<LoopNode>
2445+
endparams
2446+
proc
2447+
lambda doEvaluate(str, field, index) (field.GroupType == RpsFieldGroup.Yes && !String.IsNullOrWhiteSpace(field.GroupStructure))
2448+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
2449+
endmethod
2450+
24182451
private static method evaluateFieldUppercase, boolean
24192452
tkn, @Token
24202453
template, @FileNode

CodeGenEngine/ExpressionEvaluators/ExpressionEvaluatorKeySegmentLoop.dbl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ namespace CodeGen.Engine
129129
keySegmentLoopExpressionEvaluators.Add("ENUMERATED", evaluateFieldEnumerated)
130130
keySegmentLoopExpressionEvaluators.Add("FIELD_POSITION", evaluateFieldPosition)
131131
keySegmentLoopExpressionEvaluators.Add("FORMAT", evaluateFieldFormat)
132-
keySegmentLoopExpressionEvaluators.Add("GROUP_EXPAND", evaluateFieldGroupExpand)
133-
keySegmentLoopExpressionEvaluators.Add("GROUP_NO_EXPAND", evaluateFieldGroupNoExpand)
132+
keySegmentLoopExpressionEvaluators.Add("EXPLICIT_GROUP_NO_EXPAND", evaluateFieldExplicitGroupNoExpand)
133+
keySegmentLoopExpressionEvaluators.Add("IMPLICIT_GROUP_NO_EXPAND", evaluateFieldImplicitGroupNoExpand)
134134
keySegmentLoopExpressionEvaluators.Add("HEADING", evaluateFieldHeading)
135135
keySegmentLoopExpressionEvaluators.Add("HELPID", evaluateFieldHelpID)
136136
keySegmentLoopExpressionEvaluators.Add("HYPERLINK", evaluateFieldHyperlink)

0 commit comments

Comments
 (0)