Minulle iski aika aloittelijamainen oikosulku, kun olen koodaamassa tuota nettiselainta visual basic 6:lla.
Minulla on siinä jo jonkinlainen linkki-systeemi, joka ymmärtää, että tietty teksti on linkki jos sivulla on koodissa tälläinen kohta:
<a href=sivun osoite</a>
niin kuinka tai mitä minun pitää selaimen koodiin laittaa, että siitä saisi normaalin näköisen eli <a href="sivun osoite"></a> ?
Viimeisimmät sourcet selaimestani löytyy osoitteesta:
http://juhak.no-ip.info/ohjelmat/selain.zip
Jos jotakuta kiinnostaa edes...
Törmäsin samankaltaiseen ongelmaan rakentaessani QB:llä ohjelmointikieltä pari päivää sitten. Sen sijaan, että lukisit rivi kerrallaan, lue tagi kerrallaan (eli teksti merkkien '<' ja '>' välillä). Tällöin teksti kannattaa lukea binäärimuodossa merkki kerrallaan. Tässä jonkinlaista alkua (suoraan pohjattomasta hatusta):
dim tagi as string, merkki as string * 1 dim pituus as integer open filu for binary as #1 do if eof(1) then exit do get #1, merkki 'luetaan 1 merkki if merkki = "<" then 'tagi alkaa ' Etsitään loppu ja käsitellään sisältöä get #1, merkki: pituus = 0: tagi = "" do get #1, merkki ' saavutettiin loppu tai eof if merkki = ">" or eof(1) then exit do else ' Ei kuitenkaan lasketa mukaan rivinvaihtoja tai tabulaattoreita if merkki <> chr$(13) and merkki <> chr$(9) then pituus = pituus + 1 tagi = tagi + merkki end if end if loop tagi = lcase(tagi) ' Parannellaan vertailua varten ' Nyt on tagi on tagin sisältö ilman <- ja >-merkkejä. ' Merkkijonosta voidaan etsiä tiettyjä merkkijonoja ' InStr-komennolla. ' Esim. linkissä <a ...> ensimmäinen tieto täytyy olla ' merkki 'a' (tunniste), tauluissa 'table' jne. end if loop close #1
Seuraava askel tällä mekanismilla olisi sitten mm. attribuuttien etsinnällä tagista (bgcolor, name, class jne). Tähän kannattaa tehdä erillinen funktio, jolloin voit samalla laittaa selaimeesi oletusarvot tietyille asioille (bgcolor, textcolor jne). Esim.
Function EtsiAttr(tag as string, attr as string) dim pos as integer, pos2 as integer pos = InStr(tag, attr) ' Etsitään, missä kohdin on (jos on) if pos = 0 then ' Oletukset menevät tähän (attribuuttia ei ole määritelty) EtsiAttr = "" else ' Attribuutti on olemassa (ainakin jollain tasolla). ' Se alkaa '='-merkin jälkeen ja on lainausmerkeissä. ' Eli haetaan seuraavan '=' -merkin paikan ja luetaan ' sitä seuraava ""-merkeissä oleva sana: pos = InStr(pos, tag, "=") ' Virheenkäsittelyä if pos = 0 then MsgBox "Virhe attribuutin " +attr+ " lukemisessa!" EtsiAttr = "": Exit Function end if ' Hetaan sitten =:tä seuraava "-merkki (ASC: 34) pos = InStr(pos, tag, chr$(34)) ' Taas virheenkäsittelyä... if pos = 0 then MsgBox "Virhe attribuutin " +attr+ " lukemisessa!" EtsiAttr = "": Exit Function end if ' Luetaan toiseen "-merkkiin asti. pos+1, koska muuten ' palauttaisi aina pos:n arvon. pos2 = InStr(pos + 1, tag, chr$(34)) ' Virhe.... if pos2 = 0 then MsgBox "Virhe attribuutin " +attr+ " lukemisessa:"+chr$(13)+"Päättämätön attribuutti." EtsiAttr = "": Exit Function end if ' No niin, se meni hyvin :) Luetaan tiedon sijainti. EtsiAttr = Mid(tag, pos, pos2) end if end function '... ... ... ' esim: tämän pitäisi tulostaa (tässä tapauksessa) info.html. print EtsiAttr("<a href = "+chr$(34)+"info.html"+chr$(34)+">", "href")
Toivottavasti auttoi :/
Minkälaista kieltä sqwiik väsää? (sori offtopic)
Vastaus offtopic: melko hämärää :) esim. kaikki silmukat ovat olioita (ja siten muokattavissa ulkopuolelta...)
Suosittelisin etsimään artikkeleita, joissa käsitellään parserin tekemistä vaikka tekstiseikkailuun tai skriptikieltä varten.
Offtopic: Aika mielenkiintoinen kieli... :) Voisi itsekin yrittää tehdä mahdollisimman kummallisen kielen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.