PHP Classes

File: index.php

Recommend this page to a friend!
  Classes of Alexander Eist   LaTeXP Decoder   index.php   Download  
File: index.php
Role: Example script
Content type: text/plain
Description: Configuration script
Class: LaTeXP Decoder
Convert LaTeX documents to HTML pages
Author: By
Last change:
Date: 14 days ago
Size: 13,601 bytes
 

Contents

Class file image Download
<?php $debug = 1; // ?????? ????????????? ???????: define ('DATA_DIR', "data"); define ('DS', DIRECTORY_SEPARATOR); define ('FILE_EXTENSION', "tex"); // ?????????? ?????? ?????? $cat = (array_key_exists('cat', $_REQUEST))? $_REQUEST['cat']:"chatGPT"; $tex = (array_key_exists('tex', $_REQUEST))? $_REQUEST['tex']:"learn_LaTexP"; $show_row_numbers = (array_key_exists('show_row_numbers', $_REQUEST))? $_REQUEST['show_row_numbers']:false; $tex_path = DATA_DIR. DS . $cat . DS . $tex . "." . FILE_EXTENSION; $dirs = get_dirs(); extract($_GET); //if($debug)print_mess( basename(__file__). " " . __line__ . " \$_REQUEST:" , $_REQUEST); //if($debug)print_mess( basename(__file__). " " . __line__ . " \$cat " , $cat); //if($debug)print_mess( basename(__file__). " " . __line__ . " \$tex_path " , $tex_path); //$f_name = array_key_exists('tex', $_REQUEST)? $_REQUEST['tex']:"learn_LaTexP" ; $directory = DATA_DIR.DS.$cat;//DATA_DIR.DS.$dirs[0].DS.$f_name; $extension = '.'. FILE_EXTENSION; // ???????? ?? ?????? ????????? ????? $files = scanDirectoryForFiles($directory, $extension); //if($debug)print_mess( basename(__file__). " " . __line__ . " \$files " , $files); // create menu $menu = create_menu($dirs); echo $menu; // ??????? ????????? //if($debug)print_mess( basename(__file__). " " . __line__ . " Files with extension " . $extension , $files); //if($debug)print_mess( basename(__file__). " " . __line__ . " \$menu: " , $menu); //------- // ????????? ?????????? ?????? $text = file_get_contents($tex_path); // 20241125.txt") ; $head =""; $titles = get_title_subtitle(); // if ($debug) print_mess(__line__ . " \$text ", $text ); /// functions //////////////////// function create_menu($dirs_){ $menu = "<nav class='navbar navbar-expand-lg navbar-light bg-light'> <div class='container-fluid'> <button class='navbar-toggler' type='button' data-bs-toggle='collapse' data-bs-target='#navbarNav' aria-controls='navbarNav' aria-expanded='false' aria-label='Toggle navigation'> <span class='navbar-toggler-icon'></span> </button> <div class='collapse navbar-collapse' id='navbarNav'> <ul class='navbar-nav'>"; foreach ($dirs_ as $key => $val) { // ????????? ?????? ?????????? ??? ????????? ?????? ?????? $menu .= "<li class='nav-item dropdown'> <a class='nav-link dropdown-toggle' href='?' id='navbarDropdown{$key}' role='button' data-bs-toggle='dropdown' aria-expanded='false'> {$val} </a> <ul class='dropdown-menu' aria-labelledby='navbarDropdown{$key}'>"; $_ = scandir(DATA_DIR . DS . $val); // ????????? ????????, ????????? ?? ????? ?????? $_ = clear_dots($_); foreach ($_ as $f => $tex_) { if (str_ends_with($tex_, FILE_EXTENSION)){ // only fo PHP 8.x (substr($tex_, -1*(strlen(FILE_EXTENSION) )) == FILE_EXTENSION) { $tex = pathinfo($tex_, PATHINFO_FILENAME); $menu .= "<li><a class='dropdown-item' href='?cat={$dirs_[$key]}&tex={$tex}'>{$tex_}</a></li>"; } } $menu .= "</ul></li>"; } $menu .= "</ul></div></div></nav>"; return $menu; } function get_dirs(){ $dir_ = clear_dots(scandir(DATA_DIR)); // here must be only directories $dirs = []; // the list of directories with latex formatted files foreach($dir_ as $key=>$val){ // ???????? ?????? ????????? ?????????? ???????????? ?? ????? if(@scandir(DATA_DIR. DS .$val)) $dirs[] = $val; // ???????? ?????? ????????? ??? ????, ??????? ??? ???????? ???????? ???? } return $dirs; } function clear_dots($a=[]){ $ret=$a; array_shift($ret); // remove the . array_shift($ret); // remove the .. return $ret; } // ??????? markdown ????????? ? ?????? ?? HTML ???????? ?????? ? ?????? ?????? '/Me:(.*?)chatGPT:/s' function markdown_to_html($text){ // $text = preg_replace('/### Me: (.*?)chatGPT:/s', "<p class='me'>\$1</p>", $text); // $text = preg_replace('/### chatGPT: (.*?)Me:/s', "<p class='chatGPT'>\$1</p>", $text); $text = preg_replace('/###### (.*?)\n/', '<h6>$1</h6>', $text); $text = preg_replace('/##### (.*?)\n/', '<h5>$1</h5>', $text); $text = preg_replace('/#### (.*?)\n/', '<h4>$1</h4>', $text); $text = preg_replace('/### (.*?)\n/', '<h3>$1</h3>', $text); $text = preg_replace('/## (.*?)\n/', '<h2>$1</h2>', $text); $text = preg_replace('/# (.*?)\n/', '<h1>$1</h1>', $text); $text = preg_replace('/ccc (.*?)\n/', '<center>$1</center>', $text); $text = preg_replace('/---(.*?)\n/', "<hr>", $text); $text = preg_replace('/-- (.*?)\n/', '<br><i>$1</i>', $text); $text = preg_replace('/- (.*?)\n/', '<br>$1', $text); $text = preg_replace('/```(.*?)\n/', '<b>$1</b>', $text); $text = preg_replace('/\$(.*)\$/', "<span class='php_var'>$\$1</span>", $text); $text = preg_replace('/;/', ";\n<br>", $text); $text = preg_replace('/\*\*\*(.*?)\n/', "<span class='red'> \$1</span>", $text); // 3 ????????? - ??????? $text = preg_replace('/\*\*(.*?)\*\*/', '<span class="tenten">$1</span>', $text); // 2 ????????? - ????? ???? $text = preg_replace('/\*(.*?)\*/', '<span class="bold">$1</span>', $text); // 1 ????????? - ???? $text = preg_replace('/\/\/ (.*?)\n/', "<span class='comment'>// \$1</span>", $text); $text = preg_replace('/!!! (.*?)\n/', '<div style="display:none">$1</div>', $text); $text = preg_replace('/___ (.*?)\n/', '<small>$1</small>', $text); // //$text = preg_replace('/<span class="tenten">Me: <\/span>(.*?)<span class="tenten">chatGPT: <\/span>/s', "<div class='me'>$1<\/div>", $text); $text = preg_replace('/<span class="tenten">Me: <\/span>(.*?)<span class="tenten">chatGPT: <\/span>/s', "<span class='me'>$1</span>", $text); return $text; } // ??????????? ????? ? HTML function convertToHTML($t) { $text = markdown_to_html($t); // ??????? ??????? LaTeX ?? ?????? MathJax $text = preg_replace('/\$(.*?)\$/', '<span class="mathjax">\\($1\\)</span>', $text); return $text; } // ?????? ????????? function get_title_subtitle() { // ???????? ?????? ?????? ?????????????? ????? GLOBAL $tex_path, $debug; $ret = []; $title = 0; $_ = file($tex_path); // if ($debug) print_mess(__line__ . " \$_ ", $_ ); for ($i = 0; $i < count($_); $i++) { $__ = trim($_[$i]); // ??????? ?? ???????? ???????? ? ?????? ?????????? ?????? if (strlen($__) > 0) { // ???? ?????? ?? ?????? $ret[] = markdown_to_html($__); // ????????? ?? ?????????? ? ??? $title++; // ????????? ????? ? ???????????? ????? } // if ($debug) print_mess(__line__ . " \$__ ", $__ ); if ($title == 2) return $ret; // ???? ????????? - ?????????? } // ?????????? ????????? ? $title 1 ??? 0 if (count($ret) == 0) { $ret[] = ""; // ????????? ?????? ?????????, ???? ??? ? ???? ????????? $ret[] = ""; // ????????? ?????? ????????????, ???? ??? ? ???? ????????? } else { $ret[] = ""; // ????????? ?????? ????????????, ???? ??? ? ???? ????????? } return $ret; // ??????????? ??????? $ret ? ????? ?????????? } // debug print function print_mess($sender, $data){ echo("<div class='debug'> $sender<pre>"); print_r($data); echo("</pre></did>"); } ///////////////////////////////////////////////////////// function scanDirectoryForFiles($directory, $extension) { // ?????????, ?????????? ?? ?????????? if (!@scandir($directory)) { return "??????: ????????? ???? ?? ???????? ???????????!"; } // ???????? ?????? ???? ?????? ? ????? ? ?????????? $files = scandir($directory); // ?????? ??? ???????? ?????? ? ?????? ?????????? $filteredFiles = []; // ???????? ?? ???? ?????? foreach ($files as $file) { // ?????????? . ? .. (??????????? ???????? ? ???????????) if ($file !== '.' && $file !== '..') { // ?????????, ??? ???? ????? ?????? ????????? if (substr($file, -strlen($extension)) === $extension) { $filteredFiles[] = $file; // ????????? ? ????????? } } } // ?????????? ?????? ?????? ? ???????? ?????????? return $filteredFiles; } // main ////////// $text = file_get_contents($tex_path); $i = 0; // ??????? ????? if($show_row_numbers){ $text = preg_replace_callback( '/\n/', function () use (&$i) { $i++; return "\n $i : "; }, $text ); } $htmlContent = convertToHTML($text); // if ($debug) print_mess(__line__ . " \$title ", $title ); // if ($debug) print_mess(__line__ . " \$htmlContent ", $htmlContent ); $footer = <<<FOOTER <div class="container"> <div class = "row"> <footer class="footer mt-auto py-3 bg-dark text-light"> <div class="container text-center"> <div class="row"> <div class="col-md-6"> <a href="https://opensource.org/licenses/MIT" target="_blank">???????? MIT: <!--img src="https://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/MIT_logo.svg/1280px-MIT_logo.svg.png" alt="MIT License" style="width: 50px; height: auto;"--> <div class="svg_mit"> <img class="svg_mit" src="../../../../aekap.api/images/mit_icon.svg" alt="MIT License" > </div> </a> </div> <div class="col-md-6"> <h5>????????:</h5> git: <p>Email: [email protected] <br>Viber: +420 792 455 840 <br>git: <a href="https://github.com/alexeist/LaTeXP-decoder/">https://github.com/alexeist/LaTeXP-decoder/</a> </p> </div> </div> </div> </footer> </div> </div> FOOTER; $htmlOutput = <<<HTML <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{$titles[0]}</title> <link href="include/css/bootstrap.min.css" rel="stylesheet"> <link href="include/css/default.min.css" rel="stylesheet" > <script src="include/js/tex-mml-chtml.js"></script> <script src="include/js/highlight.min.js"></script> <script>hljs.highlightAll();</script> <style> body:{font-size:large;} .tenten{font-weight:bolder; color:#036;} mjx-math{font-size:larger!important; color:#404;} ul{list-style: none} .mt-4{background-color:#ccf!important; padding:20px;} .php_var{color: #006; font-weight:bolder} .comment{color: #aaa!important} .me{background-color: #eef; border-radius:10px; border:thin solid black;padding: 10px;} .chatGPT{background-color: #efe; border-radius:10px; border:thin solid black;padding: 10px} .comment{color:#999} .red{color:red} .bold{font-weight:bold} .svg_mit{height: 50px; width:auto;} </style> </head> <body> <div class="container mt-4"> <div class="row"> <div class="card"> <div class="card-body"> <div class="content"> {$htmlContent} </div> </div> </div> </div> </div> {$footer} <script src="include/js/bootstrap.bundle.min.js"></script> <script> window.onload = function() { MathJax.typeset(); }; </script> </body> </html> HTML; // ??????? ??????????????? HTML echo $htmlOutput; ?>