diff --git a/tutorial/Sgml.pmod b/tutorial/Sgml.pmod index 69c17d14f4bbf5968e39895954f9891868cde421..d314ef4415a905b2ae36021997b54fd7e42f1128 100644 --- a/tutorial/Sgml.pmod +++ b/tutorial/Sgml.pmod @@ -42,6 +42,29 @@ class Tag return "pos "+pos+" in file "+file; } + + static mapping(string:array(string|object(Tag))) data_cache=([]); + static array(string|object(Tag)) last_data; + + array(string|object(Tag)) find(string tag) + { + if(last_data != data) + { + data_cache=([]); + foreach(data, Tag t) + { + if(data_cache[t->tag]) + { + data_cache[t->tag]+=({t}); + }else{ + data_cache[t->tag]=({t}); + } + } + last_data=data; + } + return data_cache[tag]; + } + void create(string t, void|mapping p, void|int po, @@ -57,6 +80,10 @@ class Tag } }; +class PropTag +{ +}; + #define TAG object(Tag)|string #define SGML array(TAG)