using System;
using System.Collections.Generic;
using System.Text;
using DunnChurchill.Experimental.Compiler;
using PerCederberg.Grammatica.Parser;
namespace TestParser.Visitors
{
//This visitor class manages indentation chars { and }
public class IndentVisitor : Visitor
{
private int currentIndentLevel = 0;
//Return the current indentation level
public int CurrentIndentLevel
{
get { return currentIndentLevel; }
set { currentIndentLevel = value; }
}
public override void Visit(Node node, Response response)
{
Node parentNode = node.GetParent();
TemplateConstants parentNodeType = (TemplateConstants)parentNode.GetId();
string result = (node as Token).GetImage();
switch (parentNodeType)
{
//Indent chars are ok in text blocks
case TemplateConstants.TEXTBLOCK:
response.Write(result);
break;
//Code block texts change indent level but indent char isn't outputted
case TemplateConstants.CODEBLOCK:
TemplateConstants nodeType = (TemplateConstants)node.GetId();
if (nodeType == TemplateConstants.STARTINDENT)
CurrentIndentLevel++;
if (nodeType == TemplateConstants.ENDINDENT)
currentIndentLevel--;
break;
}
}
}
}