summaryrefslogtreecommitdiff
path: root/perl
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2008-08-04 02:20:12 +0200
committerJonas Smedegaard <dr@jones.dk>2008-08-04 02:20:12 +0200
commit5d8259826f728e536b250fe6e1aca8e79967ec71 (patch)
treef7f463251c4c862129043b4bb026a748f7cce533 /perl
parent927187ee672213ea0669f932334d63bb68d56e0c (diff)
parent52d3706fd4d7ba3425dac767d75db549fb499dc7 (diff)
Merge branch 'master' into clean
Diffstat (limited to 'perl')
-rw-r--r--perl/Locale/Po4a/Text.pm86
1 files changed, 68 insertions, 18 deletions
diff --git a/perl/Locale/Po4a/Text.pm b/perl/Locale/Po4a/Text.pm
index eecd333..0cc2cc8 100644
--- a/perl/Locale/Po4a/Text.pm
+++ b/perl/Locale/Po4a/Text.pm
@@ -129,8 +129,21 @@ sub parse {
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]+$//;
while (defined($line)) {
+ $ref =~ m/^(.*):[0-9]+$/;
+ if ($1 ne $file) {
+ $file = $1;
+ do_paragraph($self,$paragraph,$wrapped_mode);
+ $paragraph="";
+ $wrapped_mode = 1;
+ $expect_header = 1;
+ }
+
+ # TODO: preserve original line ends throughout the code instead
chomp($line);
$self->{ref}="$ref";
if ($debianchangelog and
@@ -153,6 +166,8 @@ sub parse {
$line =~ m/^%%?\s*$/) {
# Found end of fortune
do_paragraph($self,$paragraph,$wrapped_mode);
+ # FIXME: test if this is still needed when always adding
+ # newline in do_paragraph()
$self->pushline("\n") unless ( $wrapped_mode == 0
or $paragraph eq "");
$paragraph="";
@@ -161,42 +176,55 @@ sub parse {
} elsif ($line =~ /^\s*$/) {
# Break paragraphs on lines containing only spaces
do_paragraph($self,$paragraph,$wrapped_mode);
- $self->pushline("\n") unless ( $wrapped_mode == 0
- or $paragraph eq "");
$paragraph="";
$wrapped_mode = 1;
$self->pushline($line."\n");
- } 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;
+ } elsif ($markdown and
+ ( $line =~ /\S $/ # explicit newline
+ or $line =~ /"""$/)) { # """ textblock inside macro begin
+ # Markdown markup needing separation _after_ this line
+ $end_of_paragraph = 1;
}
if ($fortunes) {
$line =~ s/%%(.*)$//;
@@ -209,7 +237,23 @@ sub parse {
# (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 =~ /[<>]/ms # maybe html
+ or $paragraph =~ /^\s*\[\[\!\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) {
@@ -268,10 +312,16 @@ TEST_BULLET:
}
# TODO: detect indented paragraphs
- $self->pushline( $self->translate($paragraph,
+ my $transfinal = $self->translate($paragraph,
$self->{ref},
"Plain text",
- "wrap" => $wrap) );
+ "wrap" => $wrap);
+
+ # TODO: preserve original line ends throughout the code instead
+ chomp $transfinal;
+ $transfinal .= "\n";
+
+ $self->pushline( $transfinal );
}
1;
e2a8eefcd5961f57.camel@decadent.org.uk/unread0
-rw-r--r--tags/b4/b7/8faebb1e-721a-a917-bfff-8d3b6cdfd77f@toppoint.de/replied0
-rw-r--r--tags/b4/b7/948b197c0805071303l3b75a4c9v936f734ba8637cc7@mail.gmail.com/sugar0
-rw-r--r--tags/b4/b7/9a6c742fb6a6d591dbc04c3861b06c70@3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b/unread0
-rw-r--r--tags/b4/b7/AANLkTik+BRJOppXpFLtNgmQVCbg2jf7WruWWePgDi95b@mail.gmail.com/debian0
-rw-r--r--tags/b4/b7/CAKNHny_D9Zvf3jsAv1FbuaSqmTsEptd0Ps4_NtgMM+icFSopqQ@mail.gmail.com/unread0
-rw-r--r--tags/b4/b7/E1Idp7r-0000TD-Mh@administrator.skolelinux.no/debian0
-rw-r--r--tags/b4/b7/E1nu63n-0003rg-P0@respighi.debian.org/debian0
-rw-r--r--tags/b4/b7/E1nu63n-0003rg-P0@respighi.debian.org/inbox0
-rw-r--r--tags/b4/b7/E1nu63n-0003rg-P0@respighi.debian.org/killed0
-rw-r--r--tags/b4/b7/E1nu63n-0003rg-P0@respighi.debian.org/unread0
-rw-r--r--tags/b4/b7/NFBBLHLMCLLFFODOPOOJGEJGCAAA.overgaard@wetware.dk/inbox0
-rw-r--r--tags/b4/b7/NFBBLHLMCLLFFODOPOOJGEJGCAAA.overgaard@wetware.dk/old0
-rw-r--r--tags/b4/b7/a7eb91a4-b11e-ea57-abe1-c5039e9d021e@puri.sm/signed0
-rw-r--r--tags/b4/b7/a7eb91a4-b11e-ea57-abe1-c5039e9d021e@puri.sm/unread0
-rw-r--r--tags/b4/b7/d41b2b81af1f9d958d199146efeec852@sms-backup-plus.local/inbox0
-rw-r--r--tags/b4/b7/d41b2b81af1f9d958d199146efeec852@sms-backup-plus.local/old0
-rw-r--r--tags/b4/b7/l03130307b4e0214941f8@%5b194.239.159.218%5d/inbox0
-rw-r--r--tags/b4/b7/l03130307b4e0214941f8@%5b194.239.159.218%5d/old0
-rw-r--r--tags/b4/b7/mailman.113.1609754088.2791.kpt10@lists.homebase.dk/hb0
-rw-r--r--tags/b4/b7/mailman.113.1609754088.2791.kpt10@lists.homebase.dk/inbox0
-rw-r--r--tags/b4/b7/mailman.113.1609754088.2791.kpt10@lists.homebase.dk/killed0
-rw-r--r--tags/b4/b7/mailman.113.1609754088.2791.kpt10@lists.homebase.dk/unread0
52 files changed, 0 insertions, 0 deletions