diff --git a/400_xowa/src/gplx/core/lists/hashs/Hash_adp__int.java b/400_xowa/src/gplx/core/lists/hashs/Hash_adp__int.java
index d6129ff9c..d3b9a1dfc 100644
--- a/400_xowa/src/gplx/core/lists/hashs/Hash_adp__int.java
+++ b/400_xowa/src/gplx/core/lists/hashs/Hash_adp__int.java
@@ -18,7 +18,7 @@ along with this program. If not, see .
package gplx.core.lists.hashs; import gplx.*; import gplx.core.*; import gplx.core.lists.*;
import gplx.core.primitives.*;
public class Hash_adp__int {
- private final Hash_adp hash = Hash_adp_.New();
+ private final Ordered_hash hash = Ordered_hash_.New();
private final Int_obj_ref tmp_key = Int_obj_ref.New_neg1();
public void Clear() {hash.Clear();}
public int Len() {return hash.Count();}
@@ -28,4 +28,5 @@ public class Hash_adp__int {
public void Add(Int_obj_ref key, Object obj) {hash.Add(key, obj);}
public void Add_if_dupe_use_1st(int key, Object obj) {hash.Add_if_dupe_use_1st(Int_obj_ref.New(key), obj);}
public void Add_if_dupe_use_nth(Int_obj_ref key, Object obj) {hash.Add_if_dupe_use_nth(key, obj);}
+ public Hash_adp__int Add_as_bry(int key, String val) {hash.Add(Int_obj_ref.New(key), Bry_.new_u8(val)); return this;}
}
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwLinker.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwLinker.java
index 7f2cf9baf..33cd99dd9 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwLinker.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwLinker.java
@@ -222,7 +222,7 @@ public class XomwLinker {
// global $wgContLang;
//
// // First we check whether the namespace exists or not.
-// if ( MWNamespace::exists( $namespace ) ) {
+// if ( XomwNamespace::exists( $namespace ) ) {
// if ( $namespace == NS_MAIN ) {
// $name = $context->msg( 'blanknamespace' )->text();
// } else {
@@ -608,8 +608,8 @@ public class XomwLinker {
// ThumbnailImage::toHtml() already adds page= onto the end of DjVu URLs
// So we don't need to pass it here in $query. However, the URL for the
// zoom icon still needs it, so we make a unique query for it. See bug 14771
-// byte[] url = $title->getLocalURL($query);
- byte[] url = Bry_.Empty;
+ byte[] url = title.getLocalURL(query);
+// byte[] url = Bry_.Empty;
// if ($page) {
// $url = wfAppendQuery($url, [ 'page' => $page ]);
// }
@@ -1256,7 +1256,7 @@ public class XomwLinker {
// function ( $match ) use ( $title, $local, $wikiId ) {
// global $wgContLang;
//
-// $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
+// $medians = '(?:' . preg_quote( XomwNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
// $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
//
// $comment = $match[0];
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwMediaWikiServices.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwMediaWikiServices.java
index 8bf312911..d9bbff42e 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwMediaWikiServices.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwMediaWikiServices.java
@@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
+import gplx.xowa.mediawiki.languages.*;
import gplx.xowa.mediawiki.includes.title.*;
/**
* MediaWikiServices is the service locator for the application scope of MediaWiki.
@@ -564,14 +565,15 @@ public class XomwMediaWikiServices {
// public function getLinkRenderer() {
// return $this->getService( 'LinkRenderer' );
// }
-//
-// /**
-// * @since 1.28
-// * @return TitleFormatter
-// */
-// public function getTitleFormatter() {
-// return $this->getService( 'TitleFormatter' );
-// }
+
+ /**
+ * @since 1.28
+ * @return TitleFormatter
+ */
+ public XomwMediaWikiTitleCodec getTitleFormatter() {
+ // return $this->getService( 'TitleFormatter' );
+ return titleParser;
+ }
/**
* @since 1.28
@@ -581,7 +583,7 @@ public class XomwMediaWikiServices {
// return $this->getService( 'TitleParser' );
return titleParser;
}
- private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec();
+ private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec(new XomwLanguage());
// /**
// * @since 1.28
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwNamespace.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwNamespace.java
new file mode 100644
index 000000000..f1392e036
--- /dev/null
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwNamespace.java
@@ -0,0 +1,502 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
+import gplx.core.lists.hashs.*;
+public class XomwNamespace {
+//
+// /**
+// * These namespaces should always be first-letter capitalized, now and
+// * forevermore. Historically, they could've probably been lowercased too,
+// * but some things are just too ingrained now. :)
+// */
+// private static $alwaysCapitalizedNamespaces = [ NS_SPECIAL, NS_USER, NS_MEDIAWIKI ];
+//
+// /**
+// * Throw an exception when trying to get the subject or talk page
+// * for a given namespace where it does not make sense.
+// * Special namespaces are defined in includes/Defines.php and have
+// * a value below 0 (ex: NS_SPECIAL = -1 , NS_MEDIA = -2)
+// *
+// * @param int $index
+// * @param String $method
+// *
+// * @throws MWException
+// * @return boolean
+// */
+// private static function isMethodValidFor($index, $method) {
+// if ($index < NS_MAIN) {
+// throw new MWException("$method does not make any sense for given namespace $index");
+// }
+// return true;
+// }
+//
+// /**
+// * Can pages in the given namespace be moved?
+// *
+// * @param int $index Namespace index
+// * @return boolean
+// */
+// public static function isMovable($index) {
+// global $wgAllowImageMoving;
+//
+// $result = !($index < NS_MAIN || ($index == NS_FILE && !$wgAllowImageMoving));
+//
+// /**
+// * @since 1.20
+// */
+// Hooks::run('NamespaceIsMovable', [ $index, &$result ]);
+//
+// return $result;
+// }
+//
+// /**
+// * Is the given namespace is a subject (non-talk) namespace?
+// *
+// * @param int $index Namespace index
+// * @return boolean
+// * @since 1.19
+// */
+// public static function isSubject($index) {
+// return !self::isTalk($index);
+// }
+//
+// /**
+// * Is the given namespace a talk namespace?
+// *
+// * @param int $index Namespace index
+// * @return boolean
+// */
+// public static function isTalk($index) {
+// return $index > NS_MAIN
+// && $index % 2;
+// }
+//
+// /**
+// * Get the talk namespace index for a given namespace
+// *
+// * @param int $index Namespace index
+// * @return int
+// */
+// public static function getTalk($index) {
+// self::isMethodValidFor($index, __METHOD__);
+// return self::isTalk($index)
+// ? $index
+// : $index + 1;
+// }
+//
+// /**
+// * Get the subject namespace index for a given namespace
+// * Special namespaces (NS_MEDIA, NS_SPECIAL) are always the subject.
+// *
+// * @param int $index Namespace index
+// * @return int
+// */
+// public static function getSubject($index) {
+// # Handle special namespaces
+// if ($index < NS_MAIN) {
+// return $index;
+// }
+//
+// return self::isTalk($index)
+// ? $index - 1
+// : $index;
+// }
+//
+// /**
+// * Get the associated namespace.
+// * For talk namespaces, returns the subject (non-talk) namespace
+// * For subject (non-talk) namespaces, returns the talk namespace
+// *
+// * @param int $index Namespace index
+// * @return int|null If no associated namespace could be found
+// */
+// public static function getAssociated($index) {
+// self::isMethodValidFor($index, __METHOD__);
+//
+// if (self::isSubject($index)) {
+// return self::getTalk($index);
+// } elseif (self::isTalk($index)) {
+// return self::getSubject($index);
+// } else {
+// return null;
+// }
+// }
+//
+// /**
+// * Returns whether the specified namespace exists
+// *
+// * @param int $index
+// *
+// * @return boolean
+// * @since 1.19
+// */
+// public static function exists($index) {
+// $nslist = self::getCanonicalNamespaces();
+// return isset($nslist[$index]);
+// }
+//
+// /**
+// * Returns whether the specified namespaces are the same namespace
+// *
+// * @note It's possible that in the future we may start using something
+// * other than just namespace indexes. Under that circumstance making use
+// * of this function rather than directly doing comparison will make
+// * sure that code will not potentially break.
+// *
+// * @param int $ns1 The first namespace index
+// * @param int $ns2 The second namespace index
+// *
+// * @return boolean
+// * @since 1.19
+// */
+// public static function equals($ns1, $ns2) {
+// return $ns1 == $ns2;
+// }
+//
+// /**
+// * Returns whether the specified namespaces share the same subject.
+// * eg: NS_USER and NS_USER wil return true, as well
+// * NS_USER and NS_USER_TALK will return true.
+// *
+// * @param int $ns1 The first namespace index
+// * @param int $ns2 The second namespace index
+// *
+// * @return boolean
+// * @since 1.19
+// */
+// public static function subjectEquals($ns1, $ns2) {
+// return self::getSubject($ns1) == self::getSubject($ns2);
+// }
+
+ /**
+ * Returns array of all defined namespaces with their canonical
+ * (English) names.
+ *
+ * @param boolean $rebuild Rebuild namespace list (default = false). Used for testing.
+ *
+ * @return array
+ * @since 1.17
+ */
+ private static Hash_adp__int namespaces = null;
+ public static Hash_adp__int getCanonicalNamespaces() {return getCanonicalNamespaces(false);}
+ public static Hash_adp__int getCanonicalNamespaces(boolean rebuild) {
+ if (namespaces == null || rebuild) {
+// global $wgExtraNamespaces, $wgCanonicalNamespaceNames;
+ namespaces = XomwSetup.wgCanonicalNamespaceNames;
+ namespaces.Add_as_bry(XomwDefines.NS_MAIN, "");
+
+// // Add extension namespaces
+// $namespaces += ExtensionRegistry::getInstance()->getAttribute('ExtensionNamespaces');
+// if (is_array($wgExtraNamespaces)) {
+// $namespaces += $wgExtraNamespaces;
+// }
+// Hooks::run('CanonicalNamespaces', [ &$namespaces ]);
+ }
+ return namespaces;
+ }
+
+// /**
+// * Returns the canonical (English) name for a given index
+// *
+// * @param int $index Namespace index
+// * @return String|boolean If no canonical definition.
+// */
+// public static function getCanonicalName($index) {
+// $nslist = self::getCanonicalNamespaces();
+// if (isset($nslist[$index])) {
+// return $nslist[$index];
+// } else {
+// return false;
+// }
+// }
+//
+// /**
+// * Returns the index for a given canonical name, or NULL
+// * The input *must* be converted to lower case first
+// *
+// * @param String $name Namespace name
+// * @return int
+// */
+// public static function getCanonicalIndex($name) {
+// static $xNamespaces = false;
+// if ($xNamespaces == false) {
+// $xNamespaces = [];
+// foreach (self::getCanonicalNamespaces() as $i => $text) {
+// $xNamespaces[strtolower($text)] = $i;
+// }
+// }
+// if (array_key_exists($name, $xNamespaces)) {
+// return $xNamespaces[$name];
+// } else {
+// return null;
+// }
+// }
+//
+// /**
+// * Returns an array of the namespaces (by integer id) that exist on the
+// * wiki. Used primarily by the api in help documentation.
+// * @return array
+// */
+// public static function getValidNamespaces() {
+// static $mValidNamespaces = null;
+//
+// if (is_null($mValidNamespaces)) {
+// foreach (array_keys(self::getCanonicalNamespaces()) as $ns) {
+// if ($ns >= 0) {
+// $mValidNamespaces[] = $ns;
+// }
+// }
+// // T109137: sort numerically
+// sort($mValidNamespaces, SORT_NUMERIC);
+// }
+//
+// return $mValidNamespaces;
+// }
+//
+// /**
+// * Can this namespace ever have a talk namespace?
+// *
+// * @param int $index Namespace index
+// * @return boolean
+// */
+// public static function canTalk($index) {
+// return $index >= NS_MAIN;
+// }
+//
+// /**
+// * Does this namespace contain content, for the purposes of calculating
+// * statistics, etc?
+// *
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function isContent($index) {
+// global $wgContentNamespaces;
+// return $index == NS_MAIN || in_array($index, $wgContentNamespaces);
+// }
+//
+// /**
+// * Might pages in this namespace require the use of the Signature button on
+// * the edit toolbar?
+// *
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function wantSignatures($index) {
+// global $wgExtraSignatureNamespaces;
+// return self::isTalk($index) || in_array($index, $wgExtraSignatureNamespaces);
+// }
+//
+// /**
+// * Can pages in a namespace be watched?
+// *
+// * @param int $index
+// * @return boolean
+// */
+// public static function isWatchable($index) {
+// return $index >= NS_MAIN;
+// }
+//
+// /**
+// * Does the namespace allow subpages?
+// *
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function hasSubpages($index) {
+// global $wgNamespacesWithSubpages;
+// return !empty($wgNamespacesWithSubpages[$index]);
+// }
+//
+// /**
+// * Get a list of all namespace indices which are considered to contain content
+// * @return array Array of namespace indices
+// */
+// public static function getContentNamespaces() {
+// global $wgContentNamespaces;
+// if (!is_array($wgContentNamespaces) || $wgContentNamespaces == []) {
+// return [ NS_MAIN ];
+// } elseif (!in_array(NS_MAIN, $wgContentNamespaces)) {
+// // always force NS_MAIN to be part of array (to match the algorithm used by isContent)
+// return array_merge([ NS_MAIN ], $wgContentNamespaces);
+// } else {
+// return $wgContentNamespaces;
+// }
+// }
+//
+// /**
+// * List all namespace indices which are considered subject, aka not a talk
+// * or special namespace. See also XomwNamespace::isSubject
+// *
+// * @return array Array of namespace indices
+// */
+// public static function getSubjectNamespaces() {
+// return array_filter(
+// XomwNamespace::getValidNamespaces(),
+// 'XomwNamespace::isSubject'
+// );
+// }
+//
+// /**
+// * List all namespace indices which are considered talks, aka not a subject
+// * or special namespace. See also XomwNamespace::isTalk
+// *
+// * @return array Array of namespace indices
+// */
+// public static function getTalkNamespaces() {
+// return array_filter(
+// XomwNamespace::getValidNamespaces(),
+// 'XomwNamespace::isTalk'
+// );
+// }
+//
+// /**
+// * Is the namespace first-letter capitalized?
+// *
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function isCapitalized($index) {
+// global $wgCapitalLinks, $wgCapitalLinkOverrides;
+// // Turn NS_MEDIA into NS_FILE
+// $index = $index == NS_MEDIA ? NS_FILE : $index;
+//
+// // Make sure to get the subject of our namespace
+// $index = self::getSubject($index);
+//
+// // Some namespaces are special and should always be upper case
+// if (in_array($index, self::$alwaysCapitalizedNamespaces)) {
+// return true;
+// }
+// if (isset($wgCapitalLinkOverrides[$index])) {
+// // $wgCapitalLinkOverrides is explicitly set
+// return $wgCapitalLinkOverrides[$index];
+// }
+// // Default to the global setting
+// return $wgCapitalLinks;
+// }
+//
+// /**
+// * Does the namespace (potentially) have different aliases for different
+// * genders. Not all languages make a distinction here.
+// *
+// * @since 1.18
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function hasGenderDistinction($index) {
+// return $index == NS_USER || $index == NS_USER_TALK;
+// }
+//
+// /**
+// * It is not possible to use pages from this namespace as template?
+// *
+// * @since 1.20
+// * @param int $index Index to check
+// * @return boolean
+// */
+// public static function isNonincludable($index) {
+// global $wgNonincludableNamespaces;
+// return $wgNonincludableNamespaces && in_array($index, $wgNonincludableNamespaces);
+// }
+//
+// /**
+// * Get the default content model for a namespace
+// * This does not mean that all pages in that namespace have the model
+// *
+// * @since 1.21
+// * @param int $index Index to check
+// * @return null|String Default model name for the given namespace, if set
+// */
+// public static function getNamespaceContentModel($index) {
+// global $wgNamespaceContentModels;
+// return isset($wgNamespaceContentModels[$index])
+// ? $wgNamespaceContentModels[$index]
+// : null;
+// }
+//
+// /**
+// * Determine which restriction levels it makes sense to use in a namespace,
+// * optionally filtered by a user's rights.
+// *
+// * @since 1.23
+// * @param int $index Index to check
+// * @param User $user User to check
+// * @return array
+// */
+// public static function getRestrictionLevels($index, User $user = null) {
+// global $wgNamespaceProtection, $wgRestrictionLevels;
+//
+// if (!isset($wgNamespaceProtection[$index])) {
+// // All levels are valid if there's no namespace restriction.
+// // But still filter by user, if necessary
+// $levels = $wgRestrictionLevels;
+// if ($user) {
+// $levels = array_values(array_filter($levels, function ($level) use ($user) {
+// $right = $level;
+// if ($right == 'sysop') {
+// $right = 'editprotected'; // BC
+// }
+// if ($right == 'autoconfirmed') {
+// $right = 'editsemiprotected'; // BC
+// }
+// return ($right == '' || $user->isAllowed($right));
+// }));
+// }
+// return $levels;
+// }
+//
+// // First, get the list of groups that can edit this namespace.
+// $namespaceGroups = [];
+// $combine = 'array_merge';
+// foreach ((array)$wgNamespaceProtection[$index] as $right) {
+// if ($right == 'sysop') {
+// $right = 'editprotected'; // BC
+// }
+// if ($right == 'autoconfirmed') {
+// $right = 'editsemiprotected'; // BC
+// }
+// if ($right != '') {
+// $namespaceGroups = call_user_func($combine, $namespaceGroups,
+// User::getGroupsWithPermission($right));
+// $combine = 'array_intersect';
+// }
+// }
+//
+// // Now, keep only those restriction levels where there is at least one
+// // group that can edit the namespace but would be blocked by the
+// // restriction.
+// $usableLevels = [ '' ];
+// foreach ($wgRestrictionLevels as $level) {
+// $right = $level;
+// if ($right == 'sysop') {
+// $right = 'editprotected'; // BC
+// }
+// if ($right == 'autoconfirmed') {
+// $right = 'editsemiprotected'; // BC
+// }
+// if ($right != '' && (!$user || $user->isAllowed($right)) &&
+// array_diff($namespaceGroups, User::getGroupsWithPermission($right))
+// ) {
+// $usableLevels[] = $level;
+// }
+// }
+//
+// return $usableLevels;
+// }
+}
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwSetup.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwSetup.java
new file mode 100644
index 000000000..3ce27987e
--- /dev/null
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwSetup.java
@@ -0,0 +1,900 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
+import gplx.core.lists.hashs.*;
+/**
+* Include most things that are needed to make MediaWiki work.
+*
+* This file is included by WebStart.php and doMaintenance.php so that both
+* web and maintenance scripts share a final set up phase to include necessary
+* files and create global Object variables.
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+* http://www.gnu.org/copyleft/gpl.html
+*
+* @file
+*/
+public class XomwSetup {
+// /**
+// * This file is not a valid entry point, perform no further processing unless
+// * MEDIAWIKI is defined
+// */
+// if ( !defined( 'MEDIAWIKI' ) ) {
+// exit( 1 );
+// }
+//
+// $fname = 'Setup.php';
+// $ps_setup = Profiler::instance()->scopedProfileIn( $fname );
+//
+// // Load queued extensions
+// ExtensionRegistry::getInstance()->loadFromQueue();
+// // Don't let any other extensions load
+// ExtensionRegistry::getInstance()->finish();
+//
+// // Check to see if we are at the file scope
+// if ( !isset( $wgVersion ) ) {
+// echo "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
+// die( 1 );
+// }
+//
+// mb_internal_encoding( 'UTF-8' );
+//
+// // Set various default paths sensibly...
+// $ps_default = Profiler::instance()->scopedProfileIn( $fname . '-defaults' );
+//
+// if ( $wgScript === false ) {
+// $wgScript = "$wgScriptPath/index.php";
+// }
+// if ( $wgLoadScript === false ) {
+// $wgLoadScript = "$wgScriptPath/load.php";
+// }
+//
+// if ( $wgArticlePath === false ) {
+// if ( $wgUsePathInfo ) {
+// $wgArticlePath = "$wgScript/$1";
+// } else {
+// $wgArticlePath = "$wgScript?title=$1";
+// }
+// }
+//
+// if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
+// // 'view' is assumed the default action path everywhere in the code
+// // but is rarely filled in $wgActionPaths
+// $wgActionPaths['view'] = $wgArticlePath;
+// }
+//
+// if ( $wgResourceBasePath === null ) {
+// $wgResourceBasePath = $wgScriptPath;
+// }
+// if ( $wgStylePath === false ) {
+// $wgStylePath = "$wgResourceBasePath/skins";
+// }
+// if ( $wgLocalStylePath === false ) {
+// // Avoid wgResourceBasePath here since that may point to a different domain (e.g. CDN)
+// $wgLocalStylePath = "$wgScriptPath/skins";
+// }
+// if ( $wgExtensionAssetsPath === false ) {
+// $wgExtensionAssetsPath = "$wgResourceBasePath/extensions";
+// }
+//
+// if ( $wgLogo === false ) {
+// $wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
+// }
+//
+// if ( $wgUploadPath === false ) {
+// $wgUploadPath = "$wgScriptPath/images";
+// }
+// if ( $wgUploadDirectory === false ) {
+// $wgUploadDirectory = "$IP/images";
+// }
+// if ( $wgReadOnlyFile === false ) {
+// $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
+// }
+// if ( $wgFileCacheDirectory === false ) {
+// $wgFileCacheDirectory = "{$wgUploadDirectory}/cache";
+// }
+// if ( $wgDeletedDirectory === false ) {
+// $wgDeletedDirectory = "{$wgUploadDirectory}/deleted";
+// }
+//
+// if ( $wgGitInfoCacheDirectory === false && $wgCacheDirectory !== false ) {
+// $wgGitInfoCacheDirectory = "{$wgCacheDirectory}/gitinfo";
+// }
+//
+// if ( $wgEnableParserCache === false ) {
+// $wgParserCacheType = CACHE_NONE;
+// }
+//
+// // Fix path to icon images after they were moved in 1.24
+// if ( $wgRightsIcon ) {
+// $wgRightsIcon = str_replace(
+// "{$wgStylePath}/common/images/",
+// "{$wgResourceBasePath}/resources/assets/licenses/",
+// $wgRightsIcon
+// );
+// }
+//
+// if ( isset( $wgFooterIcons['copyright']['copyright'] )
+// && $wgFooterIcons['copyright']['copyright'] === []
+// ) {
+// if ( $wgRightsIcon || $wgRightsText ) {
+// $wgFooterIcons['copyright']['copyright'] = [
+// 'url' => $wgRightsUrl,
+// 'src' => $wgRightsIcon,
+// 'alt' => $wgRightsText,
+// ];
+// }
+// }
+//
+// if ( isset( $wgFooterIcons['poweredby'] )
+// && isset( $wgFooterIcons['poweredby']['mediawiki'] )
+// && $wgFooterIcons['poweredby']['mediawiki']['src'] === null
+// ) {
+// $wgFooterIcons['poweredby']['mediawiki']['src'] =
+// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
+// $wgFooterIcons['poweredby']['mediawiki']['srcset'] =
+// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
+// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
+// }
+//
+// /**
+// * Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a
+// * sysadmin to set $wgNamespaceProtection incorrectly and leave the wiki insecure.
+// *
+// * Note that this is the definition of editinterface and it can be granted to
+// * all users if desired.
+// */
+// $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
+//
+// /**
+// * The canonical names of namespaces 6 and 7 are, as of v1.14, "File"
+// * and "File_talk". The old names "Image" and "Image_talk" are
+// * retained as aliases for backwards compatibility.
+// */
+// $wgNamespaceAliases['Image'] = NS_FILE;
+// $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
+//
+// /**
+// * Initialise $wgLockManagers to include basic FS version
+// */
+// $wgLockManagers[] = [
+// 'name' => 'fsLockManager',
+// 'class' => 'FSLockManager',
+// 'lockDirectory' => "{$wgUploadDirectory}/lockdir",
+// ];
+// $wgLockManagers[] = [
+// 'name' => 'nullLockManager',
+// 'class' => 'NullLockManager',
+// ];
+//
+// /**
+// * Initialise $wgLocalFileRepo from backwards-compatible settings
+// */
+// if ( !$wgLocalFileRepo ) {
+// $wgLocalFileRepo = [
+// 'class' => 'LocalRepo',
+// 'name' => 'local',
+// 'directory' => $wgUploadDirectory,
+// 'scriptDirUrl' => $wgScriptPath,
+// 'scriptExtension' => '.php',
+// 'url' => $wgUploadBaseUrl ? $wgUploadBaseUrl . $wgUploadPath : $wgUploadPath,
+// 'hashLevels' => $wgHashedUploadDirectory ? 2 : 0,
+// 'thumbScriptUrl' => $wgThumbnailScriptPath,
+// 'transformVia404' => !$wgGenerateThumbnailOnParse,
+// 'deletedDir' => $wgDeletedDirectory,
+// 'deletedHashLevels' => $wgHashedUploadDirectory ? 3 : 0
+// ];
+// }
+// /**
+// * Initialise shared repo from backwards-compatible settings
+// */
+// if ( $wgUseSharedUploads ) {
+// if ( $wgSharedUploadDBname ) {
+// $wgForeignFileRepos[] = [
+// 'class' => 'ForeignDBRepo',
+// 'name' => 'shared',
+// 'directory' => $wgSharedUploadDirectory,
+// 'url' => $wgSharedUploadPath,
+// 'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
+// 'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
+// 'transformVia404' => !$wgGenerateThumbnailOnParse,
+// 'dbType' => $wgDBtype,
+// 'dbServer' => $wgDBserver,
+// 'dbUser' => $wgDBuser,
+// 'dbPassword' => $wgDBpassword,
+// 'dbName' => $wgSharedUploadDBname,
+// 'dbFlags' => ( $wgDebugDumpSql ? DBO_DEBUG : 0 ) | DBO_DEFAULT,
+// 'tablePrefix' => $wgSharedUploadDBprefix,
+// 'hasSharedCache' => $wgCacheSharedUploads,
+// 'descBaseUrl' => $wgRepositoryBaseUrl,
+// 'fetchDescription' => $wgFetchCommonsDescriptions,
+// ];
+// } else {
+// $wgForeignFileRepos[] = [
+// 'class' => 'FileRepo',
+// 'name' => 'shared',
+// 'directory' => $wgSharedUploadDirectory,
+// 'url' => $wgSharedUploadPath,
+// 'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
+// 'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
+// 'transformVia404' => !$wgGenerateThumbnailOnParse,
+// 'descBaseUrl' => $wgRepositoryBaseUrl,
+// 'fetchDescription' => $wgFetchCommonsDescriptions,
+// ];
+// }
+// }
+// if ( $wgUseInstantCommons ) {
+// $wgForeignFileRepos[] = [
+// 'class' => 'ForeignAPIRepo',
+// 'name' => 'wikimediacommons',
+// 'apibase' => 'https://commons.wikimedia.org/w/api.php',
+// 'url' => 'https://upload.wikimedia.org/wikipedia/commons',
+// 'thumbUrl' => 'https://upload.wikimedia.org/wikipedia/commons/thumb',
+// 'hashLevels' => 2,
+// 'transformVia404' => true,
+// 'fetchDescription' => true,
+// 'descriptionCacheExpiry' => 43200,
+// 'apiThumbCacheExpiry' => 0,
+// ];
+// }
+// /*
+// * Add on default file backend config for file repos.
+// * FileBackendGroup will handle initializing the backends.
+// */
+// if ( !isset( $wgLocalFileRepo['backend'] ) ) {
+// $wgLocalFileRepo['backend'] = $wgLocalFileRepo['name'] . '-backend';
+// }
+// foreach ( $wgForeignFileRepos as &$repo ) {
+// if ( !isset( $repo['directory'] ) && $repo['class'] === 'ForeignAPIRepo' ) {
+// $repo['directory'] = $wgUploadDirectory; // b/c
+// }
+// if ( !isset( $repo['backend'] ) ) {
+// $repo['backend'] = $repo['name'] . '-backend';
+// }
+// }
+// unset( $repo ); // no global pollution; destroy reference
+//
+// $rcMaxAgeDays = $wgRCMaxAge / ( 3600 * 24 );
+// if ( $wgRCFilterByAge ) {
+// // Trim down $wgRCLinkDays so that it only lists links which are valid
+// // as determined by $wgRCMaxAge.
+// // Note that we allow 1 link higher than the max for things like 56 days but a 60 day link.
+// sort( $wgRCLinkDays );
+//
+// // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+// for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
+// // @codingStandardsIgnoreEnd
+// if ( $wgRCLinkDays[$i] >= $rcMaxAgeDays ) {
+// $wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false );
+// break;
+// }
+// }
+// }
+// // Ensure that default user options are not invalid, since that breaks Special:Preferences
+// $wgDefaultUserOptions['rcdays'] = min(
+// $wgDefaultUserOptions['rcdays'],
+// ceil( $rcMaxAgeDays )
+// );
+// $wgDefaultUserOptions['watchlistdays'] = min(
+// $wgDefaultUserOptions['watchlistdays'],
+// ceil( $rcMaxAgeDays )
+// );
+// unset( $rcMaxAgeDays );
+//
+// if ( $wgSkipSkin ) {
+// $wgSkipSkins[] = $wgSkipSkin;
+// }
+//
+// $wgSkipSkins[] = 'fallback';
+// $wgSkipSkins[] = 'apioutput';
+//
+// if ( $wgLocalInterwiki ) {
+// array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
+// }
+//
+// // Set default shared prefix
+// if ( $wgSharedPrefix === false ) {
+// $wgSharedPrefix = $wgDBprefix;
+// }
+//
+// // Set default shared schema
+// if ( $wgSharedSchema === false ) {
+// $wgSharedSchema = $wgDBmwschema;
+// }
+//
+// if ( !$wgCookiePrefix ) {
+// if ( $wgSharedDB && $wgSharedPrefix && in_array( 'user', $wgSharedTables ) ) {
+// $wgCookiePrefix = $wgSharedDB . '_' . $wgSharedPrefix;
+// } elseif ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
+// $wgCookiePrefix = $wgSharedDB;
+// } elseif ( $wgDBprefix ) {
+// $wgCookiePrefix = $wgDBname . '_' . $wgDBprefix;
+// } else {
+// $wgCookiePrefix = $wgDBname;
+// }
+// }
+// $wgCookiePrefix = strtr( $wgCookiePrefix, '=,; +."\'\\[', '__________' );
+//
+// if ( $wgEnableEmail ) {
+// $wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
+// } else {
+// // Disable all other email settings automatically if $wgEnableEmail
+// // is set to false. - bug 63678
+// $wgAllowHTMLEmail = false;
+// $wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
+// $wgEnableUserEmail = false;
+// $wgEnotifFromEditor = false;
+// $wgEnotifImpersonal = false;
+// $wgEnotifMaxRecips = 0;
+// $wgEnotifMinorEdits = false;
+// $wgEnotifRevealEditorAddress = false;
+// $wgEnotifUseRealName = false;
+// $wgEnotifUserTalk = false;
+// $wgEnotifWatchlist = false;
+// unset( $wgGroupPermissions['user']['sendemail'] );
+// $wgUseEnotif = false;
+// $wgUserEmailUseReplyTo = false;
+// $wgUsersNotifiedOnAllChanges = [];
+// }
+//
+// if ( $wgMetaNamespace === false ) {
+// $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
+// }
+//
+// // Default value is 2000 or the suhosin limit if it is between 1 and 2000
+// if ( $wgResourceLoaderMaxQueryLength === false ) {
+// $suhosinMaxValueLength = (int)ini_get( 'suhosin.get.max_value_length' );
+// if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
+// $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
+// } else {
+// $wgResourceLoaderMaxQueryLength = 2000;
+// }
+// unset( $suhosinMaxValueLength );
+// }
+//
+// // Ensure the minimum chunk size is less than PHP upload limits or the maximum
+// // upload size.
+// $wgMinUploadChunkSize = min(
+// $wgMinUploadChunkSize,
+// UploadBase::getMaxUploadSize( 'file' ),
+// UploadBase::getMaxPhpUploadSize(),
+// ( wfShorthandToInteger(
+// ini_get( 'post_max_size' ) ?: ini_get( 'hhvm.server.max_post_size' ),
+// PHP_INT_MAX
+// ) ?: PHP_INT_MAX ) - 1024 // Leave some room for other POST parameters
+// );
+
+ /**
+ * Definitions of the NS_ constants are in Defines.php
+ * @private
+ */
+ public static Hash_adp__int wgCanonicalNamespaceNames = new Hash_adp__int()
+ .Add_as_bry(XomwDefines.NS_MEDIA , "Media")
+ .Add_as_bry(XomwDefines.NS_SPECIAL , "Special")
+ .Add_as_bry(XomwDefines.NS_TALK , "Talk")
+ .Add_as_bry(XomwDefines.NS_USER , "User")
+ .Add_as_bry(XomwDefines.NS_USER_TALK , "User_talk")
+ .Add_as_bry(XomwDefines.NS_PROJECT , "Project")
+ .Add_as_bry(XomwDefines.NS_PROJECT_TALK , "Project_talk")
+ .Add_as_bry(XomwDefines.NS_FILE , "File")
+ .Add_as_bry(XomwDefines.NS_FILE_TALK , "File_talk")
+ .Add_as_bry(XomwDefines.NS_MEDIAWIKI , "MediaWiki")
+ .Add_as_bry(XomwDefines.NS_MEDIAWIKI_TALK , "MediaWiki_talk")
+ .Add_as_bry(XomwDefines.NS_TEMPLATE , "Template")
+ .Add_as_bry(XomwDefines.NS_TEMPLATE_TALK , "Template_talk")
+ .Add_as_bry(XomwDefines.NS_HELP , "Help")
+ .Add_as_bry(XomwDefines.NS_HELP_TALK , "Help_talk")
+ .Add_as_bry(XomwDefines.NS_CATEGORY , "Category")
+ .Add_as_bry(XomwDefines.NS_CATEGORY_TALK , "Category_talk")
+ ;
+
+// /// @todo UGLY UGLY
+// if ( is_array( $wgExtraNamespaces ) ) {
+// $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
+// }
+//
+// // These are now the same, always
+// // To determine the user language, use $wgLang->getCode()
+// $wgContLanguageCode = $wgLanguageCode;
+//
+// // Easy to forget to falsify $wgDebugToolbar for static caches.
+// // If file cache or CDN cache is on, just disable this (DWIMD).
+// if ( $wgUseFileCache || $wgUseSquid ) {
+// $wgDebugToolbar = false;
+// }
+//
+// // We always output HTML5 since 1.22, overriding these is no longer supported
+// // we set them here for extensions that depend on its value.
+// $wgHtml5 = true;
+// $wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml';
+// $wgJsMimeType = 'text/javascript';
+//
+// // Blacklisted file extensions shouldn't appear on the "allowed" list
+// $wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) );
+//
+// if ( $wgInvalidateCacheOnLocalSettingsChange ) {
+// MediaWiki\suppressWarnings();
+// $wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', filemtime( "$IP/LocalSettings.php" ) ) );
+// MediaWiki\restoreWarnings();
+// }
+//
+// if ( $wgNewUserLog ) {
+// // Add a new log type
+// $wgLogTypes[] = 'newusers';
+// $wgLogNames['newusers'] = 'newuserlogpage';
+// $wgLogHeaders['newusers'] = 'newuserlogpagetext';
+// $wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
+// $wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
+// $wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
+// $wgLogActionsHandlers['newusers/byemail'] = 'NewUsersLogFormatter';
+// $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
+// }
+//
+// if ( $wgPageLanguageUseDB ) {
+// $wgLogTypes[] = 'pagelang';
+// $wgLogActionsHandlers['pagelang/pagelang'] = 'PageLangLogFormatter';
+// }
+//
+// if ( $wgCookieSecure === 'detect' ) {
+// $wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
+// }
+//
+// if ( $wgProfileOnly ) {
+// $wgDebugLogGroups['profileoutput'] = $wgDebugLogFile;
+// $wgDebugLogFile = '';
+// }
+//
+// // Backwards compatibility with old password limits
+// if ( $wgMinimalPasswordLength !== false ) {
+// $wgPasswordPolicy['policies']['default']['MinimalPasswordLength'] = $wgMinimalPasswordLength;
+// }
+//
+// if ( $wgMaximalPasswordLength !== false ) {
+// $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
+// }
+//
+// // Backwards compatibility warning
+// if ( !$wgSessionsInObjectCache ) {
+// wfDeprecated( '$wgSessionsInObjectCache = false', '1.27' );
+// if ( $wgSessionHandler ) {
+// wfDeprecated( '$wgSessionsHandler', '1.27' );
+// }
+// $cacheType = get_class( ObjectCache::getInstance( $wgSessionCacheType ) );
+// wfDebugLog(
+// 'caches',
+// "Session data will be stored in \"$cacheType\" cache with " .
+// "expiry $wgObjectCacheSessionExpiry seconds"
+// );
+// }
+// $wgSessionsInObjectCache = true;
+//
+// if ( $wgPHPSessionHandling !== 'enable' &&
+// $wgPHPSessionHandling !== 'warn' &&
+// $wgPHPSessionHandling !== 'disable'
+// ) {
+// $wgPHPSessionHandling = 'warn';
+// }
+// if ( defined( 'MW_NO_SESSION' ) ) {
+// // If the entry point wants no session, force 'disable' here unless they
+// // specifically set it to the (undocumented) 'warn'.
+// $wgPHPSessionHandling = MW_NO_SESSION === 'warn' ? 'warn' : 'disable';
+// }
+//
+// Profiler::instance()->scopedProfileOut( $ps_default );
+//
+// // Disable MWDebug for command line mode, this prevents MWDebug from eating up
+// // all the memory from logging SQL queries on maintenance scripts
+// global $wgCommandLineMode;
+// if ( $wgDebugToolbar && !$wgCommandLineMode ) {
+// MWDebug::init();
+// }
+//
+// // Reset the global service locator, so any services that have already been created will be
+// // re-created while taking into account any custom settings and extensions.
+// MediaWikiServices::resetGlobalInstance( new GlobalVarConfig(), 'quick' );
+//
+// if ( $wgSharedDB && $wgSharedTables ) {
+// // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
+// MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
+// array_fill_keys(
+// $wgSharedTables,
+// [
+// 'dbname' => $wgSharedDB,
+// 'schema' => $wgSharedSchema,
+// 'prefix' => $wgSharedPrefix
+// ]
+// )
+// );
+// }
+//
+// // Define a constant that indicates that the bootstrapping of the service locator
+// // is complete.
+// define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
+//
+// // Install a header callback to prevent caching of responses with cookies (T127993)
+// if ( !$wgCommandLineMode ) {
+// header_register_callback( function () {
+// $headers = [];
+// foreach ( headers_list() as $header ) {
+// list( $name, $value ) = explode( ':', $header, 2 );
+// $headers[strtolower( trim( $name ) )][] = trim( $value );
+// }
+//
+// if ( isset( $headers['set-cookie'] ) ) {
+// $cacheControl = isset( $headers['cache-control'] )
+// ? implode( ', ', $headers['cache-control'] )
+// : '';
+//
+// if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
+// header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
+// header( 'Cache-Control: private, max-age=0, s-maxage=0' );
+// MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
+// 'Cookies set on {url} with Cache-Control "{cache-control}"', [
+// 'url' => WebRequest::getGlobalRequestURL(),
+// 'cookies' => $headers['set-cookie'],
+// 'cache-control' => $cacheControl ?: '',
+// ]
+// );
+// }
+// }
+// } );
+// }
+//
+// MWExceptionHandler::installHandler();
+//
+// require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
+//
+// $ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' );
+//
+// // T48998: Bail out early if $wgArticlePath is non-absolute
+// foreach ( [ 'wgArticlePath', 'wgVariantArticlePath' ] as $varName ) {
+// if ( $$varName && !preg_match( '/^(https?:\/\/|\/)/', $$varName ) ) {
+// throw new FatalError(
+// "If you use a relative URL for \$$varName, it must start " .
+// 'with a slash (/).
See ' .
+// "" .
+// "https://www.mediawiki.org/wiki/Manual:\$$varName."
+// );
+// }
+// }
+//
+// Profiler::instance()->scopedProfileOut( $ps_validation );
+//
+// $ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
+//
+// if ( $wgCanonicalServer === false ) {
+// $wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
+// }
+//
+// // Set server name
+// $serverParts = wfParseUrl( $wgCanonicalServer );
+// if ( $wgServerName !== false ) {
+// wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
+// . 'not customized. Overwriting $wgServerName.' );
+// }
+// $wgServerName = $serverParts['host'];
+// unset( $serverParts );
+//
+// // Set defaults for configuration variables
+// // that are derived from the server name by default
+// // Note: $wgEmergencyContact and $wgPasswordSender may be false or empty String (T104142)
+// if ( !$wgEmergencyContact ) {
+// $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
+// }
+// if ( !$wgPasswordSender ) {
+// $wgPasswordSender = 'apache@' . $wgServerName;
+// }
+// if ( !$wgNoReplyAddress ) {
+// $wgNoReplyAddress = $wgPasswordSender;
+// }
+//
+// if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
+// $wgSecureLogin = false;
+// wfWarn( 'Secure login was enabled on a server that only supports '
+// . 'HTTP or HTTPS. Disabling secure login.' );
+// }
+//
+// $wgVirtualRestConfig['global']['domain'] = $wgCanonicalServer;
+//
+// // Now that GlobalFunctions is loaded, set defaults that depend on it.
+// if ( $wgTmpDirectory === false ) {
+// $wgTmpDirectory = wfTempDir();
+// }
+//
+// // We don't use counters anymore. Left here for extensions still
+// // expecting this to exist. Should be removed sometime 1.26 or later.
+// if ( !isset( $wgDisableCounters ) ) {
+// $wgDisableCounters = true;
+// }
+//
+// if ( $wgMainWANCache === false ) {
+// // Setup a WAN cache from $wgMainCacheType with no relayer.
+// // Sites using multiple datacenters can configure a relayer.
+// $wgMainWANCache = 'mediawiki-main-default';
+// $wgWANObjectCaches[$wgMainWANCache] = [
+// 'class' => 'WANObjectCache',
+// 'cacheId' => $wgMainCacheType,
+// 'channels' => [ 'purge' => 'wancache-main-default-purge' ]
+// ];
+// }
+//
+// Profiler::instance()->scopedProfileOut( $ps_default2 );
+//
+// $ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc1' );
+//
+// // Raise the memory limit if it's too low
+// wfMemoryLimit();
+//
+// /**
+// * Set up the timezone, suppressing the pseudo-security warning in PHP 5.1+
+// * that happens whenever you use a date function without the timezone being
+// * explicitly set. Inspired by phpMyAdmin's treatment of the problem.
+// */
+// if ( is_null( $wgLocaltimezone ) ) {
+// MediaWiki\suppressWarnings();
+// $wgLocaltimezone = date_default_timezone_get();
+// MediaWiki\restoreWarnings();
+// }
+//
+// date_default_timezone_set( $wgLocaltimezone );
+// if ( is_null( $wgLocalTZoffset ) ) {
+// $wgLocalTZoffset = date( 'Z' ) / 60;
+// }
+// // The part after the System| is ignored, but rest of MW fills it
+// // out as the local offset.
+// $wgDefaultUserOptions['timecorrection'] = "System|$wgLocalTZoffset";
+//
+// if ( !$wgDBerrorLogTZ ) {
+// $wgDBerrorLogTZ = $wgLocaltimezone;
+// }
+//
+// // initialize the request Object in $wgRequest
+// $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
+// // Set user IP/agent information for causal consistency purposes
+// MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [
+// 'IPAddress' => $wgRequest->getIP(),
+// 'UserAgent' => $wgRequest->getHeader( 'User-Agent' ),
+// 'ChronologyProtection' => $wgRequest->getHeader( 'ChronologyProtection' )
+// ] );
+//
+// // Useful debug output
+// if ( $wgCommandLineMode ) {
+// wfDebug( "\n\nStart command line script $self\n" );
+// } else {
+// $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
+//
+// if ( $wgDebugPrintHttpHeaders ) {
+// $debug .= "HTTP HEADERS:\n";
+//
+// foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
+// $debug .= "$name: $value\n";
+// }
+// }
+// wfDebug( $debug );
+// }
+//
+// Profiler::instance()->scopedProfileOut( $ps_misc );
+// $ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' );
+//
+// $wgMemc = wfGetMainCache();
+// $messageMemc = wfGetMessageCacheStorage();
+// $parserMemc = wfGetParserCacheStorage();
+//
+// wfDebugLog( 'caches',
+// 'cluster: ' . get_class( $wgMemc ) .
+// ', WAN: ' . ( $wgMainWANCache === CACHE_NONE ? 'CACHE_NONE' : $wgMainWANCache ) .
+// ', stash: ' . $wgMainStash .
+// ', message: ' . get_class( $messageMemc ) .
+// ', parser: ' . get_class( $parserMemc ) .
+// ', session: ' . get_class( ObjectCache::getInstance( $wgSessionCacheType ) )
+// );
+//
+// Profiler::instance()->scopedProfileOut( $ps_memcached );
+//
+// // Most of the config is out, some might want to run hooks here.
+// Hooks::run( 'SetupAfterCache' );
+//
+// $ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' );
+//
+// /**
+// * @var Language $wgContLang
+// */
+// $wgContLang = Language::factory( $wgLanguageCode );
+// $wgContLang->initContLang();
+//
+// // Now that variant lists may be available...
+// $wgRequest->interpolateTitle();
+//
+// if ( !is_object( $wgAuth ) ) {
+// $wgAuth = new MediaWiki\Auth\AuthManagerAuthPlugin;
+// Hooks::run( 'AuthPluginSetup', [ &$wgAuth ] );
+// }
+// if ( $wgAuth && !$wgAuth instanceof MediaWiki\Auth\AuthManagerAuthPlugin ) {
+// MediaWiki\Auth\AuthManager::singleton()->forcePrimaryAuthenticationProviders( [
+// new MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider( [
+// 'authoritative' => false,
+// ] ),
+// new MediaWiki\Auth\AuthPluginPrimaryAuthenticationProvider( $wgAuth ),
+// new MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider( [
+// 'authoritative' => true,
+// ] ),
+// ], '$wgAuth is ' . get_class( $wgAuth ) );
+// }
+//
+// // Set up the session
+// $ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
+// /**
+// * @var MediaWiki\Session\SessionId|null $wgInitialSessionId The persistent
+// * session ID (if any) loaded at startup
+// */
+// $wgInitialSessionId = null;
+// if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
+// // If session.auto_start is there, we can't touch session name
+// if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
+// session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
+// }
+//
+// // Create the SessionManager singleton and set up our session handler,
+// // unless we're specifically asked not to.
+// if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
+// MediaWiki\Session\PHPSessionHandler::install(
+// MediaWiki\Session\SessionManager::singleton()
+// );
+// }
+//
+// // Initialize the session
+// try {
+// $session = MediaWiki\Session\SessionManager::getGlobalSession();
+// } catch ( OverflowException $ex ) {
+// if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) {
+// // The exception is because the request had multiple possible
+// // sessions tied for top priority. Report this to the user.
+// $list = [];
+// foreach ( $ex->sessionInfos as $info ) {
+// $list[] = $info->getProvider()->describe( $wgContLang );
+// }
+// $list = $wgContLang->listToText( $list );
+// throw new HttpError( 400,
+// Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $wgContLang )->plain()
+// );
+// }
+//
+// // Not the one we want, rethrow
+// throw $ex;
+// }
+//
+// if ( $session->isPersistent() ) {
+// $wgInitialSessionId = $session->getSessionId();
+// }
+//
+// $session->renew();
+// if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
+// ( $session->isPersistent() || $session->shouldRememberUser() )
+// ) {
+// // Start the PHP-session for backwards compatibility
+// session_id( $session->getId() );
+// MediaWiki\quietCall( 'session_start' );
+// }
+//
+// unset( $session );
+// } else {
+// // Even if we didn't set up a global Session, still install our session
+// // handler unless specifically requested not to.
+// if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
+// MediaWiki\Session\PHPSessionHandler::install(
+// MediaWiki\Session\SessionManager::singleton()
+// );
+// }
+// }
+// Profiler::instance()->scopedProfileOut( $ps_session );
+//
+// /**
+// * @var User $wgUser
+// */
+// $wgUser = RequestContext::getMain()->getUser(); // BackCompat
+//
+// /**
+// * @var Language $wgLang
+// */
+// $wgLang = new StubUserLang;
+//
+// /**
+// * @var OutputPage $wgOut
+// */
+// $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
+//
+// /**
+// * @var Parser $wgParser
+// */
+// $wgParser = new StubObject( 'wgParser', function () {
+// return MediaWikiServices::getInstance()->getParser();
+// } );
+//
+// /**
+// * @var Title $wgTitle
+// */
+// $wgTitle = null;
+//
+// Profiler::instance()->scopedProfileOut( $ps_globals );
+// $ps_extensions = Profiler::instance()->scopedProfileIn( $fname . '-extensions' );
+//
+// // Extension setup functions
+// // Entries should be added to this variable during the inclusion
+// // of the extension file. This allows the extension to perform
+// // any necessary initialisation in the fully initialised environment
+// foreach ( $wgExtensionFunctions as $func ) {
+// // Allow closures in PHP 5.3+
+// if ( is_object( $func ) && $func instanceof Closure ) {
+// $profName = $fname . '-extensions-closure';
+// } elseif ( is_array( $func ) ) {
+// if ( is_object( $func[0] ) ) {
+// $profName = $fname . '-extensions-' . get_class( $func[0] ) . '::' . $func[1];
+// } else {
+// $profName = $fname . '-extensions-' . implode( '::', $func );
+// }
+// } else {
+// $profName = $fname . '-extensions-' . strval( $func );
+// }
+//
+// $ps_ext_func = Profiler::instance()->scopedProfileIn( $profName );
+// call_user_func( $func );
+// Profiler::instance()->scopedProfileOut( $ps_ext_func );
+// }
+//
+// // If the session user has a 0 id but a valid name, that means we need to
+// // autocreate it.
+// if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
+// $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
+// if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) {
+// $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' );
+// $res = MediaWiki\Auth\AuthManager::singleton()->autoCreateUser(
+// $sessionUser,
+// MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
+// true
+// );
+// Profiler::instance()->scopedProfileOut( $ps_autocreate );
+// \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
+// 'event' => 'autocreate',
+// 'status' => $res,
+// ] );
+// unset( $res );
+// }
+// unset( $sessionUser );
+// }
+//
+// if ( !$wgCommandLineMode ) {
+// Pingback::schedulePingback();
+// }
+//
+// $wgFullyInitialised = true;
+//
+// Profiler::instance()->scopedProfileOut( $ps_extensions );
+// Profiler::instance()->scopedProfileOut( $ps_setup );
+}
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwTitle.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwTitle.java
index 94e03c822..4c8811f29 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwTitle.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/XomwTitle.java
@@ -158,19 +158,19 @@ public class XomwTitle {
// /** @var boolean Would deleting this page be a big deletion? */
// private $mIsBigDeletion = null;
// // @}
-//
-// /**
-// * B/C kludge: provide a TitleParser for use by Title.
-// * Ideally, Title would have no methods that need this.
-// * Avoid usage of this singleton by using TitleValue
-// * and the associated services when possible.
-// *
-// * @return TitleFormatter
-// */
-// private static function getTitleFormatter() {
-// return MediaWikiServices::getInstance().getTitleFormatter();
-// }
-//
+
+ /**
+ * B/C kludge: provide a TitleParser for use by Title.
+ * Ideally, Title would have no methods that need this.
+ * Avoid usage of this singleton by using TitleValue
+ * and the associated services when possible.
+ *
+ * @return TitleFormatter
+ */
+ private static XomwMediaWikiTitleCodec getTitleFormatter() {
+ return XomwMediaWikiServices.getInstance().getTitleFormatter();
+ }
+
// /**
// * B/C kludge: provide an InterwikiLookup for use by Title.
// * Ideally, Title would have no methods that need this.
@@ -533,7 +533,7 @@ public class XomwTitle {
// * @return Title|null The new Object, or null on an error
// */
// public static function makeTitleSafe($ns, $title, $fragment = Bry_.Empty, $interwiki = Bry_.Empty) {
-// if (!MWNamespace::exists($ns)) {
+// if (!XomwNamespace::exists($ns)) {
// return null;
// }
//
@@ -728,7 +728,7 @@ public class XomwTitle {
// global $wgContLang;
//
// if ($canonicalNamespace) {
-// $namespace = MWNamespace::getCanonicalName($ns);
+// $namespace = XomwNamespace::getCanonicalName($ns);
// } else {
// $namespace = $wgContLang.getNsText($ns);
// }
@@ -970,32 +970,32 @@ public class XomwTitle {
// this.mContentModel = $model;
// this.mForcedContentModel = true;
// }
-//
-// /**
-// * Get the namespace text
-// *
-// * @return String|false Namespace text
-// */
-// public function getNsText() {
-// if (this.isExternal()) {
+
+ /**
+ * Get the namespace text
+ *
+ * @return String|false Namespace text
+ */
+ public byte[] getNsText() {
+ if (this.isExternal()) {
// // This probably shouldn't even happen,
// // but for interwiki transclusion it sometimes does.
// // Use the canonical namespaces if possible to try to
// // resolve a foreign namespace.
-// if (MWNamespace::exists(this.mNamespace)) {
-// return MWNamespace::getCanonicalName(this.mNamespace);
+// if (XomwNamespace::exists(this.mNamespace)) {
+// return XomwNamespace::getCanonicalName(this.mNamespace);
// }
-// }
-//
+ }
+
// try {
-// $formatter = self::getTitleFormatter();
-// return $formatter.getNamespaceName(this.mNamespace, this.mDbkeyform);
+ XomwMediaWikiTitleCodec formatter = getTitleFormatter();
+ return formatter.getNamespaceName(this.mNamespace, this.mDbkeyform);
// } catch (InvalidArgumentException $ex) {
// wfDebug(__METHOD__ . ': ' . $ex.getMessage() . "\n");
// return false;
// }
-// }
-//
+ }
+
// /**
// * Get the namespace text of the subject (rather than talk) page
// *
@@ -1003,7 +1003,7 @@ public class XomwTitle {
// */
// public function getSubjectNsText() {
// global $wgContLang;
-// return $wgContLang.getNsText(MWNamespace::getSubject(this.mNamespace));
+// return $wgContLang.getNsText(XomwNamespace::getSubject(this.mNamespace));
// }
//
// /**
@@ -1013,7 +1013,7 @@ public class XomwTitle {
// */
// public function getTalkNsText() {
// global $wgContLang;
-// return $wgContLang.getNsText(MWNamespace::getTalk(this.mNamespace));
+// return $wgContLang.getNsText(XomwNamespace::getTalk(this.mNamespace));
// }
//
// /**
@@ -1022,7 +1022,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function canTalk() {
-// return MWNamespace::canTalk(this.mNamespace);
+// return XomwNamespace::canTalk(this.mNamespace);
// }
//
// /**
@@ -1040,7 +1040,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function isWatchable() {
-// return !this.isExternal() && MWNamespace::isWatchable(this.getNamespace());
+// return !this.isExternal() && XomwNamespace::isWatchable(this.getNamespace());
// }
//
// /**
@@ -1098,7 +1098,7 @@ public class XomwTitle {
// * @since 1.19
// */
// public function inNamespace($ns) {
-// return MWNamespace::equals(this.getNamespace(), $ns);
+// return XomwNamespace::equals(this.getNamespace(), $ns);
// }
//
// /**
@@ -1137,7 +1137,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function hasSubjectNamespace($ns) {
-// return MWNamespace::subjectEquals(this.getNamespace(), $ns);
+// return XomwNamespace::subjectEquals(this.getNamespace(), $ns);
// }
//
// /**
@@ -1148,7 +1148,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function isContentPage() {
-// return MWNamespace::isContent(this.getNamespace());
+// return XomwNamespace::isContent(this.getNamespace());
// }
//
// /**
@@ -1158,7 +1158,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function isMovable() {
-// if (!MWNamespace::isMovable(this.getNamespace()) || this.isExternal()) {
+// if (!XomwNamespace::isMovable(this.getNamespace()) || this.isExternal()) {
// // Interwiki title or immovable namespace. Hooks don't get to override here
// return false;
// }
@@ -1188,7 +1188,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function isSubpage() {
-// return MWNamespace::hasSubpages(this.mNamespace)
+// return XomwNamespace::hasSubpages(this.mNamespace)
// ? strpos(this.getText(), '/') != false
// : false;
// }
@@ -1288,7 +1288,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function isTalkPage() {
-// return MWNamespace::isTalk(this.getNamespace());
+// return XomwNamespace::isTalk(this.getNamespace());
// }
//
// /**
@@ -1297,7 +1297,7 @@ public class XomwTitle {
// * @return Title The Object for the talk page
// */
// public function getTalkPage() {
-// return Title::makeTitle(MWNamespace::getTalk(this.getNamespace()), this.getDBkey());
+// return Title::makeTitle(XomwNamespace::getTalk(this.getNamespace()), this.getDBkey());
// }
//
// /**
@@ -1308,7 +1308,7 @@ public class XomwTitle {
// */
// public function getSubjectPage() {
// // Is this the same title?
-// $subjectNS = MWNamespace::getSubject(this.getNamespace());
+// $subjectNS = XomwNamespace::getSubject(this.getNamespace());
// if (this.getNamespace() == $subjectNS) {
// return this;
// }
@@ -1422,9 +1422,9 @@ public class XomwTitle {
// p = this.mInterwiki . ':';
// }
-// if (0 != this.mNamespace) {
-// p .= this.getNsText() . ':';
-// }
+ if (0 != this.mNamespace) {
+ p = Bry_.Add(p, this.getNsText(), Byte_ascii.Colon_bry);
+ }
return Bry_.Add(p, name);
}
@@ -1491,7 +1491,7 @@ public class XomwTitle {
// * @since 1.20
// */
// public function getRootText() {
-// if (!MWNamespace::hasSubpages(this.mNamespace)) {
+// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.getText();
// }
//
@@ -1526,7 +1526,7 @@ public class XomwTitle {
// * @return String Base name
// */
// public function getBaseText() {
-// if (!MWNamespace::hasSubpages(this.mNamespace)) {
+// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.getText();
// }
//
@@ -1566,7 +1566,7 @@ public class XomwTitle {
// * @return String Subpage name
// */
// public function getSubpageText() {
-// if (!MWNamespace::hasSubpages(this.mNamespace)) {
+// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.mTextform;
// }
// $parts = explode('/', this.mTextform);
@@ -2259,7 +2259,7 @@ public class XomwTitle {
// }
// } elseif ($action == 'move') {
// // Check for immobile pages
-// if (!MWNamespace::isMovable(this.mNamespace)) {
+// if (!XomwNamespace::isMovable(this.mNamespace)) {
// // Specific message for this case
// $errors[] = [ 'immobile-source-namespace', this.getNsText() ];
// } elseif (!this.isMovable()) {
@@ -2267,7 +2267,7 @@ public class XomwTitle {
// $errors[] = [ 'immobile-source-page' ];
// }
// } elseif ($action == 'move-target') {
-// if (!MWNamespace::isMovable(this.mNamespace)) {
+// if (!XomwNamespace::isMovable(this.mNamespace)) {
// $errors[] = [ 'immobile-target-namespace', this.getNsText() ];
// } elseif (!this.isMovable()) {
// $errors[] = [ 'immobile-target-page' ];
@@ -3068,7 +3068,7 @@ public class XomwTitle {
// * @return boolean
// */
// public function hasSubpages() {
-// if (!MWNamespace::hasSubpages(this.mNamespace)) {
+// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// // Duh
// return false;
// }
@@ -3096,7 +3096,7 @@ public class XomwTitle {
// * doesn't allow subpages
// */
// public function getSubpages($limit = -1) {
-// if (!MWNamespace::hasSubpages(this.getNamespace())) {
+// if (!XomwNamespace::hasSubpages(this.getNamespace())) {
// return [];
// }
//
@@ -3335,7 +3335,7 @@ public class XomwTitle {
// public static function capitalize($text, $ns = NS_MAIN) {
// global $wgContLang;
//
-// if (MWNamespace::isCapitalized($ns)) {
+// if (XomwNamespace::isCapitalized($ns)) {
// return $wgContLang.ucfirst($text);
// } else {
// return $text;
@@ -3718,14 +3718,14 @@ public class XomwTitle {
// ];
// }
// // Do the source and target namespaces support subpages?
-// if (!MWNamespace::hasSubpages(this.getNamespace())) {
+// if (!XomwNamespace::hasSubpages(this.getNamespace())) {
// return [
-// [ 'namespace-nosubpages', MWNamespace::getCanonicalName(this.getNamespace()) ],
+// [ 'namespace-nosubpages', XomwNamespace::getCanonicalName(this.getNamespace()) ],
// ];
// }
-// if (!MWNamespace::hasSubpages($nt.getNamespace())) {
+// if (!XomwNamespace::hasSubpages($nt.getNamespace())) {
// return [
-// [ 'namespace-nosubpages', MWNamespace::getCanonicalName($nt.getNamespace()) ],
+// [ 'namespace-nosubpages', XomwNamespace::getCanonicalName($nt.getNamespace()) ],
// ];
// }
//
@@ -4502,11 +4502,11 @@ public class XomwTitle {
// public function getNamespaceKey($prepend = 'nstab-') {
// global $wgContLang;
// // Gets the subject namespace if this title
-// $namespace = MWNamespace::getSubject(this.getNamespace());
+// $namespace = XomwNamespace::getSubject(this.getNamespace());
// // Checks if canonical namespace name exists for namespace
-// if (MWNamespace::exists(this.getNamespace())) {
+// if (XomwNamespace::exists(this.getNamespace())) {
// // Uses canonical namespace name
-// $namespaceKey = MWNamespace::getCanonicalName($namespace);
+// $namespaceKey = XomwNamespace::getCanonicalName($namespace);
// } else {
// // Uses text of namespace
// $namespaceKey = this.getSubjectNsText();
@@ -4603,7 +4603,7 @@ public class XomwTitle {
// global $wgExemptFromUserRobotsControl;
//
// $bannedNamespaces = is_null($wgExemptFromUserRobotsControl)
-// ? MWNamespace::getContentNamespaces()
+// ? XomwNamespace::getContentNamespaces()
// : $wgExemptFromUserRobotsControl;
//
// return !in_array(this.mNamespace, $bannedNamespaces);
@@ -4771,7 +4771,7 @@ public class XomwTitle {
// }
// }
//
-// if (MWNamespace::hasSubpages(this.getNamespace())) {
+// if (XomwNamespace::hasSubpages(this.getNamespace())) {
// // Optional notice for page itself and any parent page
// $parts = explode('/', this.getDBkey());
// $editnotice_base = $editnotice_ns;
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/filerepo/XomwFileRepo.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/filerepo/XomwFileRepo.java
index a0e9ead1c..28191650e 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/filerepo/XomwFileRepo.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/filerepo/XomwFileRepo.java
@@ -161,7 +161,7 @@ public class XomwFileRepo {
// // Optional settings that have a default
// this.initialCapital = isset(info['initialCapital'])
// ? info['initialCapital']
-// : MWNamespace::isCapitalized(NS_FILE);
+// : XomwNamespace::isCapitalized(NS_FILE);
// this.url = isset(info['url'])
// ? info['url']
// : false; // a subclass may set the URL (e.g. ForeignAPIRepo)
@@ -622,7 +622,7 @@ public class XomwFileRepo {
*/
public byte[] getNameFromTitle(XomwTitle title) {
// global wgContLang;
-// if (this.initialCapital != MWNamespace::isCapitalized(NS_FILE)) {
+// if (this.initialCapital != XomwNamespace::isCapitalized(NS_FILE)) {
// name = title.getUserCaseDBKey();
// if (this.initialCapital) {
// name = wgContLang.ucfirst(name);
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/linkers/Xomw_link_renderer.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/linkers/Xomw_link_renderer.java
index f544de680..63775fc97 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/linkers/Xomw_link_renderer.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/linkers/Xomw_link_renderer.java
@@ -200,7 +200,7 @@ public class Xomw_link_renderer {
// Page is a redirect
// return 'mw-redirect';
// }
-// elseif ($this->stubThreshold > 0 && MWNamespace::isContent($target->getNamespace())
+// elseif ($this->stubThreshold > 0 && XomwNamespace::isContent($target->getNamespace())
// && $this->linkCache->getGoodLinkFieldObj($target, 'length') < $this->stubThreshold
// ) {
// Page is a stub
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwMediaTransformOutput.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwMediaTransformOutput.java
index 8e8519825..81d0548a5 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwMediaTransformOutput.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwMediaTransformOutput.java
@@ -260,7 +260,6 @@ public abstract class XomwMediaTransformOutput {
// }
attribs.Clear();
-// 'href' => $this->file->getTitle()->getLocalURL( $query ),
attribs.Add_many(Gfh_atr_.Bry__href, this.file.getTitle().getLocalURL(query));
attribs.Add_many(Gfh_atr_.Bry__class, Bry__class__image);
if (title != null) {
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwThumbnailImage.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwThumbnailImage.java
index 684a5f1ef..ab8536058 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwThumbnailImage.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/media/XomwThumbnailImage.java
@@ -182,7 +182,7 @@ public class XomwThumbnailImage extends XomwMediaTransformOutput { private final
}
}
- if (!Php_utl_.empty(options.no_dimensions)) {
+ if (Php_utl_.empty(options.no_dimensions)) {
attribs.Add_many(Gfh_atr_.Bry__width, Int_.To_bry(width));
attribs.Add_many(Gfh_atr_.Bry__height, Int_.To_bry(height));
}
diff --git a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/parsers/lnkis/Xomw_lnki_wkr__file__tst.java b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/parsers/lnkis/Xomw_lnki_wkr__file__tst.java
index 20946b41c..c2ea9b2e9 100644
--- a/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/parsers/lnkis/Xomw_lnki_wkr__file__tst.java
+++ b/gplx.xowa.mediawiki/src/gplx/xowa/mediawiki/includes/parsers/lnkis/Xomw_lnki_wkr__file__tst.java
@@ -23,16 +23,17 @@ public class Xomw_lnki_wkr__file__tst {
private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt();
@Before public void init() {
fxt.Clear();
- fxt.Init__file("A.png", 300, 200);
+ fxt.Init__file("File:A.png", 300, 200);
}
@Test public void Plain() {
- fxt.Test__to_html("[[File:A.png]]", "");
+ fxt.Test__to_html("[[File:A.png]]", "");
}
@Test public void Thumb() {
- fxt.Test__to_html("[[File:A.png|thumb]]", "