Changeset 74

Show
Ignore:
Timestamp:
01/06/07 17:35:04 (2 years ago)
Author:
chris
Message:

Allow adding new rules.

Highlight the selected subtrees.

Use javascript objects for edge records.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lex/trunk/jsp/parse.jsp

    r70 r74  
    125125                var sel_right = -1; 
    126126                var any_checked = false; 
     127                var checked_list = new Array(); 
    127128         
    128129                for (var i = 0; i < edges.length; i++) 
    129130                { 
    130131                        var edge = edges[i]; 
    131                         var checkbox = document.forms.rulecmd[edge[0]]; 
    132          
    133                         if (checkbox.checked) 
    134                         { 
    135                                 any_checked = true; 
    136          
    137                                 if (sel_left == -1 || sel_left > edge[1]
    138                                 { 
    139                                         sel_left = edge[1]
    140                                 } 
    141                                 if (sel_right == -1 || sel_right < edge[2]
    142                                 { 
    143                                         sel_right = edge[2]
     132                        var checkbox = document.forms.rulecmd[edge.id]; 
     133         
     134                        if (checkbox != null && checkbox.checked) 
     135                        { 
     136                                checked_list[checked_list.length] = edge; 
     137         
     138                                if (sel_left == -1 || sel_left > edge.left
     139                                { 
     140                                        sel_left = edge.left
     141                                } 
     142                                if (sel_right == -1 || sel_right < edge.right
     143                                { 
     144                                        sel_right = edge.right
    144145                                } 
    145146                        } 
     
    150151                        var edge = edges[i]; 
    151152                        var enabled = false; 
    152                         var checkbox = document.forms.rulecmd[edge[0]]; 
    153          
    154                         if (!any_checked) 
    155                         { 
    156                                 // allow the first checkbox to be checked 
     153                        var checkbox = document.forms.rulecmd[edge.id]; 
     154         
     155                        if (checkbox == null) 
     156                        { 
     157                                // fake edges don't have checkboxes 
     158                                continue; 
     159                        } 
     160                         
     161                        if (checked_list.length == 0) 
     162                        { 
     163                                // if none are checked yet, allow any to be checked 
    157164                                enabled = true; 
    158165                        } 
    159                         else if (edge[1] == sel_right + 1 || edge[2] == sel_left - 1) 
     166                        else if (edge.left == sel_right + 1 || edge.right == sel_left - 1) 
    160167                        { 
    161168                                // allow expansion at the edges 
     
    166173                                enabled = false; 
    167174                        } 
    168                         else if (edge[1] == sel_left || edge[2] == sel_right) 
     175                        else if (edge.left == sel_left || edge.right == sel_right) 
    169176                        { 
    170177                                // allow deselection at the left and right edges only 
     
    173180                         
    174181                        checkbox.disabled = !enabled; 
     182                } 
     183         
     184                var parts = document.forms.rulecmd.new_rule_parts; 
     185                parts.value = ""; 
     186         
     187                for (var i = 0; i < checked_list.length; i++) 
     188                { 
     189                        var edge = checked_list[i]; 
     190         
     191                        if (edge.terminal) 
     192                        { 
     193                                parts.value += "\"" + edge.symbol + "\""; 
     194                        } 
     195                        else 
     196                        { 
     197                                parts.value += "{" + edge.symbol + "}"; 
     198                        } 
     199         
     200                        if (i < checked_list.length - 1) 
     201                        { 
     202                                parts.value += " "; 
     203                        } 
     204                } 
     205         
     206                return true; 
     207        } 
     208         
     209        function edge (id, left, right, symbol, terminal, fake) 
     210        { 
     211                this.id = id; 
     212                this.left = left; 
     213                this.right = right; 
     214                this.symbol = symbol; 
     215                this.terminal = terminal; 
     216                this.fake = fake; 
     217        } 
     218         
     219        function on_rule_add_click() 
     220        { 
     221                var form = document.forms.rulecmd; 
     222                 
     223                if (form.new_rule_sym.value == "") 
     224                { 
     225                        alert("You must enter a top symbol for the new rule!"); 
     226                        return false; 
     227                } 
     228         
     229                if (form.new_rule_parts.value == "") 
     230                { 
     231                        alert("You must select some edges for the new rule!"); 
     232                        return false; 
    175233                } 
    176234         
     
    483541                        %></span></p><% 
    484542                } 
     543                 
     544                if (request.getParameter("rule_add") != null) 
     545                { 
     546                        String symbol = request.getParameter("new_rule_sym"); 
     547                        String parts  = request.getParameter("new_rule_parts"); 
     548                         
     549                        if (symbol == null || symbol.equals("") || 
     550                                parts  == null || parts.equals("")) 
     551                        { 
     552                                %> 
     553                                <h2>Error: some required parameters were missing or empty</h2> 
     554                                <% 
     555                        } 
     556                        else 
     557                        { 
     558                                Change ch = sql.createChange(SqlChange.INSERT,  
     559                                        "lexicon_entries", null); 
     560                                ch.setString("Symbol", symbol); 
     561                                ch.setString("Lexeme", parts); 
     562                                ch.execute(); 
     563                        } 
     564                } 
    485565 
    486566                { 
     
    495575                                <h3>Parse failed</h3> 
    496576                                <p>The edges found were:</p>  
    497                                 <form name="rulecmd"
     577                                <form name="rulecmd" method="post"
    498578                                <% 
    499579                                 
     
    501581                                Map  idEdges   = new Hashtable(); 
    502582                                Map  fakeChild = new Hashtable(); 
     583                                List fakeEdges = new ArrayList(); 
    503584                                List depths    = new ArrayList(); 
    504585                                List edges     = chart.getEdges(); 
     
    523604                                                i.add(we); 
    524605                                                fakeChild.put(me, we); 
     606                                                fakeEdges.add(we); 
    525607                                        } 
    526608                                } 
     
    582664                                <% 
    583665                                 
    584                                 class LeftComparator implements Comparator 
     666                                class EdgeComparator implements Comparator 
    585667                                { 
    586668                                        public int compare(Object o1, Object o2)  
     
    588670                                                Edge e1 = (Edge)o1; 
    589671                                                Edge e2 = (Edge)o2; 
    590                                                 return e1.getLeftPosition() - e2.getLeftPosition(); 
    591                                         } 
    592                                 } 
    593                                  
    594                                 Comparator comp = new LeftComparator(); 
     672                                                int diff = e1.getLeftPosition() - e2.getLeftPosition(); 
     673                                                if (diff != 0) return diff; 
     674                                                return e2.getRightPosition() - e1.getRightPosition(); 
     675                                        } 
     676                                } 
     677                                 
     678                                Comparator comp = new EdgeComparator(); 
    595679                                 
    596680                                for (int i = maxDepth; i >= 0; i--) 
     
    656740                                                                onMouseOut=" return unhighlight_all();" 
    657741                                                                ><% /* 
    658                                                                 [<%= edgeIds.get(next) %>] <% */ %> 
     742                                                                [<%= edgeIds.get(next) %>] <% */  
     743                                                                 
     744                                                                if (!fakeEdges.contains(next)) 
     745                                                                { 
     746                                                                %> 
    659747                                                                <span class="cb"> 
    660748                                                                        <input name="<%= edgeIds.get(next) %>" 
     
    662750                                                                                onClick="return on_checkbox_click(this);" /> 
    663751                                                                </span> 
    664                                                                 <%= next.getHtmlLabel() %> 
     752                                                                <% 
     753                                                                } 
     754                                                                 
     755                                                                %><%= next.getHtmlLabel() %> 
    665756                                                        </td> 
    666757                                                        <% 
     
    753844                                        String id = (String)( edgeIds.get(e) ); 
    754845                                        %> 
    755                                         new Array("<%= id %>", <%=  
     846                                        new edge("<%= id %>", <%=  
    756847                                                e.getLeftPosition() %>, <%= 
    757848                                                e.getRightPosition() %>, "<%= 
    758849                                                e.symbol() %>", <%= 
    759                                                 e.isTerminal() %>)<% 
     850                                                e.isTerminal() %>, <%= 
     851                                                fakeEdges.contains(e) %>)<% 
    760852                                        if (i.hasNext()) 
    761853                                        { 
     
    769861                                //--></script> 
    770862                                                                                 
    771                                 <p>Add a new rule:</p> 
     863                                <p></p> 
    772864                                 
    773865                                <table> 
    774866                                        <tr bgcolor="#ffcccc"> 
    775                                                 <th>Top node name (symbol)</th> 
    776                                                 <th>Component node names (parts)</th> 
     867                                                <th colspan="3">Create a new rule</th> 
    777868                                        </tr> 
    778869                                        <tr bgcolor="#ffeeee"> 
     870                                                <td>Top node name (symbol)</td> 
     871                                                <td>Component node names (parts)</td> 
     872                                                <td>Command</td> 
     873                                        </tr> 
     874                                        <tr bgcolor="#ffcccc"> 
    779875                                                <td> 
    780876                                                        <input name="new_rule_sym" /> 
    781877                                                </td> 
    782878                                                <td> 
    783                                                         <input name="new_rule_parts" /> 
     879                                                        <input name="new_rule_parts" size="30"/> 
     880                                                </td> 
     881                                                <td> 
     882                                                        <input name="rule_add" type="submit" value="Create"  
     883                                                                onClick="return on_rule_add_click()" /> 
    784884                                                </td> 
    785885                                        </tr>