@@ -3,7 +3,7 @@ discard block |
||
| 3 | 3 | class PluginRegister { |
| 4 | 4 | private $requestedPlugins; |
| 5 | 5 | |
| 6 | - public function __construct($requestedPlugins=array()) { |
|
| 6 | + public function __construct($requestedPlugins = array()) { |
|
| 7 | 7 | $this->requestedPlugins = $requestedPlugins; |
| 8 | 8 | } |
| 9 | 9 | |
@@ -31,7 +31,7 @@ discard block |
||
| 31 | 31 | * @param boolean $raw interpret $type values as raw text instead of files |
| 32 | 32 | * @return array |
| 33 | 33 | */ |
| 34 | - private function filterPlugins($type, $raw=false) { |
|
| 34 | + private function filterPlugins($type, $raw = false) { |
|
| 35 | 35 | $plugins = $this->getPlugins(); |
| 36 | 36 | $ret = array(); |
| 37 | 37 | if (!empty($plugins)) { |
@@ -43,7 +43,7 @@ discard block |
||
| 43 | 43 | } |
| 44 | 44 | else { |
| 45 | 45 | foreach ($files[$type] as $file) { |
| 46 | - array_push($ret[$name], 'plugins/' . $name . '/' . $file); |
|
| 46 | + array_push($ret[$name], 'plugins/'.$name.'/'.$file); |
|
| 47 | 47 | } |
| 48 | 48 | } |
| 49 | 49 | } |
@@ -74,7 +74,7 @@ discard block |
||
| 74 | 74 | * @param array $names the plugin name strings (foldernames) in an array |
| 75 | 75 | * @return array |
| 76 | 76 | */ |
| 77 | - public function getPluginsJS($names=null) { |
|
| 77 | + public function getPluginsJS($names = null) { |
|
| 78 | 78 | if ($names) { |
| 79 | 79 | $names = array_merge($this->requestedPlugins, $names); |
| 80 | 80 | return $this->filterPluginsByName('js', $names); |
@@ -87,7 +87,7 @@ discard block |
||
| 87 | 87 | * @param array $names the plugin name strings (foldernames) in an array |
| 88 | 88 | * @return array |
| 89 | 89 | */ |
| 90 | - public function getPluginsCSS($names=null) { |
|
| 90 | + public function getPluginsCSS($names = null) { |
|
| 91 | 91 | if ($names) { |
| 92 | 92 | $names = array_merge($this->requestedPlugins, $names); |
| 93 | 93 | return $this->filterPluginsByName('css', $names); |
@@ -100,7 +100,7 @@ discard block |
||
| 100 | 100 | * @param array $names the plugin name strings (foldernames) in an array |
| 101 | 101 | * @return array |
| 102 | 102 | */ |
| 103 | - public function getPluginsTemplates($names=null) { |
|
| 103 | + public function getPluginsTemplates($names = null) { |
|
| 104 | 104 | if ($names) { |
| 105 | 105 | $names = array_merge($this->requestedPlugins, $names); |
| 106 | 106 | return $this->filterPluginsByName('templates', $names); |
@@ -113,15 +113,15 @@ discard block |
||
| 113 | 113 | * @param array $names the plugin name strings (foldernames) in an array |
| 114 | 114 | * @return array |
| 115 | 115 | */ |
| 116 | - public function getTemplates($names=null) { |
|
| 116 | + public function getTemplates($names = null) { |
|
| 117 | 117 | $templateStrings = array(); |
| 118 | 118 | $plugins = $this->getPluginsTemplates($names); |
| 119 | 119 | foreach ($plugins as $folder => $templates) { |
| 120 | 120 | foreach ($templates as $path) { |
| 121 | 121 | if (file_exists($path)) { |
| 122 | 122 | $filename = explode('/', $path); |
| 123 | - $filename = $filename[sizeof($filename)-1]; |
|
| 124 | - $id = $folder . '-' . substr($filename, 0 , (strrpos($filename, "."))); |
|
| 123 | + $filename = $filename[sizeof($filename) - 1]; |
|
| 124 | + $id = $folder.'-'.substr($filename, 0, (strrpos($filename, "."))); |
|
| 125 | 125 | $templateStrings[$id] = file_get_contents($path); |
| 126 | 126 | } |
| 127 | 127 | } |
@@ -19,7 +19,7 @@ |
||
| 19 | 19 | /** |
| 20 | 20 | * Wraps apc_store() and apcu_store() |
| 21 | 21 | */ |
| 22 | - public function store($key, $value, $ttl=3600) { |
|
| 22 | + public function store($key, $value, $ttl = 3600) { |
|
| 23 | 23 | if (function_exists('apcu_store')) { |
| 24 | 24 | return apcu_store($key, $value, $ttl); |
| 25 | 25 | } |
@@ -24,7 +24,7 @@ discard block |
||
| 24 | 24 | { |
| 25 | 25 | $label = is_string($this->getLabel()) ? $this->getLabel() : $this->getLabel()->getValue(); |
| 26 | 26 | if ($this->vocab->getConfig()->sortByNotation()) { |
| 27 | - $label = $this->getNotation() . $label; |
|
| 27 | + $label = $this->getNotation().$label; |
|
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | return $label; |
@@ -47,9 +47,9 @@ discard block |
||
| 47 | 47 | } |
| 48 | 48 | // We need to check all the labels in case one of them matches a subtag of the current language |
| 49 | 49 | if ($this->resource->allLiterals('skos:prefLabel')) { |
| 50 | - foreach($this->resource->allLiterals('skos:prefLabel') as $label) { |
|
| 50 | + foreach ($this->resource->allLiterals('skos:prefLabel') as $label) { |
|
| 51 | 51 | // the label lang code is a subtag of the UI lang eg. en-GB - create a new literal with the main language |
| 52 | - if ($label !== null && strpos($label->getLang(), $fallback . '-') === 0) { |
|
| 52 | + if ($label !== null && strpos($label->getLang(), $fallback.'-') === 0) { |
|
| 53 | 53 | return EasyRdf\Literal::create($label, $fallback); |
| 54 | 54 | } |
| 55 | 55 | } |
@@ -137,7 +137,7 @@ discard block |
||
| 137 | 137 | public function getReifiedPropertyValues() { |
| 138 | 138 | $ret = array(); |
| 139 | 139 | $props = $this->resource->propertyUris(); |
| 140 | - foreach($props as $prop) { |
|
| 140 | + foreach ($props as $prop) { |
|
| 141 | 141 | $prop = (EasyRdf\RdfNamespace::shorten($prop) !== null) ? EasyRdf\RdfNamespace::shorten($prop) : $prop; |
| 142 | 142 | foreach ($this->resource->allLiterals($prop) as $val) { |
| 143 | 143 | if ($prop !== 'rdf:value') { // shown elsewhere |
@@ -42,7 +42,7 @@ |
||
| 42 | 42 | * @param string $default default value |
| 43 | 43 | * @param string $lang preferred language for the literal |
| 44 | 44 | */ |
| 45 | - protected function getLiteral($property, $default=null, $lang=null) |
|
| 45 | + protected function getLiteral($property, $default = null, $lang = null) |
|
| 46 | 46 | { |
| 47 | 47 | if (!isset($lang)) {; |
| 48 | 48 | $lang = $this->getEnvLang(); |
@@ -84,7 +84,7 @@ |
||
| 84 | 84 | foreach (explode(' ', GLOBAL_PLUGINS) as $pluginName) { |
| 85 | 85 | $globalPluginsArray[] = "\"$pluginName\""; |
| 86 | 86 | } |
| 87 | - $globalPlugins = " " . implode(', ', $globalPluginsArray) . " "; |
|
| 87 | + $globalPlugins = " ".implode(', ', $globalPluginsArray)." "; |
|
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | # print the prefixes |
@@ -22,7 +22,7 @@ discard block |
||
| 22 | 22 | * @param string $prop property type eg. 'rdf:type'. |
| 23 | 23 | * @param string $label |
| 24 | 24 | */ |
| 25 | - public function __construct($prop, $label, $super=null, $sort_by_notation=false) |
|
| 25 | + public function __construct($prop, $label, $super = null, $sort_by_notation = false) |
|
| 26 | 26 | { |
| 27 | 27 | $this->prop = $prop; |
| 28 | 28 | $this->label = $label; |
@@ -61,7 +61,7 @@ discard block |
||
| 61 | 61 | */ |
| 62 | 62 | public function getDescription() |
| 63 | 63 | { |
| 64 | - $helpprop = $this->prop . "_help"; |
|
| 64 | + $helpprop = $this->prop."_help"; |
|
| 65 | 65 | |
| 66 | 66 | return gettext($helpprop); // can't use string constant, it'd be picked up by xgettext |
| 67 | 67 | } |
@@ -80,7 +80,7 @@ discard block |
||
| 80 | 80 | |
| 81 | 81 | public function addValue($value) |
| 82 | 82 | { |
| 83 | - $this->values[$value->getNotation() . $value->getLabel() . $value->getUri()] = $value; |
|
| 83 | + $this->values[$value->getNotation().$value->getLabel().$value->getUri()] = $value; |
|
| 84 | 84 | $this->is_sorted = false; |
| 85 | 85 | } |
| 86 | 86 | |
@@ -88,7 +88,7 @@ discard block |
||
| 88 | 88 | { |
| 89 | 89 | if (!empty($this->values)) { |
| 90 | 90 | uksort($this->values, function($a, $b) { |
| 91 | - return $this->sort_by_notation ? strnatcasecmp($a, $b) : strcoll(strtolower($a),strtolower($b)); |
|
| 91 | + return $this->sort_by_notation ? strnatcasecmp($a, $b) : strcoll(strtolower($a), strtolower($b)); |
|
| 92 | 92 | }); |
| 93 | 93 | } |
| 94 | 94 | $this->is_sorted = true; |
@@ -11,7 +11,7 @@ discard block |
||
| 11 | 11 | public function getPrefLabel() { |
| 12 | 12 | $label = null; |
| 13 | 13 | $labels = $this->resource->allResources('skosxl:prefLabel'); |
| 14 | - foreach($labels as $labres) { |
|
| 14 | + foreach ($labels as $labres) { |
|
| 15 | 15 | $label = $labres->getLiteral('skosxl:literalForm'); |
| 16 | 16 | if ($label->getLang() == $this->clang) { |
| 17 | 17 | return $label; |
@@ -23,7 +23,7 @@ discard block |
||
| 23 | 23 | public function getProperties() { |
| 24 | 24 | $ret = array(); |
| 25 | 25 | $props = $this->resource->properties(); |
| 26 | - foreach($props as $prop) { |
|
| 26 | + foreach ($props as $prop) { |
|
| 27 | 27 | if ($prop !== 'skosxl:prefLabel') { |
| 28 | 28 | $ret[$prop] = $this->resource->get($prop); |
| 29 | 29 | } |
@@ -137,9 +137,9 @@ discard block |
||
| 137 | 137 | return $this->resource->label($fallback); |
| 138 | 138 | } |
| 139 | 139 | // We need to check all the labels in case one of them matches a subtag of the current language |
| 140 | - foreach($this->resource->allLiterals('skos:prefLabel') as $label) { |
|
| 140 | + foreach ($this->resource->allLiterals('skos:prefLabel') as $label) { |
|
| 141 | 141 | // the label lang code is a subtag of the UI lang eg. en-GB - create a new literal with the main language |
| 142 | - if ($label !== null && strpos($label->getLang(), $fallback . '-') === 0) { |
|
| 142 | + if ($label !== null && strpos($label->getLang(), $fallback.'-') === 0) { |
|
| 143 | 143 | return EasyRdf\Literal::create($label, $fallback); |
| 144 | 144 | } |
| 145 | 145 | } |
@@ -160,7 +160,7 @@ discard block |
||
| 160 | 160 | |
| 161 | 161 | public function hasXlLabel($prop = 'prefLabel') |
| 162 | 162 | { |
| 163 | - if ($this->resource->hasProperty('skosxl:' . $prop)) { |
|
| 163 | + if ($this->resource->hasProperty('skosxl:'.$prop)) { |
|
| 164 | 164 | return true; |
| 165 | 165 | } |
| 166 | 166 | return false; |
@@ -169,7 +169,7 @@ discard block |
||
| 169 | 169 | public function getXlLabel() |
| 170 | 170 | { |
| 171 | 171 | $labels = $this->resource->allResources('skosxl:prefLabel'); |
| 172 | - foreach($labels as $labres) { |
|
| 172 | + foreach ($labels as $labres) { |
|
| 173 | 173 | $label = $labres->getLiteral('skosxl:literalForm'); |
| 174 | 174 | if ($label !== null && $label->getLang() == $this->clang) { |
| 175 | 175 | return new LabelSkosXL($this->model, $labres); |
@@ -276,7 +276,7 @@ discard block |
||
| 276 | 276 | // catch external subjects that have $res as object |
| 277 | 277 | $extSubjects = $exGraph->resourcesMatching("schema:about", $res); |
| 278 | 278 | |
| 279 | - $propList = array_unique(array_merge( |
|
| 279 | + $propList = array_unique(array_merge( |
|
| 280 | 280 | $this->DEFAULT_EXT_PROPERTIES, |
| 281 | 281 | $this->getVocab()->getConfig()->getExtProperties(), |
| 282 | 282 | $this->getVocab()->getConfig()->getPlugins()->getExtProperties() |
@@ -301,7 +301,7 @@ discard block |
||
| 301 | 301 | * @param string[] $seen Processed resources so far |
| 302 | 302 | * @param string[] $props (optional) limit to these property URIs |
| 303 | 303 | */ |
| 304 | - private function addExternalTriplesToGraph($res, &$seen, $props=null) |
|
| 304 | + private function addExternalTriplesToGraph($res, &$seen, $props = null) |
|
| 305 | 305 | { |
| 306 | 306 | if (array_key_exists($res->getUri(), $seen) && $seen[$res->getUri()] === 0) { |
| 307 | 307 | return; |
@@ -331,7 +331,7 @@ discard block |
||
| 331 | 331 | */ |
| 332 | 332 | private function addPropertyValues($res, $prop, &$seen) |
| 333 | 333 | { |
| 334 | - $resList = $res->allResources('<' . $prop . '>'); |
|
| 334 | + $resList = $res->allResources('<'.$prop.'>'); |
|
| 335 | 335 | |
| 336 | 336 | foreach ($resList as $res2) { |
| 337 | 337 | if ($res2->isBNode()) { |
@@ -341,7 +341,7 @@ discard block |
||
| 341 | 341 | $this->addResourceReifications($res, $prop, $res2, $seen); |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | - $litList = $res->allLiterals('<' . $prop . '>'); |
|
| 344 | + $litList = $res->allLiterals('<'.$prop.'>'); |
|
| 345 | 345 | |
| 346 | 346 | foreach ($litList as $lit) { |
| 347 | 347 | $this->graph->addLiteral($res, $prop, $lit); |
@@ -518,15 +518,15 @@ discard block |
||
| 518 | 518 | // if not found in current vocabulary, look up in the default graph to be able |
| 519 | 519 | // to read an ontology loaded in a separate graph |
| 520 | 520 | // note that this imply that the property has an rdf:type declared for the query to work |
| 521 | - if(!$is_well_known && !$proplabel) { |
|
| 521 | + if (!$is_well_known && !$proplabel) { |
|
| 522 | 522 | $envLangLabels = $this->model->getDefaultSparql()->queryLabel($longUri, $this->getEnvLang()); |
| 523 | 523 | |
| 524 | 524 | $defaultPropLabel = $this->model->getDefaultSparql()->queryLabel($longUri, ''); |
| 525 | 525 | |
| 526 | - if($envLangLabels) { |
|
| 526 | + if ($envLangLabels) { |
|
| 527 | 527 | $proplabel = $envLangLabels[$this->getEnvLang()]; |
| 528 | 528 | } else { |
| 529 | - if($defaultPropLabel) { |
|
| 529 | + if ($defaultPropLabel) { |
|
| 530 | 530 | $proplabel = $defaultPropLabel['']; |
| 531 | 531 | } |
| 532 | 532 | } |
@@ -539,12 +539,12 @@ discard block |
||
| 539 | 539 | } |
| 540 | 540 | |
| 541 | 541 | // also look up superprops in the default graph if not found in current vocabulary |
| 542 | - if(!$is_well_known && (!$superprops || empty($superprops))) { |
|
| 542 | + if (!$is_well_known && (!$superprops || empty($superprops))) { |
|
| 543 | 543 | $superprops = $this->model->getDefaultSparql()->querySuperProperties($longUri); |
| 544 | 544 | } |
| 545 | 545 | |
| 546 | 546 | // we're reading only one super property, even if there are multiple ones |
| 547 | - $superprop = ($superprops)?$superprops[0]:null; |
|
| 547 | + $superprop = ($superprops) ? $superprops[0] : null; |
|
| 548 | 548 | if ($superprop) { |
| 549 | 549 | $superprop = EasyRdf\RdfNamespace::shorten($superprop) ? EasyRdf\RdfNamespace::shorten($superprop) : $superprop; |
| 550 | 550 | } |
@@ -557,7 +557,7 @@ discard block |
||
| 557 | 557 | } |
| 558 | 558 | |
| 559 | 559 | // searching for subproperties of literals too |
| 560 | - if($superprops) { |
|
| 560 | + if ($superprops) { |
|
| 561 | 561 | foreach ($superprops as $subi) { |
| 562 | 562 | $suburi = EasyRdf\RdfNamespace::shorten($subi) ? EasyRdf\RdfNamespace::shorten($subi) : $subi; |
| 563 | 563 | $duplicates[$suburi] = $prop; |
@@ -677,14 +677,14 @@ discard block |
||
| 677 | 677 | |
| 678 | 678 | // making a human readable string from the timestamps |
| 679 | 679 | if ($created != '') { |
| 680 | - $ret = gettext('skosmos:created') . ' ' . (Punic\Calendar::formatDate($created, 'short')); |
|
| 680 | + $ret = gettext('skosmos:created').' '.(Punic\Calendar::formatDate($created, 'short')); |
|
| 681 | 681 | } |
| 682 | 682 | |
| 683 | 683 | if ($modified != '') { |
| 684 | 684 | if ($created != '') { |
| 685 | - $ret .= ', ' . gettext('skosmos:modified') . ' ' . (Punic\Calendar::formatDate($modified, 'short')); |
|
| 685 | + $ret .= ', '.gettext('skosmos:modified').' '.(Punic\Calendar::formatDate($modified, 'short')); |
|
| 686 | 686 | } else { |
| 687 | - $ret .= ' ' . ucfirst(gettext('skosmos:modified')) . ' ' . (Punic\Calendar::formatDate($modified, 'short')); |
|
| 687 | + $ret .= ' '.ucfirst(gettext('skosmos:modified')).' '.(Punic\Calendar::formatDate($modified, 'short')); |
|
| 688 | 688 | } |
| 689 | 689 | |
| 690 | 690 | } |
@@ -692,12 +692,12 @@ discard block |
||
| 692 | 692 | trigger_error($e->getMessage(), E_USER_WARNING); |
| 693 | 693 | $ret = ''; |
| 694 | 694 | if ($this->resource->get('dc:modified')) { |
| 695 | - $modified = (string) $this->resource->get('dc:modified'); |
|
| 696 | - $ret = gettext('skosmos:modified') . ' ' . $modified; |
|
| 695 | + $modified = (string)$this->resource->get('dc:modified'); |
|
| 696 | + $ret = gettext('skosmos:modified').' '.$modified; |
|
| 697 | 697 | } |
| 698 | 698 | if ($this->resource->get('dc:created')) { |
| 699 | - $created .= (string) $this->resource->get('dc:created'); |
|
| 700 | - $ret .= ' ' . gettext('skosmos:created') . ' ' . $created; |
|
| 699 | + $created .= (string)$this->resource->get('dc:created'); |
|
| 700 | + $ret .= ' '.gettext('skosmos:created').' '.$created; |
|
| 701 | 701 | } |
| 702 | 702 | } |
| 703 | 703 | return $ret; |
@@ -769,7 +769,7 @@ discard block |
||
| 769 | 769 | $groups[$collLabel] = array($group); |
| 770 | 770 | |
| 771 | 771 | $res = $collection; |
| 772 | - while($super = $this->graph->resourcesMatching('skos:member', $res)) { |
|
| 772 | + while ($super = $this->graph->resourcesMatching('skos:member', $res)) { |
|
| 773 | 773 | foreach ($super as $res) { |
| 774 | 774 | $superprop = new ConceptPropertyValue($this->model, $this->vocab, $res, 'skosmos:memberOfSuper', $this->clang); |
| 775 | 775 | array_unshift($groups[$collLabel], $superprop); |
@@ -811,7 +811,7 @@ discard block |
||
| 811 | 811 | $ret = array(); |
| 812 | 812 | foreach ($labels as $lit) { |
| 813 | 813 | // filtering away subsets of the current language eg. en vs en-GB |
| 814 | - if ($lit->getLang() != $this->clang && strpos($lit->getLang(), $this->getEnvLang() . '-') !== 0) { |
|
| 814 | + if ($lit->getLang() != $this->clang && strpos($lit->getLang(), $this->getEnvLang().'-') !== 0) { |
|
| 815 | 815 | $prop = in_array($lit, $prefLabels) ? 'skos:prefLabel' : 'skos:altLabel'; |
| 816 | 816 | $ret[$this->literalLanguageToString($lit)][] = new ConceptPropertyValueLiteral($this->model, $this->vocab, $this->resource, $lit, $prop); |
| 817 | 817 | } |
@@ -873,10 +873,10 @@ discard block |
||
| 873 | 873 | } |
| 874 | 874 | else if ($context[$vocabPrefix] !== $vocabUriSpace) { |
| 875 | 875 | $i = 2; |
| 876 | - while (isset($context[$vocabPrefix . $i]) && $context[$vocabPrefix . $i] !== $vocabUriSpace) { |
|
| 876 | + while (isset($context[$vocabPrefix.$i]) && $context[$vocabPrefix.$i] !== $vocabUriSpace) { |
|
| 877 | 877 | $i += 1; |
| 878 | 878 | } |
| 879 | - $context[$vocabPrefix . $i] = $vocabUriSpace; |
|
| 879 | + $context[$vocabPrefix.$i] = $vocabUriSpace; |
|
| 880 | 880 | } |
| 881 | 881 | } |
| 882 | 882 | $compactJsonLD = \ML\JsonLD\JsonLD::compact($this->graph->serialise('jsonld'), json_encode($context)); |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | $baseurl = $this->getBaseHref(); |
| 17 | 17 | $vocid = $vocab->getId(); |
| 18 | 18 | $query = http_build_query(array('uri'=>$uri, 'format'=>$targetFormat)); |
| 19 | - $url = $baseurl . "rest/v1/$vocid/data?$query"; |
|
| 19 | + $url = $baseurl."rest/v1/$vocid/data?$query"; |
|
| 20 | 20 | $this->redirect303($url); |
| 21 | 21 | } |
| 22 | 22 | |
@@ -27,16 +27,16 @@ discard block |
||
| 27 | 27 | $localname = $vocab->getLocalName($uri); |
| 28 | 28 | |
| 29 | 29 | if (!$localname) { |
| 30 | - $url = $baseurl . "$vocid/"; |
|
| 30 | + $url = $baseurl."$vocid/"; |
|
| 31 | 31 | } else { |
| 32 | 32 | |
| 33 | 33 | if ($localname !== $uri && $localname === urlencode($localname)) { |
| 34 | 34 | // the URI can be shortened |
| 35 | - $url = $baseurl . "$vocid/page/$localname"; |
|
| 35 | + $url = $baseurl."$vocid/page/$localname"; |
|
| 36 | 36 | } else { |
| 37 | 37 | // must use full URI |
| 38 | 38 | $query = http_build_query(array('uri'=>$uri)); |
| 39 | - $url = $baseurl . "$vocid/page/?" . $query; |
|
| 39 | + $url = $baseurl."$vocid/page/?".$query; |
|
| 40 | 40 | } |
| 41 | 41 | } |
| 42 | 42 | $this->redirect303($url); |
@@ -57,7 +57,7 @@ discard block |
||
| 57 | 57 | // guess vocabulary based on URI |
| 58 | 58 | $vocab = $this->model->guessVocabularyFromURI($request->getUri()); |
| 59 | 59 | if ($vocab === null) { |
| 60 | - return $this->returnError('404', 'Not Found', 'Unrecognized URI ' . $request->getUri()); |
|
| 60 | + return $this->returnError('404', 'Not Found', 'Unrecognized URI '.$request->getUri()); |
|
| 61 | 61 | } |
| 62 | 62 | $request->setVocab($vocab->getId()); |
| 63 | 63 | } |