@Override public String toString() { return ToString.toString(this); } }
@Override public void visit(@NonNull List<? extends Prism4j.Node> nodes) { for (Prism4j.Node node : nodes) { if (node.isSyntax()) { visitSyntax((Prism4j.Syntax) node); } else { visitText((Prism4j.Text) node); } } }
@NonNull private Prism4j.Pattern clone(@NonNull Context context, @NonNull Prism4j.Pattern pattern) { Prism4j.Pattern clone = context.pattern(pattern); if (clone != null) { return clone; } final Prism4j.Grammar inside = pattern.inside(); clone = new PatternImpl( pattern.regex(), pattern.lookbehind(), pattern.greedy(), pattern.alias(), inside != null ? clone(context, inside) : null ); context.save(pattern, clone); return clone; }
@NonNull private Prism4j.Token clone(@NonNull Context context, @NonNull Prism4j.Token token) { Prism4j.Token clone = context.token(token); if (clone != null) { return clone; } final List<Prism4j.Pattern> patterns = token.patterns(); final List<Prism4j.Pattern> out = new ArrayList<>(patterns.size()); clone = new TokenImpl(token.name(), out); context.save(token, clone); for (Prism4j.Pattern pattern : patterns) { out.add(clone(context, pattern)); } return clone; }
@NonNull private Prism4j.Grammar clone(@NonNull Context context, @NonNull Prism4j.Grammar grammar) { Prism4j.Grammar clone = context.grammar(grammar); if (clone != null) { return clone; } final List<Prism4j.Token> tokens = grammar.tokens(); final List<Prism4j.Token> out = new ArrayList<>(tokens.size()); clone = new GrammarImpl(grammar.name(), out); context.save(grammar, clone); for (Prism4j.Token token : tokens) { out.add(clone(context, token)); } return clone; }
@NonNull @Override Prism4j.Token clone(@NonNull Prism4j.Token token) { return clone(new ContextImpl(), token); }
@NonNull public static Grammar grammar(@NonNull String name, Token... tokens) { return new GrammarImpl(name, ArrayUtils.toList(tokens)); }
@NonNull public List<Node> tokenize(@NonNull String text, @NonNull Grammar grammar) { final List<Node> entries = new ArrayList<>(3); entries.add(new TextImpl(text)); matchGrammar(text, entries, grammar, 0, 0, false, null); return entries; }
@NonNull public static Prism4j.Grammar clone(@NonNull Prism4j.Grammar grammar) { return CLONER.clone(grammar); }
/** * Factory method to create a {@link Grammar} * * @param name of the defined grammar * @param tokens a list of {@link Token}s * @return an instance of {@link Grammar} */ @NonNull public static Grammar grammar(@NonNull String name, @NonNull List<Token> tokens) { return new GrammarImpl(name, tokens); }
@NonNull @Override Prism4j.Pattern clone(@NonNull Prism4j.Pattern pattern) { return clone(new ContextImpl(), pattern); }
@Override public String toString() { return ToString.toString(this); } }
@NonNull @Override Prism4j.Grammar clone(@NonNull Prism4j.Grammar grammar) { return clone(new ContextImpl(), grammar); }
@Override public String toString() { return ToString.toString(this); } }