コード例 #1
0
ファイル: BaseCompiler.php プロジェクト: JeCat/framework
 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);
     }
 }
コード例 #2
0
 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");
     }
 }
コード例 #3
0
 public function compile(IObject $aObject, ObjectContainer $aObjectContainer, TargetCodeOutputStream $aDev, CompilerManager $aCompilerManager)
 {
     $aDev->write(self::compileExpression($aObject->source(), $aObjectContainer->variableDeclares()));
 }
コード例 #4
0
ファイル: PathMacroCompiler.php プロジェクト: JeCat/framework
 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;
             }
         }
     }
 }