Exemple #1
0
 public function getObjects()
 {
     if ($this->objects) {
         return $this->objects;
     }
     $lines = $this->getCode();
     foreach ($lines as $line_number => $line) {
         if ($line_number < $end_line_number) {
             continue;
         }
         if (preg_match('%\\b([a-zA-Z0-9_.$]+)\\s*=\\s*{%', $line, $match, PREG_OFFSET_CAPTURE)) {
             $object = new DojoObject($this, $line_number, $match[0][1] + strlen($match[0][0]) - 1);
             $object->setName($match[1][0]);
             list($end_line_number, $end_position) = $object->build();
             $this->objects[] = $object;
         }
     }
     return $this->objects;
 }
 public function getExternalizedObjects($function_name = false, $parameter_names = array())
 {
     if ($this->externalized_objects) {
         return $this->externalized_objects;
     }
     $this->build();
     $lines = Text::chop($this->package->getCode(), $this->start[0], $this->start[1], $this->end[0], $this->end[1], true);
     foreach ($this->externalized_mixins as $mixin) {
         $lines = Text::blankOutAtPositions($lines, $mixin->start[0], $mixin->start[1], $mixin->end[0], $mixin->end[1]);
     }
     $internals = $this->getLocalVariableNames();
     $matches = preg_grep('%=\\s*\\{%', $lines);
     foreach ($matches as $line_number => $line) {
         if (preg_match('%(\\b[a-zA-Z_.$][\\w.$]*(?:\\.[a-zA-Z_.$][\\w.$]|\\["[^"]+"\\])*)\\s*=\\s*{%', $line, $match)) {
             if (array_key_exists($match[1], $internals)) {
                 continue;
             }
             $externalized_object = new DojoObject($this->package, $line_number, strpos($line, '{', strpos($line, $match[0])));
             $end = $externalized_object->build();
             $name = $match[1];
             if (strpos($name, 'this.') === 0) {
                 continue;
             }
             foreach ($internals as $internal_name => $external_name) {
                 if (strpos($name, $internal_name . '.') === 0) {
                     if (!$external_name) {
                         continue 2;
                     }
                     $name = $external_name . substr($name, strlen($internal_name));
                 }
             }
             if (strpos($name, '[') !== false) {
                 $source_lines = Text::chop($this->package->getSource(), $line_number, 0);
                 $source_line = trim($source_lines[$line_number]);
                 preg_match('%\\b([a-zA-Z_.$][\\w.$]*(?:\\.[a-zA-Z_.$][\\w.$]|\\["[^"]+"\\])*)\\s*=\\s*function%', $source_line, $source_match);
                 $name = preg_replace('%\\["([^"]+)"\\]%', '.$1', $source_match[1]);
             }
             if (strpos($name, 'this.') === 0) {
                 if (!$function_name) {
                     continue;
                 }
                 $name = $function_name . substr($name, 4);
             }
             if (in_array($name, $parameter_names)) {
                 continue;
             }
             $externalized_object->setName($name);
             $this->externalized_objects[] = $externalized_object;
         }
     }
     return $this->externalized_objects;
 }