Goedemorgen allemaal,
Momenteel ben ik in PHP een eigen template parse ding aan het maken. Er zijn er genoeg, maar ik wil het gewoon zelf naar mijn smaak doen, dus vandaar. Ik ben inmiddels een heel eind, maar bekijk de volgende "template" eens :
Hierin zijn twee "blokken" aanwezig, t.w. {systeem.componenten} en {artikelen}. Dmv de volgende regexp. trek ik alle blokken eruit, die ik vervolgens weer recursief "parse".
Ook dit werkt zonder problemen. Het gaat fout met de {@before} dingen. Als ik het eerste blok verwerk ( {systeem.componenten} ), dan zoek ik met de volgende regel de {@} operators op :
In principe werkt dit ook, behalve als er dus binnen een blok nog andere blokken aanwezig zijn ( in dit geval {artikelen} ). Hij vindt in dit geval ook de {@before} en {@after} in het tweede blok, die dus nog niet aan de beurt is. In mijn ogen zouden beide regexp-en dus gecombineerd moeten worden, zodat de tweede alle {@} eruit haalt, maar niet als ze binnen een ander blok zitten. Ik heb geprobeerd met de lookahead assertions iets in elkaar te zetten, maar dat werkt dus niet. En lookback assertions kunnen niet van een variabele lengte zijn dus ook daar kan ik niets mee aanvangen.
Wie brengt mij het licht, want ik weet toch bijna zeker dat het moet kunnen.
Momenteel ben ik in PHP een eigen template parse ding aan het maken. Er zijn er genoeg, maar ik wil het gewoon zelf naar mijn smaak doen, dus vandaar. Ik ben inmiddels een heel eind, maar bekijk de volgende "template" eens :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <h3>{systeem.omschrijving}</h3> {systeem.componenten} {@before}<form><table></@} {@after}</table></form></@} <tr><td>{naam}</td></tr> {artikelen} {@before}<select>{/@} {@after}</select>{/@} <option value="{id}">{omschrijving}</option> {/artikelen} {/systeem.componenten} |
Hierin zijn twee "blokken" aanwezig, t.w. {systeem.componenten} en {artikelen}. Dmv de volgende regexp. trek ik alle blokken eruit, die ik vervolgens weer recursief "parse".
PHP:
1
| preg_match_all ("/\{(.+?)\}(.*){\/\\1\}/ise", $work_string, $blocks, PREG_SET_ORDER ); |
Ook dit werkt zonder problemen. Het gaat fout met de {@before} dingen. Als ik het eerste blok verwerk ( {systeem.componenten} ), dan zoek ik met de volgende regel de {@} operators op :
PHP:
1
| preg_match_all ("/\{@(.+?)\}(.*?){\/@}/ise", $work_string, $operator, PREG_SET_ORDER ); |
In principe werkt dit ook, behalve als er dus binnen een blok nog andere blokken aanwezig zijn ( in dit geval {artikelen} ). Hij vindt in dit geval ook de {@before} en {@after} in het tweede blok, die dus nog niet aan de beurt is. In mijn ogen zouden beide regexp-en dus gecombineerd moeten worden, zodat de tweede alle {@} eruit haalt, maar niet als ze binnen een ander blok zitten. Ik heb geprobeerd met de lookahead assertions iets in elkaar te zetten, maar dat werkt dus niet. En lookback assertions kunnen niet van een variabele lengte zijn dus ook daar kan ik niets mee aanvangen.
Wie brengt mij het licht, want ik weet toch bijna zeker dat het moet kunnen.
SIZE does matter.
"You're go at throttle up!"