/* * Copyright 2001-2013 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") */ package com.uwyn.rife.template; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class ParseTrail { private ParseStep current = null; private ParseStep lastValid = null; private List<ParserToken> tokens = new ArrayList<>(); private Map<ParseDirective, Integer> directives = new HashMap<>(); ParseTrail(ParseStep start) { this.current = start; } ParseStep getCurrent() { return current; } void setCurrent(ParseStep current) { this.current = current; } ParseStep getLastValid() { return lastValid; } void setLastValid(ParseStep lastValid) { this.lastValid = lastValid; } void addToken(ParseStep step) { ParserToken token = step.getToken(); if (token != null) { tokens.add(token); } } ParseTrail splitTrail(ParseStep step) { ParseTrail split = new ParseTrail(step); split.tokens.addAll(tokens); return split; } void addDirective(ParseDirective directive) { int count = 1; if (directives.containsKey(directive)) { count = directives.get(directive)+1; } directives.put(directive, count); } void removeDirective(ParseDirective directive) { if (directives.containsKey(directive)) { int count = directives.get(directive)-1; if (0 == count) { directives.remove(directive); } else { directives.put(directive, count); } } } boolean hasDirective(ParseDirective directive) { return directives.containsKey(directive); } }