public function compile(IObject $aObject, ObjectContainer $aObjectContainer, TargetCodeOutputStream $aDev, CompilerManager $aCompilerManager) { if ($aObject instanceof \org\jecat\framework\ui\xhtml\ObjectBase and !$aObject->count()) { $aDev->write($aObject->source()); } else { $this->compileChildren($aObject, $aObjectContainer, $aDev, $aCompilerManager); } }
public function compile(IObject $aObject, TargetCodeOutputStream $aDev, CompilerManager $aCompilerManager) { $sSource = $aObject->source(); //如果开头是变量 if (substr($sSource, 0, 1) === '$') { //分辨是定义还是调用 if ($nEqual = stripos($sSource, '=') and strlen(substr($sSource, $nEqual)) > 0) { //这是定义 $sObjName = '$' . substr($sSource, 1, $nEqual - 1); $arrStrings = $this->getElementsBySource(substr($sSource, $nEqual + 1)); $sArrName = '$' . NodeCompiler::assignVariableName('arrChangByLoopIndex'); $aDev->write("{$sArrName} = " . var_export($arrStrings, true) . ";\n\t\t\t\t\t\t\t\tif(!isset({$sObjName}))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t{$sObjName} = new org\\jecat\\framework\\ui\\xhtml\\compiler\\macro\\Cycle({$sArrName});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\$aVariables->set( '" . substr($sObjName, 1) . "' , {$sObjName} ) ;\n\t\t\t\t\t\t\t\t"); } else { //这是调用 $sObjName = '$' . substr($sSource, 1); $aDev->write("\n\t\t\t\t\t\t\t\tif(isset({$sObjName}))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t{$sObjName}->printArr(\$aDevice);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t"); } } else { $sArrName = '$' . NodeCompiler::assignVariableName('arrChangByLoopIndex'); $sObjName = '$' . NodeCompiler::assignVariableName('aStrChangByLoopIndex'); $aDev->write("{$sArrName} = " . var_export($this->getElementsBySource($sSource), true) . ";\n\t\t\t\tif(!isset({$sObjName}))\n\t\t\t\t{\n\t\t\t\t\t{$sObjName} = new org\\jecat\\framework\\ui\\xhtml\\compiler\\macro\\Cycle({$sArrName});\n\t\t\t\t}\n\t\t\t\t{$sObjName}->printArr(\$aDevice);\n\t\t\t\t\$aVariables->set( '" . substr($sObjName, 1) . "' ,{$sObjName} ) ;\n\t\t\t"); } }
public function compile(IObject $aObject, ObjectContainer $aObjectContainer, TargetCodeOutputStream $aDev, CompilerManager $aCompilerManager) { $aDev->write(self::compileExpression($aObject->source(), $aObjectContainer->variableDeclares())); }
public function compile(IObject $aObject, ObjectContainer $aObjectContainer, TargetCodeOutputStream $aDev, CompilerManager $aCompilerManager) { $sContents = trim($aObject->source()); if ($sContents == '*.uri') { $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->uri()) ;"); } else { if (substr($sContents, 0, 5) == '*.url') { $sPart = strlen($sContents) > 5 ? substr($sContents, 5) : ''; switch ($sPart) { case '': $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->url()) ;"); break; case '.scheme': $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->urlScheme()) ;"); break; case '.host': $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->urlHost()) ;"); break; case '.path': $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->urlPath()) ;"); break; case '.query': $aDev->write("\$aDevice->write(\$aVariables->get('theRequest')->urlQuery()) ;"); break; default: break; } } } }