version 1.0.0 [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions) generated by `make doc` @ $(date +"%Y-%m-%dT%H:%M:%S%z") * * In case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Query.parse(str)` using the spec: */ public $str; /** * @param string $str * * @return void */ public function __construct ($str) { #src/xrfragment/Query.hx:59: characters 36-49 $this->isNumber = new \EReg("^[0-9\\.]+\$", ""); #src/xrfragment/Query.hx:58: characters 36-50 $this->isClass = new \EReg("^[-]?class\$", ""); #src/xrfragment/Query.hx:57: characters 36-46 $this->isRoot = new \EReg("^[-]?/", ""); #src/xrfragment/Query.hx:56: characters 36-41 $this->isExclude = new \EReg("^-", ""); #src/xrfragment/Query.hx:55: characters 36-50 $this->isProp = new \EReg("^.*:[><=!]?", ""); #src/xrfragment/Query.hx:54: characters 47-49 $this->q = new HxAnon(); #src/xrfragment/Query.hx:53: characters 28-30 $this->str = ""; #src/xrfragment/Query.hx:62: characters 5-39 if ($str !== null) { #src/xrfragment/Query.hx:62: characters 24-39 $this->parse($str); } } /** * @param string $token * * @return string */ public function expandAliases ($token) { #src/xrfragment/Query.hx:71: characters 5-33 $classAlias = new \EReg("^(-)?\\.", ""); #src/xrfragment/Query.hx:72: characters 12-85 if ($classAlias->match($token)) { #src/xrfragment/Query.hx:72: characters 38-77 return \StringTools::replace($token, ".", "class:"); } else { #src/xrfragment/Query.hx:72: characters 80-85 return $token; } } /** * @return mixed */ public function get () { #src/xrfragment/Query.hx:76: characters 5-18 return $this->q; } /** * @param string $str * * @return mixed */ public function parse ($str) { #src/xrfragment/Query.hx:79: lines 79-126 $_gthis = $this; #src/xrfragment/Query.hx:81: characters 5-32 $token = HxString::split($str, " "); #src/xrfragment/Query.hx:82: characters 5-44 $q = new HxAnon(); #src/xrfragment/Query.hx:84: lines 84-123 $process = function ($str, $prefix = "") use (&$_gthis, &$q) { if ($prefix === null) { $prefix = ""; } #src/xrfragment/Query.hx:85: characters 7-34 $str = \trim($str); #src/xrfragment/Query.hx:86: characters 7-40 $k = (HxString::split($str, ":")->arr[0] ?? null); #src/xrfragment/Query.hx:87: characters 7-40 $v = (HxString::split($str, ":")->arr[1] ?? null); #src/xrfragment/Query.hx:89: characters 7-51 $filter = new HxAnon(); #src/xrfragment/Query.hx:90: characters 7-53 if (\Reflect::field($q, ($prefix??'null') . ($k??'null'))) { #src/xrfragment/Query.hx:90: characters 29-53 $filter = \Reflect::field($q, ($prefix??'null') . ($k??'null')); } #src/xrfragment/Query.hx:91: characters 7-89 $value = (\Reflect::field($filter, "rules") !== null ? \Reflect::field($filter, "rules") : new \Array_hx()); \Reflect::setField($filter, "rules", $value); #src/xrfragment/Query.hx:93: lines 93-122 if ($_gthis->isProp->match($str)) { #src/xrfragment/Query.hx:94: characters 9-30 $oper = ""; #src/xrfragment/Query.hx:95: characters 9-49 if (HxString::indexOf($str, "*") !== -1) { #src/xrfragment/Query.hx:95: characters 39-49 $oper = "*"; } #src/xrfragment/Query.hx:96: characters 9-49 if (HxString::indexOf($str, ">") !== -1) { #src/xrfragment/Query.hx:96: characters 39-49 $oper = ">"; } #src/xrfragment/Query.hx:97: characters 9-49 if (HxString::indexOf($str, "<") !== -1) { #src/xrfragment/Query.hx:97: characters 39-49 $oper = "<"; } #src/xrfragment/Query.hx:98: characters 9-50 if (HxString::indexOf($str, ">=") !== -1) { #src/xrfragment/Query.hx:98: characters 39-50 $oper = ">="; } #src/xrfragment/Query.hx:99: characters 9-50 if (HxString::indexOf($str, "<=") !== -1) { #src/xrfragment/Query.hx:99: characters 39-50 $oper = "<="; } #src/xrfragment/Query.hx:100: lines 100-103 if ($_gthis->isExclude->match($k)) { #src/xrfragment/Query.hx:101: characters 11-22 $oper = "!="; #src/xrfragment/Query.hx:102: characters 15-26 $k = \mb_substr($k, 1, null); } else { #src/xrfragment/Query.hx:103: characters 19-40 $v = \mb_substr($v, mb_strlen($oper), null); } #src/xrfragment/Query.hx:104: characters 9-42 if (mb_strlen($oper) === 0) { #src/xrfragment/Query.hx:104: characters 32-42 $oper = "="; } #src/xrfragment/Query.hx:105: lines 105-114 if ($_gthis->isClass->match($k)) { #src/xrfragment/Query.hx:106: characters 11-45 $value = $oper !== "!="; \Reflect::setField($filter, ($prefix??'null') . ($k??'null'), $value); #src/xrfragment/Query.hx:107: characters 11-26 \Reflect::setField($q, $v, $filter); } else { #src/xrfragment/Query.hx:109: characters 11-53 $rule = new HxAnon(); #src/xrfragment/Query.hx:110: lines 110-111 if ($_gthis->isNumber->match($v)) { #src/xrfragment/Query.hx:110: characters 35-67 $value = \Std::parseFloat($v); \Reflect::setField($rule, $oper, $value); } else { #src/xrfragment/Query.hx:111: characters 16-30 \Reflect::setField($rule, $oper, $v); } #src/xrfragment/Query.hx:112: characters 11-39 \Reflect::field($filter, "rules")->push($rule); #src/xrfragment/Query.hx:113: characters 11-29 \Reflect::setField($q, $k, $filter); } #src/xrfragment/Query.hx:115: characters 9-15 return; } else { #src/xrfragment/Query.hx:117: characters 9-62 $value = ($_gthis->isExclude->match($str) ? false : true); \Reflect::setField($filter, "id", $value); #src/xrfragment/Query.hx:118: characters 9-63 $value = $_gthis->isRoot->match($str); \Reflect::setField($filter, "root", $value); #src/xrfragment/Query.hx:119: characters 9-55 if ($_gthis->isExclude->match($str)) { #src/xrfragment/Query.hx:119: characters 42-55 $str = \mb_substr($str, 1, null); } #src/xrfragment/Query.hx:120: characters 9-55 if ($_gthis->isRoot->match($str)) { #src/xrfragment/Query.hx:120: characters 42-55 $str = \mb_substr($str, 1, null); } #src/xrfragment/Query.hx:121: characters 9-29 \Reflect::setField($q, $str, $filter); } }; #src/xrfragment/Query.hx:124: characters 15-19 $_g = 0; #src/xrfragment/Query.hx:124: characters 19-31 $_g1 = $token->length; #src/xrfragment/Query.hx:124: characters 5-68 while ($_g < $_g1) { #src/xrfragment/Query.hx:124: characters 15-31 $i = $_g++; #src/xrfragment/Query.hx:124: characters 34-68 $process($this->expandAliases(($token->arr[$i] ?? null))); } #src/xrfragment/Query.hx:125: characters 5-22 return $this->q = $q; } /** * @param mixed $obj * * @return bool */ public function test ($obj = null) { #src/xrfragment/Query.hx:130: characters 5-30 $qualify = false; #src/xrfragment/Query.hx:132: lines 132-135 $_g = 0; $_g1 = \Reflect::fields($obj); while ($_g < $_g1->length) { #src/xrfragment/Query.hx:132: characters 11-12 $k = ($_g1->arr[$_g] ?? null); #src/xrfragment/Query.hx:132: lines 132-135 ++$_g; #src/xrfragment/Query.hx:133: characters 7-57 $v = \Std::string(\Reflect::field($obj, $k)); #src/xrfragment/Query.hx:134: characters 7-47 if ($this->testProperty($k, $v)) { #src/xrfragment/Query.hx:134: characters 33-47 $qualify = true; } } #src/xrfragment/Query.hx:136: lines 136-139 $_g = 0; $_g1 = \Reflect::fields($obj); while ($_g < $_g1->length) { #src/xrfragment/Query.hx:136: characters 11-12 $k = ($_g1->arr[$_g] ?? null); #src/xrfragment/Query.hx:136: lines 136-139 ++$_g; #src/xrfragment/Query.hx:137: characters 7-57 $v = \Std::string(\Reflect::field($obj, $k)); #src/xrfragment/Query.hx:138: characters 7-54 if ($this->testProperty($k, $v, true)) { #src/xrfragment/Query.hx:138: characters 39-54 $qualify = false; } } #src/xrfragment/Query.hx:140: characters 5-19 return $qualify; } /** * @param string $property * @param string $value * @param bool $exclude * * @return bool */ public function testProperty ($property, $value, $exclude = null) { #src/xrfragment/Query.hx:145: characters 5-23 $conds = 0; #src/xrfragment/Query.hx:146: characters 5-23 $fails = 0; #src/xrfragment/Query.hx:147: characters 5-26 $qualify = 0; #src/xrfragment/Query.hx:149: lines 149-153 $testprop = function ($expr) use (&$conds, &$fails) { #src/xrfragment/Query.hx:150: characters 7-15 $conds += 1; #src/xrfragment/Query.hx:151: characters 7-27 $fails += ($expr ? 0 : 1); #src/xrfragment/Query.hx:152: characters 7-18 return $expr; }; #src/xrfragment/Query.hx:156: lines 156-159 if (\Reflect::field($this->q, $value) !== null) { #src/xrfragment/Query.hx:157: characters 7-52 $v = \Reflect::field($this->q, $value); #src/xrfragment/Query.hx:158: characters 7-59 if (\Reflect::field($v, $property) !== null) { #src/xrfragment/Query.hx:158: characters 37-59 return \Reflect::field($v, $property); } } #src/xrfragment/Query.hx:162: lines 162-183 $_g = 0; $_g1 = \Reflect::fields($this->q); while ($_g < $_g1->length) { #src/xrfragment/Query.hx:162: characters 11-12 $k = ($_g1->arr[$_g] ?? null); #src/xrfragment/Query.hx:162: lines 162-183 ++$_g; #src/xrfragment/Query.hx:163: characters 7-47 $filter = \Reflect::field($this->q, $k); #src/xrfragment/Query.hx:164: characters 7-43 if (Boot::dynamicField($filter, 'rules') === null) { #src/xrfragment/Query.hx:164: characters 35-43 continue; } #src/xrfragment/Query.hx:165: characters 7-47 $rules = Boot::dynamicField($filter, 'rules'); #src/xrfragment/Query.hx:167: lines 167-182 $_g2 = 0; while ($_g2 < $rules->length) { #src/xrfragment/Query.hx:167: characters 12-16 $rule = ($rules->arr[$_g2] ?? null); #src/xrfragment/Query.hx:167: lines 167-182 ++$_g2; #src/xrfragment/Query.hx:169: lines 169-181 if ($exclude) { #src/xrfragment/Query.hx:170: characters 11-145 if ((\Reflect::field($rule, "!=") !== null) && $testprop(\Std::string($value) === \Std::string(\Reflect::field($rule, "!="))) && $exclude) { #src/xrfragment/Query.hx:170: characters 133-145 ++$qualify; } } else { #src/xrfragment/Query.hx:172: characters 11-141 if ((\Reflect::field($rule, "*") !== null) && $testprop(\Std::parseFloat($value) !== null)) { #src/xrfragment/Query.hx:172: characters 129-141 ++$qualify; } #src/xrfragment/Query.hx:173: characters 11-143 if ((\Reflect::field($rule, ">") !== null) && $testprop(\Std::parseFloat($value) > \Std::parseFloat(\Reflect::field($rule, ">")))) { #src/xrfragment/Query.hx:173: characters 131-143 ++$qualify; } #src/xrfragment/Query.hx:174: characters 11-143 if ((\Reflect::field($rule, "<") !== null) && $testprop(\Std::parseFloat($value) < \Std::parseFloat(\Reflect::field($rule, "<")))) { #src/xrfragment/Query.hx:174: characters 131-143 ++$qualify; } #src/xrfragment/Query.hx:175: characters 11-143 if ((\Reflect::field($rule, ">=") !== null) && $testprop(\Std::parseFloat($value) >= \Std::parseFloat(\Reflect::field($rule, ">=")))) { #src/xrfragment/Query.hx:175: characters 131-143 ++$qualify; } #src/xrfragment/Query.hx:176: characters 11-143 if ((\Reflect::field($rule, "<=") !== null) && $testprop(\Std::parseFloat($value) <= \Std::parseFloat(\Reflect::field($rule, "<=")))) { #src/xrfragment/Query.hx:176: characters 131-143 ++$qualify; } #src/xrfragment/Query.hx:177: lines 177-180 if ((\Reflect::field($rule, "=") !== null) && ($testprop($value === \Reflect::field($rule, "=")) || $testprop(Boot::equal(\Std::parseFloat($value), \Std::parseFloat(\Reflect::field($rule, "=")))))) { #src/xrfragment/Query.hx:180: characters 14-26 ++$qualify; } } } } #src/xrfragment/Query.hx:184: characters 5-23 return $qualify > 0; } /** * @return mixed */ public function toObject () { #src/xrfragment/Query.hx:66: characters 5-18 return $this->q; } } Boot::registerClass(Query::class, 'xrfragment.Query');