11d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta/* 21d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * Copyright (C) 2017 The Android Open Source Project 31d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * 41d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * Licensed under the Apache License, Version 2.0 (the "License"); 51d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * you may not use this file except in compliance with the License. 61d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * You may obtain a copy of the License at 71d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * 81d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * http://www.apache.org/licenses/LICENSE-2.0 91d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * 101d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * Unless required by applicable law or agreed to in writing, software 111d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * distributed under the License is distributed on an "AS IS" BASIS, 121d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * See the License for the specific language governing permissions and 141d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * limitations under the License. 151d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta */ 161d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 171d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport lexer.HidlLexer 181d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport lexer.Token 191d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport parser.LOG_NAME 201d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport parser.config 211d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport parser.files.AbstractFileParser 221d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport parser.files.InterfaceFileParser 231d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport parser.files.TypesFileParser 241d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport writer.files.* 251d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport java.nio.file.Paths 261d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertaimport java.text.ParseException 271d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 281d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertafun main(args: Array<String>) { 291d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta config.parseArgs(args) 301d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (config.verbose) println("$LOG_NAME args: ${config}") 311d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 321d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val indexWriter = IndexFileWriter() //collects parser entries 331d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 341d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta /* 351d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * parse and write HAL files 361d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta */ 371d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta for (fp in config.files) { 381d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta println("$LOG_NAME Parsing input: $fp") 391d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 401d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val tokens = HidlLexer.tokenize(fp) 411d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val (parser, writer) = parseAndGetWriter(tokens) 421d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 431d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta indexWriter.addEntry(parser) 441d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 451d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta try { 461d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta //since lazily evaluated, check here for parse errors 471d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (writer.writeToFile()) println("$LOG_NAME Wrote file: ${writer.path}") 481d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 491d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } catch (ex: ParseException) { 501d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (config.skipError) { 511d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta System.err.println("$LOG_NAME Error parsing file, skipping: $fp") 521d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta continue 531d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } else { 541d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta System.err.println("$LOG_NAME Error parsing file: $fp") 551d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta throw ex 561d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } 571d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } finally { 581d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (config.verbose) writer.printInfo() 591d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } 601d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } 611d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 621d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta /* 631d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta * non-HAL file 641d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta */ 651d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (indexWriter.writeToFile()) println("$LOG_NAME Wrote index: ${indexWriter.path}") 661d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 671d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val cssPath = Paths.get("${config.outDir}/assets/style.css") 68b34c067e0c2cb9448b7d1a9242301f028d0d9f44Steven Moreland if (resources.copyToFile("/resources/assets/style.css", cssPath)) { 691d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta println("$LOG_NAME Copied resource file: $cssPath") 701d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } 711d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta} 721d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta 731d28d62a5d776a9925423bb212beb12f2e747e13Billy Lambertafun parseAndGetWriter(tokens: List<Token>): Pair<AbstractFileParser, AbstractParserFileWriter> { 741d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val parser: AbstractFileParser 751d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta val writer: AbstractParserFileWriter 761d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta if (InterfaceFileParser.isInterface(tokens)) { 771d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta parser = InterfaceFileParser(tokens) 781d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta writer = InterfaceFileWriter(parser) 791d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } else { 801d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta parser = TypesFileParser(tokens) 811d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta writer = TypesFileWriter(parser) 821d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta } 831d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta return Pair(parser, writer) 841d28d62a5d776a9925423bb212beb12f2e747e13Billy Lamberta}