[Po4a-commits] "po4a/lib/Locale/Po4a Text.pm,1.25,1.26"

Nicolas FRANÇOIS nekral-guest at alioth.debian.org
Sun Jul 19 17:50:43 UTC 2009


Update of /cvsroot/po4a/po4a/lib/Locale/Po4a
In directory alioth:/tmp/cvs-serv10774/lib/Locale/Po4a

Modified Files:
	Text.pm 
Log Message:
2009-07-19  Jonas Smedegaard  <dr at jones.dk>

	* NEWS, lib/Locale/Po4a/Wml.pm: Improved Markdown support.


Index: Text.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/Text.pm,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- Text.pm	13 Feb 2009 23:16:44 -0000	1.25
+++ Text.pm	19 Jul 2009 17:50:40 -0000	1.26
@@ -143,6 +143,7 @@
     my $paragraph="";
     my $wrapped_mode = 1;
     my $expect_header = 1;
+    my $end_of_paragraph = 0;
     ($line,$ref)=$self->shiftline();
     my $file = $ref;
     $file =~ s/:[0-9]+$//;
@@ -152,6 +153,8 @@
             $file = $1;
             do_paragraph($self,$paragraph,$wrapped_mode);
             $paragraph="";
+            $wrapped_mode = 1;
+            $expect_header = 1;
         }
 
         chomp($line);
@@ -464,37 +467,53 @@
                 $self->{indent} = $indent;
                 $self->{bullet} = "";
             }
-        } elsif (   $line =~ /^=*$/
-                 or $line =~ /^_*$/
-                 or $line =~ /^-*$/) {
+        } elsif ($line =~ /^-- $/) {
+            # Break paragraphs on email signature hint
+            do_paragraph($self,$paragraph,$wrapped_mode);
+            $paragraph="";
+            $wrapped_mode = 1;
+            $self->pushline($line."\n");
+        } elsif (   $line =~ /^=+$/
+                 or $line =~ /^_+$/
+                 or $line =~ /^-+$/) {
             $wrapped_mode = 0;
             $paragraph .= $line."\n";
             do_paragraph($self,$paragraph,$wrapped_mode);
             $paragraph="";
             $wrapped_mode = 1;
         } elsif ($markdown and
+                 (   $line =~ /^\s*\[\[\!\S+\s*$/     # macro begin
+                 or $line =~ /^\s*"""\s*\]\]\s*$/)) { # """ textblock inside macro end
+            # Avoid translating Markdown lines containing only markup
+            do_paragraph($self,$paragraph,$wrapped_mode);
+            $paragraph="";
+            $wrapped_mode = 1;
+            $self->pushline("$line\n");
+        } elsif ($markdown and
                  (   $line =~ /^#/            # headline
                   or $line =~ /^\s*\[\[\!\S[^\]]*\]\]\s*$/)) { # sole macro
-            # Found Markdown markup that should be preserved as a single line
+            # Preserve some Markdown markup as a single line
             do_paragraph($self,$paragraph,$wrapped_mode);
             $paragraph="$line\n";
             $wrapped_mode = 0;
+            $end_of_paragraph = 1;
+        } elsif ($markdown and
+                 (   $line =~ /^"""/)) { # """ textblock inside macro end
+            # Markdown markup needing separation _before_ this line
             do_paragraph($self,$paragraph,$wrapped_mode);
+            $paragraph="$line\n";
             $wrapped_mode = 1;
-            $paragraph="";
-        } elsif ($markdown and
-                 (   $paragraph =~ m/^>/       # blockquote
-                  or $paragraph =~ m/[<>]/     # maybe html
-                  or $paragraph =~ m/^"""/     # textblock inside macro end
-                  or $paragraph =~ m/"""$/)) { # textblock inside macro begin
-            # Found Markdown markup that might not survive wrapping
-            $wrapped_mode = 0;
-            $paragraph .= $line."\n";
         } else {
             if ($line =~ /^\s/) {
                 # A line starting by a space indicates a non-wrap
                 # paragraph
                 $wrapped_mode = 0;
+            }
+            if ($markdown and
+                     (   $line =~ /\S  $/    # explicit newline
+                      or $line =~ /"""$/)) { # """ textblock inside macro begin
+                # Markdown markup needing separation _after_ this line
+                $end_of_paragraph = 1;
             } else {
                 undef $self->{bullet};
                 undef $self->{indent};
@@ -510,7 +529,24 @@
         # (more than 3)
         # are considered as verbatim paragraphs
         $wrapped_mode = 0 if (   $paragraph =~ m/^(\*|[0-9]+[.)] )/s
-                              or $paragraph =~ m/[ \t][ \t][ \t]/s);
+                          or $paragraph =~ m/[ \t][ \t][ \t]/s);
+        if ($markdown) {
+            # Some Markdown markup can (or might) not survive wrapping
+            $wrapped_mode = 0 if (
+                   $paragraph =~ /^>/ms                  # blockquote
+                or $paragraph =~ /^( {8}|\t)/ms          # monospaced
+                or $paragraph =~ /^\$(\S+[{}]\S*\s*)+/ms # Xapian macro
+                or $paragraph =~ /<(?![a-z]+[:@])/ms     # maybe html (tags but not wiki <URI>)
+                or $paragraph =~ /^[^<]+>/ms             # maybe html (tag with vertical space)
+                or $paragraph =~ /\[\[\!\S[^\]]+$/ms     # macro begin
+            );
+        }
+        if ($end_of_paragraph) {
+            do_paragraph($self,$paragraph,$wrapped_mode);
+            $paragraph="";
+            $wrapped_mode = 1;
+            $end_of_paragraph = 0;
+        }
         ($line,$ref)=$self->shiftline();
     }
     if (length $paragraph) {




More information about the Po4a-commits mailing list