https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114119
Revision: 114119
Author: ning
Date: 2012-03-19 00:35:20 +0000 (Mon, 19 Mar 2012)
Log Message:
-----------
More object model support, smw ask query, mw redirect, etc.
Modified Paths:
--------------
trunk/extensions/WikiObjectModel/WikiObjectModel.php
trunk/extensions/WikiObjectModel/includes/WOM_Processor.php
trunk/extensions/WikiObjectModel/includes/WOM_Setup.php
trunk/extensions/WikiObjectModel/includes/apis/WOM_GetObjectModel.php
trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputObjectModel.php
trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputProcessor.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_HTMLTag.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Parameter.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Property.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMCategoryParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMHTMLTagParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMLinkParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMListItemParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMMagicWordParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMParamValueParser.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/WOMPropertyValueParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMSectionParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMTblCellParser.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/apis/SRF_Xml.php
trunk/extensions/WikiObjectModel/includes/apis/WOM_GetWikiResult.php
trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Redirect.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMAskParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParameterParser.php
trunk/extensions/WikiObjectModel/includes/parsers/WOMRedirectParser.php
Modified: trunk/extensions/WikiObjectModel/WikiObjectModel.php
===================================================================
--- trunk/extensions/WikiObjectModel/WikiObjectModel.php 2012-03-18
23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/WikiObjectModel.php 2012-03-19
00:35:20 UTC (rev 114119)
@@ -6,26 +6,17 @@
*/
if ( !defined( 'MEDIAWIKI' ) ) die;
-define( 'WOM_VERSION', '1.0.1 alpha' );
+define( 'WOM_VERSION', '1.0.2 alpha' );
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'Wiki ObjectModel Extension',
- 'version' => WOM_VERSION,
- 'author' => "Ning Hu, Justin Zhang,
[http://smwforum.ontoprise.com/smwforum/index.php/Jesse_Wang Jesse Wang],
sponsored by [http://projecthalo.com Project Halo], [http://www.vulcan.com
Vulcan Inc.]",
- 'url' => 'http://wiking.vulcan.com/dev',
- 'descriptionmsg' => 'wom-desc'
-);
-
$wgOMIP = $IP . '/extensions/WikiObjectModel';
$wgOMScriptPath = $wgScriptPath . '/extensions/WikiObjectModel';
-$wgExtensionFunctions[] = 'smwfOMInitLanguage';
+$wgExtensionFunctions[] = 'wfWOMSetupExtension';
$wgExtensionMessagesFiles['WikiObjectModel'] = $wgOMIP .
'/languages/Messages.php';
require_once( $wgOMIP . '/includes/WOM_Setup.php' );
-function smwfOMInitLanguageObject( $langcode, $fallback = null ) {
+function wfWOMInitLanguageObject( $langcode, $fallback = null ) {
global $wgOMIP;
$langClass = 'WOMLanguage' . str_replace( '-', '_', ucfirst( $langcode
) );
@@ -45,10 +36,34 @@
return new $langClass();
}
-function smwfOMInitLanguage() {
+function wfWOMInitLanguage() {
global $wgLanguageCode, $wgLang;
global $wgOMContLang, $wgOMLang;
- $wgOMContLang = smwfOMInitLanguageObject( $wgLanguageCode );
- $wgOMLang = smwfOMInitLanguageObject( $wgLang->getCode(), $wgOMContLang
);
+ $wgOMContLang = wfWOMInitLanguageObject( $wgLanguageCode );
+ $wgOMLang = wfWOMInitLanguageObject( $wgLang->getCode(), $wgOMContLang
);
}
+
+function wfWOMRegisterParserFunctionParsers( &$parsers ) {
+ global $wgOMPFParsers;
+ $parsers += $wgOMPFParsers;
+ return true;
+}
+
+function wfWOMSetupExtension() {
+ global $wgHooks, $wgExtensionCredits;
+
+ wfWOMInitLanguage();
+
+ $wgHooks['womRegisterParserFunctionParsers'][] =
'wfWOMRegisterParserFunctionParsers';
+
+ $wgExtensionCredits['parserhook'][] = array(
+ 'path' => __FILE__,
+ 'name' => 'Wiki ObjectModel Extension',
+ 'version' => WOM_VERSION,
+ 'author' => "Ning Hu, Justin Zhang,
[http://smwforum.ontoprise.com/smwforum/index.php/Jesse_Wang Jesse Wang],
sponsored by [http://projecthalo.com Project Halo], [http://www.vulcan.com
Vulcan Inc.]",
+ 'url' => 'http://wiking.vulcan.com/dev',
+ 'descriptionmsg' => 'wom-desc'
+ );
+ return true;
+}
\ No newline at end of file
Modified: trunk/extensions/WikiObjectModel/includes/WOM_Processor.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/WOM_Processor.php 2012-03-18
23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/WOM_Processor.php 2012-03-19
00:35:20 UTC (rev 114119)
@@ -14,7 +14,10 @@
private static $isParsersRegistered = false;
private static $parsers = array();
private static $base_parser;
+ private static $modelParserMapping = array();
+ public static $parserFuncParsers = array();
+
private static function setupParsers() {
if ( self::$isParsersRegistered ) return;
@@ -22,9 +25,33 @@
foreach ( $wgOMParsers as $p ) {
$parser = new $p();
self::$parsers[$parser->getParserID()] = $parser;
+ foreach ( $parser->getValidModelTypes() as $type ) {
+ self::$modelParserMapping[$type] =
$parser->getParserID();
+ }
}
self::$base_parser = self::$parsers[WOM_PARSER_ID_TEXT];
+ $parsers = array();
+ if ( wfRunHooks ( 'womRegisterParsers', array ( &$parsers ) ) )
{
+ foreach ( $parsers as $p ) {
+ $parser = new $p();
+ self::$parsers[$parser->getParserID()] =
$parser;
+ foreach ( $parser->getValidModelTypes() as
$type ) {
+ self::$modelParserMapping[$type] =
$parser->getParserID();
+ }
+ }
+ }
+ $parsers = array();
+ if ( wfRunHooks ( 'womRegisterParserFunctionParsers', array (
&$parsers ) ) ) {
+ foreach ( $parsers as $p ) {
+ $parser = new $p();
+
self::$parserFuncParsers[$parser->getParserID()] = $parser;
+ foreach ( $parser->getValidModelTypes() as
$type ) {
+ self::$modelParserMapping[$type] =
WOM_PARSER_ID_PARAMETER;
+ }
+ }
+ }
+
self::$isParsersRegistered = true;
}
@@ -35,9 +62,8 @@
if ( !self::$isParsersRegistered ) {
self::setupParsers();
}
- global $wgOMModelParserMapping;
- if ( isset( $wgOMModelParserMapping[$obj->getTypeID()] ) ) {
- $id = $wgOMModelParserMapping[$obj->getTypeID()];
+ if ( isset( self::$modelParserMapping[$obj->getTypeID()] ) ) {
+ $id = self::$modelParserMapping[$obj->getTypeID()];
if ( isset( self::$parsers[$id] ) ) {
wfProfileOut( $fname );
return self::$parsers[$id];
@@ -119,7 +145,10 @@
if ( $obj->getTypeID() == WOM_TYPE_HTMLTAG ) {
// special case, html tag
} elseif ( $obj instanceof
WikiObjectModelCollection ) {
- self::parseParagraphs( $obj );
+ // FIXME: hardcode, for querystring
object
+ if ( $obj->getTypeID() !=
WOM_TYPE_QUERYSTRING ) {
+ self::parseParagraphs( $obj );
+ }
}
$new_objs[] = $obj;
}
@@ -180,7 +209,10 @@
if ( $obj->getTypeID() == WOM_TYPE_HTMLTAG ) {
// special case, html tag
} elseif ( $obj instanceof
WikiObjectModelCollection ) {
- self::parseSentences( $obj );
+ // FIXME: hardcode, for querystring
object
+ if ( $obj->getTypeID() !=
WOM_TYPE_QUERYSTRING ) {
+ self::parseSentences( $obj );
+ }
}
$new_objs[] = $obj;
}
@@ -230,7 +262,9 @@
foreach ( self::$parsers as $parser ) {
$parser_res = $parser->parseNext(
$text, $parentObj, $offset );
if ( $parser_res == null ) continue;
- if ( $parserInstance == null ||
$parser->subclassOf( $parserInstance ) ) {
+ if ( ( $parserInstance == null ||
$parser->subclassOf( $parserInstance ) ) ||
+ ( $result != null &&
$parser_res['len'] > $result['len'] ) ) {
+
$parserInstance = $parser;
$result = $parser_res;
}
Modified: trunk/extensions/WikiObjectModel/includes/WOM_Setup.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/WOM_Setup.php 2012-03-18
23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/WOM_Setup.php 2012-03-19
00:35:20 UTC (rev 114119)
@@ -14,8 +14,6 @@
$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';
@@ -32,6 +30,7 @@
$wgAutoloadClasses['WOMMagicWordModel'] = $wgOMIP .
'/includes/models/WOM_OM_MagicWord.php';
$wgAutoloadClasses['WOMHTMLTagModel'] = $wgOMIP .
'/includes/models/WOM_OM_HTMLTag.php';
$wgAutoloadClasses['WOMTemplateFieldHolderModel'] = $wgOMIP .
'/includes/models/WOM_OM_TmplFieldHolder.php';
+$wgAutoloadClasses['WOMRedirectModel'] = $wgOMIP .
'/includes/models/WOM_OM_Redirect.php';
// Definitions
define( 'WOM_TYPE_PAGE' , 'page' );
@@ -45,8 +44,6 @@
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' );
@@ -57,6 +54,7 @@
define( 'WOM_TYPE_MAGICWORD' , 'magicword' );
define( 'WOM_TYPE_HTMLTAG' , 'html' );
define( 'WOM_TYPE_TMPL_FIELD_HOLDER', 'template_field_holder' );
+define( 'WOM_TYPE_REDIRECT' , 'redirect' );
// POM Parser
$wgAutoloadClasses['WikiObjectModelParser'] = $wgOMIP .
'/includes/parsers/WikiObjectModelParser.php';
@@ -76,6 +74,7 @@
$wgAutoloadClasses['WOMMagicWordParser'] = $wgOMIP .
'/includes/parsers/WOMMagicWordParser.php';
$wgAutoloadClasses['WOMHTMLTagParser'] = $wgOMIP .
'/includes/parsers/WOMHTMLTagParser.php';
$wgAutoloadClasses['WOMTemplateFieldHolderParser'] = $wgOMIP .
'/includes/parsers/WOMTemplateFieldHolderParser.php';
+$wgAutoloadClasses['WOMRedirectParser'] = $wgOMIP .
'/includes/parsers/WOMRedirectParser.php';
// Definitions
define( 'WOM_PARSER_ID_CATEGORY' , 'category' );
@@ -94,6 +93,7 @@
define( 'WOM_PARSER_ID_MAGICWORD' , 'magicword' );
define( 'WOM_PARSER_ID_HTMLTAG' , 'html' );
define( 'WOM_PARSER_ID_TEMPLATE_FIELD_HOLDER', 'template_field_holder' );
+define( 'WOM_PARSER_ID_REDIRECT' , 'redirect' );
global $wgOMParsers, $wgOMModelParserMapping;
$wgOMParsers = array(
@@ -113,29 +113,21 @@
'WOMMagicWordParser',
'WOMHTMLTagParser',
'WOMTemplateFieldHolderParser',
+ 'WOMRedirectParser',
);
-$wgOMModelParserMapping = array(
- WOM_TYPE_TEXT => WOM_PARSER_ID_TEXT,
- 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,
- WOM_TYPE_TBL_CELL => WOM_PARSER_ID_TABLECELL,
- WOM_TYPE_MAGICWORD => WOM_PARSER_ID_MAGICWORD,
- WOM_TYPE_HTMLTAG => WOM_PARSER_ID_HTMLTAG,
- WOM_TYPE_TMPL_FIELD_HOLDER => WOM_PARSER_ID_TEMPLATE_FIELD_HOLDER,
+// Parser function parameter
+$wgAutoloadClasses['WOMQuerystringModel'] = $wgOMIP .
'/includes/models/WOM_OM_Querystring.php';
+$wgAutoloadClasses['WOMQueryPrintoutModel'] = $wgOMIP .
'/includes/models/WOM_OM_QueryPrintout.php';
+define( 'WOM_TYPE_QUERYSTRING' , 'querystring' );
+define( 'WOM_TYPE_QUERYPRINTOUT' , 'printout' );
+
+$wgAutoloadClasses['WOMParserFunctionParameterParser'] = $wgOMIP .
'/includes/parsers/WOMParserFunctionParameterParser.php';
+
+$wgAutoloadClasses['WOMAskParser'] = $wgOMIP .
'/includes/parsers/WOMAskParser.php';
+define( 'WOM_PFPARSER_ID_ASK' , 'ask' );
+$wgOMPFParsers = array(
+ 'WOMAskParser',
);
global $wgOMSentenceObjectTypes;
@@ -164,4 +156,5 @@
$wgAutoloadClasses['ApiWOMQuery'] = $wgOMIP . '/includes/apis/WOM_Query.php';
$wgAPIModules['womoutput'] = 'ApiWOMOutputObjectModel';
$wgAutoloadClasses['ApiWOMOutputObjectModel'] = $wgOMIP .
'/includes/apis/WOM_OutputObjectModel.php';
-
+$wgAPIModules['womwiki'] = 'ApiWOMGetWikiResult';
+$wgAutoloadClasses['ApiWOMGetWikiResult'] = $wgOMIP .
'/includes/apis/WOM_GetWikiResult.php';
Added: trunk/extensions/WikiObjectModel/includes/apis/SRF_Xml.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/apis/SRF_Xml.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/apis/SRF_Xml.php 2012-03-19
00:35:20 UTC (rev 114119)
@@ -0,0 +1,44 @@
+<?php
+/**
+ * A query printer for xml
+ *
+ * @note AUTOLOADED
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'Not an entry point.' );
+}
+
+class SRFXml extends SMWResultPrinter {
+ protected function getResultText( $res, $outputmode ) {
+ $xml = '';
+ if ( $this->mShowHeaders != SMW_HEADERS_HIDE ) {
+ $xml .= '<head>' . "\n";
+ foreach ( $res->getPrintRequests() as $pr ) {
+ $xml .= "<item>{$pr->getText( $outputmode, null
)}</item>\n";
+ }
+ $xml .= '</head>' . "\n";
+ }
+
+ $xml .= '<res>' . "\n";
+ // print all result rows
+ while ( $row = $res->getNext() ) {
+ $xml .= '<row>' . "\n";
+ $firstcol = true;
+ foreach ( $row as $field ) {
+ $xml .= '<item>' . "\n";
+ $growing = array();
+ while ( ( $object = $field->getNextObject() )
!== false ) {
+ $text =
Sanitizer::decodeCharReferences( $object->getWikiValue() );
+ $growing[] = $text;
+ } // while...
+ $xml .= implode( ',', $growing );
+ $xml .= '</item>' . "\n";
+ } // foreach...
+ $xml .= '</row>' . "\n";
+ }
+ $xml .= '</res>' . "\n";
+
+ return $xml;
+ }
+}
\ No newline at end of file
Modified: trunk/extensions/WikiObjectModel/includes/apis/WOM_GetObjectModel.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/apis/WOM_GetObjectModel.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/apis/WOM_GetObjectModel.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -33,7 +33,8 @@
$this->dieUsage( "Article doesn't exist ($page_name)",
3 );
try {
- $objs = WOMProcessor::getObjIdByXPath( $articleTitle,
$xpath, $rid );
+ $page_obj = WOMProcessor::getPageObject( $articleTitle,
$rid );
+ $objs = WOMProcessor::getObjIdByXPath2( $page_obj,
$xpath );
} catch ( Exception $e ) {
$err = $e->getMessage();
}
@@ -48,6 +49,7 @@
$this->getResult()->setContent( $result['message'],
$err );
} else {
$result['result'] = 'Success';
+ $result['revisionID'] = $page_obj->getRevisionID();
// pay attention to special xml tag, e.g.,
<property><value>...</value></property>
$result['return'] = array();
@@ -60,7 +62,6 @@
$this->getResult()->setContent(
$result['return'], $count );
} else {
$xml = '';
- $page_obj = WOMProcessor::getPageObject(
$articleTitle, $rid );
foreach ( $objs as $id ) {
if ( $id == '' ) continue;
$wobj = $page_obj->getObject( $id );
@@ -76,7 +77,7 @@
header ( "Content-Type:
application/rdf+xml" );
echo <<<OUTPUT
<?xml version="1.0" encoding="UTF-8" ?>
-<api><womget result="Success"><return>
+<api><womget result="Success"
revisionID="{$page_obj->getRevisionID()}"><return>
{$xml}
</return></womget></api>
OUTPUT;
Added: trunk/extensions/WikiObjectModel/includes/apis/WOM_GetWikiResult.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/apis/WOM_GetWikiResult.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/apis/WOM_GetWikiResult.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @addtogroup API
+ */
+class ApiWOMGetWikiResult extends ApiBase {
+
+ public function __construct( $main, $action ) {
+ parent :: __construct( $main, $action );
+ }
+
+ public function execute() {
+ global $wgUser;
+
+ $params = $this->extractRequestParams();
+ if ( is_null( $params['wiki'] ) )
+ $this->dieUsage( 'Must specify wiki text', 0 );
+ $wiki = $params['wiki'];
+ $type = $params['type'];
+
+ global $wgParser;
+ $popt = new ParserOptions();
+ $popt->setEditSection( false );
+ $title = Title::newFromText( '__TEMPWIKITITLE__' );
+ if ( strtolower( $type ) == 'ask' ) {
+ $wiki = "{$wiki}|format=xml";
+
+ global $wgOMIP, $smwgResultFormats, $wgAutoloadClasses;
+ $smwgResultFormats['xml'] = 'SRFXml';
+ $wgAutoloadClasses['SRFXml'] = $wgOMIP .
'/includes/apis/SRF_Xml.php';
+
+ $s = $wgParser->preprocess( $wiki, $title, $popt );
+ $b = 0;
+ for ( $i = 0; $i < strlen( $s ); ++$i ) {
+ if ( $s { $i } == '[' ) {
+ ++ $b;
+ } elseif ( $s { $i } == ']' ) {
+ -- $b;
+ } elseif ( $s { $i } == '|' ) {
+ if ( $b == 0 ) break;
+ }
+ }
+ $rawparams = array( substr( $s, 0, $i ) );
+ if ( $i < strlen( $s ) ) $rawparams = array_merge(
$rawparams, explode( '|', substr( $s, $i + 1 ) ) );
+ $result =
SMWQueryProcessor::getResultFromFunctionParams( $rawparams, SMW_OUTPUT_WIKI );
+ } else {
+ $pout = $wgParser->parse( $wiki, $title, $popt );
+ $result = "<![CDATA[{$pout->getText()}]]>";
+ }
+
+ header ( "Content-Type: application/rdf+xml" );
+ echo <<<OUTPUT
+<?xml version="1.0" encoding="UTF-8" ?>
+<api><womwiki result="Success">
+<wiki><![CDATA[{$wiki}]]></wiki>
+<return>
+{$result}
+</return></womwiki></api>
+OUTPUT;
+ exit( 1 );
+ }
+
+ protected function getAllowedParams() {
+ $types = defined( 'SMW_VERSION' ) ? array( 'wiki', 'ask' ) :
array( 'wiki' );
+ return array (
+ 'wiki' => null,
+ 'type' => array(
+ ApiBase :: PARAM_DFLT => 'wiki',
+ ApiBase :: PARAM_TYPE => $types
+ ),
+ );
+ }
+
+ protected function getParamDescription() {
+ $types = defined( 'SMW_VERSION' ) ? array(
+ 'Type to fetch wiki parse result',
+ 'type = wiki, get parser result of wiki text',
+ 'type = ask, get parser result of ask query, in
xml format'
+ ) : array(
+ 'Type to fetch wiki parse result',
+ 'type = wiki, get parser result of wiki text',
+ );
+ return array (
+ 'wiki' => 'Wiki text',
+ 'type' => $types
+ );
+ }
+
+ protected function getDescription() {
+ return 'Call to get parse result of wiki';
+ }
+
+ protected function getExamples() {
+ return array (
+ 'api.php?action=womwiki&wiki=[[Hello]]',
+
'api.php?action=womwiki&wiki=[[Category:Hello]]&type=ask'
+ );
+ }
+
+// public function mustBePosted() {
+// return true;
+// }
+
+ public function getVersion() {
+ return __CLASS__ . ': $Id$';
+ }
+}
Modified:
trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputObjectModel.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputObjectModel.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputObjectModel.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -38,8 +38,8 @@
if ( !$article->exists() )
$this->dieUsage( "Article doesn't exist ($page_name)",
3 );
- $page_obj = WOMOutputProcessor::getOutputData( $articleTitle,
$rid );
try {
+ $page_obj = WOMOutputProcessor::getOutputData(
$articleTitle, $rid );
$objs = WOMProcessor::getObjIdByXPath2( $page_obj,
$xpath );
} catch ( Exception $e ) {
$err = $e->getMessage();
@@ -55,6 +55,7 @@
$this->getResult()->setContent( $result['message'],
$err );
} else {
$result['result'] = 'Success';
+ $result['revisionID'] = $page_obj->getRevisionID();
// pay attention to special xml tag, e.g.,
<property><value>...</value></property>
$result['return'] = array();
@@ -81,7 +82,7 @@
header ( "Content-Type:
application/rdf+xml" );
echo <<<OUTPUT
<?xml version="1.0" encoding="UTF-8" ?>
-<api><womoutput result="Success"><return>
+<api><womoutput result="Success"
revisionID="{$page_obj->getRevisionID()}"><return>
{$xml}
</return></womoutput></api>
OUTPUT;
Modified: trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputProcessor.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputProcessor.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/apis/WOM_OutputProcessor.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -282,7 +282,10 @@
foreach ( $queries as $label => $vals ) {
$vals = array_unique( $vals );
foreach ( $vals as $val ) {
- $query_res->insertObject( new
WOMPropertyModel( $label, $val ) );
+ $qprop = new WOMPropertyModel( $label,
$val );
+ $qprop->setObjectID( 'output' . (
$tmp_id ++ ) );
+ $query_res->insertObject( $qprop );
+ $wom->addToPageObjectSet( $qprop );
}
}
}
@@ -310,6 +313,8 @@
}
}
+ if ( wfRunHooks ( 'womGetExtraOutputObjects', array ( $wgTitle,
&$wom ) ) ) {
+ }
return $wom;
}
}
Modified: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_HTMLTag.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_HTMLTag.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_HTMLTag.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -22,7 +22,7 @@
return $this->m_name;
}
- public function setName( $name ) {
+ public function setTagName( $name ) {
$this->m_name = $name;
}
@@ -37,6 +37,7 @@
$v = preg_replace( '/^[\'"](.*)[\'"]$/', '$1', $v );
if ( $attr == $a ) return $v;
}
+ return null;
}
public function setAttributes( $attrs ) {
@@ -62,14 +63,14 @@
public function setXMLAttribute( $key, $value ) {
if ( $value == '' ) throw new MWException( __METHOD__ . ":
value cannot be empty" );
- if ( $key == 'name' ) {
+ if ( $key == 'tag' ) {
$this->m_name = $value;
} else {
- throw new MWException( __METHOD__ . ": invalid
key/value pair: name=html_tag_name" );
+ $attrs[$key] = $value;
}
}
protected function getXMLAttributes() {
- $ret = 'name="' . self::xml_entities( $this->m_name ) . '"';
+ $ret = 'tag="' . self::xml_entities( $this->m_name ) . '"';
foreach ( $this->m_attrs as $a => $v ) {
$v = preg_replace( '/^"(.*)"$/', '$1', $v );
if ( $a == 'id' ) $a = 'tag_id';
Modified: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Parameter.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Parameter.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Parameter.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -10,20 +10,26 @@
class WOMParameterModel extends WikiObjectModelCollection {
protected $m_key;
+ protected $m_pipe;
public function __construct( $key = '' ) {
parent::__construct( WOM_TYPE_PARAMETER );
$this->m_key = $key;
+ $this->m_pipe = true;
}
public function getKey() {
return $this->m_key;
}
+ public function setPipe( $pipe ) {
+ $this->m_pipe = $pipe;
+ }
+
public function getWikiText() {
return ( $this->m_key == '' ? "" : ( $this->m_key . '=' ) ) .
$this->getValueText() .
- '|';
+ ( $this->m_pipe ? '|' : '' );
}
public function getValueText() {
Modified: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Property.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Property.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Property.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -72,7 +72,11 @@
}
public function getWikiText() {
- $res =
"[[{$this->getPropertyName()}::{$this->getPropertyValue()}";
+ $value = $this->getPropertyValue();
+ if ( substr( $value, 0, 1 ) == ':' ) {
+ $value = ' ' . $value;
+ }
+ $res = "[[{$this->getPropertyName()}::{$value}";
if ( $this->getPropertyValue() != $this->getCaption()
&& $this->getCaption() != '' ) {
$res .= "|{$this->getCaption()}";
@@ -89,7 +93,7 @@
}
public function getPropertyValue() {
- return $this->m_smwdatavalue == null ? $this->m_value :
$this->m_smwdatavalue->getWikiValue();
+ return trim( $this->m_smwdatavalue == null ? $this->m_value :
$this->m_smwdatavalue->getWikiValue() );
}
public function getCaption() {
Added: trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Redirect.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Redirect.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/models/WOM_OM_Redirect.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * This model implements redirect models.
+ *
+ * #REDIRECT [[Pagename]]
+ * Consider that #REDIRECT can be localized.
+ *
+ * @author Ning
+ * @file
+ * @ingroup WikiObjectModels
+ *
+ */
+
+class WOMRedirectModel extends WikiObjectModel {
+ private $m_to_page;
+
+ public function __construct( $to_page ) {
+ parent::__construct( WOM_TYPE_REDIRECT );
+ $this->m_to_page = $to_page;
+ }
+
+ public function getWikiText() {
+ return '#REDIRECT [[' . $this->m_to_page . ']]';
+ }
+
+ protected function getXMLContent() {
+ return "<![CDATA[{$this->m_to_page}]]>";
+ }
+}
Added: trunk/extensions/WikiObjectModel/includes/parsers/WOMAskParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMAskParser.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMAskParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -0,0 +1,67 @@
+<?php
+/**
+ * @author Ning
+ *
+ * @file
+ * @ingroup WikiObjectModels
+ */
+
+class WOMAskParser extends WOMParserFunctionParameterParser {
+
+ public function __construct() {
+ $this->m_parserId = WOM_PFPARSER_ID_ASK;
+ }
+
+ public function getValidModelTypes() {
+ return array(
+ WOM_TYPE_QUERYSTRING,
+ WOM_TYPE_QUERYPRINTOUT
+ );
+ }
+
+ private function parseAskParameters ( $text, WikiObjectModelCollection
$parentObj ) {
+ 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 parseParserFunctionParameter ( $text,
WikiObjectModelCollection $parentObj ) {
+ if ( !defined( 'SMW_VERSION' )
+ || !( $parentObj instanceof WOMParserFunctionModel ) )
+ return null;
+
+ if ( trim( strtolower( $parentObj->getFunctionKey() ) ) !=
'ask' ) return null;
+
+ if ( count ( $parentObj->getObjects() ) == 0 ) {
+ return array( 'len' => 0, 'obj' => new
WOMQuerystringModel() );
+ }
+
+ return $this->parseAskParameters( $text, $parentObj );
+ }
+
+ public function getSubParserID( $obj ) {
+ if ( ( $obj instanceof WOMQuerystringModel )
+ || ( $obj instanceof WOMQueryPrintoutModel ) )
+ return '';
+
+ return null;
+ }
+
+ public function validate ( $obj ) {
+ if ( !( ( $obj instanceof WOMQuerystringModel )
+ || ( $obj instanceof WOMQueryPrintoutModel ) ) )
+ return false;
+
+ return true;
+ }
+}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMCategoryParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMCategoryParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMCategoryParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_CATEGORY;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_CATEGORY );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
global $wgContLang;
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMHTMLTagParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMHTMLTagParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMHTMLTagParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_HTMLTAG;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_HTMLTAG );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
// this is not a proper html tag regex, for strings include
char '>'
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMLinkParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMLinkParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMLinkParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_LINK;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_LINK );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMListItemParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMListItemParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMListItemParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_LISTITEM;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_LISTITEM );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$lastLF = ( $offset == 0 || $text { $offset - 1 } == "\n" );
$text = substr( $text, $offset );
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMMagicWordParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMMagicWordParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMMagicWordParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_MAGICWORD;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_MAGICWORD );
+ }
+
static $underscores = array( '0' => '', '1' => '' );
static $mwa = null;
static function getDoubleUnderscoreRegex() {
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParamValueParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMParamValueParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMParamValueParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_PARAM_VALUE;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_PARAM_VALUE );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
if ( !( ( $parentObj instanceof WOMParameterModel )
|| ( $parentObj instanceof WOMTemplateFieldHolderModel
) ) )
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMParameterParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,28 +13,8 @@
$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 getValidModelTypes() {
+ return array( WOM_TYPE_PARAMETER, WOM_TYPE_TMPL_FIELD );
}
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
@@ -44,8 +24,12 @@
$text = substr( $text, $offset );
- $ret = $this->parseAsk ( $text, $parentObj );
- if ( $ret != null ) return $ret;
+ if ( $parentObj instanceof WOMParserFunctionModel ) {
+ foreach ( WOMProcessor::$parserFuncParsers as $p ) {
+ $ret = $p->parseParserFunctionParameter (
$text, $parentObj );
+ if ( $ret != null ) return $ret;
+ }
+ }
$r = preg_match( '/^([^=|}]*)(\||=|\}|$)/', $text, $m );
if ( !$r ) return null;
@@ -67,18 +51,26 @@
}
public function getSubParserID( $obj ) {
- if ( ( $obj instanceof WOMQuerystringModel )
- || ( $obj instanceof WOMQueryPrintoutModel ) )
- return '';
+ foreach ( WOMProcessor::$parserFuncParsers as $p ) {
+ $ret = $p->getSubParserID ( $obj );
+ if ( $ret !== null ) return $ret;
+ }
return WOM_PARSER_ID_PARAM_VALUE;
}
public function isObjectClosed( $obj, $text, $offset ) {
- if ( !( ( $obj instanceof WOMTemplateFieldModel )
- || ( $obj instanceof WOMParameterModel )
- || ( $obj instanceof WOMQuerystringModel )
- || ( $obj instanceof WOMQueryPrintoutModel ) ) )
+ $valid = false;
+ foreach ( WOMProcessor::$parserFuncParsers as $p ) {
+ if ( $p->validate ( $obj ) ) {
+ $valid = true;
+ break;
+ }
+ }
+
+ if ( !( $valid ||
+ ( $obj instanceof WOMTemplateFieldModel ) ||
+ ( $obj instanceof WOMParameterModel ) ) )
return false;
if ( ( strlen( $text ) >= $offset + 1 ) && $text { $offset } ==
'|' ) {
@@ -86,7 +78,10 @@
}
$parentClose = WOMProcessor::getObjectParser( $obj->getParent()
)
->isObjectClosed( $obj->getParent(), $text, $offset );
- if ( $parentClose !== false ) return 0;
+ if ( $parentClose !== false ) {
+ $obj->setPipe( false );
+ return 0;
+ }
return false;
}
Added:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParameterParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParameterParser.php
(rev 0)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParameterParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -0,0 +1,59 @@
+<?php
+/**
+ * @author Ning
+ *
+ * @file
+ * @ingroup WikiObjectModels
+ */
+
+abstract class WOMParserFunctionParameterParser {
+ protected $m_parserId;
+
+ /**
+ * Array of error text messages. Private to allow us to track error
insertion
+ * (PHP's count() is too slow when called often) by using $mHasErrors.
+ * @var array
+ */
+ protected $mErrors = array();
+
+ /**
+ * Boolean indicating if there where any errors.
+ * Should be modified accordingly when modifying $mErrors.
+ * @var boolean
+ */
+ protected $mHasErrors = false;
+
+// /// Processing methods /////
+ public abstract function parseParserFunctionParameter ( $text,
WikiObjectModelCollection $parentObj );
+
+ public abstract function validate( $obj );
+
+ public abstract function getValidModelTypes();
+
+// /// Get methods /////
+ public function getParserID() {
+ return $this->m_parserId;
+ }
+
+ // specified next parser. e.g., template parser -> parameter parser
+ public function getSubParserID( $obj ) { return ''; }
+
+ /**
+ * Return a string that displays all error messages as a tooltip, or
+ * an empty string if no errors happened.
+ */
+ public function getErrorText() {
+ if ( defined( 'SMW_VERSION' ) )
+ return smwfEncodeMessages( $this->mErrors );
+
+ return $this->mErrors;
+ }
+
+ /**
+ * Return an array of error messages, or an empty array
+ * if no errors occurred.
+ */
+ public function getErrors() {
+ return $this->mErrors;
+ }
+}
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMParserFunctionParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_PARSERFUNCTION;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_PARSERFUNCTION );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
$r = preg_match( '/^\{\{\s*#([^\{\|\}:]+):/', $text, $m );
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -14,6 +14,10 @@
$this->m_parserId = WOM_PARSER_ID_PROPERTY;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_PROPERTY, WOM_TYPE_NESTPROPERTY );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
if ( !defined( 'SMW_VERSION' ) ) {
return null;
@@ -21,6 +25,26 @@
$text = substr( $text, $offset );
+ global $smwgRecursivePropertyValues;
+
+ $inQuerystring = false;
+ $o = $parentObj;
+ do {
+ if ( $o instanceof WOMQuerystringModel ) {
+ $inQuerystring = true;
+ break;
+ }
+ $o = $o->getParent();
+ } while ( $o != null );
+
+ if ( $inQuerystring || $smwgRecursivePropertyValues ) {
+ $semanticPropPattern = '/^\[\[ #
Beginning of the link
+ (?:([^:][^][]*?):[=:]) #
Property name (or a list of those)
+ /xu';
+ if ( !preg_match( $semanticPropPattern, $text, $m ) )
return null;
+
+ return array( 'len' => strlen( $m[0] ), 'obj' => new
WOMNestPropertyModel( $m[1] ) );
+ }
// copied from SemanticMediaWiki,
includes/SMW_ParserExtensions.php
// not deal with <nowiki>, could be bug here. SMW has the same
bug
// E.g., [[text::this <nowiki> is ]] </nowiki> not good]]
@@ -45,24 +69,6 @@
// }
$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;
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMPropertyValueParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_PROPERTY_VALUE;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_NESTPROPERTYVAL );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
if ( !( $parentObj instanceof WOMNestPropertyModel ) )
return null;
Added: trunk/extensions/WikiObjectModel/includes/parsers/WOMRedirectParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMRedirectParser.php
(rev 0)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMRedirectParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -0,0 +1,33 @@
+<?php
+/**
+ * @author Ning
+ *
+ * @file
+ * @ingroup WikiObjectModels
+ */
+
+class WOMRedirectParser extends WikiObjectModelParser {
+
+ public function __construct() {
+ parent::__construct();
+ $this->m_parserId = WOM_PARSER_ID_REDIRECT;
+ }
+
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_REDIRECT );
+ }
+
+ public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
+ if ( $offset != 0 ) return null;
+
+ $redirect = MagicWord::get( 'redirect' );
+ if ( !preg_match( '/^\s*(?:' . $redirect->getBaseRegex() . ')/'
. $redirect->getRegexCase(), $text, $m ) )
+ return null;
+ $len = strlen( $m[0] );
+ $text = substr( $text, $len );
+ if ( !preg_match( '/^\s*\[\[:?(.*?)(\|(.*?))*\]\]/', $text, $m
) )
+ return null;
+
+ return array( 'len' => $len + strlen( $m[0] ), 'obj' => new
WOMRedirectModel( $m[1] ) );
+ }
+}
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMSectionParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMSectionParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMSectionParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -15,6 +15,10 @@
$this->m_parserId = WOM_PARSER_ID_SECTION;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_SECTION );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$lastLF = ( $offset == 0 || $text { $offset - 1 } == "\n" );
$text = substr( $text, $offset );
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMTableParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_TABLE;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_TABLE );
+ }
+
// FIXME: what if table style uses parser function which contains
'return'
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
Modified: trunk/extensions/WikiObjectModel/includes/parsers/WOMTblCellParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMTblCellParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMTblCellParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_TABLECELL;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_TBL_CELL );
+ }
+
private function getFirstLineChar( $text, $offset ) {
for ( $i = $offset; $i >= 0; --$i ) {
if ( $text { $i } == "\n" ) {
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
===================================================================
---
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateFieldHolderParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_TEMPLATE_FIELD_HOLDER;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_TMPL_FIELD_HOLDER );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
$r = preg_match( '/^(\{\{\{([^{|}]+))([|}])/', $text, $m );
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WOMTemplateParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -13,6 +13,10 @@
$this->m_parserId = WOM_PARSER_ID_TEMPLATE;
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_TEMPLATE );
+ }
+
public function parseNext( $text, WikiObjectModelCollection $parentObj,
$offset = 0 ) {
$text = substr( $text, $offset );
$r = preg_match( '/^(\{\{([^{|}]+))([|}])/', $text, $m );
Modified:
trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
===================================================================
--- trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
2012-03-18 23:22:20 UTC (rev 114118)
+++ trunk/extensions/WikiObjectModel/includes/parsers/WikiObjectModelParser.php
2012-03-19 00:35:20 UTC (rev 114119)
@@ -53,6 +53,10 @@
return array( 'len' => 1, 'obj' => new WOMTextModel( $text { 0
} ) );
}
+ public function getValidModelTypes() {
+ return array( WOM_TYPE_TEXT );
+ }
+
// E.g.,
// semantic property is extended from internal links
// parser functions is extended from templates
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs