diff options
Diffstat (limited to 'tools/data-binding/xmlGrammar/src/main/kotlin/xmlEditorTest.kt')
-rw-r--r-- | tools/data-binding/xmlGrammar/src/main/kotlin/xmlEditorTest.kt | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/tools/data-binding/xmlGrammar/src/main/kotlin/xmlEditorTest.kt b/tools/data-binding/xmlGrammar/src/main/kotlin/xmlEditorTest.kt deleted file mode 100644 index 48356ad..0000000 --- a/tools/data-binding/xmlGrammar/src/main/kotlin/xmlEditorTest.kt +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package android.databinding.parser - -import java.io.File -import org.antlr.v4.runtime.ANTLRInputStream -import org.antlr.v4.runtime.CommonTokenStream -import java.io.FileReader -import org.antlr.v4.runtime.Token -import java.util.Comparator -import kotlin.properties.Delegates - -fun main(vararg args : String) { - val f = File("/Volumes/ssd/src/data-binding/KDataBinder/samples/BindingDemo/app/src/main/res/layout/main_activity.xml") - antlrTest(f); -} - -fun log(f : () -> String) { - System.out.println("LOG: ${f()}"); -} - -fun antlrTest(f: File) : String? { - val inputStream = ANTLRInputStream(FileReader(f)) - val lexer = XMLLexer(inputStream) - val tokenStream = CommonTokenStream(lexer) - val parser = XMLParser(tokenStream) - val expr = parser.document() - log{"exp tree: ${expr.toStringTree(parser)}"} - val reservedElementNames = arrayListOf("variable", "import") - val visitor = object : XMLParserBaseVisitor<MutableList<Pair<Position, Position>>>() { - override fun visitAttribute(ctx: XMLParser.AttributeContext): MutableList<Pair<Position, Position>>? { - log{"attr:${ctx.attrName.getText()} ${ctx.attrValue.getText()}"} - if (ctx.attrName.getText().startsWith("bind:")) { - - return arrayListOf(Pair(ctx.getStart().toPosition(), ctx.getStop().toEndPosition())) - } else if (ctx.attrValue.getText().startsWith("\"@{") && ctx.attrValue.getText().endsWith("}\"")) { - return arrayListOf(Pair(ctx.getStart().toPosition(), ctx.getStop().toEndPosition())) - } - - //log{"visiting attr: ${ctx.getText()} at location ${ctx.getStart().toS()} ${ctx.getStop().toS()}"} - return super<XMLParserBaseVisitor>.visitAttribute(ctx) - } - - override fun visitElement(ctx: XMLParser.ElementContext): MutableList<Pair<Position, Position>>? { - log{"elm ${ctx.elmName.getText()} || ${ctx.Name()}"} - if (reservedElementNames.contains(ctx.elmName?.getText()) || ctx.elmName.getText().startsWith("bind:")) { - return arrayListOf(Pair(ctx.getStart().toPosition(), ctx.getStop().toEndPosition())) - } - return super< XMLParserBaseVisitor>.visitElement(ctx) - } - - override fun defaultResult(): MutableList<Pair<Position, Position>>? = arrayListOf() - - override fun aggregateResult(aggregate: MutableList<Pair<Position, Position>>?, nextResult: MutableList<Pair<Position, Position>>?): MutableList<Pair<Position, Position>>? { - return if (aggregate == null) { - return nextResult - } else if (nextResult == null) { - return aggregate - } else { - aggregate.addAll(nextResult) - return aggregate - } - } - } - val parsedExpr = expr.accept(visitor) - if (parsedExpr.size() == 0) { - return null//nothing to strip - } - log {"result ${parsedExpr.joinToString("\n-> ")}"} - parsedExpr.forEach { - log {"${it.first.line} ${it.first.charIndex}"} - } - val out = StringBuilder() - val lines = f.readLines("utf-8") - lines.forEach { out.appendln(it) } - - val sorted = parsedExpr.sortBy(object : Comparator<Pair<Position, Position>> { - override fun compare(o1: Pair<Position, Position>, o2: Pair<Position, Position>): Int { - val lineCmp = o1.first.line.compareTo(o2.first.charIndex) - if (lineCmp != 0) { - return lineCmp - } - return o1.first.line.compareTo(o2.first.charIndex) - } - }) - - var lineStarts = arrayListOf(0) - - lines.withIndices().forEach { - if (it.first > 0) { - lineStarts.add(lineStarts[it.first - 1] + lines[it.first - 1].length() + 1) - } - } - - val seperator = System.lineSeparator().charAt(0) - - sorted.forEach { - val posStart = lineStarts[it.first.line] + it.first.charIndex - val posEnd = lineStarts[it.second.line] + it.second.charIndex - for( i in posStart..(posEnd - 1)) { - if (out.charAt(i) != seperator) { - out.setCharAt(i, ' ') - } - } - } - - return out.toString() -} - - -fun org.antlr.v4.runtime.Token.toS() : String = "[L:${getLine()} CH:${getCharPositionInLine()}]" - -fun org.antlr.v4.runtime.Token.toPosition() : Position = Position(getLine() -1 , getCharPositionInLine()) - -fun org.antlr.v4.runtime.Token.toEndPosition() : Position = Position(getLine() - 1 , getCharPositionInLine() + getText().size) - -data class Position(var line : Int, var charIndex : Int) { -} |