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/>"); }
/** * 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; }