| 1 5 package org.h2.tools.doc; 6 7 import java.io.File ; 8 import java.io.FileInputStream ; 9 import java.io.FileOutputStream ; 10 import java.sql.Connection ; 11 import java.sql.DriverManager ; 12 import java.sql.ResultSet ; 13 import java.sql.ResultSetMetaData ; 14 import java.util.ArrayList ; 15 import java.util.HashMap ; 16 17 import org.h2.bnf.Bnf; 18 import org.h2.server.web.PageParser; 19 import org.h2.tools.indexer.Indexer; 20 import org.h2.util.IOUtils; 21 import org.h2.util.JdbcUtils; 22 import org.h2.util.StringUtils; 23 24 public class GenerateDoc { 25 26 public static void main(String [] args) throws Exception { 27 new GenerateDoc().run(args); 28 } 29 30 String inDir = "src/docsrc/html"; 31 String outDir = "docs/html"; 32 Connection conn; 33 HashMap session = new HashMap (); 34 Bnf bnf; 35 36 void run(String [] args) throws Exception { 37 for(int i=0; i<args.length; i++) { 38 if(args[i].equals("-in")) { 39 inDir = args[++i]; 40 } else if(args[i].equals("-out")) { 41 outDir = args[++i]; 42 } 43 } 44 45 Class.forName("org.h2.Driver"); 46 conn = DriverManager.getConnection("jdbc:h2:."); 47 new File (outDir).mkdirs(); 48 49 bnf = Bnf.getInstance(null); 50 51 map("commands", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION LIKE 'Commands%' ORDER BY ID"); 52 map("commandsDML", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION='Commands (DML)' ORDER BY ID"); 53 map("commandsDDL", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION='Commands (DDL)' ORDER BY ID"); 54 map("commandsOther", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION='Commands (Other)' ORDER BY ID"); 55 map("otherGrammar", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION='Other Grammar' ORDER BY ID"); 56 map("functionsAggregate", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION = 'Functions (Aggregate)' ORDER BY ID"); 57 map("functionsNumeric", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION = 'Functions (Numeric)' ORDER BY ID"); 58 map("functionsString", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION = 'Functions (String)' ORDER BY ID"); 59 map("functionsTimeDate", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION = 'Functions (Time and Date)' ORDER BY ID"); 60 map("functionsSystem", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION = 'Functions (System)' ORDER BY ID"); 61 map("functionsAll", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION LIKE 'Functions%' ORDER BY SECTION, ID"); 62 map("dataTypes", "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION LIKE 'Data Types%' ORDER BY SECTION, ID"); 63 64 process("grammar"); 65 process("functions"); 66 process("datatypes"); 67 68 conn.close(); 69 70 Indexer.main(new String [0]); 71 } 72 73 void process(String fileName) throws Exception { 74 FileOutputStream fout = new FileOutputStream (outDir + "/"+fileName+".html"); 75 FileInputStream fin = new FileInputStream (inDir + "/"+fileName+".jsp"); 76 byte[] bytes = IOUtils.readBytesAndClose(fin, 0); 77 String page = new String (bytes); 78 page = PageParser.parse(null, page, session); 79 fout.write(page.getBytes()); 80 fout.close(); 81 } 82 83 void map(String key, String sql) throws Exception { 84 ResultSet rs = null; 85 try { 86 rs = conn.createStatement().executeQuery(sql); 87 ArrayList list = new ArrayList (); 88 while(rs.next()) { 89 HashMap map = new HashMap (); 90 ResultSetMetaData meta = rs.getMetaData(); 91 for(int i=0; i<meta.getColumnCount(); i++) { 92 String k = StringUtils.toLowerEnglish(meta.getColumnLabel(i+1)); 93 String value = rs.getString(i+1); 94 map.put(k, PageParser.escapeHtml(value)); 95 } 96 String topic = rs.getString("TOPIC"); 97 String syntax = rs.getString("SYNTAX"); 98 syntax = PageParser.escapeHtml(syntax); 99 syntax = StringUtils.replaceAll(syntax, "<br>", ""); 100 syntax = bnf.getSyntax(topic, syntax); 101 map.put("syntax", syntax); 102 list.add(map); 103 } 104 session.put(key, list); 105 } finally { 106 JdbcUtils.closeSilently(rs); 107 } 108 } 109 } 110 | Popular Tags |