コード例 #1
0
ファイル: TexTools.php プロジェクト: ilivanoff/www
 /**
  * Метод вызывается и производит замены в TeX формул посредством вызова $callback.
  * 
  * @param string $string - строка, в которой будет производиться поиск
  * @param callable $callback - функция обратного вызова
  *                 function($original, $content, $isBlock). Пример: function(\[x\], x, true).
  * @param bool $replcaAllToImaged - признак, нужно ли предварительно заменить все формулы
  *                                  на их представление, заменяемое на картинки
  * @return string - строка с произведёнными заменами
  */
 public static function replaceTeX($string, $callback, $replcaAllToImaged)
 {
     if (isEmpty($string)) {
         return '';
     }
     if (!self::assertTexValid($string)) {
         return $string;
     }
     if ($replcaAllToImaged) {
         $string = self::replaceMacrosToImaged($string);
     }
     $b_callback = function ($matches) use(&$callback) {
         $formula = TexTools::safeFormula($matches[1]);
         return call_user_func($callback, "\\[{$formula}\\]", $formula, true);
     };
     $string = preg_replace_callback('/\\\\\\[(.+?)\\\\\\]/si', $b_callback, $string);
     $i_callback = function ($matches) use(&$callback) {
         $formula = TexTools::safeFormula($matches[1]);
         return call_user_func($callback, "\\({$formula}\\)", $formula, false);
     };
     $string = preg_replace_callback('/\\\\\\((.+?)\\\\\\)/si', $i_callback, $string);
     return $string;
 }
コード例 #2
0
ファイル: TexImager.php プロジェクト: ilivanoff/ps-sdk-dev
 /**
  * Метод возвращает DirItem элемента, содержащего картинку-представление формулы.
  * 
  * @param type $formula - текстовая формула
  * @param type $createIfNotExists - признак, стоит ли пытаться создавать картинку для формулы
  * @return DirItem
  */
 public function getImgDi($formula, $createIfNotExists = true)
 {
     $formula = TexTools::safeFormula($formula);
     if ($this->CACHE->has($formula)) {
         return $this->CACHE->get($formula);
     }
     $hash = TexTools::formulaHash($formula);
     $imgDI = $this->DM->getHashedDirItem(null, $hash, $hash, 'gif');
     if ($imgDI->isImg()) {
         $this->CACHE->set($formula, $imgDI);
         return $imgDI;
     }
     if (!$createIfNotExists) {
         return null;
     }
     //Создаём структуру директорий
     $imgDI->makePath();
     $contents = '';
     //Запрашиваем графическое представление
     $this->PROFILER->start($formula);
     try {
         //TODO - делать это локально, чтобы не зависить от стороннего сервиса
         $handle = fopen('http://latex.codecogs.com/gif.latex?' . rawurlencode($formula), 'r');
         while (!feof($handle)) {
             $contents .= fread($handle, 8192);
         }
         fclose($handle);
         $this->PROFILER->stop();
     } catch (Exception $ex) {
         //Останавливаем профайлер без сохранения
         $this->PROFILER->stop(false);
         //Делаем дамп ошибки
         ExceptionHandler::dumpError($ex, "Tex formula convertation requested for:\n{$formula}");
         //Попытаемся подчистить за собой, если мы что-то создали
         $imgDI->remove();
         //Пробрасываем эксепшн
         throw $ex;
     }
     //Сохраняем картинку в файл
     $imgDI->putToFile($contents);
     //Сохраним текстовое представление
     $this->DM->getHashedDirItem(null, $hash, $hash, 'gif.tex')->putToFile($formula);
     $this->CACHE->set($formula, $imgDI);
     return $imgDI;
 }