/usr/share/php/arc/extractors/ARC2_MicroformatsExtractor.php is in libarc-php 2~20101006-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | <?php
/*
homepage: http://arc.semsol.org/
license: http://arc.semsol.org/license
class: ARC2 microformats Extractor
author: Benjamin Nowack
version: 2010-11-16
*/
ARC2::inc('ARC2_PoshRdfExtractor');
class ARC2_MicroformatsExtractor extends ARC2_PoshRdfExtractor {
function __construct($a, &$caller) {
parent::__construct($a, $caller);
}
function __init() {
parent::__init();
$this->terms = $this->getTerms();
$this->ns_prefix = 'mf';
$this->a['ns']['mf'] = 'http://poshrdf.org/ns/mf#';
$this->caller->detected_formats['posh-rdf'] = 1;
}
/* */
function preProcessNode($n) {
if (!$n) return $n;
/* remove existing poshRDF hooks */
if (!is_array($n['a'])) $n['a'] = array();
$n['a']['class'] = isset($n['a']['class']) ? preg_replace('/\s?rdf\-(s|p|o|o-xml)/', '', $n['a']['class']): '';
if (!isset($n['a']['rel'])) $n['a']['rel'] = '';
/* inject poshRDF hooks */
foreach ($this->terms as $term => $infos) {
if ((!in_array('rel', $infos) && $this->hasClass($n, $term)) || $this->hasRel($n, $term)) {
if ($this->v('scope', '', $infos)) $infos[] = 'p';
foreach (array('s', 'p', 'o', 'o-xml') as $type) {
if (in_array($type, $infos)) {
$n['a']['class'] .= ' rdf-' . $type;
$n['a']['class'] = preg_replace('/(^|\s)' . $term . '(\s|$)/s', '\\1mf-' . $term . '\\2', $n['a']['class']);
$n['a']['rel'] = preg_replace('/(^|\s)' . $term . '(\s|$)/s', '\\1mf-' . $term . '\\2', $n['a']['rel']);
}
}
}
}
$n['a']['class m'] = preg_split('/ /', $n['a']['class']);
$n['a']['rel m'] = preg_split('/ /', $n['a']['rel']);
return $n;
}
function getPredicates($n, $ns) {
$ns = array('mf' => $ns['mf']);
return parent::getPredicates($n, $ns);
}
function tweakObject($o, $p, $ct) {
$ns = $ct['ns']['mf'];
/* rel-tag, skill => extract from URL */
if (in_array($p, array($ns . 'tag', $ns . 'skill'))) {
$o = preg_replace('/^.*\/([^\/]+)/', '\\1', trim($o, '/'));
$o = urldecode(rawurldecode($o));
}
return $o;
}
/* */
function getTerms() {
/* no need to define 'p' if scope is not empty */
return array(
'acquaintance' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'additional-name' => array('o', 'scope' => array('n')),
'adr' => array('s', 'o', 'scope' => array('_doc', 'vcard')),
'affiliation' => array('s', 'o', 'scope' => array('hresume')),
'author' => array('s', 'o', 'scope' => array('hentry')),
'bday' => array('o', 'scope' => array('vcard')),
'bio' => array('o', 'scope' => array('vcard')),
'best' => array('o', 'scope' => array('hreview')),
'bookmark' => array('o', 'scope' => array('_doc', 'hentry', 'hreview')),
'class' => array('o', 'scope' => array('vcard', 'vevent')),
'category' => array('o', 's', 'scope' => array('vcard', 'vevent')),
'child' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'co-resident' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'co-worker' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'colleague' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'contact' => array('o', 'scope' => array('_doc', 'hresume', 'hentry')),
'country-name' => array('o', 'scope' => array('adr')),
'crush' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'date' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'description' => array('o', 'scope' => array('vevent', 'hreview', 'xfolkentry')),
'directory' => array('o', 'rel', 'scope' => array('_doc', 'hfeed', 'hentry', 'hreview')),
'dtend' => array('o', 'scope' => array('vevent')),
'dtreviewed' => array('o', 'scope' => array('hreview')),
'dtstamp' => array('o', 'scope' => array('vevent')),
'dtstart' => array('o', 'scope' => array('vevent')),
'duration' => array('o', 'scope' => array('vevent')),
'education' => array('s', 'o', 'scope' => array('hresume')),
'email' => array('s', 'o', 'scope' => array('vcard')),
'entry-title' => array('o', 'scope' => array('hentry')),
'entry-content' => array('o-xml', 'scope' => array('hentry')),
'entry-summary' => array('o', 'scope' => array('hentry')),
'experience' => array('s', 'o', 'scope' => array('hresume')),
'extended-address' => array('o', 'scope' => array('adr')),
'family-name' => array('o', 'scope' => array('n')),
'fn' => array('o', 'plain', 'scope' => array('vcard', 'item')),
'friend' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'geo' => array('s', 'scope' => array('_doc', 'vcard', 'vevent')),
'given-name' => array('o', 'scope' => array('n')),
'hentry' => array('s', 'o', 'scope' => array('_doc', 'hfeed')),
'hfeed' => array('s', 'scope' => array('_doc')),
'honorific-prefix' => array('o', 'scope' => array('n')),
'honorific-suffix' => array('o', 'scope' => array('n')),
'hresume' => array('s', 'scope' => array('_doc')),
'hreview' => array('s', 'scope' => array('_doc')),
'item' => array('s', 'scope' => array('hreview')),
'key' => array('o', 'scope' => array('vcard')),
'kin' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'label' => array('o', 'scope' => array('vcard')),
'last-modified' => array('o', 'scope' => array('vevent')),
'latitude' => array('o', 'scope' => array('geo')),
'license' => array('o', 'rel', 'scope' => array('_doc', 'hfeed', 'hentry', 'hreview')),
'locality' => array('o', 'scope' => array('adr')),
'location' => array('o', 'scope' => array('vevent')),
'logo' => array('o', 'scope' => array('vcard')),
'longitude' => array('o', 'scope' => array('geo')),
'mailer' => array('o', 'scope' => array('vcard')),
'me' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'met' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'muse' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'n' => array('s', 'o', 'scope' => array('vcard')),
'neighbor' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'nickname' => array('o', 'plain', 'scope' => array('vcard')),
'nofollow' => array('o', 'rel', 'scope' => array('_doc')),
'note' => array('o', 'scope' => array('vcard')),
'org' => array('o', 'xplain', 'scope' => array('vcard')),
'parent' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'permalink' => array('o', 'scope' => array('hreview')),
'photo' => array('o', 'scope' => array('vcard', 'item')),
'post-office-box' => array('o', 'scope' => array('adr')),
'postal-code' => array('o', 'scope' => array('adr')),
'publication' => array('s', 'o', 'scope' => array('hresume')),
'published' => array('o', 'scope' => array('hentry')),
'rating' => array('o', 'scope' => array('hreview')),
'region' => array('o', 'scope' => array('adr')),
'rev' => array('o', 'scope' => array('vcard')),
'reviewer' => array('s', 'o', 'scope' => array('hreview')),
'role' => array('o', 'plain', 'scope' => array('vcard')),
'sibling' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'skill' => array('o', 'scope' => array('hresume')),
'sort-string' => array('o', 'scope' => array('vcard')),
'sound' => array('o', 'scope' => array('vcard')),
'spouse' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'status' => array('o', 'plain', 'scope' => array('vevent')),
'street-address' => array('o', 'scope' => array('adr')),
'summary' => array('o', 'scope' => array('vevent', 'hreview', 'hresume')),
'sweetheart' => array('o', 'rel', 'scope' => array('_doc', 'hentry')),
'tag' => array('o', 'rel', 'scope' => array('_doc', 'category', 'hfeed', 'hentry', 'skill', 'hreview', 'xfolkentry')),
'taggedlink' => array('o', 'scope' => array('xfolkentry')),
'title' => array('o', 'scope' => array('vcard')),
'type' => array('o', 'scope' => array('adr', 'email', 'hreview', 'tel')),
'tz' => array('o', 'scope' => array('vcard')),
'uid' => array('o', 'scope' => array('vcard', 'vevent')),
'updated' => array('o', 'scope' => array('hentry')),
'url' => array('o', 'scope' => array('vcard', 'vevent', 'item')),
'value' => array('o', 'scope' => array('email', 'adr', 'tel')),
'vcard' => array('s', 'scope' => array('author', 'reviewer', 'affiliation', 'contact')),
'version' => array('o', 'scope' => array('hreview')),
'vevent' => array('s', 'scope' => array('_doc')),
'worst' => array('o', 'scope' => array('hreview')),
'xfolkentry' => array('s', 'scope' => array('_doc')),
);
}
/* */
}
|