Пример #1
0
 /**
  * generate php messages
  *
  * @param \google\protobuf\FileDescriptorProto $file
  * @param array $paramter
  * @param GeneratorContext $context
  * @param StringStream $error
  */
 public function generate(\google\protobuf\FileDescriptorProto $file, $paramter = array(), GeneratorContext $context, StringStream $error)
 {
     $file_list = array();
     try {
         $file_generator = new FileGenerator($context, $file);
         if (!$context->hasOpened("autoload.php")) {
             // NOTE: generate autoloader first. it's easier to reuse for extension
             $printer = new Printer($context->open("autoload.php"), "`");
             $append_mode = false;
             $file_generator->generateAutoloader($printer, array(), $append_mode);
         }
         if (Helper::IsPackageNameOverriden($file)) {
             $package_name = Helper::getPackageName($file);
         } else {
             $package_name = Helper::phppackage($file);
         }
         $package_dir = Helper::phpPackageToDir($package_name);
         $printer = new Printer($context->open($file->getName() . ".php"), "`");
         $file_generator->generate($printer);
         $file_generator->generateSiblings($package_dir, $context, $file_list);
         $printer = new Printer($context->openForInsert("autoload.php", "autoloader_scope:classmap"), "`");
         $file_generator->generateAutoloader($printer, $file_list, true);
     } catch (\Exception $e) {
         $error->assign($e->getMessage() . "\n" . $e->getTraceAsString());
     }
 }
Пример #2
0
 public static function execute($descriptor, GeneratorContext $context)
 {
     foreach (self::$data as $block) {
         $regex = sprintf("/%s/", $block['match']);
         if (preg_match($regex, $descriptor->getName(), $match)) {
             $file_name = $block['file'];
             $insertion_point = $block['insertion_point'];
             $count = count($match);
             for ($i = 0; $i < $count; $i++) {
                 $file_name = str_replace("\${$i}", $match[0], $file_name);
                 $insertion_point = str_replace("\${$i}", $match[0], $insertion_point);
             }
             if ($context->hasOpened($file_name)) {
                 $printer = new Printer($context->openForInsert($file_name, $insertion_point), "`");
                 $lines = preg_split("/\r?\n/", $block['insertion']);
                 foreach ($lines as $line) {
                     $printer->put($line . PHP_EOL);
                 }
             }
         }
     }
 }