@@ -23,14 +23,80 @@ public class Parser {
2323 //**************************************************************************
2424 public static void main (String [] arr ) throws Exception {
2525 HashMap <String , String > args = console .parseArgs (arr );
26- java .io .File input = new java .io .File (args .get ("-input" ));
27- //java.io.File output = new java.io.File(args.get("-output"));
2826
27+ //Get input file or directory
28+ String path = args .get ("-input" );
29+ if (path ==null ){
30+ if (arr .length >0 ){
31+ path = arr [0 ];
32+ }
33+ else {
34+ System .out .println ("-input file or directory is required" );
35+ return ;
36+ }
37+ }
38+
39+
40+
41+ //Get test file as needed
42+ String expectedOutput = null ;
43+ String test = args .get ("-test" );
44+ if (test !=null ) expectedOutput = new javaxt .io .File (test ).getText ();
45+
46+
47+
48+ //Generate output
49+ java .io .File input = new java .io .File (path );
2950 if (input .isFile ()){
30- print (new javaxt .io .File (input ));
51+ String output = parse (new javaxt .io .File (input ));
52+ if (expectedOutput ==null ){
53+ System .out .print (output );
54+ }
55+ else {
56+ if (output .equals (expectedOutput )){
57+ System .out .println (input + " [PASS]" );
58+ }
59+ else {
60+ System .out .println (input + " [FAILED] <------" );
61+ }
62+ }
3163 }
3264 else {
33-
65+ String [] filter = new String []{"*.js" , "*.java" };
66+ for (javaxt .io .File file : new javaxt .io .Directory (input ).getFiles (filter , true )){
67+ String output = parse (file );
68+ if (expectedOutput ==null ){
69+ System .out .print (output );
70+ }
71+ else {
72+ String t = expectedOutput .substring (0 , output .length ());
73+ if (t .equals (output )){
74+ System .out .println (file + " [PASS]" );
75+ expectedOutput = expectedOutput .substring (output .length ());
76+ }
77+ else {
78+ System .out .println (file + " [FAILED] <------" );
79+ for (int i =0 ; i <output .length (); i ++){
80+ char a = output .charAt (i );
81+ char b = expectedOutput .charAt (i );
82+ if (a !=b ){
83+ int start = i -50 ;
84+ if (start <0 ) start = 0 ;
85+ int end = Math .min (i + 50 , output .length ());
86+ //, expectedOutput.length()
87+
88+
89+ System .out .println (output .substring (start , i ) + "|" + output .substring (i , end ));
90+ System .out .println ("--------------------------------------------" );
91+ System .out .println (expectedOutput .substring (start , i ) + "|" + expectedOutput .substring (i , end ));
92+
93+ break ;
94+ }
95+ }
96+ break ;
97+ }
98+ }
99+ }
34100 }
35101 }
36102
@@ -886,7 +952,7 @@ private static Comment parseComment(String comment){
886952 */
887953 private static ArrayList <Class > getClasses (String s ){
888954 ArrayList <Class > classes = new ArrayList <>();
889-
955+ ArrayList < JSONObject > orphanedFunctions = new ArrayList <>();
890956
891957 int i =0 ;
892958 Word word , p1 = null , p2 = null ;
@@ -952,6 +1018,11 @@ private static ArrayList<Class> getClasses(String s){
9521018 }
9531019
9541020 }
1021+ else {
1022+
1023+ //TODO: add static functions to anonymous class (e.g. Utils.js)
1024+
1025+ }
9551026 }
9561027
9571028 i = end +1 ;
@@ -1394,89 +1465,91 @@ private static int getDefaultValue(int offset, Word nextWord, Config config, Str
13941465 /** Used to display all the classes, methods and properties found in a given
13951466 * file
13961467 */
1397- private static void print (javaxt .io .File input ) throws Exception {
1468+ private static String parse (javaxt .io .File input ) throws Exception {
1469+
1470+ Printer printer = new Printer ();
13981471 ArrayList <Class > classes = new Parser (input ).getClasses ();
1399- //if (true) return;
14001472 for (Class cls : classes ){
14011473 String className = cls .getName ();
14021474 String namespace = cls .getNamespace ();
14031475 boolean isInterface = cls .isInterface ();
14041476 if (namespace !=null ) className = namespace + "." + className ;
1405- System . out .println ("-----------------------------------" );
1406- System . out .println ("- " + className + (isInterface ? " (Interface)" : "" ));
1407- System . out .println ("-----------------------------------" );
1477+ printer .println ("-----------------------------------" );
1478+ printer .println ("- " + className + (isInterface ? " (Interface)" : "" ));
1479+ printer .println ("-----------------------------------" );
14081480 String description = cls .getDescription ();
1409- if (description !=null ) System . out .println (description );
1481+ if (description !=null ) printer .println (description );
14101482
14111483 ArrayList <String > extensions = cls .getSuper ();
14121484 if (!extensions .isEmpty ()){
1413- System . out .print ("\r \n Extends" );
1485+ printer .print ("\r \n Extends" );
14141486 for (String ext : extensions ){
1415- System . out .print (" " + ext );
1487+ printer .print (" " + ext );
14161488 }
1417- System . out .println ("\r \n " );
1489+ printer .println ("\r \n " );
14181490 }
14191491
14201492
14211493 ArrayList <Constructor > contructors = cls .getConstructors ();
14221494 if (!contructors .isEmpty ()){
1423- System . out .println ("\r \n ## Constructors: " );
1495+ printer .println ("\r \n ## Constructors: " );
14241496 for (Constructor c : contructors ){
1425- printMethod (c );
1497+ printMethod (c , printer );
14261498 }
14271499 }
14281500
14291501
14301502 ArrayList <Config > config = cls .getConfig ();
14311503 if (!config .isEmpty ()){
1432- System . out .println ("\r \n ## Config: " );
1504+ printer .println ("\r \n ## Config: " );
14331505 for (Config c : config ){
1434- printConfig (c );
1506+ printConfig (c , printer );
14351507 }
14361508 }
14371509
14381510
14391511 ArrayList <Property > properties = cls .getProperties ();
14401512 if (!properties .isEmpty ()){
1441- System . out .println ("\r \n ## Properties: " );
1513+ printer .println ("\r \n ## Properties: " );
14421514 for (Property p : properties ){
14431515 if (p .isPublic ()){
1444- printProperty (p );
1516+ printProperty (p , printer );
14451517 }
14461518 }
14471519 }
14481520
14491521
14501522 ArrayList <Method > methods = cls .getMethods ();
14511523 if (!methods .isEmpty ()){
1452- System . out .println ("\r \n ## Methods: " );
1524+ printer .println ("\r \n ## Methods: " );
14531525 for (Method m : methods ){
14541526 if (m .isPublic ()){
1455- printMethod (m );
1527+ printMethod (m , printer );
14561528 }
14571529 }
14581530 }
14591531
14601532
14611533 for (Class c : cls .getClasses ()){
14621534 if (c .isPublic ()){
1463- console . log (" +" + c .getName ());
1535+ printer . println (" +" + c .getName ());
14641536 }
14651537 }
14661538
14671539
1468- System . out .println ("-----------------------------------" );
1469- System . out .println ("\r \n " );
1540+ printer .println ("-----------------------------------" );
1541+ printer .println ("\r \n " );
14701542
14711543 }
14721544
1545+ return printer .toString ();
14731546 }
14741547
14751548
14761549 //**************************************************************************
14771550 //** printMethod
14781551 //**************************************************************************
1479- private static void printMethod (Method m ){
1552+ private static void printMethod (Method m , Printer printer ){
14801553 String methodName = m .getName ();
14811554 String returnType = m .getReturnType ();
14821555
@@ -1493,29 +1566,29 @@ private static void printMethod(Method m){
14931566 }
14941567
14951568
1496- System . out .println ("\r \n + " + methodName + "(" + params + ")" );
1569+ printer .println ("\r \n + " + methodName + "(" + params + ")" );
14971570 String description = m .getDescription ();
14981571 if (description !=null ){
1499- System . out .println ("\r \n - Description:\r \n " + description );
1572+ printer .println ("\r \n - Description:\r \n " + description );
15001573 }
15011574
15021575
15031576 if (!parameters .isEmpty ()){
1504- System . out .println ("\r \n - Parameters: " );
1577+ printer .println ("\r \n - Parameters: " );
15051578 for (Parameter p : parameters ){
15061579 String t = p .getType ();
15071580 String d = p .getDescription ();
15081581 String param = p .getName ();
15091582 if (t !=null ) param += " (" + p .getType () + ")" ;
15101583 if (d !=null ) param += ": " + d ;
15111584
1512- System . out .println (" * " + param );
1585+ printer .println (" * " + param );
15131586 }
15141587 }
15151588
15161589 if (returnType !=null ){
1517- System . out .println ("\r \n - Returns:" );
1518- System . out .println (" " + returnType );
1590+ printer .println ("\r \n - Returns:" );
1591+ printer .println (" " + returnType );
15191592
15201593 }
15211594 }
@@ -1524,26 +1597,26 @@ private static void printMethod(Method m){
15241597 //**************************************************************************
15251598 //** printProperty
15261599 //**************************************************************************
1527- private static void printProperty (Property property ){
1600+ private static void printProperty (Property property , Printer printer ){
15281601 String name = property .getName ();
15291602 String description = property .getDescription ();
15301603 String defaultValue = property .getDefaultValue ();
15311604
15321605
1533- System . out .println ("\r \n + " + name );
1606+ printer .println ("\r \n + " + name );
15341607 if (description !=null ){
1535- System . out .println ("\r \n - Description:\r \n " + description );
1608+ printer .println ("\r \n - Description:\r \n " + description );
15361609 }
15371610
15381611
1539- System . out .println ("\r \n - Default:\r \n " + defaultValue );
1612+ printer .println ("\r \n - Default:\r \n " + defaultValue );
15401613 }
15411614
15421615
15431616 //**************************************************************************
15441617 //** printConfig
15451618 //**************************************************************************
1546- private static void printConfig (Config config ){
1619+ private static void printConfig (Config config , Printer printer ){
15471620 String name = config .getName ();
15481621 String description = config .getDescription ();
15491622 String defaultValue = config .getDefaultValue ();
@@ -1553,26 +1626,47 @@ private static void printConfig(Config config){
15531626
15541627
15551628
1556- System . out .println ("\r \n + " + name );
1629+ printer .println ("\r \n + " + name );
15571630 if (description !=null ){
1558- System . out .println ("\r \n - Description:\r \n " + description );
1631+ printer .println ("\r \n - Description:\r \n " + description );
15591632 }
15601633
15611634 if (defaultValue !=null ){
1562- System . out .println ("\r \n - Default:\r \n " + defaultValue );
1635+ printer .println ("\r \n - Default:\r \n " + defaultValue );
15631636 }
15641637 else {
15651638 for (Config c : arr ){
15661639 description = config .getDescription ();
1567- System . out .println ("\r \n + " + c .getName ());
1640+ printer .println ("\r \n + " + c .getName ());
15681641 if (description !=null ){
1569- System . out .println ("\r \n - Description:\r \n " + description );
1642+ printer .println ("\r \n - Description:\r \n " + description );
15701643 }
15711644 }
15721645 }
15731646 }
15741647
15751648
1649+ //**************************************************************************
1650+ //** Printer Class
1651+ //**************************************************************************
1652+ private static class Printer {
1653+ private StringBuilder out ;
1654+ public Printer (){
1655+ out = new StringBuilder ();
1656+ }
1657+ public void println (String line ){
1658+ out .append (line );
1659+ out .append ("\r \n " );
1660+ }
1661+ public void print (String line ){
1662+ out .append (line );
1663+ }
1664+ public String toString (){
1665+ return out .toString ();
1666+ }
1667+ }
1668+
1669+
15761670 //**************************************************************************
15771671 //** Word Class
15781672 //**************************************************************************
0 commit comments