~titusx/nginx/module-substitutions

« back to all changes in this revision

Viewing changes to util/wiki2pod.pl

  • Committer: Weibin Yao
  • Date: 2010-08-11 08:36:05 UTC
  • mfrom: (10.1.19)
  • Revision ID: git-v1:69c4c8dfe2c82aeabf8d6c5736b134c7dadaeb73
merge from the develop branch, r37


git-svn-id: http://substitutions4nginx.googlecode.com/svn/trunk@38 184bbb60-1f5e-11de-b650-e715bd6d7cf1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env perl
 
2
 
 
3
use strict;
 
4
use warnings;
 
5
use bytes;
 
6
 
 
7
my @nl_counts;
 
8
my $last_nl_count_level;
 
9
 
 
10
my @bl_counts;
 
11
my $last_bl_count_level;
 
12
 
 
13
sub fmt_pos ($) {
 
14
    (my $s = $_[0]) =~ s{\#(.*)}{/"$1"};
 
15
    $s;
 
16
}
 
17
 
 
18
sub fmt_mark ($$) {
 
19
    my ($tag, $s) = @_;
 
20
    my $max_level = 0;
 
21
    while ($s =~ /([<>])\1*/g) {
 
22
        my $level = length $&;
 
23
        if ($level > $max_level) {
 
24
            $max_level = $level;
 
25
        }
 
26
    }
 
27
 
 
28
    my $times = $max_level + 1;
 
29
    if ($times > 1) {
 
30
        $s = " $s ";
 
31
    }
 
32
    return $tag . ('<' x $times) . $s . ('>' x $times);
 
33
}
 
34
 
 
35
while (<>) {
 
36
    if ($. == 1) {
 
37
        # strip the leading U+FEFF byte in MS-DOS text files
 
38
        my $first = ord(substr($_, 0, 1));
 
39
        #printf STDERR "0x%x", $first;
 
40
        #my $second = ord(substr($_, 2, 1));
 
41
        #printf STDERR "0x%x", $second;
 
42
        if ($first == 0xEF) {
 
43
            substr($_, 0, 1, '');
 
44
            #warn "Hit!";
 
45
        }
 
46
    }
 
47
    s{\[(http[^ \]]+) ([^\]]*)\]}{$2 (L<$1>)}gi;
 
48
    s{ \[\[ ( [^\]\|]+ ) \| ([^\]]*) \]\] }{"L<$2|" . fmt_pos($1) . ">"}gixe;
 
49
    s{<code>(.*?)</code>}{fmt_mark('C', $1)}gie;
 
50
    s{'''(.*?)'''}{fmt_mark('B', $1)}ge;
 
51
    s{''(.*?)''}{fmt_mark('I', $1)}ge;
 
52
    if (s{^\s*<[^>]+>\s*$}{}) {
 
53
        next;
 
54
    }
 
55
 
 
56
    if (/^\s*$/) {
 
57
        print "\n";
 
58
        next;
 
59
    }
 
60
 
 
61
=begin cmt
 
62
 
 
63
    if ($. == 1) {
 
64
        warn $_;
 
65
        for my $i (0..length($_) - 1) {
 
66
            my $chr = substr($_, $i, 1);
 
67
            warn "chr ord($i): ".ord($chr)." \"$chr\"\n";
 
68
        }
 
69
    }
 
70
 
 
71
=end cmt
 
72
=cut
 
73
 
 
74
    if (/(=+) (.*) \1$/) {
 
75
        #warn "HERE! $_" if $. == 1;
 
76
        my ($level, $title) = (length $1, $2);
 
77
        collapse_lists();
 
78
 
 
79
        print "\n=head$level $title\n\n";
 
80
    } elsif (/^(\#+) (.*)/) {
 
81
        my ($level, $txt) = (length($1) - 1, $2);
 
82
        if (defined $last_nl_count_level && $level != $last_nl_count_level) {
 
83
            print "\n=back\n\n";
 
84
        }
 
85
        $last_nl_count_level = $level;
 
86
        $nl_counts[$level] ||= 0;
 
87
        if ($nl_counts[$level] == 0) {
 
88
            print "\n=over\n\n";
 
89
        }
 
90
        $nl_counts[$level]++;
 
91
        print "\n=item $nl_counts[$level].\n\n";
 
92
        print "$txt\n";
 
93
    } elsif (/^(\*+) (.*)/) {
 
94
        my ($level, $txt) = (length($1) - 1, $2);
 
95
        if (defined $last_bl_count_level && $level != $last_bl_count_level) {
 
96
            print "\n=back\n\n";
 
97
        }
 
98
        $last_bl_count_level = $level;
 
99
        $bl_counts[$level] ||= 0;
 
100
        if ($bl_counts[$level] == 0) {
 
101
            print "\n=over\n\n";
 
102
        }
 
103
        $bl_counts[$level]++;
 
104
        print "\n=item *\n\n";
 
105
        print "$txt\n";
 
106
    } else {
 
107
        collapse_lists();
 
108
        print;
 
109
    }
 
110
}
 
111
 
 
112
collapse_lists();
 
113
 
 
114
sub collapse_lists {
 
115
    while (defined $last_nl_count_level && $last_nl_count_level >= 0) {
 
116
        print "\n=back\n\n";
 
117
        $last_nl_count_level--;
 
118
    }
 
119
    undef $last_nl_count_level;
 
120
    undef @nl_counts;
 
121
 
 
122
    while (defined $last_bl_count_level && $last_bl_count_level >= 0) {
 
123
        print "\n=back\n\n";
 
124
        $last_bl_count_level--;
 
125
    }
 
126
    undef $last_bl_count_level;
 
127
    undef @bl_counts;
 
128
}
 
129