https://www.mediawiki.org/wiki/Special:Code/MediaWiki/106309
Revision: 106309
Author: ning
Date: 2011-12-15 02:37:35 +0000 (Thu, 15 Dec 2011)
Log Message:
-----------
apply ask query to WOM
Modified Paths:
--------------
trunk/extensions/WikiObjectModel/includes/WOM_Initialize.php
trunk/extensions/WikiObjectModel/includes/WOM_Processor.php
trunk/extensions/WikiObjectModel/includes/WOM_Setup.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
Added Paths:
-----------
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestProperty.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestPropertyValue.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_QueryPrintout.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Querystring.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
Modified: trunk/extensions/WikiObjectModel/includes/WOM_Initialize.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/WOM_Initialize.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/WOM_Initialize.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -1,7 +1,7 @@
<?php
/**
- * Deprecated entry point, use WikiObjectModel/WikiObjectModel.php instead.
+ * Deprecated entry point, use WikiObjectModel/WikiObjectModel.php instead.
*/
include_once '../WikiObjectModel.php';
\ No newline at end of file
Modified: trunk/extensions/WikiObjectModel/includes/WOM_Processor.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/WOM_Processor.php 2011-12-15
02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/WOM_Processor.php 2011-12-15
02:37:35 UTC (rev 106309)
@@ -206,7 +206,7 @@
}
}
- private static function parseNext( $text, WikiObjectModelCollection
$parentObj, WOMPageModel $rootObj, &$offset = 0, $parserInstance = null ) {
+ private static function parseNext( $text, WikiObjectModelCollection
$parentObj, WOMPageModel $rootObj, &$offset = 0 ) {
// $fname = 'WikiObjectModel::parseNext (WOM)';
// wfProfileIn( $fname );
@@ -224,22 +224,23 @@
}
$result = null;
- if ( $parserInstance == null ) {
- $parserInstance2 = null;
+ $parserId = self::getObjectParser( $parentObj
)->getSubParserID( $parentObj );
+ if ( $parserId == '' ) {
+ $parserInstance = null;
foreach ( self::$parsers as $parser ) {
$parser_res = $parser->parseNext(
$text, $parentObj, $offset );
if ( $parser_res == null ) continue;
- if ( $parserInstance2 == null ||
$parser->subclassOf( $parserInstance2 ) ) {
- $parserInstance2 = $parser;
+ if ( $parserInstance == null ||
$parser->subclassOf( $parserInstance ) ) {
+ $parserInstance = $parser;
$result = $parser_res;
}
}
- if ( $parserInstance2 == null ) {
- $parserInstance2 = self::$base_parser;
- $result = $parserInstance2->parseNext(
$text, $parentObj, $offset );
+ if ( $parserInstance == null ) {
+ $parserInstance = self::$base_parser;
+ $result = $parserInstance->parseNext(
$text, $parentObj, $offset );
}
} else {
- $parserInstance2 = $parserInstance;
+ $parserInstance = self::$parsers[$parserId];
$result = $parserInstance->parseNext( $text,
$parentObj, $offset );
if ( $result == null ) {
// FIXME: just omit current char, this
will not fit for Wiki parser
@@ -265,15 +266,14 @@
if ( $next_obj->isCollection() && !( isset(
$result['closed'] ) && $result['closed'] ) ) {
$collection_start = $offset;
- $d = self::parseNext( $text, $next_obj,
$rootObj, $offset,
- ( ( $parserInstance2 != null && isset(
self::$parsers[$parserInstance2->getSubParserID()] ) ) ?
-
self::$parsers[$parserInstance2->getSubParserID()] :
- null ) );
- if ( $d == 100 &&
$parserInstance2->isObjectClosed( $next_obj, $text, $offset ) === false ) {
+ $d = self::parseNext( $text, $next_obj,
$rootObj, $offset );
+ if ( $d == 100 &&
$parserInstance->isObjectClosed( $next_obj, $text, $offset ) === false ) {
// rollback
- $p = self::getObjectParser( $parentObj
);
- if ( $p != null && $p->isObjectClosed(
$parentObj, $text, $offset ) === false ) {
- return $d;
+ if ( ! ( $parentObj instanceof
WOMPageModel ) ) {
+ $p = self::getObjectParser(
$parentObj );
+ if ( $p != null &&
$p->isObjectClosed( $parentObj, $text, $offset ) === false ) {
+ return $d;
+ }
}
$parentObj->rollback();
$offset = $collection_start -
$result['len'];
@@ -738,13 +738,12 @@
public static function getValidText( $text, $parent, $wom ) {
if ( $parent != null ) {
- $parserId = self::getObjectParser( $parent
)->getSubParserID();
+ $parserId = self::getObjectParser( $parent
)->getSubParserID( $parent );
if ( $parserId != '' ) {
- $parser = self::$parsers[$parserId];
$offset = 0;
$p2 = clone ( $parent );
$p2->reset();
- self::parseNext( $text, $p2, $wom, $offset,
$parser );
+ self::parseNext( $text, $p2, $wom, $offset );
$text = '';
foreach ( $p2->getObjects() as $obj ) {
$text .= $obj->getWikiText();
Modified: trunk/extensions/WikiObjectModel/includes/WOM_Setup.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/WOM_Setup.php 2011-12-15
02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/WOM_Setup.php 2011-12-15
02:37:35 UTC (rev 106309)
@@ -14,9 +14,13 @@
$wgAutoloadClasses['WOMTemplateModel'] = $wgOMIP .
'/includes/models/WOM_OM_Template.php';
$wgAutoloadClasses['WOMParserFunctionModel'] = $wgOMIP .
'/includes/models/WOM_OM_ParserFunction.php';
$wgAutoloadClasses['WOMParameterModel'] = $wgOMIP .
'/includes/models/WOM_OM_Parameter.php';
+$wgAutoloadClasses['WOMQuerystringModel'] = $wgOMIP .
'/includes/models/WOM_OM_Querystring.php';
+$wgAutoloadClasses['WOMQueryPrintoutModel'] = $wgOMIP .
'/includes/models/WOM_OM_QueryPrintout.php';
$wgAutoloadClasses['WOMParamValueModel'] = $wgOMIP .
'/includes/models/WOM_OM_ParamValue.php';
$wgAutoloadClasses['WOMTemplateFieldModel'] = $wgOMIP .
'/includes/models/WOM_OM_TmplField.php';
$wgAutoloadClasses['WOMPropertyModel'] = $wgOMIP .
'/includes/models/WOM_OM_Property.php';
+$wgAutoloadClasses['WOMNestPropertyModel'] = $wgOMIP .
'/includes/models/WOM_OM_NestProperty.php';
+$wgAutoloadClasses['WOMNestPropertyValueModel'] = $wgOMIP .
'/includes/models/WOM_OM_NestPropertyValue.php';
$wgAutoloadClasses['WOMTextModel'] = $wgOMIP .
'/includes/models/WOM_OM_Text.php';
$wgAutoloadClasses['WOMLinkModel'] = $wgOMIP .
'/includes/models/WOM_OM_Link.php';
$wgAutoloadClasses['WOMSectionModel'] = $wgOMIP .
'/includes/models/WOM_OM_Section.php';
@@ -34,11 +38,15 @@
define( 'WOM_TYPE_CATEGORY' , 'category' );
define( 'WOM_TYPE_SECTION' , 'section' );
define( 'WOM_TYPE_PROPERTY' , 'property' );
+define( 'WOM_TYPE_NESTPROPERTY' , 'nest_property' );
+define( 'WOM_TYPE_NESTPROPERTYVAL', 'nest_property_value' );
define( 'WOM_TYPE_LINK' , 'link' );
define( 'WOM_TYPE_TEXT' , 'text' );
define( 'WOM_TYPE_TEMPLATE' , 'template' );
define( 'WOM_TYPE_PARSERFUNCTION' , 'parser_function' );
define( 'WOM_TYPE_PARAMETER' , 'parameter' );
+define( 'WOM_TYPE_QUERYSTRING' , 'querystring' );
+define( 'WOM_TYPE_QUERYPRINTOUT' , 'printout' );
define( 'WOM_TYPE_PARAM_VALUE' , 'value' );
define( 'WOM_TYPE_TMPL_FIELD' , 'template_field' );
define( 'WOM_TYPE_SENTENCE' , 'sentence' );
@@ -56,6 +64,7 @@
$wgAutoloadClasses['WOMCategoryParser'] = $wgOMIP .
'/includes/parsers/WOMCategoryParser.php';
$wgAutoloadClasses['WOMLinkParser'] = $wgOMIP .
'/includes/parsers/WOMLinkParser.php';
$wgAutoloadClasses['WOMPropertyParser'] = $wgOMIP .
'/includes/parsers/WOMPropertyParser.php';
+$wgAutoloadClasses['WOMPropertyValueParser'] = $wgOMIP .
'/includes/parsers/WOMPropertyValueParser.php';
$wgAutoloadClasses['WOMSectionParser'] = $wgOMIP .
'/includes/parsers/WOMSectionParser.php';
$wgAutoloadClasses['WOMTemplateParser'] = $wgOMIP .
'/includes/parsers/WOMTemplateParser.php';
$wgAutoloadClasses['WOMParserFunctionParser'] = $wgOMIP .
'/includes/parsers/WOMParserFunctionParser.php';
@@ -72,6 +81,7 @@
define( 'WOM_PARSER_ID_CATEGORY' , 'category' );
define( 'WOM_PARSER_ID_SECTION' , 'section' );
define( 'WOM_PARSER_ID_PROPERTY' , 'property' );
+define( 'WOM_PARSER_ID_PROPERTY_VALUE' , 'property_val' );
define( 'WOM_PARSER_ID_LINK' , 'link' );
define( 'WOM_PARSER_ID_TEXT' , 'text' );
define( 'WOM_PARSER_ID_TEMPLATE' , 'template' );
@@ -91,6 +101,7 @@
'WOMCategoryParser',
'WOMLinkParser',
'WOMPropertyParser',
+ 'WOMPropertyValueParser',
'WOMSectionParser',
'WOMTemplateParser',
'WOMParserFunctionParser',
@@ -109,11 +120,15 @@
WOM_TYPE_CATEGORY => WOM_PARSER_ID_CATEGORY,
WOM_TYPE_SECTION => WOM_PARSER_ID_SECTION,
WOM_TYPE_PROPERTY => WOM_PARSER_ID_PROPERTY,
+ WOM_TYPE_NESTPROPERTY => WOM_PARSER_ID_PROPERTY,
+ WOM_TYPE_NESTPROPERTYVAL => WOM_PARSER_ID_PROPERTY_VALUE,
WOM_TYPE_LINK => WOM_PARSER_ID_LINK,
WOM_TYPE_TEMPLATE => WOM_PARSER_ID_TEMPLATE,
WOM_TYPE_PARSERFUNCTION => WOM_PARSER_ID_PARSERFUNCTION,
WOM_TYPE_PARAMETER => WOM_PARSER_ID_PARAMETER,
WOM_TYPE_TMPL_FIELD => WOM_PARSER_ID_PARAMETER,
+ WOM_TYPE_QUERYSTRING => WOM_PARSER_ID_PARAMETER,
+ WOM_TYPE_QUERYPRINTOUT => WOM_PARSER_ID_PARAMETER,
WOM_TYPE_PARAM_VALUE => WOM_PARSER_ID_PARAM_VALUE,
WOM_TYPE_LISTITEM => WOM_PARSER_ID_LISTITEM,
WOM_TYPE_TABLE => WOM_PARSER_ID_TABLE,
Added: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestProperty.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestProperty.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestProperty.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -0,0 +1,66 @@
+<?php
+/**
+ * This model implements Property models.
+ *
+ * @author Ning
+ * @file
+ * @ingroup WikiObjectModels
+ *
+ */
+
+class WOMNestPropertyModel extends WikiObjectModelCollection {
+ protected $m_property; // name
+ protected $m_user_property; // name
+
+ public function __construct( $property ) {
+ parent::__construct( WOM_TYPE_NESTPROPERTY );
+
+ if ( !defined( 'SMW_VERSION' ) ) {
+ // MW hook will catch this exception
+ throw new MWException( __METHOD__ . ": Property model
is invalid. Please install 'SemanticMediaWiki extension' first." );
+ }
+
+ $user_property = SMWPropertyValue::makeUserProperty( $property
);
+ if ( count ( $user_property->getErrors() ) > 0 ) {
+ $user_property = SMWPropertyValue::makeUserProperty(
'///NA///' );
+ } else {
+ $property = '';
+ }
+
+ $this->m_user_property = $user_property;
+ $this->m_property = $property;
+ }
+
+ public function getProperty() {
+ return $this->m_user_property;
+ }
+
+ public function setProperty( $property ) {
+ $this->m_user_property = $property;
+ }
+
+ public function getPropertyName() {
+ return ( $this->m_property ) ? $this->m_property :
$this->m_user_property->getWikiValue();
+ }
+
+ public function getWikiText() {
+ return
"[[{$this->getPropertyName()}::{$this->getValueText()}]]";
+ }
+
+ public function getValueText() {
+ return parent::getWikiText();
+ }
+
+ public function setXMLAttribute( $key, $value ) {
+ if ( $value == '' ) throw new MWException( __METHOD__ . ":
value cannot be empty" );
+
+ if ( $key == 'name' ) {
+ $property = SMWPropertyValue::makeUserProperty( $value
);
+ } else {
+ throw new MWException( __METHOD__ . ": invalid
key/value pair: name=property_name" );
+ }
+ }
+ protected function getXMLAttributes() {
+ return 'name="' . self::xml_entities( $this->getPropertyName()
) . '"';
+ }
+}
Added:
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestPropertyValue.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestPropertyValue.php
(rev 0)
+++
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_NestPropertyValue.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -0,0 +1,20 @@
+<?php
+/**
+ * This model implements Parameter / Template_field value models.
+ *
+ * @author Ning
+ * @file
+ * @ingroup WikiObjectModels
+ *
+ */
+
+class WOMNestPropertyValueModel extends WikiObjectModelCollection {
+
+ public function __construct() {
+ parent::__construct( WOM_TYPE_NESTPROPERTYVAL );
+ }
+
+ public function setXMLAttribute( $key, $value ) {
+ throw new MWException( __METHOD__ . ": no key/value pair
required" );
+ }
+}
Added: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_QueryPrintout.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_QueryPrintout.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_QueryPrintout.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -0,0 +1,62 @@
+<?php
+/**
+ * This model implements query printout models.
+ *
+ * @author Ning
+ * @file
+ * @ingroup WikiObjectModels
+ *
+ */
+
+class WOMQueryPrintoutModel extends WikiObjectModel {
+ protected $m_property;
+ protected $m_label;
+ protected $m_aggregation;
+
+ public function __construct( $property, $label = '', $aggregation = ''
) {
+ parent::__construct( WOM_TYPE_QUERYPRINTOUT );
+ $this->m_property = $property;
+ $this->m_label = $label;
+
+ $this->m_aggregation = ( defined( 'SMW_AGGREGATION_VERSION' ) ?
$aggregation : '' );
+ }
+
+ public function getProperty() {
+ return $this->m_property;
+ }
+
+ public function getLabel() {
+ return $this->m_label;
+ }
+
+ public function getAggregation() {
+ return $this->m_aggregation;
+ }
+
+ public function getWikiText() {
+ return '?' . $this->m_property .
+ ( $this->m_aggregation == '' ? "" : ( '>' .
$this->m_aggregation ) ) .
+ ( $this->m_label == '' ? "" : ( '=' . $this->m_label )
) . '|';
+ }
+
+ public function setXMLAttribute( $key, $value ) {
+ if ( $value == '' ) throw new MWException( __METHOD__ . ":
value cannot be empty" );
+
+ if ( $key == 'property' ) {
+ $this->m_property = $value;
+ } elseif ( $key == 'label' ) {
+ $this->m_label = $value;
+ } elseif ( defined( 'SMW_AGGREGATION_VERSION' ) && $key ==
'aggregation' ) {
+ $this->m_aggregation = $value;
+ } else {
+ throw new MWException( __METHOD__ . ": invalid
key/value pair: property=property name, label=query label" .
+ ( defined( 'SMW_AGGREGATION_VERSION' ) ? ",
aggregation=agg_type" : "" ) );
+ }
+ }
+
+ protected function getXMLAttributes() {
+ return 'property="' . self::xml_entities( $this->m_property ) .
'"' .
+ ( $this->m_aggregation == '' ? "" : ( ' aggregation="'
. self::xml_entities( $this->m_aggregation ) . '"' ) ) .
+ ( $this->m_label == '' ? "" : ( ' label="' .
self::xml_entities( $this->m_label ) . '"' ) );
+ }
+}
Added: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Querystring.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Querystring.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Querystring.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * This model implements key value models.
+ *
+ * @author Ning
+ * @file
+ * @ingroup WikiObjectModels
+ *
+ */
+
+class WOMQuerystringModel extends WikiObjectModelCollection {
+
+ public function __construct() {
+ parent::__construct( WOM_TYPE_QUERYSTRING );
+ }
+
+ public function setXMLAttribute( $key, $value ) {
+ throw new MWException( __METHOD__ . ": no key/value pair
required" );
+ }
+
+ public function getWikiText() {
+ return $this->getValueText() .
+ '|';
+ }
+
+ public function getValueText() {
+ return parent::getWikiText();
+ }
+}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -13,12 +13,40 @@
$this->m_parserId = WOM_PARSER_ID_PARAMETER;
}
+ private function parseAsk ( $text, WikiObjectModelCollection $parentObj
) {
+ if ( !defined( 'SMW_VERSION' ) ) return null;
+
+ if ( trim( strtolower( $parentObj->getFunctionKey() ) ) !=
'ask' ) return null;
+
+ if ( count ( $parentObj->getObjects() ) == 0 ) {
+ return array( 'len' => 0, 'obj' => new
WOMQuerystringModel() );
+ }
+
+ if ( defined( 'SMW_AGGREGATION_VERSION' ) ) {
+ $r = preg_match(
'/^(\s*\?([^>=|}]+)(?:\>([^=|}]*))?(?:=([^|}]*))?)(\||\}|$)/', $text, $m );
+ if ( !$r ) return null;
+ return array(
+ 'len' => strlen( $m[5] == '|' ? $m[0] : $m[1] ),
+ 'obj' => new WOMQueryPrintoutModel( trim( $m[2]
), trim( $m[4] ), trim( $m[3] ) ) );
+ } else {
+ $r = preg_match(
'/^(\s*\?([^=|}]+)(?:=([^|}]*))?)(\||\}|$)/', $text, $m );
+ if ( !$r ) return null;
+ return array(
+ 'len' => strlen( $m[4] == '|' ? $m[0] : $m[1] ),
+ 'obj' => new WOMQueryPrintoutModel( trim( $m[2]
), trim( $m[3] ) ) );
+ }
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
if ( !( ( $parentObj instanceof WOMTemplateModel )
|| ( $parentObj instanceof WOMParserFunctionModel ) ) )
return null;
$text = substr( $text, $offset );
+
+ $ret = $this->parseAsk ( $text, $parentObj );
+ if ( $ret != null ) return $ret;
+
$r = preg_match( '/^([^=|}]*)(\||=|\}|$)/', $text, $m );
if ( !$r ) return null;
@@ -38,13 +66,19 @@
}
}
- public function getSubParserID() {
+ public function getSubParserID( $obj ) {
+ if ( ( $obj instanceof WOMQuerystringModel )
+ || ( $obj instanceof WOMQueryPrintoutModel ) )
+ return '';
+
return WOM_PARSER_ID_PARAM_VALUE;
}
public function isObjectClosed( $obj, $text, $offset ) {
if ( !( ( $obj instanceof WOMTemplateFieldModel )
- || ( $obj instanceof WOMParameterModel ) ) )
+ || ( $obj instanceof WOMParameterModel )
+ || ( $obj instanceof WOMQuerystringModel )
+ || ( $obj instanceof WOMQueryPrintoutModel ) ) )
return false;
if ( ( strlen( $text ) >= $offset + 1 ) && $text { $offset } ==
'|' ) {
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -20,11 +20,22 @@
if ( $r ) {
$len = strlen( $m[0] );
$func_key = trim( $m[1] );
+
return array( 'len' => $len, 'obj' => new
WOMParserFunctionModel( $func_key ) );
}
return null;
}
+ public function getSubParserID( $obj ) {
+// if ( ( $obj instanceof WOMParserFunctionModel )
+// && ( strtolower( $obj->getFunctionKey() ) == 'ask' )
+// && ( count ( $obj->getObjects() ) == 0 ) ) {
+//
+// return WOM_PARSER_ID_QUERYSTRING;
+// }
+ return WOM_PARSER_ID_PARAMETER;
+ }
+
public function isObjectClosed( $obj, $text, $offset ) {
if ( !$obj instanceof WOMParserFunctionModel ) return false;
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -45,8 +45,42 @@
// }
$r = preg_match( $semanticLinkPattern, $text, $m );
if ( $r ) {
+ $inQuerystring = false;
+ $o = $parentObj;
+ do {
+ if ( $o instanceof WOMQuerystringModel ) {
+ $inQuerystring = true;
+ break;
+ }
+ $o = $o->getParent();
+ } while ( $o != null );
+
+ if ( $inQuerystring ) {
+ $semanticPropPattern = '/\[\[ #
Beginning of the link
+ (?:([^:][^][]*):[=:])+
# Property name (or a list of those)
+ /xu';
+ preg_match( $semanticPropPattern, $text, $m );
+ return array( 'len' => strlen( $m[0] ), 'obj'
=> new WOMNestPropertyModel( $m[1] ) );
+ }
+
return array( 'len' => strlen( $m[0] ), 'obj' => new
WOMPropertyModel( $m[1], $m[2], isset( $m[3] ) ? $m[3] : '' ) );
}
return null;
}
+
+ public function getSubParserID( $obj ) {
+ return WOM_PARSER_ID_PROPERTY_VALUE;
+ }
+
+ public function isObjectClosed( $obj, $text, $offset ) {
+ if ( !$obj instanceof WOMNestPropertyModel ) return false;
+
+ if ( ( strlen( $text ) >= $offset + 2 )
+ && $text { $offset } == ']'
+ && $text { $offset + 1 } == ']' ) {
+ return 2;
+ }
+
+ return false;
+ }
}
Added:
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
(rev 0)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -0,0 +1,36 @@
+<?php
+/**
+ * @author Ning
+ *
+ * @file
+ * @ingroup WikiObjectModels
+ */
+
+class WOMPropertyValueParser extends WikiObjectModelParser {
+
+ public function __construct() {
+ parent::__construct();
+ $this->m_parserId = WOM_PARSER_ID_PROPERTY_VALUE;
+ }
+
+ public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
+ if ( !( $parentObj instanceof WOMNestPropertyModel ) )
+ return null;
+
+ return array( 'len' => 0, 'obj' => new
WOMNestPropertyValueModel() );
+ }
+
+ public function isObjectClosed( $obj, $text, $offset ) {
+ if ( !( $obj instanceof WOMNestPropertyValueModel ) )
+ return false;
+
+ if ( ( strlen( $text ) >= $offset + 1 ) && $text { $offset } ==
'|' ) {
+ return 1;
+ }
+ $parentClose = WOMProcessor::getObjectParser( $obj->getParent()
)
+ ->isObjectClosed( $obj->getParent(), $text, $offset );
+ if ( $parentClose !== false ) return 0;
+
+ return false;
+ }
+}
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -26,7 +26,7 @@
return array( 'len' => strlen( $m[1] ), 'obj' => new
WOMTableModel( trim( $m[2] ) ) );
}
- public function getSubParserID() {
+ public function getSubParserID( $obj ) {
return WOM_PARSER_ID_TABLECELL;
}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -25,7 +25,7 @@
return null;
}
- public function getSubParserID() {
+ public function getSubParserID( $obj ) {
return WOM_PARSER_ID_PARAM_VALUE;
}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -25,7 +25,7 @@
return null;
}
- public function getSubParserID() {
+ public function getSubParserID( $obj ) {
return WOM_PARSER_ID_PARAMETER;
}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
2011-12-15 02:29:47 UTC (rev 106308)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
2011-12-15 02:37:35 UTC (rev 106309)
@@ -70,7 +70,7 @@
}
// specified next parser. e.g., template parser -> parameter parser
- public function getSubParserID() { return ''; }
+ public function getSubParserID( $obj ) { return ''; }
/**
* Return a string that displays all error messages as a tooltip, or
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs