initial commit
[urisagit/CMS-Simple.git] / CMS / Simple / Filter / Markup.pm
CommitLineData
9e609156 1
2package CMS::Simple::Filter::Markup ;
3
4use strict ;
5use warnings ;
6
7my %markup_to_code = (
8
9 l => \&make_link,
10 link => \&make_link,
11 email => \&make_email,
12 image => \&make_image,
13 image_link => \&make_image_link,
14 ilink => \&make_image_link,
15 nbsp => sub { ' ' },
16 em_dash => sub { '—' },
17 eacute => sub { 'é' },
18 copy => sub { '©' },
19 p => sub { '<p>' },
20 br => sub { '<br/>' },
21 gmap => \&google_map,
22) ;
23
24sub filter_markup {
25
26 my( $tag, $text ) = @_ ;
27
28#print "TEXT $text\n" ;
29
30 return unless $text =~
31 s{(?<!\\)\[([a-z_]+)(?:\s+([^]]+)\s*)?\]}
32 {replace_markup(lc $1, $2)}gie
33 ||
34 $text =~ s{\\\[}{[}g ;
35
36 return $text ;
37}
38
39sub replace_markup {
40
41 my( $key, $text ) = @_ ;
42
43#print "KEY $key [$text]\n" ;
44
45 my $code = $markup_to_code{ $key } ;
46
47 $code or die "unknown markup key '$key'" ;
48
49 return $code->($text) ;
50}
51
52sub make_link {
53
54 my( $text ) = @_ ;
55
56 my( $url, $url_text ) = split /\|/, $text ;
57
58 $url_text ||= $url ;
59
60 return qq{<A href="$url">$url_text</A>} ;
61}
62
63sub google_map {
64
65 my( $text ) = @_ ;
66
67 ( my $url_text = $text ) =~ tr/ \t\n\r/+/s ;
68
69 return
70qq{<A href="http://maps.google.com/maps?f=q&hl=en&q=$url_text">$text</A>} ;
71}
72
73sub make_email {
74
75 my( $text ) = @_ ;
76
77 my( $user, $domain ) = split /\@/, $text ;
78
79 return <<EMAIL ;
80<script>
81document.write('<a href="mailto:$user' + '\@' +
82 '$domain">$user AT $domain</a>')
83</script>
84<noscript>
85$user AT $domain
86</noscript>
87EMAIL
88
89}
90
91sub make_image_link {
92
93 my( $text ) = @_ ;
94
95 my( $url, $image_url ) = split /\|/, $text ;
96
97 return qq{<A href="$url"><IMG src="$image_url"></A>} ;
98}
99
100sub make_image {
101
102 my( $text ) = @_ ;
103
104 return qq{<IMG src="$text">} ;
105}