Toon posts:

[PHP] xhtml parser - syntax highlighting

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een pagina maken, die de XHTML source van een andere pagina weergeeft met behulp van syntax highlighting. Alleen ben ik er nog niet helemaal over uit welke techniek ik moet gebruiken voor het parsen.

[methode 1]
Regular expressions hebben zeker veel voordelen: je hoeft veel minder code te schrijven. Je moet echter wel met recursieve functies gaan werken, aangezien html tags genest kunnen zijn.

[methode 2]
Een soort van queue maken van geopende tags, bij een afgesloten tag verwijder je de laatste tag uit de queue.
Hier zal ik waarschijnlijk ook wel regular expressions nodig hebben, maar dat is veel simpeler, aangezien je gewoon de syntax van één tag tegelijk moet checken.

Het hoeft slechts XHTML compatible te zijn, dus <b><i>blaat</b></i> mag (of eigenlijk: moet) een fout opleveren.

Ik zou hierover graag advies krijgen, zodat ik niet ineens tegen nare verrassingen aanloop :)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Als je zeker weet dat he bron xhtml is, betekend dat dat die bron ook valid xml is. Daardoor zou je ook de highlighting kunnen verzorgen met xslt.

Verwijderd

Topicstarter
Nou, het is eigenlijk meer voor personen met het probleem 'help, m'n website doet het niet'. Ik wil dan dat ze de url kunnen intikken, en enkele tellen later hun source zien, met de foutmelding(en) erbij.

Net zoiets als validator.w3.org, maar dan dus met syntax highlighting erbij.

Het is dus onzeker dat de bron uit geldige code bestaat. Ik ga er eigenlijk van uit dat het niet zo is (ander zou je het niet nodig hebben).

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op maandag 25 februari 2002 19:16 schreef Cheatah het volgende:
Nou, het is eigenlijk meer voor personen met het probleem 'help, m'n website doet het niet'. Ik wil dan dat ze de url kunnen intikken, en enkele tellen later hun source zien, met de foutmelding(en) erbij.
Ja, dan kan je het idd. niet met xslt oplossen.

Wanneer je voor oplossing 1 gaat, zal dat ook betekenen dat die parser niet erg ver komt, wanneer de code non-valid is. Als iemand nl. vergeten zou zijn de </html> te plaatsen, zal de <html> tag niet gematched worden.

Daarom lijkt het mij het beste om elke lose tag te matchen en die in een stack te zetten, zoals je bij de 2 oplossing al aan gaf.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Oplossing 2 lijkt mij het meest praktisch in dit geval. Je kunt op die manier veel mooiere foutmeldingen generen en aangeven welk tags nog openstaan etc.

Je zou zelfs wat aannames kunnen maken (zoals IE altijd al doet) waarmee je verkeerd geneste tags snel kunt vinden (<td><b></td>, de /td matcht niet tegen jouw laats geopende b-tag, dus er zal wel een /b bij moeten).

Regular Expressions kunnen een dergelijk karwei niet aan, d.w.z. zeker niet een geheel documenten parsen met enkele expressies, je zult dan moeten gaan loopen en allerlei vage constructies bedenken.

|_____vakje______|


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zou de zaak in twee stappen oplossen: well-formedness en validness.

Allereerst moet het natuurlijk well-formed XML zijn. Hiervoor kan je een parser schrijven die tracht correcties aan te brengen in de input om well-formed XML te maken. Deze correcties kan je dan melden aan de gebruiker. Je moet je in deze fase denk ik niet bezig houden met syntax-kleuring: concentreer op je het corrigeren van de input naar well-formedness.

Na deze fase heb je als het goed is een well-formed XML document. Als de input echt hopeloos is kan je het hier eventueel opgeven, maar laten we aannemen dat de syntax fouten niet al te grof zijn. Omdat je nu in ieder geval well-formed XML hebt is de zaak makkelijk:

1. Je kan nu gewoon een standaard validatie tool die valideert tegen een XML Schema/DTD/watdanook

2. Syntax kleuring kan je met XSLT doen.

Het leuke is dat je het correctie onderdeel nu generiek hebt voor alle 'XML' documenten. Ik denk dat deze tools er eigenlijk al wel zijn, maar ze zijn er in ieder geval in de wetenschappelijke wereld. De syntax van XML is zo eenvoudig dat dit redelijk dankbaar werk is ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
* mbravenboer heeft de indruk dat je je topic vergeten bent?

Heb je ideeen opgedaan? Hoe ga je het nu aanpakken?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ik zit nog een beetje te dubben over het volgende probleem:

Stel je gaat ga eerst de html tags identificeren. Dan krijg je natuurlijk problemen als iemand zijn aanhalingstekens niet goed zet. Bijvoorbeeld
code:
1
<tag attribute="waarde>

Dit is niet goed, en mag niet als zodanig herkend worden, want volgens mij is zoiets als het volgende wel toegestaan:
code:
1
<tag attribute="waarde>">

Hierdoor zou het opdelen van de source code (in tags en tekst) meteen misgaan omdat de rest niet als tag, maar als attribute waarde wordt gezien.

Daarom is het misschien verstandiger om eerst de syntax highlighting te doen? Dat zijn dus <span> tags, die komen in de (met htmlspecialchars behandelde) source te staan.

Hoe doet een browser of editor dit? Wat wordt eerst gechecked?
Op dinsdag 26 februari 2002 18:18 schreef mbravenboer het volgende:
* mbravenboer heeft de indruk dat je je topic vergeten bent?

Heb je ideeen opgedaan? Hoe ga je het nu aanpakken?
Ej! Niet binnen 24 uur kicken hè ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zou eerst eens een goed boek over het bouwen van parsers door gaan lezen.... Dit zijn allemaal problemen die al vrij uitgebreid besproken worden in de literatuur :) . Als je echt een goede error-correcting parser wilt gaan schrijven, heb je gewoon echt een flink portie van deze kennis nodig. Een beetje zelf wat aan prutsen is natuurlijk ook wel mogelijk, maar een goede oplossing zal je dan denk ik niet snel bereiken....

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 19:28 schreef mbravenboer het volgende:
Ik zou eerst eens een goed boek over het bouwen van parsers door gaan lezen.... Dit zijn allemaal problemen die al vrij uitgebreid besproken worden in de literatuur :) . Als je echt een goede error-correcting parser wilt gaan schrijven, heb je gewoon echt een flink portie van deze kennis nodig.
Ik laat me niet zomaar uit het veld slaan :)

Maar je hebt waarschijnlijk gelijk dat het lezen over methoden, en voorbeelden van wanneer je welke methode moet gebruiken, geen overbodige luxe zou zijn.

Ik heb inmiddels al een aardig stukje compacte code geschreven, en heb voorlopig m'n script zo in elkaar zitten, dat het eerst mbv een paar regular expressions alle html tags die structureel goed zijn in een array zet.

Alles wat niet door de parser herkend word komt in diezelfde array te staan, als content dus. Dit heeft als voordeel dat ik later alsnog kan bepalen of een stukje overnieuw geparsed moet worden (bijvoorbeeld een stuk javascript dat html bevat), en een enkele niet afgesloten quote (") zal weinig invloed hebben op de rest van de foutmeldingen.

Ik denk dat dit wel een eind moet gaan lukken. In ieder geval alvast bedankt voor de feedback *D

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
misschien loont het ook wel eens om te kijken naar dom-xml. Als ik nl. een foute xml bekijk met IE (die er een dom van maakt) krijg ik perfect te zien waar de fout zit.
Pagina: 1