| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| |
| // Add a top-level pseudo-task to which we will attach individual regenerate tasks. |
| |
| configure(rootProject) { |
| configurations { |
| jflex |
| } |
| |
| dependencies { |
| jflex "de.jflex:jflex:${scriptDepVersions['jflex']}" |
| } |
| } |
| |
| // We always regenerate, no need to declare outputs. |
| class JFlexTask extends DefaultTask { |
| @Input |
| File jflexFile |
| |
| @Input |
| File skeleton |
| |
| @Optional |
| String heapSize |
| |
| JFlexTask() { |
| dependsOn(project.rootProject.configurations.jflex) |
| } |
| |
| @TaskAction |
| def generate() { |
| if (!jflexFile || !jflexFile.exists()) { |
| throw new RuntimeException("JFlex file does not exist: ${jflexFile}") |
| } |
| def targetDir = jflexFile.parentFile |
| def target = jflexFile.absolutePath.replace(".jflex", ".java") |
| |
| logger.lifecycle("Regenerating JFlex:\n from: ${jflexFile}\n to: ${target}") |
| project.javaexec { |
| classpath { |
| project.rootProject.configurations.jflex |
| } |
| main = "jflex.Main" |
| args += [ |
| "-nobak", |
| "--quiet", |
| "--encoding", "UTF-8", |
| ] |
| |
| if (heapSize) { |
| maxHeapSize = heapSize |
| } |
| |
| if (skeleton) { |
| args += ["--skel", skeleton.absolutePath] |
| } |
| |
| args += [ |
| "-d", targetDir.absolutePath, |
| jflexFile |
| ] |
| } |
| |
| // Correct line endings for Windows. |
| project.ant.fixcrlf( |
| file: target, |
| encoding: "UTF-8", |
| eol: "lf" |
| ) |
| } |
| } |
| |
| configure(project(":lucene:core")) { |
| task jflexStandardTokenizerImpl(type: JFlexTask) { |
| description "Regenerate StandardTokenizerImpl.java" |
| group "generation" |
| |
| jflexFile = file('src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex') |
| skeleton = file("src/data/jflex/skeleton.disable.buffer.expansion.txt") |
| |
| doLast { |
| ant.replace( |
| file: file('src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java'), |
| encoding: "UTF-8", |
| token: "private static final int ZZ_BUFFERSIZE =", |
| value: "private int ZZ_BUFFERSIZE =" |
| ) |
| } |
| } |
| } |
| |
| configure(project(":lucene:analysis:common")) { |
| |
| task jflexWikipediaTokenizerImpl(type: JFlexTask) { |
| description "Regenerate WikipediaTokenizerImpl.java" |
| group "generation" |
| |
| jflexFile = file('src/java/org/apache/lucene/analysis/wikipedia/WikipediaTokenizerImpl.jflex') |
| skeleton = project(":lucene:core").file("src/data/jflex/skeleton.default") |
| } |
| |
| task jflexClassicTokenizerImpl(type: JFlexTask) { |
| description "Regenerate ClassicTokenizerImpl.java" |
| group "generation" |
| |
| jflexFile = file('src/java/org/apache/lucene/analysis/classic/ClassicTokenizerImpl.jflex') |
| skeleton = project(":lucene:core").file("src/data/jflex/skeleton.default") |
| } |
| |
| task jflexUAX29URLEmailTokenizerImpl(type: JFlexTask) { |
| description "Regenerate UAX29URLEmailTokenizerImpl.java" |
| group "generation" |
| |
| jflexFile = file('src/java/org/apache/lucene/analysis/email/UAX29URLEmailTokenizerImpl.jflex') |
| skeleton = project(":lucene:core").file("src/data/jflex/skeleton.disable.buffer.expansion.txt") |
| heapSize = "12g" |
| |
| doFirst { |
| logger.lifecycle("Regenerating UAX29URLEmailTokenizerImpl. This may take a long time (and requires tons of memory).") |
| } |
| |
| doLast { |
| ant.replace( |
| file: file('src/java/org/apache/lucene/analysis/email/UAX29URLEmailTokenizerImpl.java'), |
| encoding: "UTF-8", |
| token: "private static final int ZZ_BUFFERSIZE =", |
| value: "private int ZZ_BUFFERSIZE =" |
| ) |
| } |
| } |
| |
| task jflexHTMLStripCharFilter(type: JFlexTask) { |
| description "Regenerate HTMLStripCharFilter.java" |
| group "generation" |
| |
| jflexFile = file('src/java/org/apache/lucene/analysis/charfilter/HTMLStripCharFilter.jflex') |
| skeleton = project(":lucene:core").file("src/data/jflex/skeleton.default") |
| |
| doFirst { |
| // Regenerate HTMLCharacterEntities.jflex first. |
| def target = file('src/java/org/apache/lucene/analysis/charfilter/HTMLCharacterEntities.jflex') |
| target.withOutputStream { output -> |
| project.exec { |
| executable = project.externalTool("python3") |
| workingDir = target.parentFile |
| standardOutput = output |
| args += [ |
| "-B", // don't write any bytecode cache |
| "htmlentity.py" |
| ] |
| } |
| } |
| |
| project.ant.fixcrlf( |
| file: target, |
| encoding: "UTF-8", |
| eol: "lf" |
| ) |
| } |
| } |
| |
| task regenerate() { |
| description "Regenerate any generated sources" |
| group "generation" |
| |
| // Run regeneration tasks. |
| dependsOn jflexUAX29URLEmailTokenizerImpl |
| dependsOn jflexHTMLStripCharFilter |
| dependsOn jflexClassicTokenizerImpl |
| dependsOn jflexWikipediaTokenizerImpl |
| |
| // Clean up and reformat the generated sources after generation. |
| dependsOn "tidy" |
| } |
| |
| // Make sure tidy runs after generation, if they're defined. |
| tasks.matching { it.name == "tidy" }.configureEach { |
| mustRunAfter jflexUAX29URLEmailTokenizerImpl, |
| jflexHTMLStripCharFilter, |
| jflexClassicTokenizerImpl, |
| jflexWikipediaTokenizerImpl |
| } |
| } |