@@ -82,7 +82,9 @@ private static void Generate(this OpenXmlElement xmlElement, WordprocessingDocum
8282 var dicKey = $ "{ listKey } .{ e . Key } ";
8383 dic . Add ( dicKey , e . Value ) ;
8484 }
85-
85+
86+ ReplaceStatements ( xmlElement , tags ) ;
87+
8688 ReplaceText ( newTr , docx , tags : dic ) ;
8789 table . Append ( newTr ) ;
8890 }
@@ -92,6 +94,8 @@ private static void Generate(this OpenXmlElement xmlElement, WordprocessingDocum
9294 }
9395 }
9496 }
97+
98+ ReplaceStatements ( xmlElement , tags ) ;
9599
96100 ReplaceText ( xmlElement , docx , tags ) ;
97101 }
@@ -186,6 +190,129 @@ private static List<string> GetReplaceKeys(Dictionary<string, object> tags)
186190 return keys ;
187191 }
188192
193+ private static void ReplaceStatements ( OpenXmlElement xmlElement , Dictionary < string , object > tags )
194+ {
195+ var paragraphs = xmlElement . Descendants < Paragraph > ( ) . ToList ( ) ;
196+
197+ while ( paragraphs . Any ( s => s . InnerText . Contains ( "@if" ) ) )
198+ {
199+ var ifIndex = paragraphs . FindIndex ( 0 , s => s . InnerText . Contains ( "@if" ) ) ;
200+ var endIfFinalIndex = paragraphs . FindIndex ( ifIndex , s => s . InnerText . Contains ( "@endif" ) ) ;
201+
202+ var statement = paragraphs [ ifIndex ] . InnerText . Split ( ' ' ) ;
203+
204+ var checkStatement = EvaluateStatement ( tags [ statement [ 1 ] ] , statement [ 2 ] , statement [ 3 ] ) ;
205+
206+ if ( checkStatement )
207+ {
208+ for ( int i = ifIndex + 1 ; i <= endIfFinalIndex - 1 ; i ++ )
209+ {
210+ paragraphs [ i ] . Remove ( ) ;
211+ }
212+ }
213+
214+ paragraphs [ ifIndex ] . Remove ( ) ;
215+ paragraphs [ endIfFinalIndex ] . Remove ( ) ;
216+
217+ paragraphs = xmlElement . Descendants < Paragraph > ( ) . ToList ( ) ;
218+ }
219+ }
220+
221+ private static bool EvaluateStatement ( object tagValue , string comparisonOperator , string value )
222+ {
223+ var checkStatement = false ;
224+
225+ switch ( tagValue )
226+ {
227+ case double dtg when double . TryParse ( value , out var doubleNumber ) :
228+ switch ( comparisonOperator )
229+ {
230+ case "==" :
231+ checkStatement = ! dtg . Equals ( doubleNumber ) ;
232+ break ;
233+ case "!=" :
234+ checkStatement = dtg . Equals ( doubleNumber ) ;
235+ break ;
236+ case ">" :
237+ checkStatement = dtg <= doubleNumber ;
238+ break ;
239+ case "<" :
240+ checkStatement = dtg >= doubleNumber ;
241+ break ;
242+ case ">=" :
243+ checkStatement = dtg < doubleNumber ;
244+ break ;
245+ case "<=" :
246+ checkStatement = dtg > doubleNumber ;
247+ break ;
248+ }
249+
250+ break ;
251+ case int itg when int . TryParse ( value , out var intNumber ) :
252+ switch ( comparisonOperator )
253+ {
254+ case "==" :
255+ checkStatement = ! itg . Equals ( intNumber ) ;
256+ break ;
257+ case "!=" :
258+ checkStatement = itg . Equals ( intNumber ) ;
259+ break ;
260+ case ">" :
261+ checkStatement = itg <= intNumber ;
262+ break ;
263+ case "<" :
264+ checkStatement = itg >= intNumber ;
265+ break ;
266+ case ">=" :
267+ checkStatement = itg < intNumber ;
268+ break ;
269+ case "<=" :
270+ checkStatement = itg > intNumber ;
271+ break ;
272+ }
273+
274+ break ;
275+ case DateTime dttg when DateTime . TryParse ( value , out var date ) :
276+ switch ( comparisonOperator )
277+ {
278+ case "==" :
279+ checkStatement = ! dttg . Equals ( date ) ;
280+ break ;
281+ case "!=" :
282+ checkStatement = dttg . Equals ( date ) ;
283+ break ;
284+ case ">" :
285+ checkStatement = dttg <= date ;
286+ break ;
287+ case "<" :
288+ checkStatement = dttg >= date ;
289+ break ;
290+ case ">=" :
291+ checkStatement = dttg < date ;
292+ break ;
293+ case "<=" :
294+ checkStatement = dttg > date ;
295+ break ;
296+ }
297+
298+ break ;
299+ case string stg :
300+ switch ( comparisonOperator )
301+ {
302+ case "==" :
303+ checkStatement = stg != value ;
304+ break ;
305+ case "!=" :
306+ checkStatement = stg == value ;
307+ break ;
308+ }
309+
310+ break ;
311+ }
312+
313+ return checkStatement ;
314+ }
315+
189316 private static void ReplaceText ( OpenXmlElement xmlElement , WordprocessingDocument docx , Dictionary < string , object > tags )
190317 {
191318 var paragraphs = xmlElement . Descendants < Paragraph > ( ) . ToArray ( ) ;
0 commit comments