001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2005-2019 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.
008
2021-12-17
jrmu
This script provides a number of syndication feed and xml-based
009
2021-12-17
jrmu
metadata options to PmWiki, including Atom, RSS 2.0, RSS 1.0 (RDF),
010
2021-12-17
jrmu
and the Dublin Core Metadata extensions. This module is typically
011
2021-12-17
jrmu
activated from a local configuration file via a line such as
013
2021-12-17
jrmu
if ($action == 'atom') include_once("$FarmD/scripts/feeds.php");
014
2021-12-17
jrmu
if ($action == 'dc') include_once("$FarmD/scripts/feeds.php");
016
2021-12-17
jrmu
When enabled, ?action=atom, ?action=rss, and ?action=rdf produce
017
2021-12-17
jrmu
syndication feeds based on any wikitrail contained in the page,
018
2021-12-17
jrmu
or, for Category pages, on the pages in the category. The feeds
019
2021-12-17
jrmu
are generated using pagelist, thus one can include parameters such
020
2021-12-17
jrmu
as count=, list=, order=, etc. in the url to adjust the feed output.
022
2021-12-17
jrmu
?action=dc will normally generate Dublin Core Metadata for the
023
2021-12-17
jrmu
current page only, but placing a group=, trail=, or link= argument
024
2021-12-17
jrmu
in the url causes it to generate metadata for all pages in the
025
2021-12-17
jrmu
associated group, trail, or backlink.
027
2021-12-17
jrmu
There are a large number of customizations available, most of which
028
2021-12-17
jrmu
are controlled by the $FeedFmt array. Elements $FeedFmt look like
030
2021-12-17
jrmu
$FeedFmt['atom']['feed']['rights'] = 'All Rights Reserved';
032
2021-12-17
jrmu
where the first index corresponds to the action (?action=atom),
033
2021-12-17
jrmu
the second index indicates a per-feed or per-item element, and
034
2021-12-17
jrmu
the third index is the name of the element being generated.
035
2021-12-17
jrmu
The above setting would therefore generate a
036
2021-12-17
jrmu
"<rights>All Rights Reserved</rights>" in the feed for
037
2021-12-17
jrmu
?action=atom. If the value of an entry begins with a '<',
038
2021-12-17
jrmu
then feeds.php doesn't automatically add the tag around it.
039
2021-12-17
jrmu
Elements can also be callable functions which are called to
040
2021-12-17
jrmu
generate the appropriate output.
042
2021-12-17
jrmu
For example, to set the RSS 2.0 <author> element to the
043
2021-12-17
jrmu
value of the last author to modify a page, one can set
044
2021-12-17
jrmu
(in local/config.php):
046
2021-12-17
jrmu
$FeedFmt['rss']['item']['author'] = '$LastModifiedBy';
048
2021-12-17
jrmu
To use the RSS 2.0 <description> element to contain the
049
2021-12-17
jrmu
change summary of the most recent edit, set
051
2021-12-17
jrmu
$FeedFmt['rss']['item']['description'] = '$LastModifiedSummary';
053
2021-12-17
jrmu
Feeds.php can also be combined with attachments to support
054
2021-12-17
jrmu
podcasting via ?action=rss. Any page such as "PageName"
055
2021-12-17
jrmu
that has an mp3 attachment with the same name as the page
056
2021-12-17
jrmu
("PageName.mp3") will have an appropriate <enclosure> element
057
2021-12-17
jrmu
in the feed output. The set of allowed attachments can be
058
2021-12-17
jrmu
extended using the $RSSEnclosureFmt array:
060
2021-12-17
jrmu
$RSSEnclosureFmt = array('{$Name}.mp3', '{$Name}.mp4');
062
2021-12-17
jrmu
References:
063
2021-12-17
jrmu
http://www.atomenabled.org/developers/syndication/
064
2021-12-17
jrmu
http://dublincore.org/documents/dcmes-xml/
065
2021-12-17
jrmu
http://en.wikipedia.org/wiki/Podcasting
067
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
070
2021-12-17
jrmu
## Settings for ?action=atom
071
2021-12-17
jrmu
SDVA($FeedFmt['atom']['feed'], array(
072
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
073
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
074
2021-12-17
jrmu
<feed xmlns="http://www.w3.org/2005/Atom">'."\n",
075
2021-12-17
jrmu
'_end' => "</feed>\n",
076
2021-12-17
jrmu
'title' => '$WikiTitle',
077
2021-12-17
jrmu
'link' => '<link rel="self" href="{$PageUrl}?action=atom" />',
078
2021-12-17
jrmu
'id' => '{$PageUrl}?action=atom',
079
2021-12-17
jrmu
'updated' => '$FeedISOTime',
080
2021-12-17
jrmu
'author' => "<author><name>$WikiTitle</name></author>\n",
081
2021-12-17
jrmu
'generator' => '$Version',
082
2021-12-17
jrmu
'logo' => '$PageLogoUrl'));
083
2021-12-17
jrmu
SDVA($FeedFmt['atom']['item'], array(
084
2021-12-17
jrmu
'_start' => "<entry>\n",
085
2021-12-17
jrmu
'id' => '{$PageUrl}',
086
2021-12-17
jrmu
'title' => '{$Title}',
087
2021-12-17
jrmu
'updated' => '$ItemISOTime',
088
2021-12-17
jrmu
'link' => "<link rel=\"alternate\" href=\"{\$PageUrl}\" />\n",
089
2021-12-17
jrmu
'author' => "<author><name>{\$LastModifiedBy}</name></author>\n",
090
2021-12-17
jrmu
'summary' => '{$Description}',
091
2021-12-17
jrmu
'category' => "<category term=\"\$Category\" />\n",
092
2021-12-17
jrmu
'_end' => "</entry>\n"));
094
2021-12-17
jrmu
## Settings for ?action=dc
095
2021-12-17
jrmu
SDVA($FeedFmt['dc']['feed'], array(
096
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
097
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
098
2021-12-17
jrmu
<!DOCTYPE rdf:RDF PUBLIC "-//DUBLIN CORE//DCMES DTD 2002/07/31//EN"
099
2021-12-17
jrmu
"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd">
100
2021-12-17
jrmu
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
101
2021-12-17
jrmu
xmlns:dc="http://purl.org/dc/elements/1.1/">'."\n",
102
2021-12-17
jrmu
'_end' => "</rdf:RDF>\n"));
103
2021-12-17
jrmu
SDVA($FeedFmt['dc']['item'], array(
104
2021-12-17
jrmu
'_start' => "<rdf:Description rdf:about=\"{\$PageUrl}\">\n",
105
2021-12-17
jrmu
'dc:title' => '{$Title}',
106
2021-12-17
jrmu
'dc:identifier' => '{$PageUrl}',
107
2021-12-17
jrmu
'dc:date' => '$ItemISOTime',
108
2021-12-17
jrmu
'dc:type' => 'Text',
109
2021-12-17
jrmu
'dc:format' => 'text/html',
110
2021-12-17
jrmu
'dc:description' => '{$Description}',
111
2021-12-17
jrmu
'dc:subject' => "<dc:subject>\$Category</dc:subject>\n",
112
2021-12-17
jrmu
'dc:publisher' => '$WikiTitle',
113
2021-12-17
jrmu
'dc:author' => '{$LastModifiedBy}',
114
2021-12-17
jrmu
'_end' => "</rdf:Description>\n"));
116
2021-12-17
jrmu
## RSS 2.0 settings for ?action=rss
117
2021-12-17
jrmu
SDVA($FeedFmt['rss']['feed'], array(
118
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
119
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
120
2021-12-17
jrmu
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
121
2021-12-17
jrmu
<channel>'."\n",
122
2021-12-17
jrmu
'_end' => "</channel>\n</rss>\n",
123
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
124
2021-12-17
jrmu
'link' => '{$PageUrl}?action=rss',
125
2021-12-17
jrmu
'description' => '{$Group}.{$Title}',
126
2021-12-17
jrmu
'lastBuildDate' => '$FeedRSSTime'));
127
2021-12-17
jrmu
SDVA($FeedFmt['rss']['item'], array(
128
2021-12-17
jrmu
'_start' => "<item>\n",
129
2021-12-17
jrmu
'_end' => "</item>\n",
130
2021-12-17
jrmu
'title' => '{$Group} / {$Title}',
131
2021-12-17
jrmu
'link' => '{$PageUrl}',
132
2021-12-17
jrmu
'description' => '{$Description}',
133
2021-12-17
jrmu
'dc:contributor' => '{$LastModifiedBy}',
134
2021-12-17
jrmu
'dc:date' => '$ItemISOTime',
135
2021-12-17
jrmu
'pubDate' => '$ItemRSSTime',
136
2021-12-17
jrmu
'enclosure' => 'RSSEnclosure'));
138
2021-12-17
jrmu
## RDF 1.0, for ?action=rdf
139
2021-12-17
jrmu
SDVA($FeedFmt['rdf']['feed'], array(
140
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
141
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
142
2021-12-17
jrmu
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
143
2021-12-17
jrmu
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
144
2021-12-17
jrmu
xmlns:dc="http://purl.org/dc/elements/1.1/">
145
2021-12-17
jrmu
<channel rdf:about="{$PageUrl}?action=rdf">'."\n",
146
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
147
2021-12-17
jrmu
'link' => '{$PageUrl}?action=rdf',
148
2021-12-17
jrmu
'description' => '{$Group}.{$Title}',
149
2021-12-17
jrmu
'dc:date' => '$FeedISOTime',
150
2021-12-17
jrmu
'items' => "<items>\n<rdf:Seq>\n\$FeedRDFSeq</rdf:Seq>\n</items>\n",
151
2021-12-17
jrmu
'_items' => "</channel>\n",
152
2021-12-17
jrmu
'_end' => "</rdf:RDF>\n"));
153
2021-12-17
jrmu
SDVA($FeedFmt['rdf']['item'], array(
154
2021-12-17
jrmu
'_start' => "<item rdf:about=\"{\$PageUrl}\">\n",
155
2021-12-17
jrmu
'_end' => "</item>\n",
156
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
157
2021-12-17
jrmu
'link' => '{$PageUrl}',
158
2021-12-17
jrmu
'description' => '{$Description}',
159
2021-12-17
jrmu
'dc:date' => '$ItemISOTime'));
161
2021-12-17
jrmu
foreach(array_keys($FeedFmt) as $k) {
162
2021-12-17
jrmu
SDV($HandleActions[$k], 'HandleFeed');
163
2021-12-17
jrmu
SDV($HandleAuth[$k], 'read');
166
2021-12-17
jrmu
function HandleFeed($pagename, $auth = 'read') {
167
2021-12-17
jrmu
global $FeedFmt, $action, $PCache, $FmtV, $TimeISOZFmt, $RSSTimeFmt,
168
2021-12-17
jrmu
$FeedPageListOpt, $FeedCategoryOpt, $FeedTrailOpt,
169
2021-12-17
jrmu
$FeedDescPatterns, $CategoryGroup, $EntitiesTable;
170
2021-12-17
jrmu
SDV($RSSTimeFmt, 'D, d M Y H:i:s \G\M\T');
171
2021-12-17
jrmu
SDV($FeedDescPatterns,
172
2021-12-17
jrmu
array('/<[^>]*$/' => ' ', '/\\w+$/' => '', '/<[^>]+>/' => ''));
173
2021-12-17
jrmu
$FeedPageListOpt = (array)@$FeedPageListOpt;
174
2021-12-17
jrmu
SDVA($FeedCategoryOpt, array('link' => $pagename));
175
2021-12-17
jrmu
SDVA($FeedTrailOpt, array('trail' => $pagename, 'count' => 10));
177
2021-12-17
jrmu
$f = $FeedFmt[$action];
178
2021-12-17
jrmu
$page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
179
2021-12-17
jrmu
if (!$page) Abort("?cannot generate feed");
180
2021-12-17
jrmu
$feedtime = $page['time'];
182
2021-12-17
jrmu
# determine list of pages to display
183
2021-12-17
jrmu
if (@($_REQUEST['trail'] || $_REQUEST['group'] || $_REQUEST['link']
184
2021-12-17
jrmu
|| $_REQUEST['name']))
185
2021-12-17
jrmu
$opt = $FeedPageListOpt;
186
2021-12-17
jrmu
else if (preg_match("/^$CategoryGroup\\./", $pagename))
187
2021-12-17
jrmu
$opt = $FeedCategoryOpt;
188
2021-12-17
jrmu
else if ($action != 'dc') $opt = $FeedTrailOpt;
190
2021-12-17
jrmu
PCache($pagename, $page);
191
2021-12-17
jrmu
$pagelist = array($pagename);
193
2021-12-17
jrmu
if (!@$pagelist) {
194
2021-12-17
jrmu
$opt = array_merge($opt, @$_REQUEST);
195
2021-12-17
jrmu
$pagelist = MakePageList($pagename, $opt, 0);
198
2021-12-17
jrmu
# process list of pages in feed
199
2021-12-17
jrmu
$rdfseq = '';
200
2021-12-17
jrmu
$pl = array();
201
2021-12-17
jrmu
foreach($pagelist as $pn) {
202
2021-12-17
jrmu
if (!PageExists($pn)) continue;
203
2021-12-17
jrmu
if (!isset($PCache[$pn]['time']))
204
2021-12-17
jrmu
{ $page = ReadPage($pn, READPAGE_CURRENT); PCache($pn, $page); }
205
2021-12-17
jrmu
$pc = & $PCache[$pn];
206
2021-12-17
jrmu
$pl[] = $pn;
207
2021-12-17
jrmu
$rdfseq .= FmtPageName("<rdf:li resource=\"{\$PageUrl}\" />\n", $pn);
208
2021-12-17
jrmu
if ($pc['time'] > $feedtime) $feedtime = $pc['time'];
209
2021-12-17
jrmu
if (@$opt['count'] && count($pl) >= $opt['count']) break;
211
2021-12-17
jrmu
$pagelist = $pl;
213
2021-12-17
jrmu
$FmtV['$FeedRDFSeq'] = $rdfseq;
214
2021-12-17
jrmu
$FmtV['$FeedISOTime'] = gmstrftime($TimeISOZFmt, $feedtime);
215
2021-12-17
jrmu
$FmtV['$FeedRSSTime'] = gmdate($RSSTimeFmt, $feedtime);
216
2021-12-17
jrmu
# format start of feed
217
2021-12-17
jrmu
$out = FmtPageName($f['feed']['_start'], $pagename);
219
2021-12-17
jrmu
# format feed elements
220
2021-12-17
jrmu
foreach($f['feed'] as $k => $v) {
221
2021-12-17
jrmu
if ($k[0] == '_' || !$v) continue;
222
2021-12-17
jrmu
$x = FmtPageName($v, $pagename);
223
2021-12-17
jrmu
if (!$x) continue;
224
2021-12-17
jrmu
$out .= ($v[0] == '<') ? $x : "<$k>$x</$k>\n";
227
2021-12-17
jrmu
# format items in feed
228
2021-12-17
jrmu
if (@$f['feed']['_items'])
229
2021-12-17
jrmu
$out .= FmtPageName($f['feed']['_items'], $pagename);
230
2021-12-17
jrmu
foreach($pagelist as $pn) {
231
2021-12-17
jrmu
$page = &$PCache[$pn];
232
2021-12-17
jrmu
$FmtV['$ItemDesc'] = @$page['description'];
233
2021-12-17
jrmu
$FmtV['$ItemISOTime'] = gmstrftime($TimeISOZFmt, $page['time']);
234
2021-12-17
jrmu
$FmtV['$ItemRSSTime'] = gmdate($RSSTimeFmt, $page['time']);
236
2021-12-17
jrmu
$out .= FmtPageName($f['item']['_start'], $pn);
237
2021-12-17
jrmu
foreach((array)@$f['item'] as $k => $v) {
238
2021-12-17
jrmu
if ($k[0] == '_' || !$v) continue;
239
2021-12-17
jrmu
if (is_callable($v)) { $out .= $v($pn, $page, $k); continue; }
240
2021-12-17
jrmu
if (strpos($v, '$LastModifiedBy') !== false && !@$page['author'])
241
2021-12-17
jrmu
continue;
242
2021-12-17
jrmu
if (strpos($v, '$Category') !== false) {
243
2021-12-17
jrmu
if (preg_match_all("/(?<=^|,)$CategoryGroup\\.([^,]+)/",
244
2021-12-17
jrmu
@$page['targets'], $match)) {
245
2021-12-17
jrmu
foreach($match[1] as $c) {
246
2021-12-17
jrmu
$FmtV['$Category'] = $c;
247
2021-12-17
jrmu
$out .= FmtPageName($v, $pn);
250
2021-12-17
jrmu
continue;
252
2021-12-17
jrmu
$x = FmtPageName($v, $pn);
253
2021-12-17
jrmu
if (!$x) continue;
254
2021-12-17
jrmu
$out .= ($v[0] == '<') ? $x : "<$k>$x</$k>\n";
256
2021-12-17
jrmu
$out .= FmtPageName($f['item']['_end'], $pn);
258
2021-12-17
jrmu
$out .= FmtPageName($f['feed']['_end'], $pagename);
259
2021-12-17
jrmu
foreach((array)@$f['feed']['_header'] as $fmt)
260
2021-12-17
jrmu
header(FmtPageName($fmt, $pagename));
261
2021-12-17
jrmu
print str_replace(array_keys($EntitiesTable),
262
2021-12-17
jrmu
array_values($EntitiesTable), $out);
265
2021-12-17
jrmu
## RSSEnclosure is called in ?action=rss to generate <enclosure>
266
2021-12-17
jrmu
## tags for any pages that have an attached "PageName.mp3" file.
267
2021-12-17
jrmu
## The set of attachments to enclose is given by $RSSEnclosureFmt.
268
2021-12-17
jrmu
function RSSEnclosure($pagename, &$page, $k) {
269
2021-12-17
jrmu
global $RSSEnclosureFmt, $UploadFileFmt, $UploadExts;
270
2021-12-17
jrmu
if (!function_exists('MakeUploadName')) return '';
271
2021-12-17
jrmu
SDV($RSSEnclosureFmt, array('{$Name}.mp3'));
272
2021-12-17
jrmu
$encl = '';
273
2021-12-17
jrmu
foreach((array)$RSSEnclosureFmt as $fmt) {
274
2021-12-17
jrmu
$path = FmtPageName($fmt, $pagename);
275
2021-12-17
jrmu
$upname = MakeUploadName($pagename, $path);
276
2021-12-17
jrmu
$filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
277
2021-12-17
jrmu
if (file_exists($filepath)) {
278
2021-12-17
jrmu
$length = filesize($filepath);
279
2021-12-17
jrmu
$type = @$UploadExts[preg_replace('/.*\\./', '', $filepath)];
280
2021-12-17
jrmu
$url = LinkUpload($pagename, 'Attach:', $path, '', '', '$LinkUrl');
281
2021-12-17
jrmu
$encl .= "<$k url='$url' length='$length' type='$type' />";
284
2021-12-17
jrmu
return $encl;
287
2021-12-17
jrmu
## Since most feeds don't understand html character entities, we
288
2021-12-17
jrmu
## convert the common ones to their numeric form here.
289
2021-12-17
jrmu
SDVA($EntitiesTable, array(
290
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
291
2021-12-17
jrmu
' ' => ' ',
292
2021-12-17
jrmu
'¡' => '¡',
293
2021-12-17
jrmu
'¢' => '¢',
294
2021-12-17
jrmu
'£' => '£',
295
2021-12-17
jrmu
'¤' => '¤',
296
2021-12-17
jrmu
'¥' => '¥',
297
2021-12-17
jrmu
'¦' => '¦',
298
2021-12-17
jrmu
'§' => '§',
299
2021-12-17
jrmu
'¨' => '¨',
300
2021-12-17
jrmu
'©' => '©',
301
2021-12-17
jrmu
'ª' => 'ª',
302
2021-12-17
jrmu
'«' => '«',
303
2021-12-17
jrmu
'¬' => '¬',
304
2021-12-17
jrmu
'­' => '­',
305
2021-12-17
jrmu
'®' => '®',
306
2021-12-17
jrmu
'¯' => '¯',
307
2021-12-17
jrmu
'°' => '°',
308
2021-12-17
jrmu
'±' => '±',
309
2021-12-17
jrmu
'²' => '²',
310
2021-12-17
jrmu
'³' => '³',
311
2021-12-17
jrmu
'´' => '´',
312
2021-12-17
jrmu
'µ' => 'µ',
313
2021-12-17
jrmu
'¶' => '¶',
314
2021-12-17
jrmu
'·' => '·',
315
2021-12-17
jrmu
'¸' => '¸',
316
2021-12-17
jrmu
'¹' => '¹',
317
2021-12-17
jrmu
'º' => 'º',
318
2021-12-17
jrmu
'»' => '»',
319
2021-12-17
jrmu
'¼' => '¼',
320
2021-12-17
jrmu
'½' => '½',
321
2021-12-17
jrmu
'¾' => '¾',
322
2021-12-17
jrmu
'¿' => '¿',
323
2021-12-17
jrmu
'À' => 'À',
324
2021-12-17
jrmu
'Á' => 'Á',
325
2021-12-17
jrmu
'Â' => 'Â',
326
2021-12-17
jrmu
'Ã' => 'Ã',
327
2021-12-17
jrmu
'Ä' => 'Ä',
328
2021-12-17
jrmu
'Å' => 'Å',
329
2021-12-17
jrmu
'Æ' => 'Æ',
330
2021-12-17
jrmu
'Ç' => 'Ç',
331
2021-12-17
jrmu
'È' => 'È',
332
2021-12-17
jrmu
'É' => 'É',
333
2021-12-17
jrmu
'Ê' => 'Ê',
334
2021-12-17
jrmu
'Ë' => 'Ë',
335
2021-12-17
jrmu
'Ì' => 'Ì',
336
2021-12-17
jrmu
'Í' => 'Í',
337
2021-12-17
jrmu
'Î' => 'Î',
338
2021-12-17
jrmu
'Ï' => 'Ï',
339
2021-12-17
jrmu
'Ð' => 'Ð',
340
2021-12-17
jrmu
'Ñ' => 'Ñ',
341
2021-12-17
jrmu
'Ò' => 'Ò',
342
2021-12-17
jrmu
'Ó' => 'Ó',
343
2021-12-17
jrmu
'Ô' => 'Ô',
344
2021-12-17
jrmu
'Õ' => 'Õ',
345
2021-12-17
jrmu
'Ö' => 'Ö',
346
2021-12-17
jrmu
'×' => '×',
347
2021-12-17
jrmu
'Ø' => 'Ø',
348
2021-12-17
jrmu
'Ù' => 'Ù',
349
2021-12-17
jrmu
'Ú' => 'Ú',
350
2021-12-17
jrmu
'Û' => 'Û',
351
2021-12-17
jrmu
'Ü' => 'Ü',
352
2021-12-17
jrmu
'Ý' => 'Ý',
353
2021-12-17
jrmu
'Þ' => 'Þ',
354
2021-12-17
jrmu
'ß' => 'ß',
355
2021-12-17
jrmu
'à' => 'à',
356
2021-12-17
jrmu
'á' => 'á',
357
2021-12-17
jrmu
'â' => 'â',
358
2021-12-17
jrmu
'ã' => 'ã',
359
2021-12-17
jrmu
'ä' => 'ä',
360
2021-12-17
jrmu
'å' => 'å',
361
2021-12-17
jrmu
'æ' => 'æ',
362
2021-12-17
jrmu
'ç' => 'ç',
363
2021-12-17
jrmu
'è' => 'è',
364
2021-12-17
jrmu
'é' => 'é',
365
2021-12-17
jrmu
'ê' => 'ê',
366
2021-12-17
jrmu
'ë' => 'ë',
367
2021-12-17
jrmu
'ì' => 'ì',
368
2021-12-17
jrmu
'í' => 'í',
369
2021-12-17
jrmu
'î' => 'î',
370
2021-12-17
jrmu
'ï' => 'ï',
371
2021-12-17
jrmu
'ð' => 'ð',
372
2021-12-17
jrmu
'ñ' => 'ñ',
373
2021-12-17
jrmu
'ò' => 'ò',
374
2021-12-17
jrmu
'ó' => 'ó',
375
2021-12-17
jrmu
'ô' => 'ô',
376
2021-12-17
jrmu
'õ' => 'õ',
377
2021-12-17
jrmu
'ö' => 'ö',
378
2021-12-17
jrmu
'÷' => '÷',
379
2021-12-17
jrmu
'ø' => 'ø',
380
2021-12-17
jrmu
'ù' => 'ù',
381
2021-12-17
jrmu
'ú' => 'ú',
382
2021-12-17
jrmu
'û' => 'û',
383
2021-12-17
jrmu
'ü' => 'ü',
384
2021-12-17
jrmu
'ý' => 'ý',
385
2021-12-17
jrmu
'þ' => 'þ',
386
2021-12-17
jrmu
'ÿ' => 'ÿ',
387
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
388
2021-12-17
jrmu
'"' => '"',
389
2021-12-17
jrmu
#'&' => '&#38;',
390
2021-12-17
jrmu
#'<' => '&#60;',
391
2021-12-17
jrmu
#'>' => '>',
392
2021-12-17
jrmu
''' => ''',
393
2021-12-17
jrmu
'Œ' => 'Œ',
394
2021-12-17
jrmu
'œ' => 'œ',
395
2021-12-17
jrmu
'Š' => 'Š',
396
2021-12-17
jrmu
'š' => 'š',
397
2021-12-17
jrmu
'Ÿ' => 'Ÿ',
398
2021-12-17
jrmu
'ˆ' => 'ˆ',
399
2021-12-17
jrmu
'˜' => '˜',
400
2021-12-17
jrmu
' ' => ' ',
401
2021-12-17
jrmu
' ' => ' ',
402
2021-12-17
jrmu
' ' => ' ',
403
2021-12-17
jrmu
'‌' => '‌',
404
2021-12-17
jrmu
'‍' => '‍',
405
2021-12-17
jrmu
'‎' => '‎',
406
2021-12-17
jrmu
'‏' => '‏',
407
2021-12-17
jrmu
'–' => '–',
408
2021-12-17
jrmu
'—' => '—',
409
2021-12-17
jrmu
'‘' => '‘',
410
2021-12-17
jrmu
'’' => '’',
411
2021-12-17
jrmu
'‚' => '‚',
412
2021-12-17
jrmu
'“' => '“',
413
2021-12-17
jrmu
'”' => '”',
414
2021-12-17
jrmu
'„' => '„',
415
2021-12-17
jrmu
'†' => '†',
416
2021-12-17
jrmu
'‡' => '‡',
417
2021-12-17
jrmu
'‰' => '‰',
418
2021-12-17
jrmu
'‹' => '‹',
419
2021-12-17
jrmu
'›' => '›',
420
2021-12-17
jrmu
'€' => '€',
421
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
422
2021-12-17
jrmu
'ƒ' => 'ƒ',
423
2021-12-17
jrmu
'Α' => 'Α',
424
2021-12-17
jrmu
'Β' => 'Β',
425
2021-12-17
jrmu
'Γ' => 'Γ',
426
2021-12-17
jrmu
'Δ' => 'Δ',
427
2021-12-17
jrmu
'Ε' => 'Ε',
428
2021-12-17
jrmu
'Ζ' => 'Ζ',
429
2021-12-17
jrmu
'Η' => 'Η',
430
2021-12-17
jrmu
'Θ' => 'Θ',
431
2021-12-17
jrmu
'Ι' => 'Ι',
432
2021-12-17
jrmu
'Κ' => 'Κ',
433
2021-12-17
jrmu
'Λ' => 'Λ',
434
2021-12-17
jrmu
'Μ' => 'Μ',
435
2021-12-17
jrmu
'Ν' => 'Ν',
436
2021-12-17
jrmu
'Ξ' => 'Ξ',
437
2021-12-17
jrmu
'Ο' => 'Ο',
438
2021-12-17
jrmu
'Π' => 'Π',
439
2021-12-17
jrmu
'Ρ' => 'Ρ',
440
2021-12-17
jrmu
'Σ' => 'Σ',
441
2021-12-17
jrmu
'Τ' => 'Τ',
442
2021-12-17
jrmu
'Υ' => 'Υ',
443
2021-12-17
jrmu
'Φ' => 'Φ',
444
2021-12-17
jrmu
'Χ' => 'Χ',
445
2021-12-17
jrmu
'Ψ' => 'Ψ',
446
2021-12-17
jrmu
'Ω' => 'Ω',
447
2021-12-17
jrmu
'α' => 'α',
448
2021-12-17
jrmu
'β' => 'β',
449
2021-12-17
jrmu
'γ' => 'γ',
450
2021-12-17
jrmu
'δ' => 'δ',
451
2021-12-17
jrmu
'ε' => 'ε',
452
2021-12-17
jrmu
'ζ' => 'ζ',
453
2021-12-17
jrmu
'η' => 'η',
454
2021-12-17
jrmu
'θ' => 'θ',
455
2021-12-17
jrmu
'ι' => 'ι',
456
2021-12-17
jrmu
'κ' => 'κ',
457
2021-12-17
jrmu
'λ' => 'λ',
458
2021-12-17
jrmu
'μ' => 'μ',
459
2021-12-17
jrmu
'ν' => 'ν',
460
2021-12-17
jrmu
'ξ' => 'ξ',
461
2021-12-17
jrmu
'ο' => 'ο',
462
2021-12-17
jrmu
'π' => 'π',
463
2021-12-17
jrmu
'ρ' => 'ρ',
464
2021-12-17
jrmu
'ς' => 'ς',
465
2021-12-17
jrmu
'σ' => 'σ',
466
2021-12-17
jrmu
'τ' => 'τ',
467
2021-12-17
jrmu
'υ' => 'υ',
468
2021-12-17
jrmu
'φ' => 'φ',
469
2021-12-17
jrmu
'χ' => 'χ',
470
2021-12-17
jrmu
'ψ' => 'ψ',
471
2021-12-17
jrmu
'ω' => 'ω',
472
2021-12-17
jrmu
'ϑ' => 'ϑ',
473
2021-12-17
jrmu
'ϒ' => 'ϒ',
474
2021-12-17
jrmu
'ϖ' => 'ϖ',
475
2021-12-17
jrmu
'•' => '•',
476
2021-12-17
jrmu
'…' => '…',
477
2021-12-17
jrmu
'′' => '′',
478
2021-12-17
jrmu
'″' => '″',
479
2021-12-17
jrmu
'‾' => '‾',
480
2021-12-17
jrmu
'⁄' => '⁄',
481
2021-12-17
jrmu
'℘' => '℘',
482
2021-12-17
jrmu
'ℑ' => 'ℑ',
483
2021-12-17
jrmu
'ℜ' => 'ℜ',
484
2021-12-17
jrmu
'™' => '™',
485
2021-12-17
jrmu
'ℵ' => 'ℵ',
486
2021-12-17
jrmu
'←' => '←',
487
2021-12-17
jrmu
'↑' => '↑',
488
2021-12-17
jrmu
'→' => '→',
489
2021-12-17
jrmu
'↓' => '↓',
490
2021-12-17
jrmu
'↔' => '↔',
491
2021-12-17
jrmu
'↵' => '↵',
492
2021-12-17
jrmu
'⇐' => '⇐',
493
2021-12-17
jrmu
'⇑' => '⇑',
494
2021-12-17
jrmu
'⇒' => '⇒',
495
2021-12-17
jrmu
'⇓' => '⇓',
496
2021-12-17
jrmu
'⇔' => '⇔',
497
2021-12-17
jrmu
'∀' => '∀',
498
2021-12-17
jrmu
'∂' => '∂',
499
2021-12-17
jrmu
'∃' => '∃',
500
2021-12-17
jrmu
'∅' => '∅',
501
2021-12-17
jrmu
'∇' => '∇',
502
2021-12-17
jrmu
'∈' => '∈',
503
2021-12-17
jrmu
'∉' => '∉',
504
2021-12-17
jrmu
'∋' => '∋',
505
2021-12-17
jrmu
'∏' => '∏',
506
2021-12-17
jrmu
'∑' => '∑',
507
2021-12-17
jrmu
'−' => '−',
508
2021-12-17
jrmu
'∗' => '∗',
509
2021-12-17
jrmu
'√' => '√',
510
2021-12-17
jrmu
'∝' => '∝',
511
2021-12-17
jrmu
'∞' => '∞',
512
2021-12-17
jrmu
'∠' => '∠',
513
2021-12-17
jrmu
'∧' => '∧',
514
2021-12-17
jrmu
'∨' => '∨',
515
2021-12-17
jrmu
'∩' => '∩',
516
2021-12-17
jrmu
'∪' => '∪',
517
2021-12-17
jrmu
'∫' => '∫',
518
2021-12-17
jrmu
'∴' => '∴',
519
2021-12-17
jrmu
'∼' => '∼',
520
2021-12-17
jrmu
'≅' => '≅',
521
2021-12-17
jrmu
'≈' => '≈',
522
2021-12-17
jrmu
'≠' => '≠',
523
2021-12-17
jrmu
'≡' => '≡',
524
2021-12-17
jrmu
'≤' => '≤',
525
2021-12-17
jrmu
'≥' => '≥',
526
2021-12-17
jrmu
'⊂' => '⊂',
527
2021-12-17
jrmu
'⊃' => '⊃',
528
2021-12-17
jrmu
'⊄' => '⊄',
529
2021-12-17
jrmu
'⊆' => '⊆',
530
2021-12-17
jrmu
'⊇' => '⊇',
531
2021-12-17
jrmu
'⊕' => '⊕',
532
2021-12-17
jrmu
'⊗' => '⊗',
533
2021-12-17
jrmu
'⊥' => '⊥',
534
2021-12-17
jrmu
'⋅' => '⋅',
535
2021-12-17
jrmu
'⌈' => '⌈',
536
2021-12-17
jrmu
'⌉' => '⌉',
537
2021-12-17
jrmu
'⌊' => '⌊',
538
2021-12-17
jrmu
'⌋' => '⌋',
539
2021-12-17
jrmu
'⟨' => '〈',
540
2021-12-17
jrmu
'⟩' => '〉',
541
2021-12-17
jrmu
'◊' => '◊',
542
2021-12-17
jrmu
'♠' => '♠',
543
2021-12-17
jrmu
'♣' => '♣',
544
2021-12-17
jrmu
'♥' => '♥',
545
2021-12-17
jrmu
'♦' => '♦'));