diff --git a/400_xowa/src/gplx/xowa/mediawiki/XophpArray.java b/400_xowa/src/gplx/xowa/mediawiki/XophpArray.java
index 3766c6c8c..5b42241bf 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/XophpArray.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/XophpArray.java
@@ -20,6 +20,7 @@ import gplx.core.brys.*;
public class XophpArray implements Bry_bfr_able {
private final Ordered_hash hash = Ordered_hash_.New();
private int nxt_idx;
+ public int Len() {return hash.Len();}
public int count() {return hash.Len();}
public boolean count_bool() {return hash.Len() > 0;}
public boolean isset(String key) {return hash.Has(key);}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/XophpArrayItm.java b/400_xowa/src/gplx/xowa/mediawiki/XophpArrayItm.java
index 364162da7..9ee058afe 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/XophpArrayItm.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/XophpArrayItm.java
@@ -16,12 +16,14 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
package gplx.xowa.mediawiki; import gplx.*; import gplx.xowa.*;
import gplx.core.brys.*;
public class XophpArrayItm implements Bry_bfr_able {
- XophpArrayItm(boolean key_is_int, String key, Object val) {
+ XophpArrayItm(boolean key_is_int, int key_as_int, String key, Object val) {
this.key_is_int = key_is_int;
+ this.key_as_int = key_as_int;
this.key = key;
this.val = val;
}
public boolean Key_is_int() {return key_is_int;} private final boolean key_is_int;
+ public int Key_as_int() {return key_as_int;} private final int key_as_int;
public String Key() {return key;} private final String key;
public Object Val() {return val;} public void Val_(Object v) {this.val = v;} private Object val;
@@ -38,6 +40,6 @@ public class XophpArrayItm implements Bry_bfr_able {
}
}
- public static XophpArrayItm New_int(int key, Object val) {return new XophpArrayItm(Bool_.Y, Int_.To_str(key), val);}
- public static XophpArrayItm New_str(String key, Object val) {return new XophpArrayItm(Bool_.N, key , val);}
+ public static XophpArrayItm New_int(int key, Object val) {return new XophpArrayItm(Bool_.Y, key, Int_.To_str(key), val);}
+ public static XophpArrayItm New_str(String key, Object val) {return new XophpArrayItm(Bool_.N, -1, key , val);}
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/XophpArray_.java b/400_xowa/src/gplx/xowa/mediawiki/XophpArray_.java
index dbee3ed3b..4d00dee05 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/XophpArray_.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/XophpArray_.java
@@ -203,4 +203,8 @@ public class XophpArray_ {
}
return sb.To_str_and_clear();
}
+
+ public static int count(XophpArray array) {
+ return array.count();
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/XophpInt_.java b/400_xowa/src/gplx/xowa/mediawiki/XophpInt_.java
index 708673d24..d983d02a8 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/XophpInt_.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/XophpInt_.java
@@ -15,6 +15,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.mediawiki; import gplx.*; import gplx.xowa.*;
public class XophpInt_ {
+ public static final int False = 0; // REF.PHP:https://www.php.net/manual/en/language.types.boolean.php
public static boolean is_true(int val) {return val != -1;} // handles code like "if ($var === false)" where var is an Object;
public static String strval(int number) {
return Int_.To_str(number);
diff --git a/400_xowa/src/gplx/xowa/mediawiki/XophpType_.java b/400_xowa/src/gplx/xowa/mediawiki/XophpType_.java
index 45e4c65dd..42a809b68 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/XophpType_.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/XophpType_.java
@@ -45,4 +45,10 @@ public class XophpType_ {
public static boolean is_string(Object o) {
return To_type_id(o) == Type_ids_.Id__str;
}
+ public static boolean is_array(Object o) {
+ return Type_.Eq_by_obj(o, XophpArray.class);
+ }
+ public static boolean instance_of(Object o, Class> t) {
+ return Type_.Eq_by_obj(o, t);
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/XomwDefaultSettings.java b/400_xowa/src/gplx/xowa/mediawiki/includes/XomwDefaultSettings.java
index 74ea9ecb9..04fa053a0 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/XomwDefaultSettings.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/XomwDefaultSettings.java
@@ -4129,13 +4129,13 @@ public class XomwDefaultSettings {
// * Maximum indent level of toc.
// */
// $wgMaxTocLevel = 999;
-//
-// /**
-// * A complexity limit on template expansion: the maximum number of nodes visited
-// * by PPFrame::expand()
-// */
-// $wgMaxPPNodeCount = 1000000;
-//
+
+ /**
+ * A complexity limit on template expansion: the maximum number of nodes visited
+ * by PPFrame::expand()
+ */
+ public static int wgMaxPPNodeCount = 1000000;
+
// /**
// * A complexity limit on template expansion: the maximum number of elements
// * generated by Preprocessor::preprocessToObj(). This allows you to limit the
@@ -4154,12 +4154,12 @@ public class XomwDefaultSettings {
// * stop the parser before it hits the xdebug limit.
// */
// $wgMaxTemplateDepth = 40;
-//
-// /**
-// * @see $wgMaxTemplateDepth
-// */
-// $wgMaxPPExpandDepth = 40;
-//
+
+ /**
+ * @see $wgMaxTemplateDepth
+ */
+ public static int wgMaxPPExpandDepth = 40;
+
// /**
// * URL schemes that should be recognized as valid by wfParseUrl().
// *
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/exception/XomwMWException.java b/400_xowa/src/gplx/xowa/mediawiki/includes/exception/XomwMWException.java
index 1d33b7238..1bbe6935e 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/exception/XomwMWException.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/exception/XomwMWException.java
@@ -21,4 +21,7 @@ public class XomwMWException extends Err {
public static Err New_by_method(Class> type, String method, String msg) {
return Err_.new_wo_type(Type_.Name(type) + "." + method + ":" + msg);
}
+ public static Err New_by_method_obj(Object obj, String method, String msg) {
+ return Err_.new_wo_type(Type_.Name_by_obj(obj) + "." + method + msg);
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParser.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParser.java
index fe996f8f8..a5afd893f 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParser.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParser.java
@@ -192,7 +192,7 @@ public class XomwParser implements XomwParserIface {
private int mLinkID;
public int mIncludeSizes, mPPNodeCount, mGeneratedPPNodeCount, mHighestExpansionDepth;
// public mDefaultSort;
-// public mTplRedirCache, mTplDomCache, mHeadings, mDoubleUnderscores;
+ public XophpArray mTplRedirCache = null, mTplDomCache = null, mHeadings = null, mDoubleUnderscores = null;
// public mExpensiveFunctionCount; // number of expensive parser function calls
// public mShowToc, mForceTocPosition;
//
@@ -441,7 +441,7 @@ public class XomwParser implements XomwParserIface {
// this.mGeneratedPPNodeCount = 0;
// this.mHighestExpansionDepth = 0;
// this.mDefaultSort = false;
-// this.mHeadings = [];
+ this.mHeadings = XophpArray.New();
// this.mDoubleUnderscores = [];
// this.mExpensiveFunctionCount = 0;
//
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParserOptions.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParserOptions.java
index e8b8bc22b..bafcd4ee6 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParserOptions.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwParserOptions.java
@@ -74,21 +74,21 @@ public class XomwParserOptions {
*/
private int mMaxIncludeSize;
-// /**
-// * Maximum number of nodes touched by PPFrame::expand()
-// */
-// private $mMaxPPNodeCount;
-//
+ /**
+ * Maximum number of nodes touched by PPFrame::expand()
+ */
+ private int mMaxPPNodeCount;
+
// /**
// * Maximum number of nodes generated by Preprocessor::preprocessToObj()
// */
// private $mMaxGeneratedPPNodeCount;
-//
-// /**
-// * Maximum recursion depth in PPFrame::expand()
-// */
-// private $mMaxPPExpandDepth;
-//
+
+ /**
+ * Maximum recursion depth in PPFrame::expand()
+ */
+ private int mMaxPPExpandDepth;
+
// /**
// * Maximum recursion depth for templates within templates
// */
@@ -276,18 +276,18 @@ public class XomwParserOptions {
return this.mMaxIncludeSize;
}
-// public function getMaxPPNodeCount() {
-// return this.mMaxPPNodeCount;
-// }
-//
+ public int getMaxPPNodeCount() {
+ return this.mMaxPPNodeCount;
+ }
+
// public function getMaxGeneratedPPNodeCount() {
// return this.mMaxGeneratedPPNodeCount;
// }
-//
-// public function getMaxPPExpandDepth() {
-// return this.mMaxPPExpandDepth;
-// }
-//
+
+ public int getMaxPPExpandDepth() {
+ return this.mMaxPPExpandDepth;
+ }
+
// public function getMaxTemplateDepth() {
// return this.mMaxTemplateDepth;
// }
@@ -703,9 +703,9 @@ public class XomwParserOptions {
// this.mEnableImageWhitelist = $wgEnableImageWhitelist;
// this.mAllowSpecialInclusion = $wgAllowSpecialInclusion;
this.mMaxIncludeSize = XomwDefaultSettings.wgMaxArticleSize * 1024;
-// this.mMaxPPNodeCount = $wgMaxPPNodeCount;
+ this.mMaxPPNodeCount = XomwDefaultSettings.wgMaxPPNodeCount;
// this.mMaxGeneratedPPNodeCount = $wgMaxGeneratedPPNodeCount;
-// this.mMaxPPExpandDepth = $wgMaxPPExpandDepth;
+ this.mMaxPPExpandDepth = XomwDefaultSettings.wgMaxPPExpandDepth;
// this.mMaxTemplateDepth = $wgMaxTemplateDepth;
// this.mExpensiveParserFunctionLimit = $wgExpensiveParserFunctionLimit;
// this.mCleanSignatures = $wgCleanSignatures;
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwStripState.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwStripState.java
index 880a99fed..c27d06cfb 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwStripState.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/XomwStripState.java
@@ -65,6 +65,7 @@ public class XomwStripState {
this.addItem(TYPE_NOWIKI, marker, val);
}
+ public void addGeneral(String marker, String val) {this.addGeneral(Bry_.new_u8(marker), Bry_.new_u8(val));}
/**
* @param String $marker
* @param String $value
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPFrame_Hash.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPFrame_Hash.java
index 2bc842f48..041899082 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPFrame_Hash.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPFrame_Hash.java
@@ -112,7 +112,7 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
// this.parser.addTrackingCategory('duplicate-args-category');
}
numberedArgs.Set(index, bits.Get_by("value"));
-// XophpArray_.unset_by_idx(namedArgs, index);
+ namedArgs.unset(index);
} else {
// Named parameter
String name = String_.Trim(this.expand(bits.Get_by("name"), XomwPPFrame.STRIP_COMMENTS));
@@ -123,13 +123,12 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
// wfEscapeWikiText(name)).text());
// this.parser.addTrackingCategory('duplicate-args-category');
}
-// namedArgs.Set(name, bits.Get_by("value"));
-// XophpArray_.unset(numberedArgs, name);
+ namedArgs.Set(name, bits.Get_by("value"));
+ numberedArgs.unset(name);
}
}
}
-// return new PPTemplateFrame_Hash(this.preprocessor, this, numberedArgs, namedArgs, title);
- return null;
+ return new XomwPPTemplateFrame_Hash(this.preprocessor, this, numberedArgs, namedArgs, title);
}
/**
@@ -157,20 +156,20 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
return (String)root;
}
-// if (++this.parser.mPPNodeCount > this.parser.mOptions.getMaxPPNodeCount()) {
+ if (++this.parser.mPPNodeCount > this.parser.mOptions.getMaxPPNodeCount()) {
// this.parser.limitationWarn('node-count-exceeded',
// this.parser.mPPNodeCount,
// this.parser.mOptions.getMaxPPNodeCount()
// );
-// return 'Node-count limit exceeded';
-// }
-// if (expansionDepth > this.parser.mOptions.getMaxPPExpandDepth()) {
+ return "Node-count limit exceeded";
+ }
+ if (expansionDepth > this.parser.mOptions.getMaxPPExpandDepth()) {
// this.parser.limitationWarn('expansion-depth-exceeded',
// expansionDepth,
// this.parser.mOptions.getMaxPPExpandDepth()
// );
-// return 'Expansion depth limit exceeded';
-// }
+ return "Expansion depth limit exceeded";
+ }
++expansionDepth;
if (expansionDepth > this.parser.mHighestExpansionDepth) {
this.parser.mHighestExpansionDepth = expansionDepth;
@@ -342,12 +341,12 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
// Expand immediately and insert heading index marker
String s = this.expand(contextChildren, flags);
XophpArray bits = XomwPPNode_Hash_Tree.splitRawHeading(contextChildren);
-// String titleText = this.title.getPrefixedDBkey();
-// this.parser.mHeadings[] = [titleText, bits['i']];
-// serial = count(this.parser.mHeadings) - 1;
- String marker = XomwParser.MARKER_PREFIX + "-h-serial-" + XomwParser.MARKER_SUFFIX;
+ String titleText = this.title.getPrefixedDBkeyStr();
+ this.parser.mHeadings.Add(titleText, bits.Get_by("i"));
+ int serial = XophpArray_.count(this.parser.mHeadings) - 1;
+ String marker = XomwParser.MARKER_PREFIX + "-h-" + Int_.To_str(serial) + "-" + XomwParser.MARKER_SUFFIX;
s = XophpString_.substr(s, 0, bits.Get_by_int("level")) + marker + XophpString_.substr(s, bits.Get_by_int("level"));
-// this.parser.mStripState.addGeneral(marker, '');
+ this.parser.mStripState.addGeneral(marker, "");
outItm += s;
} else {
// Expand in virtual stack
@@ -384,29 +383,34 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
* @param String|PPNode $args,...
* @return String
*/
-// public function implodeWithFlags($sep, $flags /*, ... */) {
-// $args = array_slice(func_get_args(), 2);
-//
-// $first = true;
-// $s = '';
-// foreach ($args as $root) {
-// if ($root instanceof PPNode_Hash_Array) {
-// $root = $root.value;
-// }
-// if (!is_array($root)) {
-// $root = [$root];
-// }
-// foreach ($root as $node) {
-// if ($first) {
-// $first = false;
-// } else {
-// $s .= $sep;
-// }
-// $s .= this.expand($node, $flags);
-// }
-// }
-// return $s;
-// }
+ public String implodeWithFlags(String sep, int flags, XophpArray args) {
+ // args = XophpArray_.array_slice(func_get_args(), 2);
+
+ boolean first = true;
+ String s = "";
+ int len = args.Len();
+ for (int i = 0; i < len; i++) {
+ Object root_obj = args.Get_at(i);
+ XophpArray root = null;
+ if (XophpType_.instance_of(root_obj, XomwPPNode_Hash_Array.class)) {
+ root = (XophpArray)((XomwPPNode_Hash_Array)root_obj).value;
+ }
+ if (!XophpType_.is_array(root_obj)) {
+ root = XophpArray.New().Add(root_obj);
+ }
+ int root_len = root.Len();
+ for (int j = 0; j < root_len; j++) {
+ XomwPPNode node = (XomwPPNode)root.Get_at(j);
+ if (first) {
+ first = false;
+ } else {
+ s += sep;
+ }
+ s += this.expand(node, flags);
+ }
+ }
+ return s;
+ }
/**
* Implode with no flags specified
@@ -510,10 +514,10 @@ class XomwPPFrame_Hash extends XomwPPFrame { /**
return new XomwPPNode_Hash_Array(outItm);
}
-// public function __toString() {
-// return 'frame{}';
-// }
-//
+ @Override public String toString() {
+ return "frame{}";
+ }
+
/**
* @param boolean $level
* @return array|boolean|String
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode.java
index 7cceb9055..b8f66c75c 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode.java
@@ -34,7 +34,7 @@ public abstract class XomwPPNode {
* Returns false if this is not a tree node.
* @return PPNode
*/
-// public abstract XomwPPNode[] getChildren();
+ public abstract XomwPPNode_Hash_Array getChildren();
/**
* Get the first child of a tree node. False if there isn't one.
@@ -55,19 +55,19 @@ public abstract class XomwPPNode {
* @param String $type
* @return boolean|PPNode
*/
-// public abstract XomwPPNode getChildrenOfType(String type);
+ public abstract XomwPPNode_Hash_Array getChildrenOfType(String type);
/**
* Returns the length of the array, or false if this is not an array-type node
*/
-// public abstract int getLength();
+ public abstract int getLength();
/**
* Returns an item of an array-type node
* @param int $i
* @return boolean|PPNode
*/
-// public abstract XomwPPNode item(int i);
+ public abstract XomwPPNode item(int i);
/**
* Get the name of this node. The following names are defined here:
@@ -91,20 +91,20 @@ public abstract class XomwPPNode {
* value PPNode value
* @return array
*/
- @gplx.Virtual public XophpArray splitArg() {return null;}
+ public abstract XophpArray splitArg();
/**
* Split an "" node into an associative array containing name, attr, inner and close
* All values in the resulting array are PPNodes. Inner and close are optional.
* @return array
*/
-// public abstract Hash_adp splitExt();
+ public abstract XophpArray splitExt();
/**
* Split an "" node
* @return array
*/
-// public abstract Hash_adp splitHeading();
+ public abstract XophpArray splitHeading();
public abstract String toString();
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Array.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Array.java
index 4528a5094..20620e83b 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Array.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Array.java
@@ -14,6 +14,7 @@ GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.mediawiki.includes.parsers.preprocessors; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*; import gplx.xowa.mediawiki.includes.*; import gplx.xowa.mediawiki.includes.parsers.*;
+import gplx.xowa.mediawiki.includes.exception.*;
// MW.FILE:Preprocessor_Hash
/**
* @ingroup Parser
@@ -25,18 +26,16 @@ public class XomwPPNode_Hash_Array extends XomwPPNode { public XophpArray value
}
@Override public String toString() {
-// return var_export( $this, true );
- return null;
+ // return var_export($this, true);
+ return value.To_str();
}
- public int getLength() {
- return -1;
-// return count( this.value );
+ @Override public int getLength() {
+ return XophpArray_.count(this.value);
}
- public Object item(int i) {
- return null;
-// return this.value[$i];
+ @Override public XomwPPNode item(int i) {
+ return (XomwPPNode)this.value.Get_at(i);
}
@Override public String getName() {
@@ -47,27 +46,27 @@ public class XomwPPNode_Hash_Array extends XomwPPNode { public XophpArray value
return null;
}
-// public function getChildren() {
-// return false;
-// }
+ @Override public XomwPPNode_Hash_Array getChildren() {
+ return null;
+ }
@Override public XomwPPNode getFirstChild() {
return null;
}
-// public function getChildrenOfType( $name ) {
-// return false;
-// }
-//
-// public function splitArg() {
-// throw new MWException( __METHOD__ . ': not supported' );
-// }
-//
-// public function splitExt() {
-// throw new MWException( __METHOD__ . ': not supported' );
-// }
-//
-// public function splitHeading() {
-// throw new MWException( __METHOD__ . ': not supported' );
-// }
+ @Override public XomwPPNode_Hash_Array getChildrenOfType(String name) {
+ return null;
+ }
+
+ @Override public XophpArray splitArg() {
+ throw XomwMWException.New_by_method_obj(this, "splitArg", ": not supported");
+ }
+
+ @Override public XophpArray splitExt() {
+ throw XomwMWException.New_by_method_obj(this, "splitExt", ": not supported");
+ }
+
+ @Override public XophpArray splitHeading() {
+ throw XomwMWException.New_by_method_obj(this, "splitHeading", ": not supported");
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Attr.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Attr.java
index 1390aec57..894c7ac14 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Attr.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Attr.java
@@ -14,6 +14,7 @@ GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.mediawiki.includes.parsers.preprocessors; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*; import gplx.xowa.mediawiki.includes.*; import gplx.xowa.mediawiki.includes.parsers.*;
+import gplx.xowa.mediawiki.includes.exception.*;
// MW.FILE:Preprocessor_Hash
/**
* @ingroup Parser
@@ -55,35 +56,35 @@ public class XomwPPNode_Hash_Attr extends XomwPPNode { public String name, valu
return XomwPPNode_Hash_Tree.factory(this.store, this.index + 1);
}
-// public function getChildren() {
-// return false;
-// }
-//
+ @Override public XomwPPNode_Hash_Array getChildren() {
+ return null;
+ }
+
@Override public XomwPPNode getFirstChild() {
return null;
}
-// public function getChildrenOfType($name) {
-// return false;
-// }
-//
-// public function getLength() {
-// return false;
-// }
-//
-// public function item($i) {
-// return false;
-// }
-//
-// public function splitArg() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
-//
-// public function splitExt() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
-//
-// public function splitHeading() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
+ @Override public XomwPPNode_Hash_Array getChildrenOfType(String name) {
+ return null;
+ }
+
+ @Override public int getLength() {
+ return XophpInt_.False;
+ }
+
+ @Override public XomwPPNode item(int i) {
+ return null;
+ }
+
+ @Override public XophpArray splitArg() {
+ throw XomwMWException.New_by_method_obj(this, "splitArg", ": not supported");
+ }
+
+ @Override public XophpArray splitExt() {
+ throw XomwMWException.New_by_method_obj(this, "splitExt", ": not supported");
+ }
+
+ @Override public XophpArray splitHeading() {
+ throw XomwMWException.New_by_method_obj(this, "splitHeading", ": not supported");
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Text.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Text.java
index effe39a08..0ee63c478 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Text.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Text.java
@@ -48,39 +48,39 @@ public class XomwPPNode_Hash_Text extends XomwPPNode { public String value;
return XomwPPNode_Hash_Tree.factory(this.store, this.index + 1);
}
-// public function getChildren() {
-// return false;
-// }
+ @Override public XomwPPNode_Hash_Array getChildren() {
+ return null;
+ }
@Override public XomwPPNode getFirstChild() {
return null;
}
-// public function getChildrenOfType($name) {
-// return false;
-// }
-//
-// public function getLength() {
-// return false;
-// }
-//
-// public function item($i) {
-// return false;
-// }
+ @Override public XomwPPNode_Hash_Array getChildrenOfType(String name) {
+ return null;
+ }
+
+ @Override public int getLength() {
+ return XophpInt_.False;
+ }
+
+ @Override public XomwPPNode item(int i) {
+ return null;
+ }
@Override public String getName() {
return "#text";
}
-// public function splitArg() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
-//
-// public function splitExt() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
-//
-// public function splitHeading() {
-// throw new MWException(__METHOD__ . ': not supported');
-// }
+ @Override public XophpArray splitArg() {
+ throw XomwMWException.New_by_method_obj(this, "splitArg", ": not supported");
+ }
+
+ @Override public XophpArray splitExt() {
+ throw XomwMWException.New_by_method_obj(this, "splitExt", ": not supported");
+ }
+
+ @Override public XophpArray splitHeading() {
+ throw XomwMWException.New_by_method_obj(this, "splitHeading", ": not supported");
+ }
}
diff --git a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Tree.java b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Tree.java
index d96ca4a1e..8be3973cb 100644
--- a/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Tree.java
+++ b/400_xowa/src/gplx/xowa/mediawiki/includes/parsers/preprocessors/XomwPPNode_Hash_Tree.java
@@ -133,13 +133,14 @@ public class XomwPPNode_Hash_Tree extends XomwPPNode { public final String na
/**
* @return PPNode_Hash_Array
*/
- public XomwPPNode_Hash_Array getChildren() {
-// children = [];
-// foreach (this.rawChildren as i => child) {
-// children[] = self::factory(this.rawChildren, i);
-// }
-// return new PPNode_Hash_Array(children);
- return null;
+ @Override public XomwPPNode_Hash_Array getChildren() {
+ XophpArray children = XophpArray.New();
+ int rawChildrenLen = rawChildren.Len();
+ for (int i = 0; i < rawChildrenLen; i++) {
+ XophpArrayItm itm = rawChildren.Get_at_itm(i);
+ children.Add(XomwPPNode_Hash_Tree.factory(this.rawChildren, itm.Key_as_int()));
+ }
+ return new XomwPPNode_Hash_Array(children);
}
/**
@@ -169,45 +170,47 @@ public class XomwPPNode_Hash_Tree extends XomwPPNode { public final String na
return factory(this.store, this.index + 1);
}
-// /**
-// * Get an array of the children with a given node name
-// *
-// * @param String name
-// * @return PPNode_Hash_Array
-// */
-// public function getChildrenOfType(name) {
-// children = [];
-// foreach (this.rawChildren as i => child) {
-// if (is_array(child) && child[self::NAME] === name) {
-// children[] = self::factory(this.rawChildren, i);
-// }
-// }
-// return new PPNode_Hash_Array(children);
-// }
+ /**
+ * Get an array of the children with a given node name
+ *
+ * @param String name
+ * @return PPNode_Hash_Array
+ */
+ @Override public XomwPPNode_Hash_Array getChildrenOfType(String name) {
+ XophpArray children = XophpArray.New();
+ int rawChildren_len = this.rawChildren.Len();
+ for (int idx = 0; idx < rawChildren_len; idx++) {
+ XophpArrayItm itm = this.rawChildren.Get_at_itm(idx);
+ Object child = itm.Val();
+ if (XophpType_.is_array(child) && String_.Eq(((XophpArray)child).Get_at_str(XomwPPNode_Hash_Tree.NAME), name)) {
+ children.Add(XomwPPNode_Hash_Tree.factory(this.rawChildren, itm.Key_as_int()));
+ }
+ }
+ return new XomwPPNode_Hash_Array(children);
+ }
/**
* Get the raw child array. For @gplx.Internal protected use.
* @return array
*/
public XophpArray getRawChildren() {
-// return this.rawChildren;
- return null;
+ return this.rawChildren;
}
-// /**
-// * @return boolean
-// */
-// public function getLength() {
-// return false;
-// }
-//
-// /**
-// * @param int i
-// * @return boolean
-// */
-// public function item(i) {
-// return false;
-// }
+ /**
+ * @return boolean
+ */
+ @Override public int getLength() {
+ return XophpInt_.False;
+ }
+
+ /**
+ * @param int i
+ * @return boolean
+ */
+ @Override public XomwPPNode item(int i) {
+ return null;
+ }
/**
* @return String
@@ -216,59 +219,65 @@ public class XomwPPNode_Hash_Tree extends XomwPPNode { public final String na
return this.name;
}
-// /**
-// * Split a "" node into an associative array containing:
-// * - name PPNode name
-// * - index String index
-// * - value PPNode value
-// *
-// * @throws MWException
-// * @return array
-// */
-// public function splitArg() {
-// return self::splitRawArg(this.rawChildren);
-// }
-//
-// /**
-// * Like splitArg() but for a raw child array. For @gplx.Internal protected use only.
-// */
-// public static function splitRawArg(array children) {
-// bits = [];
-// foreach (children as i => child) {
-// if (!is_array(child)) {
-// continue;
-// }
-// if (child[self::NAME] === 'name') {
-// bits['name'] = new self(children, i);
-// if (isset(child[self::CHILDREN][0][self::NAME])
-// && child[self::CHILDREN][0][self::NAME] === '@index'
-// ) {
-// bits['index'] = child[self::CHILDREN][0][self::CHILDREN][0];
-// }
-// } elseif (child[self::NAME] === 'value') {
-// bits['value'] = new self(children, i);
-// }
-// }
-//
-// if (!isset(bits['name'])) {
-// throw new MWException('Invalid brace node passed to ' . __METHOD__);
-// }
-// if (!isset(bits['index'])) {
-// bits['index'] = "";
-// }
-// return bits;
-// }
-//
-// /**
-// * Split an "" node into an associative array containing name, attr, inner and close
-// * All values in the resulting array are PPNodes. Inner and close are optional.
-// *
-// * @throws MWException
-// * @return array
-// */
-// public function splitExt() {
-// return self::splitRawExt(this.rawChildren);
-// }
+ /**
+ * Split a "" node into an associative array containing:
+ * - name PPNode name
+ * - index String index
+ * - value PPNode value
+ *
+ * @throws MWException
+ * @return array
+ */
+ @Override public XophpArray splitArg() {
+ return XomwPPNode_Hash_Tree.splitRawArg(this.rawChildren);
+ }
+
+ /**
+ * Like splitArg() but for a raw child array. For @gplx.Internal protected use only.
+ */
+ public static XophpArray splitRawArg(XophpArray children) {
+ XophpArray bits = XophpArray.New();
+ int childrenLen = children.Len();
+ for (int j = 0; j < childrenLen; j++) {
+ XophpArrayItm itm = children.Get_at_itm(j);
+ Object childObj = itm.Val();
+ if (!XophpType_.is_array(childObj)) {
+ continue;
+ }
+ XophpArray child = (XophpArray)childObj;
+ int i = itm.Key_as_int();
+ if (String_.Eq(child.Get_at_str(XomwPPNode_Hash_Tree.NAME), "name")) {
+ bits.Set("name", new XomwPPNode_Hash_Tree(children, i));
+ if (XophpObject_.isset_obj(child.Get_at_ary(XomwPPNode_Hash_Tree.CHILDREN).Get_at_ary(0).Get_at(XomwPPNode_Hash_Tree.NAME))
+ && String_.Eq(child.Get_at_ary(XomwPPNode_Hash_Tree.CHILDREN).Get_at_ary(0).Get_at_str(XomwPPNode_Hash_Tree.NAME), "@index")
+ ) {
+ bits.Set("index", child.Get_at_ary(XomwPPNode_Hash_Tree.CHILDREN).Get_at_ary(0).Get_at_ary(XomwPPNode_Hash_Tree.CHILDREN).Get_at(0));
+ }
+ }
+ else if (String_.Eq(child.Get_at_str(XomwPPNode_Hash_Tree.NAME), "value")) {
+ bits.Set("value", new XomwPPNode_Hash_Tree(children, i));
+ }
+ }
+
+ if (!XophpObject_.isset_obj(bits.Get_by("name"))) {
+ throw XomwMWException.New_by_method(XomwPPNode_Hash_Tree.class, "splitRawArg", "Invalid brace node passed to " + "splitRawArg");
+ }
+ if (!XophpObject_.isset_obj(bits.Get_by("index"))) {
+ bits.Set("index", "");
+ }
+ return bits;
+ }
+
+ /**
+ * Split an "" node into an associative array containing name, attr, inner and close
+ * All values in the resulting array are PPNodes. Inner and close are optional.
+ *
+ * @throws MWException
+ * @return array
+ */
+ @Override public XophpArray splitExt() {
+ return XomwPPNode_Hash_Tree.splitRawExt(this.rawChildren);
+ }
/**
* Like splitExt() but for a raw child array. For @gplx.Internal protected use only.
@@ -308,7 +317,7 @@ public class XomwPPNode_Hash_Tree extends XomwPPNode { public final String na
* @throws MWException
* @return array
*/
- public XophpArray splitHeading() {
+ @Override public XophpArray splitHeading() {
if (!String_.Eq(this.name, "h")) {
throw new XomwMWException("Invalid h node passed to " + "splitHeading");
}