source: josm/trunk/utils/org/openstreetmap/josm/HelpTopicExtractor.groovy@ 2722

Last change on this file since 2722 was 2324, checked in by Gubaer, 14 years ago

Two groovy scripts for extracting declared help topics from the JOSM source and for creating a trac wiki report

File size: 3.1 KB
Line 
1
2// License: GPL. For details, see LICENSE file.
3package org.openstreetmap.josm;
4
5import java.io.File;
6import java.io.OutputStreamWriter;
7import java.io.FileWriter;
8import java.io.PrintWriter;
9
10/**
11 * Script to extract declared help topics from JOSM source files.
12 *
13 * Help topics are declared with the method ht(...). Example: ht("/Action/New")
14 *
15 * Run with
16 * groovy org.openstreetmap.josm.HelpTopicExtractor [options] fileOrDirs
17 *
18 */
19public class HelpTopicExtractor {
20
21 private boolean recursive = false
22 private List<String> files = []
23 private String outputFile = null
24 private PrintWriter outputWriter = null
25
26 /**
27 * extracts declared help topics from file and writes them to the output stream
28 *
29 * @param file the file
30 */
31 def extractHelpTopics(File file) {
32 def packageName;
33 def linenr = 0
34 file.eachLine {line ->
35 linenr++
36 def m = line =~ /^\s*package\s+(\S+)/
37 if (m.matches()) {
38 packageName = m[0][1].replace(";", "")
39 }
40
41 m = line =~ /.*[^a-zA-Z]ht\s*\(\s*"([^"]+)"\s*\).*/
42 if (m.matches()) {
43 def topic = m[0][1]
44 outputWriter.println "${file.getPath()}\t${file.getName()}\t${linenr}\t${packageName}\t${topic}"
45 }
46 }
47 }
48
49 /**
50 * display help information
51 */
52 def showHelp() {
53 println "groovy org.openstreetmap.josm.HelpTopicExtractor [options] fileOrDirs"
54 println "Options:"
55 println " --help|-h show help information"
56 println " --recurive|-r recursively extracts help topics from java files in the specified directories"
57 println " -output-file|-o file write to output file"
58 }
59
60 /**
61 * processes a file or directory. If recursive processing is enabled and file is a directory,
62 * recursively processes child directories.
63 *
64 * @param file the file
65 */
66 def process(File file) {
67 if (file.isFile()) {
68 extractHelpTopics(file)
69 } else if (file.isDirectory()) {
70 file.listFiles().grep(~/.*\.java$/).each {
71 File child ->
72 extractHelpTopics(child)
73 }
74 if (recursive) {
75 file.listFiles().grep { File child ->
76 child.isDirectory() && child.getName() != "." && child.getName() != ".."
77 }.each { File child ->
78 process(child)
79 }
80 }
81 }
82 }
83
84 def run(String[] args) {
85 def i = 0
86 while(i<args.length) {
87 def arg = args[i]
88 if (arg == "-h" || arg == "--help") {
89 showHelp()
90 System.exit(0)
91 } else if (arg == "-r" || arg == "--recursive") {
92 recursive = true
93 i++;
94 } else if (arg == "-o" || arg == "--output-file") {
95 i++
96 if (i >= args.length) {
97 System.err.println "Missing argument for option '${args[i-1]}'"
98 System.exit(1)
99 }
100 outputFile = args[i]
101 outputWriter = new PrintWriter(new FileWriter(outputFile))
102 i++
103 } else {
104 files.add(arg)
105 i++
106 }
107
108 }
109 if (outputFile == null) {
110 outputWriter = new PrintWriter(new OutputStreamWriter(System.out))
111 }
112 files.each {file -> process(new File(file)) }
113 outputWriter.flush()
114 if (outputFile != null) {
115 outputWriter.close()
116 }
117 }
118
119 public static void main(String[] args) {
120 new HelpTopicExtractor().run(args)
121 }
122}
Note: See TracBrowser for help on using the repository browser.