Blame
Date:
Fri Dec 16 05:00:21 2022 UTC
Message:
Daily backup
001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2004-2015 Patrick R. Michaud (pmichaud@pobox.com)
003
2021-12-17
jrmu
This file is part of PmWiki; you can redistribute it and/or modify
004
2021-12-17
jrmu
it under the terms of the GNU General Public License as published
005
2021-12-17
jrmu
by the Free Software Foundation; either version 2 of the License, or
006
2021-12-17
jrmu
(at your option) any later version. See pmwiki.php for full details.
007
2021-12-17
jrmu
008
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
009
2021-12-17
jrmu
*/
010
2021-12-17
jrmu
011
2021-12-17
jrmu
SDV($WikiStylePattern,'%%|%[A-Za-z][-,=:#\\w\\s\'"().]*%');
012
2021-12-17
jrmu
013
2021-12-17
jrmu
## %% markup
014
2021-12-17
jrmu
Markup('%%','style','%','return ApplyStyles($x);');
015
2021-12-17
jrmu
016
2021-12-17
jrmu
## restore links before applying styles
017
2021-12-17
jrmu
Markup('restorelinks','<%%',"/$KeepToken(\\d+L)$KeepToken/",
018
2021-12-17
jrmu
'cb_expandkpv');
019
2021-12-17
jrmu
020
2021-12-17
jrmu
## %define=...% markup on a line by itself
021
2021-12-17
jrmu
Markup('%define=', '>split',
022
2021-12-17
jrmu
"/^(?=%define=)((?:$WikiStylePattern)\\s*)+$/",
023
2021-12-17
jrmu
"MarkupApplyStyles");
024
2021-12-17
jrmu
025
2021-12-17
jrmu
function MarkupApplyStyles($m) {
026
2021-12-17
jrmu
ApplyStyles($m[0]);
027
2021-12-17
jrmu
return '';
028
2021-12-17
jrmu
}
029
2021-12-17
jrmu
030
2021-12-17
jrmu
# define PmWiki's standard/default wikistyles
031
2021-12-17
jrmu
if (IsEnabled($EnableStdWikiStyles,1)) {
032
2021-12-17
jrmu
## standard colors
033
2021-12-17
jrmu
foreach(array('black','white','red','yellow','blue','gray',
034
2021-12-17
jrmu
'silver','maroon','green','navy','purple',
035
2021-12-17
jrmu
'fuchsia','olive','lime','teal','aqua','orange') as $c)
036
2021-12-17
jrmu
SDV($WikiStyle[$c]['color'],$c);
037
2021-12-17
jrmu
SDV($WikiStyle['grey']['color'],'gray');
038
2021-12-17
jrmu
## %newwin% style opens links in a new window
039
2021-12-17
jrmu
SDV($WikiStyle['newwin']['target'],'_blank');
040
2021-12-17
jrmu
## %comment% style turns markup into a comment via display:none css
041
2021-12-17
jrmu
SDV($WikiStyle['comment']['display'],'none');
042
2021-12-17
jrmu
## display, margin, padding, and border css properties
043
2021-12-17
jrmu
$WikiStyleCSS[] =
044
2021-12-17
jrmu
'float|clear|display|(margin|padding|border)(-(left|right|top|bottom))?';
045
2021-12-17
jrmu
$WikiStyleCSS[] = 'white-space';
046
2021-12-17
jrmu
$WikiStyleCSS[] = '((min|max)-)?(width|height)';
047
2021-12-17
jrmu
## list-styles
048
2021-12-17
jrmu
$WikiStyleCSS[] = 'list-style';
049
2021-12-17
jrmu
foreach(array('decimal'=>'decimal', 'roman'=>'lower-roman',
050
2021-12-17
jrmu
'ROMAN'=>'upper-roman', 'alpha'=>'lower-alpha', 'ALPHA'=>'upper-alpha')
051
2021-12-17
jrmu
as $k=>$v)
052
2021-12-17
jrmu
SDV($WikiStyle[$k],array('apply'=>'list','list-style'=>$v));
053
2021-12-17
jrmu
## apply ranges
054
2021-12-17
jrmu
SDVA($WikiStyleApply,array(
055
2021-12-17
jrmu
'item' => 'li|dt',
056
2021-12-17
jrmu
'list' => 'ul|ol|dl',
057
2021-12-17
jrmu
'div' => 'div',
058
2021-12-17
jrmu
'article' => 'article',
059
2021-12-17
jrmu
'section' => 'section',
060
2021-12-17
jrmu
'nav' => 'nav',
061
2021-12-17
jrmu
'aside' => 'aside',
062
2021-12-17
jrmu
'header' => 'header',
063
2021-12-17
jrmu
'footer' => 'footer',
064
2021-12-17
jrmu
'address' => 'address',
065
2021-12-17
jrmu
'pre' => 'pre',
066
2021-12-17
jrmu
'img' => 'img',
067
2021-12-17
jrmu
'block' => 'p(?!\\s+class=)|div|ul|ol|dl|li|dt|pre|h[1-6]|article|section|nav|aside|address|header|footer',
068
2021-12-17
jrmu
'p' => 'p(?!\\s+class=)'));
069
2021-12-17
jrmu
foreach(array('item', 'list', 'block', 'p', 'div') as $c)
070
2021-12-17
jrmu
SDV($WikiStyle[$c],array('apply'=>$c));
071
2021-12-17
jrmu
## block justifications
072
2021-12-17
jrmu
foreach(array('left','right','center','justify') as $c)
073
2021-12-17
jrmu
SDV($WikiStyle[$c],array('apply'=>'block','text-align'=>$c));
074
2021-12-17
jrmu
## frames, floating frames, and floats
075
2021-12-17
jrmu
SDV($HTMLStylesFmt['wikistyles'], "
076
2021-12-17
jrmu
.frame
077
2021-12-17
jrmu
{ border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }
078
2021-12-17
jrmu
.lfloat { float:left; margin-right:0.5em; }
079
2021-12-17
jrmu
.rfloat { float:right; margin-left:0.5em; }\n");
080
2021-12-17
jrmu
SDV($WikiStyle['thumb'], array('width' => '100px'));
081
2021-12-17
jrmu
SDV($WikiStyle['frame'], array('class' => 'frame'));
082
2021-12-17
jrmu
SDV($WikiStyle['lframe'], array('class' => 'frame lfloat'));
083
2021-12-17
jrmu
SDV($WikiStyle['rframe'], array('class' => 'frame rfloat'));
084
2021-12-17
jrmu
SDV($WikiStyle['cframe'], array(
085
2021-12-17
jrmu
'class' => 'frame', 'margin-left' => 'auto', 'margin-right' => 'auto',
086
2021-12-17
jrmu
'width' => '200px', 'apply' => 'block', 'text-align' => 'center'));
087
2021-12-17
jrmu
## preformatted text sections
088
2021-12-17
jrmu
SDV($WikiStyle['pre'], array('apply' => 'block', 'white-space' => 'pre'));
089
2021-12-17
jrmu
SDV($WikiStyle['sidehead'], array('apply' => 'block', 'class' => 'sidehead'));
090
2021-12-17
jrmu
SDV($WikiStyle['reversed'], array('apply' => 'list', 'reversed' => 'reversed'));
091
2021-12-17
jrmu
}
092
2021-12-17
jrmu
093
2021-12-17
jrmu
SDVA($WikiStyleAttr,array(
094
2021-12-17
jrmu
'vspace' => 'img',
095
2021-12-17
jrmu
'hspace' => 'img',
096
2021-12-17
jrmu
'align' => 'img',
097
2021-12-17
jrmu
'value' => 'li',
098
2021-12-17
jrmu
'reversed' => 'ol',
099
2021-12-17
jrmu
'target' => 'a',
100
2021-12-17
jrmu
'accesskey' => 'a',
101
2021-12-17
jrmu
'rel' => 'a'));
102
2021-12-17
jrmu
103
2021-12-17
jrmu
SDVA($WikiStyleRepl,array(
104
2021-12-17
jrmu
'/^%(.*)%$/' => '$1',
105
2021-12-17
jrmu
'/\\bbgcolor([:=])/' => 'background-color$1',
106
2021-12-17
jrmu
'/\\b((?<!-)\d+)pct\\b/' => '$1%',
107
2021-12-17
jrmu
));
108
2021-12-17
jrmu
109
2021-12-17
jrmu
$WikiStyleCSS[] = 'color|background-color';
110
2021-12-17
jrmu
$WikiStyleCSS[] = 'text-align|text-decoration';
111
2021-12-17
jrmu
$WikiStyleCSS[] = 'font-size|font-family|font-weight|font-style';
112
2021-12-17
jrmu
113
2021-12-17
jrmu
SDV($imgTag, '(?:img|object|embed)'); SDV($aTag, 'a'); SDV($spanTag, 'span');
114
2021-12-17
jrmu
115
2021-12-17
jrmu
function ApplyStyles($x) {
116
2021-12-17
jrmu
global $UrlExcludeChars, $WikiStylePattern, $WikiStyleRepl, $WikiStyle,
117
2021-12-17
jrmu
$WikiStyleAttr, $WikiStyleCSS, $WikiStyleApply, $BlockPattern,
118
2021-12-17
jrmu
$WikiStyleTag, $imgTag, $aTag, $spanTag, $WikiStyleAttrPrefix;
119
2021-12-17
jrmu
$wt = @$WikiStyleTag; $ns = $WikiStyleAttrPrefix; $ws = '';
120
2021-12-17
jrmu
$x = preg_replace_callback("/\\b(href|src)=(['\"]?)[^$UrlExcludeChars]+\\2/",
121
2021-12-17
jrmu
"Keep", $x);
122
2021-12-17
jrmu
$x = preg_replace_callback("/\\bhttps?:[^$UrlExcludeChars]+/", "Keep", $x);
123
2021-12-17
jrmu
$parts = preg_split("/($WikiStylePattern)/",$x,-1,PREG_SPLIT_DELIM_CAPTURE);
124
2021-12-17
jrmu
$parts[] = NULL;
125
2021-12-17
jrmu
$out = '';
126
2021-12-17
jrmu
$style = array();
127
2021-12-17
jrmu
$wikicsspat = '/^('.implode('|',(array)$WikiStyleCSS).')$/';
128
2021-12-17
jrmu
while ($parts) {
129
2021-12-17
jrmu
$p = array_shift($parts);
130
2021-12-17
jrmu
if (preg_match("/^$WikiStylePattern\$/",$p)) {
131
2021-12-17
jrmu
$WikiStyle['curr']=$style; $style=array();
132
2021-12-17
jrmu
foreach((array)$WikiStyleRepl as $pat=>$rep)
133
2021-12-17
jrmu
$p=preg_replace($pat,$rep,$p);
134
2021-12-17
jrmu
preg_match_all(
135
2021-12-17
jrmu
'/\\b([a-zA-Z][-\\w]*)([:=]([-#,\\w.()%]+|([\'"]).*?\\4))?/',
136
2021-12-17
jrmu
$p, $match, PREG_SET_ORDER);
137
2021-12-17
jrmu
while ($match) {
138
2021-12-17
jrmu
$m = array_shift($match);
139
2021-12-17
jrmu
if (@$m[2]) $style[$m[1]]=preg_replace('/^([\'"])(.*?)\\1$/','$2',$m[3]);
140
2021-12-17
jrmu
else if (!isset($WikiStyle[$m[1]])) @$style['class'] .= ' ' . $m[1];
141
2021-12-17
jrmu
else {
142
2021-12-17
jrmu
$c = @$style['class'];
143
2021-12-17
jrmu
$style=array_merge($style,(array)$WikiStyle[$m[1]]);
144
2021-12-17
jrmu
if ($c && !preg_match("/(^| )$c( |$)/", $style['class']) )
145
2021-12-17
jrmu
$style['class'] = $c . ' ' . $style['class'];
146
2021-12-17
jrmu
}
147
2021-12-17
jrmu
}
148
2021-12-17
jrmu
if (@$style['define']) {
149
2021-12-17
jrmu
$d = $style['define']; unset($style['define']);
150
2021-12-17
jrmu
$WikiStyle[$d] = $style;
151
2021-12-17
jrmu
}
152
2021-12-17
jrmu
if (@$WikiStyleApply[$style['apply']]) {
153
2021-12-17
jrmu
$apply[$style['apply']] =
154
2021-12-17
jrmu
array_merge((array)@$apply[$style['apply']],$style);
155
2021-12-17
jrmu
$style=array();
156
2021-12-17
jrmu
}
157
2021-12-17
jrmu
continue;
158
2021-12-17
jrmu
}
159
2021-12-17
jrmu
if (is_null($p))
160
2021-12-17
jrmu
{ $alist=@$apply; unset($alist['']); $p=$out; $out=''; }
161
2021-12-17
jrmu
elseif ($p=='') continue;
162
2021-12-17
jrmu
else { $alist=array(''=>$style); }
163
2021-12-17
jrmu
foreach((array)$alist as $a=>$s) {
164
2021-12-17
jrmu
$spanattr = ''; $stylev = array(); $id = '';
165
2021-12-17
jrmu
foreach((array)$s as $k=>$v) {
166
2021-12-17
jrmu
$v = trim($v);
167
2021-12-17
jrmu
if ($wt) $ws = str_replace('$1', "$ns$k='$v'", $wt);
168
2021-12-17
jrmu
if ($k == 'class' && $v) $spanattr = "{$ns}class='$v'";
169
2021-12-17
jrmu
elseif ($k=='id') $id = preg_replace('/[^-A-Za-z0-9:_.]+/', '_', $v);
170
2021-12-17
jrmu
elseif (($k=='width' || $k=='height') && !@$WikiStyleApply[$a]
171
2021-12-17
jrmu
&& preg_match("/\\s*<$imgTag\\b/", $p))
172
2021-12-17
jrmu
$p = preg_replace("/<($imgTag)\\b(?![^>]*\\s$k=)/",
173
2021-12-17
jrmu
"$ws<$1 $ns$k='$v'", $p);
174
2021-12-17
jrmu
elseif (@$WikiStyleAttr[$k])
175
2021-12-17
jrmu
$p = preg_replace(
176
2021-12-17
jrmu
"/<({$WikiStyleAttr[$k]}(?![^>]*\\s(?:$ns)?$k=))([^>]*)>/s",
177
2021-12-17
jrmu
"$ws<$1 $ns$k='$v' $2>", $p);
178
2021-12-17
jrmu
elseif (preg_match($wikicsspat,$k)) $stylev[]="$k: $v;";
179
2021-12-17
jrmu
}
180
2021-12-17
jrmu
if ($stylev) $spanattr .= " {$ns}style='".implode(' ',$stylev)."'";
181
2021-12-17
jrmu
if ($id) $spanattr .= " {$ns}id='$id'";
182
2021-12-17
jrmu
if ($spanattr) {
183
2021-12-17
jrmu
if ($wt) $ws = str_replace('$1', $spanattr, $wt);
184
2021-12-17
jrmu
if (!@$WikiStyleApply[$a]) {
185
2021-12-17
jrmu
$p = preg_replace("!^(.*?)($|</?($BlockPattern))!s",
186
2021-12-17
jrmu
"$ws<$spanTag $spanattr>$1</$spanTag>$2", $p, 1);
187
2021-12-17
jrmu
}
188
2021-12-17
jrmu
elseif (!preg_match('/^(\\s*<[^>]+>)*$/s',$p) ||
189
2021-12-17
jrmu
preg_match("/<$imgTag\\b/", $p)) {
190
2021-12-17
jrmu
$p = preg_replace("/<({$WikiStyleApply[$a]})\\b/",
191
2021-12-17
jrmu
"$ws<$1 $spanattr", $p);
192
2021-12-17
jrmu
}
193
2021-12-17
jrmu
}
194
2021-12-17
jrmu
if (@$s['color']) {
195
2021-12-17
jrmu
$colorattr = "{$ns}style='color: {$s['color']}'";
196
2021-12-17
jrmu
if ($wt) $ws = str_replace('$1', $colorattr, $wt);
197
2021-12-17
jrmu
$p = preg_replace("/<$aTag\\b/", "$ws<$aTag $colorattr", $p);
198
2021-12-17
jrmu
}
199
2021-12-17
jrmu
}
200
2021-12-17
jrmu
$out .= $p;
201
2021-12-17
jrmu
}
202
2021-12-17
jrmu
return $out;
203
2021-12-17
jrmu
}
204
2021-12-17
jrmu
IRCNow