public static function createFiles() { self::$temp = new Folder(System::tempDir(), uniqid(microtime(true))); self::$temp->create(); $partials = new Folder(self::$temp, 'partials'); $partials->create(); FileUtil::setContents(new File(self::$temp, 'test.mustache'), 'Mustache template {{id}}'); FileUtil::setContents(new File($partials, 'navigation.mustache'), '{{#if nav}}nav{{/if}}'); }
/** * Execute action * * @return int */ public function perform() { $this->archive->open(Archive::READ); $args = $this->getArguments(); while ($entry = $this->archive->getEntry()) { if (!$this->_filter($entry, $args)) { continue; } $f = new File($entry); $data = $this->archive->extract($entry); if (!($this->options & Options::SIMULATE)) { // Create folder on demand. Note that inside a XAR, the directory // separator is *ALWAYS* a forward slash, so we need to change // it to whatever the OS we're currently running on uses. $dir = new Folder(str_replace('/', DIRECTORY_SEPARATOR, dirname($entry))); if (!$dir->exists()) { $dir->create(); } FileUtil::setContents($f, $data); } $this->options & Options::VERBOSE && $this->out->writeLinef('%10s %s', number_format(strlen($data), 0, false, '.'), $entry); } $this->archive->close(); }
/** * Entry point method * * @param string[] args */ public static function main(array $args) { if (empty($args)) { return self::usage(); } foreach (ClassLoader::getLoaders() as $loader) { if ($loader instanceof JitClassLoader) { ClassLoader::removeLoader($loader); } } // Set up compiler $compiler = new Compiler(); $manager = new FileManager(); $manager->setSourcePaths(\xp::$classpath); // Handle arguments $profiles = ['default']; $emitter = 'php5.5'; $result = function ($success) { return $success ? 0 : 1; }; $files = []; $listener = new DefaultDiagnosticListener(Console::$out); for ($i = 0, $s = sizeof($args); $i < $s; $i++) { if ('-?' === $args[$i] || '--help' === $args[$i]) { return self::usage(); } else { if ('-cp' === $args[$i]) { \lang\ClassLoader::registerPath($args[++$i]); } else { if ('-sp' === $args[$i]) { $manager->addSourcePath($args[++$i]); } else { if ('-v' === $args[$i]) { $listener = new VerboseDiagnosticListener(Console::$out); } else { if ('-q' === $args[$i]) { $listener = new QuietDiagnosticListener(Console::$out); } else { if ('-t' === $args[$i]) { $levels = LogLevel::NONE; foreach (explode(',', $args[++$i]) as $level) { $levels |= LogLevel::named($level); } $compiler->setTrace(create(new LogCategory('xcc'))->withAppender(new ConsoleAppender(), $levels)); } else { if ('-E' === $args[$i]) { $emitter = $args[++$i]; } else { if ('-p' === $args[$i]) { $profiles = explode(',', $args[++$i]); } else { if ('-o' === $args[$i]) { $output = $args[++$i]; $folder = new Folder($output); $folder->exists() || $folder->create(); $manager->setOutput($folder); } else { if ('-N' === $args[$i]) { $dir = $args[++$i]; $manager->addSourcePath($dir); $files = array_merge($files, self::fromFolder($dir, false)); } else { if (is_dir($args[$i])) { $dir = $args[$i]; $manager->addSourcePath($dir); $files = array_merge($files, self::fromFolder($dir, true)); } else { $files[] = new FileSource(new File($args[$i])); } } } } } } } } } } } } // Check if (empty($files)) { Console::$err->writeLine('*** No files given (-? will show usage)'); return 2; } // Setup emitter sscanf($emitter, '%[^0-9]%d.%d', $language, $major, $minor); try { $emit = \lang\XPClass::forName('xp.compiler.emit.Emitter')->cast(Package::forName('xp.compiler.emit')->getPackage($language)->loadClass(($major ? 'V' . $major . $minor : '') . 'Emitter')->newInstance()); } catch (\lang\ClassCastException $e) { Console::$err->writeLine('*** Not an emitter implementation: ', $e->compoundMessage()); return 4; } catch (\lang\IllegalAccessException $e) { Console::$err->writeLine('*** Cannot use emitter named "', $emitter, '": ', $e->compoundMessage()); return 4; } catch (\lang\Throwable $e) { Console::$err->writeLine('*** No emitter named "', $emitter, '": ', $e->compoundMessage()); return 4; } // Load compiler profile configurations try { $reader = new CompilationProfileReader(); foreach ($profiles as $configuration) { $reader->addSource(new Properties('res://xp/compiler/' . $configuration . '.xcp.ini')); } $emit->setProfile($reader->getProfile()); } catch (\lang\Throwable $e) { Console::$err->writeLine('*** Cannot load profile configuration(s) ' . implode(',', $profiles) . ': ' . $e->getMessage()); return 3; } // Compile files and pass return value to result handler return $result($compiler->compile($files, $listener, $manager, $emit), array_slice($args, $i + 1)); }
public function uriOfExistantFolder() { $f = new Folder($this->temp); $f->create(); $this->assertEquals($this->temp, $f->getURI()); }
/** * Fetches this origin into a given target folder * * @param io.Folder $target */ public function fetchInto(Folder $target) { $zip = $this->zipBallOf($this->url); $i = 0; with($iter = $zip->iterator()); $base = rtrim($iter->next()->getName() . '/', '/'); Console::write('Extracting (', $base, ') ['); while ($iter->hasNext()) { $entry = $iter->next(); $relative = str_replace($base, '', $entry->getName()); if ($entry->isDirectory()) { $folder = new Folder($target, $relative); $folder->exists() || $folder->create(0755); } else { $file = new File($target, $relative); $tran = new StreamTransfer($entry->getInputStream(), $file->getOutputStream()); $tran->transferAll(); $tran->close(); } $i++ % 10 || Console::write('.'); } $zip->close(); Console::writeLine(']'); }
/** * Perform this action * * @param string[] args */ public function perform(array $args) { with($target = new Folder($args[1])); $target->exists() || $target->create(); $this->extract(self::BASE_URL, $args[0], $target); }
/** * Write compilation result to a given target * * @param xp.compiler.emit.EmitterResult r * @param io.File target * @throws io.IOException */ public function write($r, File $target) { $folder = new Folder($target->getPath()); $folder->exists() || $folder->create(); $r->writeTo(new \io\streams\FileOutputStream($target)); }