package de.unisiegen.gtitool.ui.style; import java.util.ArrayList; import de.unisiegen.gtitool.core.entities.Alphabet; import de.unisiegen.gtitool.core.entities.DefaultRegexAlphabet; import de.unisiegen.gtitool.core.entities.DefaultSymbol; import de.unisiegen.gtitool.core.entities.Symbol; import de.unisiegen.gtitool.core.entities.Word; import de.unisiegen.gtitool.core.entities.regex.CharacterClassNode; import de.unisiegen.gtitool.core.entities.regex.LeafNode; import de.unisiegen.gtitool.core.entities.regex.RegexNode; import de.unisiegen.gtitool.core.entities.regex.TokenNode; import de.unisiegen.gtitool.core.parser.exceptions.ParserException; import de.unisiegen.gtitool.core.parser.exceptions.ScannerException; import de.unisiegen.gtitool.core.parser.regex.RegexParseable; import de.unisiegen.gtitool.ui.i18n.Messages; import de.unisiegen.gtitool.ui.style.parser.StyledParserPanel; /** * A panel for the RegexParser */ public final class StyledRegexParserPanel extends StyledParserPanel < RegexNode > { /** * The serial version uid. */ private static final long serialVersionUID = -6169359927866826626L; /** * Creates a new from {@link StyledRegexParserPanel} */ public StyledRegexParserPanel () { super ( new RegexParseable () ); } /** * Every {@link Symbol} in the {@link Word} has to be in this {@link Alphabet} * . */ private DefaultRegexAlphabet alphabet = null; /** * {@inheritDoc} * * @see StyledParserPanel#checkParsedObject(de.unisiegen.gtitool.core.entities.Entity) */ @Override protected RegexNode checkParsedObject ( RegexNode regexNode ) { ArrayList < ScannerException > exceptionList = new ArrayList < ScannerException > (); if ( ( this.alphabet != null ) && ( regexNode != null ) ) { for ( LeafNode current : regexNode.getTokenNodes () ) { if ( current instanceof TokenNode ) { if ( !this.alphabet.contains ( new DefaultSymbol ( ( ( TokenNode ) current ).getName () ) ) ) { exceptionList.add ( new ParserException ( current .getParserOffset ().getStart (), current.getParserOffset () .getEnd (), Messages .getPrettyString ( "StyledWordParserPanel.SymbolNotInAlphabet", //$NON-NLS-1$ current.toPrettyString (), this.alphabet.toClassPrettyString () ).toHTMLString () ) ); } } if ( current instanceof CharacterClassNode ) { for ( Symbol s : ( ( CharacterClassNode ) current ).getCharacters () ) { if ( !this.alphabet.contains ( s ) ) { exceptionList.add ( new ParserException ( s.getParserOffset () .getStart (), s.getParserOffset ().getEnd (), Messages .getPrettyString ( "StyledWordParserPanel.SymbolNotInAlphabet", //$NON-NLS-1$ s.toPrettyString (), this.alphabet.toClassPrettyString () ) .toHTMLString () ) ); } } } } } if ( exceptionList.size () > 0 ) { setException ( exceptionList ); return null; } return regexNode; } /** * Sets the {@link Alphabet}. Every {@link Symbol} in the {@link Word} has to * be in the {@link Alphabet}. * * @param alphabet The {@link Alphabet} to set. */ public final void setAlphabet ( DefaultRegexAlphabet alphabet ) { this.alphabet = alphabet; } }