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

Last change on this file since 2324 was 2324, checked in by Gubaer, 12 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.