All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jfxcore.compiler.parse.InlineTokenizer Maven / Gradle / Ivy

// Copyright (c) 2021, 2023, JFXcore. All rights reserved.
// Use of this source code is governed by the BSD-3-Clause license that can be found in the LICENSE file.

package org.jfxcore.compiler.parse;

import org.jfxcore.compiler.diagnostic.Location;
import org.jfxcore.compiler.diagnostic.SourceInfo;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

public class InlineTokenizer extends CurlyTokenizer {

    public InlineTokenizer(String text, Location sourceOffset) {
        super(InlineToken.class, text, sourceOffset);
        concatPrefixesAndIdentifiers();
    }

    @Override
    protected InlineToken parseToken(String value, String line, SourceInfo sourceInfo) {
        return InlineToken.parse(value, line, sourceInfo);
    }

    @Override
    protected InlineToken newToken(CurlyTokenType type, String value, String line, SourceInfo sourceInfo) {
        return new InlineToken(type, value, line, sourceInfo);
    }

    private void concatPrefixesAndIdentifiers() {
        Deque newTokens = new ArrayDeque<>(size());
        List tempTokens = new ArrayList<>(4);

        while (!isEmpty()) {
            InlineToken current = remove();
            tempTokens.add(current);

            if (tempTokens.size() == 4) {
                newTokens.add(tempTokens.remove(0));
            }

            if (tempTokens.size() == 3
                    && tempTokens.get(0).getType() == CurlyTokenType.IDENTIFIER
                    && tempTokens.get(1).getType() == CurlyTokenType.COLON
                    && tempTokens.get(2).getType() == CurlyTokenType.IDENTIFIER) {
                InlineToken token = new InlineToken(
                    CurlyTokenType.IDENTIFIER,
                    tempTokens.get(0).getValue() + ":" + current.getValue(),
                    tempTokens.get(0).getLine(),
                    SourceInfo.span(tempTokens.get(0).getSourceInfo(), tempTokens.get(2).getSourceInfo()));

                newTokens.add(token);
                tempTokens.clear();
            }
        }

        newTokens.addAll(tempTokens);
        addAll(newTokens);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy