function Parser() {
$this->mTagHooks = array();
$this->mFunctionHooks = array();
- $this->mFunctionSynonymsValid = true;
$this->mFunctionSynonyms = array();
$this->clearState();
$this->setHook( 'pre', array( $this, 'renderPreTag' ) );
$this->mShowToc = true;
$this->mForceTocPosition = false;
- # This doesn't actually clear anything, but it seemed like a nice place to put it
- # Fill the function cache, if it needs filling
- $this->refreshFunctionCache();
-
wfRunHooks( 'ParserClearState', array( &$this ) );
}
$function = strtolower( substr( $part1, 1, $colonPos - 1 ) );
if ( isset( $this->mFunctionSynonyms[$function] ) ) {
$function = $this->mFunctionSynonyms[$function];
- }
- if ( isset( $this->mFunctionHooks[$function] ) ) {
$funcArgs = array_map( 'trim', $args );
$funcArgs = array_merge( array( &$this, trim( substr( $part1, $colonPos + 1 ) ) ), $funcArgs );
$result = call_user_func_array( $this->mFunctionHooks[$function], $funcArgs );
}
$oldVal = @$this->mFunctionHooks[$id];
$this->mFunctionHooks[$id] = $callback;
- # Invalidate function synonym cache
- $this->mFunctionSynonymsValid = false;
- return $oldVal;
- }
-
- /**
- * Make sure the function synonym cache is up to date
- */
- function refreshFunctionCache() {
- if ( !$this->mFunctionSynonymsValid ) {
- $this->mFunctionSynonyms = array();
- foreach( $this->mFunctionHooks as $key => $value ) {
- if ( is_int( $key ) ) {
- $mw = MagicWord::get( $key );
- $synonyms = $mw->getSynonyms();
- foreach( $synonyms as $synonym ) {
- $this->mFunctionSynonyms[strtolower($synonym)] = $key;
- }
- }
- }
- $this->mFunctionSynonymsValid = true;
+ # Add to function cache
+ if ( is_int( $id ) ) {
+ $mw = MagicWord::get( $id );
+ $mw->addToArray( $this->mFunctionSynonyms, $id );
+ } else {
+ $this->mFunctionSynonyms[$id] = $id;
}
+ return $oldVal;
}
/**