Changeset 203
- Timestamp:
- 04/03/07 14:03:11 (1 year ago)
- Files:
-
- trunk/lib/Spork/Formatter2.pm (added)
- trunk/src/core/Spork/lib/Spork/Emitter/HTML.pm (modified) (2 diffs)
- trunk/src/core/Spork/lib/Spork/Formatter2.pm (added)
- trunk/src/core/Spork/lib/Spork/Parser.pm (modified) (9 diffs)
- trunk/src/core/Spork/lib/Spork/Slides.pm (modified) (3 diffs)
- trunk/src/core/Spork/lib/Spork/Template/TT2.pm (modified) (1 diff)
- trunk/src/core/modules.mk (modified) (1 diff)
- trunk/test/spork-parser.t (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/core/Spork/lib/Spork/Emitter/HTML.pm
r202 r203 20 20 '+i' => "<i>", 21 21 '-i' => "</i>", 22 '+tt' => "<tt>", 23 '-tt' => "</tt>", 24 '+center' => qq{<div class="center-outer"><div class="center-inner">\n}, 25 '-center' => "</div></div>\n", 26 '+indent' => "<blockquote>\n", 27 '-indent' => "</blockquote>\n", 28 '+hilite' => qq{<span class="hilite">}, 29 '-hilite' => "</span>", 22 30 ); 23 31 … … 28 36 if (ref $node) { 29 37 my ($key) = keys %$node; 30 print $tags{"+$key"}; 38 $self->{output} .= $tags{"+$key"}; 39 $self->{parent} = $key; 31 40 $self->emit($node->{$key}); 32 print$tags{"-$key"};41 $self->{output} .= $tags{"-$key"}; 33 42 next; 34 43 } 35 print $node; 44 my $text = $node; 45 unless ($self->{parent} eq 'pre') { 46 $text =~ s/^( *)/" " x length($1)/gem; 47 $text =~ s/\n/<br \/>\n/g; 48 } 49 $self->{output} .= $text; 36 50 } 37 51 return $self->{output}; 38 52 } 39 53 40 41 54 1; trunk/src/core/Spork/lib/Spork/Parser.pm
r202 r203 3 3 use warnings; 4 4 use base 'Document::Parser'; 5 #use XXX;5 use XXX; 6 6 7 7 my $ALPHANUM = '\p{Letter}\p{Number}\pM'; … … 19 19 sub set_grammar { 20 20 my $self = shift; 21 my $all_phrases = [qw(b i)]; 21 my $all_phrases = [qw(b i tt hilite)]; 22 my $all_blocks = [qw(indent center h2 ul pre p)]; 22 23 $self->{grammar} = +{ 23 top => [qw(h2 ul pre p)], 24 top => $all_blocks, 25 center => $all_blocks, 26 indent => $all_blocks, 24 27 p => $all_phrases, 25 28 ul => [qw(ul li)], 26 29 li => $all_phrases, 30 h2 => $all_phrases, 31 b => $all_phrases, 27 32 }; 28 33 } … … 40 45 # generate the match-objects. 41 46 #------------------------------------------------------------------------------- 47 sub match_indent { 48 my $self = shift; 49 $self->{input} =~ /^((?m:^>+.*\n)+\n?)/ 50 or return; 51 return $self->matched_block; 52 } 53 54 sub match_center { 55 my $self = shift; 56 $self->{input} =~ /^\.center\n(.*?\n)(?:.center\n|\z)/s 57 or return; 58 return $self->matched_block; 59 } 60 42 61 sub match_ul { 43 62 my $self = shift; … … 66 85 my $self = shift; 67 86 $self->{input} =~ 68 qr/^(( .*\S.*\n)+)(?m:^\s*\n)*/87 qr/^(((?!>).*\S.*\n)+)(?m:^\s*\n)*/ 69 88 or return; 70 89 return $self->matched_block; 71 90 } 72 91 92 sub match_tt { 93 my $self = shift; 94 return $self->matched_phrase 95 if $self->{input} =~ 96 qr/((?:^|(?<=[^${ALPHANUM}`]))`\S[^`]*`(?=[^{$ALPHANUM}`]|\z))/; 97 return $self->matched_phrase 98 if $self->{input} =~ 99 qr/(\{`.*?`\})/; 100 return; 101 } 102 73 103 sub match_b { 74 104 my $self = shift; … … 82 112 } 83 113 114 sub match_hilite { 115 my $self = shift; 116 return $self->matched_phrase 117 if $self->{input} =~ 118 qr/((?:^|(?<=[^${ALPHANUM}\|]))\|\S[^\|]*\|(?=[^{$ALPHANUM}\|]|\z))/; 119 return $self->matched_phrase 120 if $self->{input} =~ 121 qr/(\{\|.*?\|\})/; 122 return; 123 } 124 84 125 sub match_i { 85 126 my $self = shift; … … 89 130 return $self->matched_phrase 90 131 if $self->{input} =~ 91 qr/(\{ _.*?_\})/;132 qr/(\{\/.*?\/\})/; 92 133 return; 93 134 } … … 96 137 my $self = shift; 97 138 $self->{input} =~ 98 qr/^(( \s+.*\S.*\n)+)(?m:^\s*\n)*/139 qr/^(( +.*\S.*\n)+)(?m:^ *\n)*/ 99 140 or return; 100 141 return $self->matched_block; … … 108 149 # handler will mutate the matched text before it is reparsed. 109 150 #------------------------------------------------------------------------------- 151 sub handle_indent { 152 my $self = shift; 153 $self->subparse(indent => parse_blocks => @_, sub { 154 s/^> *//mg; 155 s/\n+\z/\n/; 156 }); 157 } 158 159 sub handle_center { 160 my $self = shift; 161 $self->subparse(center => parse_blocks => @_); 162 } 163 110 164 sub handle_h2 { 111 165 my $self = shift; … … 140 194 } 141 195 196 sub handle_hilite { 197 my $self = shift; 198 $self->subparse(hilite => parse_phrases => @_, sub { 199 s/^\{?\|(.*)\|\}?$/$1/s; 200 }); 201 } 202 142 203 sub handle_b { 143 204 my $self = shift; 144 205 $self->subparse(b => parse_phrases => @_, sub { 145 206 s/^\{?\*(.*)\*\}?$/$1/s; 207 }); 208 } 209 210 sub handle_tt { 211 my $self = shift; 212 $self->subparse(tt => parse_phrases => @_, sub { 213 s/^\{?`(.*)`\}?$/$1/s; 146 214 }); 147 215 } trunk/src/core/Spork/lib/Spork/Slides.pm
r202 r203 31 31 $self->slide_heading(''); 32 32 $self->image_url(''); 33 my $html = $self->slide_to_html($content); 33 34 my ($html, $translate, $image) = $self->divide_content($content); 35 36 # my $html = $self->slide_to_html($content); 34 37 $slide->{slide_heading} = $self->slide_heading; 35 38 $slide->{image_html} = $self->get_image_html; … … 39 42 index_slide => 'index.html', 40 43 slide_content => $html, 44 translation => $translate, 45 image => $image, 41 46 spork_version => "Spork v$Spork::VERSION", 42 47 ); … … 50 55 } 51 56 57 sub divide_content { 58 my $content = shift; 59 my $translate = ''; 60 my $image_line; 61 while ($content =~ s/^# ?(.*\n)//m) { 62 $translate .= $1; 63 } 64 while ($content =~ s/^\.image:(.*\n)//m) { 65 $image_line = $1; 66 } 67 my ($html, $thtml, $image); 68 if ($translate) { 69 $thtml = $self->hub->formatter->text_to_html($translate); 70 } 71 if ($image_line) { 72 $image = {}; 73 ($image->{src}, $image->{width}) = split /\s+/, $image_line; 74 } 75 if ($content) { 76 $html = $self->hub->formatter->text_to_html($content); 77 } 78 return ($html, $thtml, $image); 79 } 80 52 81 sub slide_to_html { 53 82 my $content = shift; 54 return $self->hub->formatter->text_to_ parsed($content)->to_html;83 return $self->hub->formatter->text_to_html($content); 55 84 } 56 85 trunk/src/core/Spork/lib/Spork/Template/TT2.pm
r168 r203 151 151 } 152 152 153 .center-outer { 154 width: 100%; 155 } 156 157 .center-inner { 158 align: center; 159 } 160 153 161 small { 154 162 font-size: 9pt; trunk/src/core/modules.mk
r202 r203 96 96 Spork/Command.pm \ 97 97 Spork/Config.pm \ 98 Spork/Formatter2.pm \ 98 99 Spork/Formatter.pm \ 99 100 Spork/Hub.pm \ trunk/test/spork-parser.t
r202 r203 14 14 == This is a test 15 15 16 .center 16 17 * foo 17 18 ** 123 18 19 * *hello* 20 .center 19 21 20 22 Cool *stuff* is /here/. 23 24 xxx 25 xxx 26 yyy 27 yyy 28 xxx 21 29 22 30 sub foo {
