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; }