From a3b57bb0010c3a7a4b9e47a3664729237ec27c49 Mon Sep 17 00:00:00 2001 From: kts Date: Tue, 23 Dec 2014 07:55:24 -0800 Subject: [PATCH] Inline/Text elements may now possess a default element formatter that is triggered by some text within parenthesis immediately after the text but before any other formatters. For anchors, "[[link]](url)" will effectively do the same as "[[link]].href(url)". Some of the code needs to be reworked significantly. --- kettext.pm | 37 +++++++++++++++++++------------------ test/default.ktx | 11 +++++++++++ 2 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 test/default.ktx diff --git a/kettext.pm b/kettext.pm index 8121e95..4bc3294 100644 --- a/kettext.pm +++ b/kettext.pm @@ -393,7 +393,7 @@ sub parseFile { sub parseOptions { my $text = $_[0]; my %opts = (); - while ($text =~ m/(\.)([a-zA-Z]*[^\(])(\()([^\)]*)/g) { + while ($text =~ m/(\.|)([a-zA-Z]*[^\(])(\()([^\)]*)/g) { $opts{$2} = $4; } return \%opts; @@ -492,6 +492,7 @@ sub HTML { sub convertText { my $text = $_[0]; my @text_patterns = ('\*\*','\*\*', '\/\/','\/\/', '\[\[','\]\]', '\(\(','\)\)', '``', '``', '__','__'); + my @default_opts = ("", "", "href", "", "", ""); my @text_replace = ('','', '','', '','', '','', '','', '',''); my @char_patterns = ('&', '<', '>', '"', '\'', '--'); my @char_replace = ('&', '<', '>', '"', ''', '—'); @@ -511,31 +512,31 @@ sub HTML { for (my $p = 0; $p <= $#text_patterns; $p+=2) { my $open = $text_patterns[$p]; my $close = $text_patterns[$p+1]; - while ($new_text =~ m/($open)([^$close]*)($close)(\.\S*\(.*?\)|)/g) { - #while ($new_text =~ m/($open)([^$close]*)($close)(\.\S*\(.*\)|)/g) { + #while ($new_text =~ m/($open)([^$close]*)($close)(\.\S*\(.*?\)|)/g) { + while ($new_text =~ m/($open)([^$close]*)($close)((?:\()(.*?)(?:\))|)(\.\S*\(.*?\)|)/g) { my $converted_text; if ($p == 4) { my @media = convertLink($2); - if ($4) { - my $ts = substr($media[0], 0, -1); - my $te = substr($media[0], -1); - $converted_text = $ts.convertOpts(kettext::parseOptions($4)).$te.$media[1]; - } else { - $converted_text = $media[0].$media[1]; + my $ts = substr($media[0], 0, -1); + my $te = substr($media[0], -1); + my $opts = kettext::parseOptions($6); + if ($5) { + $opts->{$default_opts[$i]} = $5; } - $new_text =~ s/\Q$1$2$3$4\E/$converted_text/g; + $converted_text = $ts.convertOpts($opts).$te.$media[1]; + $new_text =~ s/\Q$1$2$3$4$6\E/$converted_text/g; } else { - if ($4) { - my $ts = substr($text_replace[$i], 0, -1); - my $te = substr($text_replace[$i], -1); - $converted_text = $ts.convertOpts(kettext::parseOptions($4)).$te.$2.$text_replace[$i+1]; - } else { - $converted_text = $text_replace[$i].$2.$text_replace[$i+1]; + my $ts = substr($text_replace[$p], 0, -1); + my $te = substr($text_replace[$p], -1); + my $opts = kettext::parseOptions($6); + if ($5) { + $opts->{$default_opts[$i]} = $5; } - $new_text =~ s/\Q$1$2$3$4\E/$converted_text/g; + $converted_text = $ts.convertOpts($opts).$te.$2.$text_replace[$p+1]; + $new_text =~ s/\Q$1$2$3$4$6\E/$converted_text/g; } } - $i +=2; + $i++; } return $new_text; } diff --git a/test/default.ktx b/test/default.ktx new file mode 100644 index 0000000..83427cb --- /dev/null +++ b/test/default.ktx @@ -0,0 +1,11 @@ +Wat. + +This is a [[link]].href(1) wat [[link]].href("yo") +Okay + +[[link]](1) + +[[link]](1).alt(yep) + +[[Check out this page!]](http://kettek.exoss.net) +