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