Changeset 22838 for src

Show
Ignore:
Timestamp:
10/31/08 10:05:52 (2 months ago)
Author:
azawawi
Message:

[STD_syntax_highlight] no DumpMatch?; #it is been 'nice' seeing ya
[STD_syntax_highlight] no more javascript tree traversal; tree info is hidden in html
[STD_syntax_highlight] You can consider this an SP1 ;-)

Location:
src/perl6
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • src/perl6/STD_syntax_highlight

    r22835 r22838  
    1414# And finally our modules 
    1515use STD; 
    16 use DumpMatch; 
    1716 
    1817=head1 NAME 
     
    4039 
    4140my ($clean_html,$help) = (0,0); 
    42 my ($full_html,$redspans_html) = (0,0,'-'); 
     41my ($full_html,$redspans_html) = (0,'-'); 
    4342my ($file, $parser, $src_text);  
    4443 
     
    9594 
    9695    # and finally print out the html code 
    97     highlight_match($what=>$parser,{}); 
     96    highlight_match(); 
    9897} 
    9998 
     
    121120=cut 
    122121sub highlight_match { 
    123     my $name = shift; 
    124     my $r = shift; 
    125     my $opt = shift || {}; 
    126     my $events = []; 
    127  
    128122    if($full_html) { 
    129         traverse_match($r,$name,0,$events,$opt); 
    130         my $html = highlight_perl6_full($r,$::ORIG,$events,$opt); 
     123        my $html = highlight_perl6_full(); 
    131124        write_html_file $full_html, $html; 
    132125    } 
     
    143136=cut 
    144137sub highlight_perl6_full { 
    145     my ($r,$orig,$events,$opt,$file) = @ARG, 
    146138    my $str = ""; 
    147     my $at = 0; 
    148139 
    149140    # slurp libraries and javascript to inline them 
     
    152143        'STD_syntax_highlight.js', 
    153144        'STD_syntax_highlight.css'); 
     145    my %colors = (); 
     146    my $line; 
     147    open CSS_FILE, $CSS 
     148        or die "Could not open $CSS: $OS_ERROR\n"; 
     149    while($line = <CSS_FILE>) { 
     150        if($line =~ /^\s*\.(\w+)\s*{\s*color\s*:\s*(\w+)/) { 
     151            $colors{$1} = $2; 
     152        } 
     153    } 
     154    close CSS_FILE; 
     155 
    154156    my $jquery_js = qq{<script type="text/javascript" src="../$JQUERY_JS"></script>}; 
    155157    my $js = qq{<script type="text/javascript" src="../$JS"></script>}; 
     
    189191HTML 
    190192 
    191     my $curr_rule = q{};  
    192     for (sort {$a->[0] <=> $b->[0] or $a->[4] <=> $b->[4]} @{$events}) { 
    193         my $text = substr($orig,$at,$_->[0]-$at); 
    194         my $esc_text .= escape_html($text); 
    195         $at = $_->[0]; 
    196  
    197         if($curr_rule eq 'identifier') { 
    198             if($parser->is_type($text)) { 
    199                 $str .= qq{<span class="_type">$esc_text</span>}; 
    200             } elsif($parser->is_routine($text)) { 
    201                 $str .= qq{<span class="_routine">$esc_text</span>}; 
     193    my ($last_tree,$buffer) = ("",""); 
     194    for my $i (0 .. @loc-1) { 
     195        next unless defined $loc[$i]; 
     196        my $c = substr($src_text,$i,1); 
     197        my $tree = "@{$loc[$i]}"; 
     198 
     199        if($tree ne $last_tree) { 
     200            $str .= qq{<span id="tree_$i" style="display:none;">$last_tree</span>}; 
     201            my $rule; 
     202            my $rule_to_color = 0; 
     203            $buffer = escape_html($buffer); 
     204            my @rules = (); 
     205            @rules = reverse(split / /,$last_tree) if $last_tree ne ''; 
     206            for $rule (@rules) { 
     207                if($rule eq 'unv') { 
     208                    $rule_to_color = '_comment'; 
     209                    last; 
     210                } elsif($colors{$rule} && $buffer ne '') { 
     211                    $rule_to_color = $rule; 
     212                    last; 
     213                } 
     214            } 
     215            if($rule_to_color) { 
     216                if($last_tree =~ /identifier/) { 
     217                    if($parser->is_type($buffer)) { 
     218                        $str .= qq{<span id="node_$i" class="_type">$buffer</span>}; 
     219                    } elsif($parser->is_routine($buffer)) { 
     220                        $str .= qq{<span id="node_$i" class="_routine">$buffer</span>}; 
     221                    } else { 
     222                        $str .= qq{<span id="node_$i" class="$rule_to_color">$buffer</span>}; 
     223                    } 
     224                } else {               
     225                    $str .= qq{<span id="node_$i" class="$rule_to_color">$buffer</span>}; 
     226                } 
    202227            } else { 
    203                 $str .= $esc_text; 
     228                $str .= qq{<span id="node_$i">$buffer</span>}; 
    204229            } 
     230            $buffer = $c; 
    205231        } else { 
    206             $str .= $esc_text; 
    207         } 
    208  
    209         if ($_->[1] eq 'from') { 
    210             $curr_rule = $_->[2]; 
    211             $str .= '<span class="'.$curr_rule.'">'; 
    212         } elsif ($_->[1] eq 'to') { 
    213             $str .=  '</span>'; 
    214         } 
    215     } 
    216  
     232            $buffer .= $c; 
     233        } 
     234        $last_tree = $tree; 
     235    } 
     236  
    217237    $str .= <<"HTML"; 
    218238    </pre> 
     
    269289    my ($last_tree,$buffer) = ("",""); 
    270290    for my $i (0 .. @loc-1) { 
    271         say("Undefined $i"),next unless defined $loc[$i]; 
     291        next unless defined $loc[$i]; 
    272292        my $c = substr($src_text,$i,1); 
    273293        my $tree = "@{$loc[$i]}"; 
  • src/perl6/STD_syntax_highlight.js

    r22720 r22838  
    11$(document.body).ready(function() { 
    22    //find first span after pre and use it as top-level node 
    3     var topLevelRuleName = null; 
    43    var lastSelectedNode = null; 
    54    var keepResults = false; 
    65    var timeoutId = null; 
    76 
    8     $("pre > span").each(function(index,value) { 
    9         topLevelRuleName = this.className; 
    10     }); 
    11      
    12     if(topLevelRuleName == "") { 
    13         alert("Assertion: Top Level node (pre > span) could not be found..."); 
    14         return; 
    15     } 
    167    $("#parse_tree_output").html("Found " + $("span").size() + " node(s)"); 
    178 
    189    function updateTree(node) { 
    1910        if(lastSelectedNode) { 
    20                 $(lastSelectedNode).css("border",""); 
    21                 $(lastSelectedNode).css("background-color",""); 
     11            $(lastSelectedNode).css("border",""); 
     12            $(lastSelectedNode).css("background-color",""); 
    2213        } 
    2314        $(node).css("border","1px solid orange"); 
     
    2617        var output = ""; 
    2718        var ident = ""; 
    28         var rules = new Array(); 
    29         var ruleName; 
    30         do { 
    31             var ruleName = node.className; 
    32             var r = ruleName; 
    33             rules.push(ruleName); 
    34             node = node.parentNode; 
    35         } while(ruleName != topLevelRuleName) 
    36         for(var i = rules.length - 1; i >= 0; i--) { 
    37                 var r = rules[i]; 
    38                 output += ident + '<span class="' + r + '">' + r + '</span><br/>'; 
     19        var rules = $("#" + node.id.replace("node","tree")).text().split(/ /); 
     20        for(var i = 0; i < rules.length; i++) { 
     21            var r = rules[i]; 
     22            output += ident + '<span class="' + r + '">' + r + '</span><br/>'; 
    3923                ident += "&nbsp;"; 
    4024        }