Пример #1
0
 function testaa_merkkijonometodeita()
 {
     /* Testataan merkkijonometodia "php_yleinen/Yleismetodit.php.
      * yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki)":*/
     $this->lisaa_kommentti("<h2>Testataan merkkijonometodia 'hae_merkkijonot'</h2>");
     $this->lisaa_kommentti("Testataan merkkijonometodia 'hae_merkkijonot'<br/>");
     $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia.";
     $alkumj = "(";
     $loppumj = ")";
     $hae_kaikki = true;
     $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("kaikki sulkujen väliin jäävät merkkijonot eli '200 km/h' " . "ja 'siinä'<br/>");
     $tulostaulukko = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "200 km/h" && $tulostaulukko[1] == "siinä") {
         $this->lisaa_kommentti("OIKEIN! Loytyi merkkijonot '" . $tulostaulukko[0] . "' ja '" . $tulostaulukko[1] . "'");
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
             $virheiden_lkm++;
         }
     }
     /********************************/
     $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia.";
     $alkumj = "(";
     $loppumj = ")";
     $hae_kaikki = false;
     $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("1. sulkujen väliin jäävä merkkijono eli '200 km/h'<br/>");
     $tulostaulukko = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == "200 km/h") {
         $this->lisaa_kommentti("OIKEIN! Loytyi merkkijono '" . $tulostaulukko[0] . "'");
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
         }
     }
     /********************************/
     $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia.";
     $alkumj = "Auto";
     $loppumj = "Oli";
     $hae_kaikki = true;
     $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("sanojen 'Auto' ja 'Oli' väliin jäävä merkkijono " . "eli ' ajoi (200 km/h) kaarteeseen. '<br/>");
     $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == " ajoi (200 km/h) kaarteeseen. ") {
         $this->lisaa_kommentti("OIKEIN! Loytyi merkkijono '" . $tulostaulukko[0] . "'");
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
         }
     }
     /*****************/
     /* Haetaan a-kirjainten välistä. Kolme peräkkäistä aata pitäisi mennä
      * niin, että eka on lopetus, toka aloitus ja kolmas lopetus ja väliin
      * jäävää tyhjää ei palauteta. */
     $teksti = "Auto ajoi (200 km/h) kaaarteeseen. Olipa (siinä) vauhtia.";
     $alkumj = "a";
     $loppumj = "a";
     $hae_kaikki = true;
     $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta (huom 3 a-kirjainta) <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("'a'-kirjainten (pienten) väliin jäävät merkkijonot.<br/>");
     $this->lisaa_kommentti("<br/>");
     $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "joi (200 km/h) k" && $tulostaulukko[1] == " (siinä) v") {
         $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>");
         for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
             $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>");
         }
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
         }
     }
     /*****************/
     $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhti.";
     $alkumj = "a";
     $loppumj = "a";
     $hae_kaikki = true;
     $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("'a'-kirjainten (pienten) väliin jäävät merkkijonot:<br/>");
     $this->lisaa_kommentti("<br/>");
     $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "joi (200 km/h) k" && $tulostaulukko[1] == "rteeseen. Olip") {
         $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>");
         for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
             $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>");
         }
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
         }
     }
     /*****************/
     $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta <br/>");
     $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>");
     $this->lisaa_kommentti("vain 1. a-kirjainten väliin jäävä merkkijonot.<br/>");
     $this->lisaa_kommentti("<br/>");
     $hae_kaikki = false;
     $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki);
     if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == "joi (200 km/h) k") {
         $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>");
         for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
             $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>");
         }
         $this->lisaa_kommentti("<br/><br/>");
     } else {
         if (empty($tulostaulukko)) {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>");
             $virheiden_lkm++;
         } else {
             $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>";
             for ($i = 0; $i < sizeof($tulostaulukko); $i++) {
                 $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>";
             }
             $taul .= "</div>";
             $this->lisaa_virheilmoitus($taul);
         }
     }
     $this->lisaa_kommentti("<h2>Merkkijonometodin 'yleismetodit::hae_merkkijonot' testaus loppu!</h2>");
     /***************************************************************************/
     $this->lisaa_kommentti("<h2>Testataan luokan Kaavaeditori metodia\n                       'muotoile_kaavat(teksti)'</h2>");
     $this->lisaa_kommentti("Syötetään metodiin merkkijono '{@4⋅[@4##6@]=5@}'\n                   ja katsotaan, näyttääkö tulos hyvältä. Alla tulos:<br/><br/>");
     $teksti = '{@4⋅[@4##6@]=5@}';
     $tulos = Kaavaeditori::muotoile_kaavat($teksti);
     $this->lisaa_kommentti($tulos);
     $this->lisaa_kommentti("<a href='../php_yleinen/matematiikka/murtolukutesti.php'>" . "Murtolukutesti</a><br/>");
     $this->lisaa_kommentti("<br/>");
     "<h2>Loppu luokan Kaavaeditori metodin 'muotoile_kaavat(teksti)' testi LOPPU</h2>";
     $this->lisaa_kommentti("******************************************************************<br/>");
 }
Пример #2
0
 /**
  * Hakee annetusta tekstistä pikkukaavat eli merkkijonot, jotka ovat
  * merkkijonojen $pikkukaavan_alku ja $pikkukaavan_loppu välissä, ja 
  * muotoilee kaavat samantyylisiksi kuin varsinaiset kaavat.
  *
  * 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.
  * 
  * Pikkukaavoissa ei voi käyttää neliöjuuria tai murtolukumuotoja, vaan
  * kyse on lähinnä fonttittyyleistä, koosta, joidenkin merkkien muotoilusta
  * yms. Pikkukaavat ovat useimmiten rivien osia, joten niitä ei aseteta 
  * taulukon sisään.
  *
  * @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_pikkukaavat($teksti)
 {
     $palautus = $teksti;
     // Haetaan tekstistä kaavat taulukkoon:
     $alkumj = Kaavaeditori::$pikkukaavan_alku;
     $loppumj = Kaavaeditori::$pikkukaavan_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);
             // Seuraava estää merkinnän z^*, jota käytetään kompleksiluvuissa.
             //$kaava = str_replace("*","<span class='erillaan'>⋅</span>", $kaava);
             // Tämäkin aiheuttaa taas sen ongelman, ettei kaavaan voi lisätä
             // esimerkiksi css-määrettä font-style väliviivan takia..
             //$kaava = str_replace("−","<span class='erillaan'>−</span>", $kaava);
             $kaava = str_replace("−", " − ", $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);
             // Nää oli ennen muotoile_kaavat yhteismetodissa:
             //================ Kokeillaan toimiiko 1.12.2015 ===============
             $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);
             $kaavahtml = Html::luo_span($kaava, array(Attr::classs(Kaavaeditori::$pikkukaava_class)));
             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::$pikkukaavan_alku . $raakakaavat[$i] . Kaavaeditori::$pikkukaavan_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;
 }