Exemple #1
0
 public function __construct($syotehtml)
 {
     parent::__construct(true);
     // Yksirivinen on.
     $this->syotehtml = $syotehtml;
     //==================== Sisäkkäisten elementtien tarkistus alkaa ========
     // Eksponentissa voi olla esimerkiksi murtolukuja tai neliöjuuria.
     // Tarkistetaan tämä ja muokataan koodi kerralla valmiiksi.
     //
     // Tänne kootaan Yksiriviset, Supistajat, Laventajat, Neliojuuret,
     // Murtolukumuodot yms. oliot:
     $kaavaelementtitaulukko = Kaavaeditori::etsi_kaavaelementit($this->syotehtml);
     // Muodostetaan nimittäjästä oma kaavariviolio, jolloin ainakin
     // teoriassa saadaan joustava (ja monimutkainen) merkkaus.
     $eks_muokattu = new Kaava($kaavaelementtitaulukko);
     // Ei oikein toimi. Taitaa olla aika hankala saada näkymään hyvin.
     //$this->muokattu_html = $eks_muokattu->nayta_rivi();
     $this->muokattu_html = $this->syotehtml;
 }
Exemple #2
0
 /**
  * Hakee annetusta tekstistä kaavat eli merkkijonot, jotka ovat
  * merkkijonojen $kaavan_alku ja $kaavan_loppu välissä, ja muotoilee kaavat
  * html:n avulla.
  *
  * Hyödyntää metodia php_yleinen/php_yleismetodit.php:
  * 'hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki)'
  *
  * Jos tekstistä löytyy $kaavan_alku mutta ei $kaavan_loppu, ei kyseistä
  * merkkijonoa muokata.
  *
  * Ellei mitään kaavaa löydy, tai tapahtuu muuta kummaa, palautetaan sama teksti.
  * Muuten palautetaan saatu teksti, jossa kaavamerkinnät on korvattu html-
  * muotoiluilla.
  *
  * @param <type> $teksti
  * @param <type> $kaavan_alku
  * @param <type> $kaavan_loppu
  * @param <type> $jako_alku
  * @param <type> $jako_loppu
  * @return string muotoiltu html-koodi
  */
 static function muotoile_kaavat($teksti)
 {
     $palautus = $teksti;
     // Haetaan tekstistä kaavat taulukkoon:
     $alkumj = Kaavaeditori::$kaavan_alku;
     $loppumj = Kaavaeditori::$kaavan_loppu;
     $hae_kaikki = true;
     $raakakaavat = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     /* Tarkempaan työhön aletaan vain, jos kaavoja löytyy */
     if (!empty($raakakaavat)) {
         $valmiit_kaavat = array();
         // Käydään läpi jokainen raakakaava: HUOM katso metodi
         // muotoile_merkit() tiedostossa yhteiset/php_yhteismetodit.php!
         foreach ($raakakaavat as $kaava) {
             // Muotoillaan merkkejä hiukan. Miinusmerkit on kiva olla
             // pitkiä (ja hiukan tekstistä erillään). Yhdysviivat kaavoissa
             // merkitsevät käytännössä aina miinusmerkkiä, joten muutetaan ne
             // oikeiksi. Tehdään se täällä, koska
             // tekstissä väliviivaa tarvitaan kuitenkin.
             // NÄIN EI TOIMI MIKSI?? $kaava = str_replace("-",Merkit::$miinusmerkki,$kaava);
             $kaava = str_replace("-", "−", $kaava);
             // Näin taas toimii!
             $kaava = str_replace("+", "<span class='erillaan'>+</span>", $kaava);
             // Kompleksiluvun liittolukuongelma:
             //$kaava = str_replace("*","<span class='erillaan'>⋅</span>", $kaava);
             // Tämäkin aiheuttaa sen ongelman, ettei kaavaan voi lisätä
             // esimerkiksi css-määrettä font-style väliviivan takia..
             $kaava = str_replace("−", "<span class='erillaan'>−</span>", $kaava);
             // Tämä täällä, koska muualla pitää olla mahis laittaa
             // esim. merkki => (ohjelmointi tms.)
             // Huom! =-merkkiin ei voi lisätä yleensä html-koodia, koska merkkiä käytetään
             // html:n sisällä (attribuutit)"
             $kaava = str_replace("=", " = ", $kaava);
             // Sama kuin yllä:
             $kaava = str_replace(":", " : ", $kaava);
             //================ Kokeillaan toimiiko==========================
             $kaava = str_replace("⋅", "<span class='erillaan'>⋅</span>", $kaava);
             $kaava = str_replace("≈", "<span class='erillaan'>≈</span>", $kaava);
             $kaava = str_replace("≠", "<span class='erillaan'>≠</span>", $kaava);
             $kaava = str_replace("║", "<span class='erillaan'>║</span>", $kaava);
             //================ Kokeillaan toimiiko loppu ===================
             // Tehdään kursivoinnin poisto ennen varsinaista kaavamuotoilua.
             $kaava = str_replace("(ioff_b)", "<span class='ital_off'>", $kaava);
             $kaava = str_replace("(ioff_e)", "</span>", $kaava);
             // Tänne kootaan Yksiriviset, Supistajat, Laventajat, Neliöjuuret
             // ja Murtolukumuodot yms -oliot:
             $kaavaelementtitaulukko = Kaavaeditori::etsi_kaavaelementit($kaava);
             $muotoiltu_kaava = new Kaava($kaavaelementtitaulukko);
             $kaavahtml = "<div class='kaavaboxi'>" . $muotoiltu_kaava->nayta_rivi() . "</div>";
             array_push($valmiit_kaavat, $kaavahtml);
         }
         // Lisätään jokaiseen raakakaavaan alku- ja
         // loppumerkit, jotta myös kyseiset merkit poistuvat:
         $kaavojen_lkm = sizeof($raakakaavat);
         for ($i = 0; $i < $kaavojen_lkm; $i++) {
             $raakakaavat[$i] = Kaavaeditori::$kaavan_alku . $raakakaavat[$i] . Kaavaeditori::$kaavan_loppu;
             // Käydään vielä läpi valmiit kaavat ja suoristetaan vielä sulut.
             // Huomaa, ettei tätä voi tehdä aiemmin, koska sulut ovat osa
             // monia erikoismerkintöjä.
             $valmiit_kaavat[$i] = str_replace("(", "<span class='ital_off'>(</span>", $valmiit_kaavat[$i]);
             $valmiit_kaavat[$i] = str_replace(")", "<span class='ital_off'>)</span>", $valmiit_kaavat[$i]);
         }
         // Korvataan tekstin raakakaavat valmiilla kaavoilla:
         $palautus = str_replace($raakakaavat, $valmiit_kaavat, $teksti);
     }
     return $palautus;
 }