function _resolveScripting_atomic($sInterpreter, $sPath, $aConf = AMEOSFORMIDABLE_LEXER_VOID, $sNextPath = FALSE) { if ($aConf === AMEOSFORMIDABLE_LEXER_VOID && is_object($this)) { $aConf = $this->currentTemplateMarkers(); } if (is_array($aConf)) { reset($aConf); } $curZone = $aConf; if (tx_ameosformidable::isTemplateMethod($sPath)) { $curZone = tx_ameosformidable::executeTemplateMethod($sInterpreter, $curZone, $sPath); if ($curZone === AMEOSFORMIDABLE_LEXER_FAILED || $curZone === AMEOSFORMIDABLE_LEXER_BREAKED) { return AMEOSFORMIDABLE_LEXER_FAILED; } } else { if (is_array($curZone)) { if (array_key_exists($sPath, $curZone) && array_key_exists($sPath . ".", $curZone)) { // ambiguous case: both "token" and "token." exists in the data array /* algo: if there's a next token asked after this one if "nexttoken" or "nexttoken." exists in "token." current zone become "token." else current zone become "token" else current zone become "token" */ if ($sNextPath !== FALSE) { if (array_key_exists($sNextPath, $curZone[$sPath . "."]) || array_key_exists($sNextPath . ".", $curZone[$sPath . "."])) { $curZone = $curZone[$sPath . "."]; } else { $curZone = $curZone[$sPath]; } } else { $curZone = $curZone[$sPath]; } } elseif (array_key_exists($sPath, $curZone) || array_key_exists($sPath . ".", $curZone)) { if ($sNextPath !== FALSE && array_key_exists($sPath . ".", $curZone) && is_array($curZone[$sPath . "."])) { if (array_key_exists($sNextPath, $curZone[$sPath . "."]) || array_key_exists($sNextPath . ".", $curZone[$sPath . "."])) { $curZone = $curZone[$sPath . "."]; } else { $curZone = $curZone[$sPath]; } } else { $curZone = $curZone[$sPath]; } } elseif (is_string($sPath) && is_numeric($sPath)) { return $sPath + 0; } elseif (is_string($sPath) && $this->isTrueVal($sPath)) { return TRUE; } elseif (is_string($sPath) && $this->isFalseVal($sPath)) { return FALSE; } else { return AMEOSFORMIDABLE_LEXER_FAILED; } } else { return $curZone; } } return $curZone; }