]> git.p6c8.net - template-class.git/commitdiff
template.py funktioniert auch unter Python 2.7. master
authorPatrick Canterino <patrick@patshaping.de>
Fri, 26 Apr 2013 14:23:35 +0000 (14:23 +0000)
committerPatrick Canterino <patrick@patshaping.de>
Fri, 26 Apr 2013 14:23:35 +0000 (14:23 +0000)
Wir brauchen template27.py deswegen nicht mehr.

template.py
template27.py [deleted file]

index e4f6bbec62ca5f8710ceab52e6504826b98e0346..0455ed5311a03932a3b4077854db0d0d346bbfd0 100644 (file)
@@ -1,12 +1,11 @@
 \r
 #\r
 # Template (Version 2.5)\r
 \r
 #\r
 # Template (Version 2.5)\r
-# (Python 3)\r
 #\r
 # Klasse zum Parsen von Templates\r
 #\r
 # Autor:            Patrick Canterino <patrick@patshaping.de>\r
 #\r
 # Klasse zum Parsen von Templates\r
 #\r
 # Autor:            Patrick Canterino <patrick@patshaping.de>\r
-# Letzte Aenderung: 18.4.2013\r
+# Letzte Aenderung: 26.4.2013\r
 #\r
 # Copyright (C) 2002-2013 Patrick Canterino\r
 #\r
 #\r
 # Copyright (C) 2002-2013 Patrick Canterino\r
 #\r
diff --git a/template27.py b/template27.py
deleted file mode 100644 (file)
index 26d63de..0000000
+++ /dev/null
@@ -1,842 +0,0 @@
-\r
-#\r
-# Template (Version 2.5)\r
-# (Python 2.7)\r
-#\r
-# Klasse zum Parsen von Templates\r
-#\r
-# Autor:            Patrick Canterino <patrick@patshaping.de>\r
-# Letzte Aenderung: 18.4.2013\r
-#\r
-# Copyright (C) 2002-2013 Patrick Canterino\r
-#\r
-# Diese Datei kann unter den Bedingungen der "Artistic License 2.0"\r
-# weitergegeben und / oder veraendert werden.\r
-# Siehe:\r
-# http://www.opensource.org/licenses/artistic-license-2.0\r
-#\r
-\r
-import os.path\r
-import sys\r
-\r
-class Template:\r
-\r
-    # __init__()\r
-    #\r
-    # Konstruktor\r
-    #\r
-    # Parameter: -keine-\r
-    #\r
-    # Rueckgabe: -nichts-\r
-\r
-    def __init__(self):\r
-        self.file         = ''\r
-        self.template     = ''\r
-        self.original     = ''\r
-        self.old_parsing  = 0\r
-        self.vars         = {}\r
-        self.defined_vars = []\r
-        self.loop_vars    = {}\r
-\r
-    # get_template()\r
-    #\r
-    # Kompletten Vorlagentext zurueckgeben\r
-    #\r
-    # Parameter: -keine-\r
-    #\r
-    # Rueckgabe: Kompletter Vorlagentext (String)\r
-\r
-    def get_template(self):\r
-        return str(self.template)\r
-\r
-    # set_template()\r
-    #\r
-    # Kompletten Vorlagentext aendern\r
-    #\r
-    # Parameter: Vorlagentext\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def set_template(self,template):\r
-        self.template = str(template)\r
-\r
-    # add_text()\r
-    #\r
-    # Vorlagentext ans Template-Objekt anhaengen\r
-    #\r
-    # Parameter: Vorlagentext\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def add_text(self,text):\r
-        self.set_template(self.get_template()+str(text))\r
-\r
-    # read_file()\r
-    #\r
-    # Einlesen einer Vorlagendatei und {INCLUDE}-Anweisungen ggf. verarbeiten\r
-    # (Text wird an bereits vorhandenen Text angehaengt)\r
-    #\r
-    # Parameter: 1. Datei zum Einlesen\r
-    #            2. Status-Code (Boolean):\r
-    #               true  => {INCLUDE}-Anweisungen nicht verarbeiten\r
-    #               false => {INCLUDE}-Anweisungen verarbeiten (Standard)\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def read_file(self,file,not_include=0):\r
-        self.file = file\r
-\r
-        fp = open(file,'r')\r
-        content = fp.read()\r
-        fp.close()\r
-\r
-        self.add_text(content)\r
-        self.save_state()\r
-\r
-        if not not_include: self.parse_includes()\r
-\r
-    # set_var()\r
-    #\r
-    # Wert einer Variable setzen\r
-    #\r
-    # Parameter: 1. Name der Variable\r
-    #            2. Wert, den die Variable erhalten soll\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def set_var(self,var,content):\r
-        if content is None: content = ''\r
-        self.vars[var] = content\r
-\r
-    # get_var()\r
-    #\r
-    # Wert einer Variable zurueckgeben\r
-    #\r
-    # Parameter: (optional) Variablenname\r
-    #\r
-    # Rueckgabe: Wert der Variable;\r
-    #            wenn die Variable nicht existiert, false;\r
-    #            wenn kein Variablenname angegeben wurde, wird ein\r
-    #            Array mit den Variablennamen zurueckgegeben\r
-\r
-    def get_var(self,var=None):\r
-        if var is not None:\r
-            if self.vars.has_key(var):\r
-                return self.vars[var]\r
-            else:\r
-                return None\r
-        else:\r
-            return self.vars.keys()\r
-\r
-    # set_vars()\r
-    #\r
-    # Komplettes Variablen-Array mit einem anderen Array ueberschreiben\r
-    #\r
-    # Parameter: Array\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def set_vars(self,vars):\r
-        self.vars = vars\r
-\r
-    # add_vars()\r
-    #\r
-    # Zum bestehenden Variablen-Array weitere Variablen in Form eines Arrays\r
-    # hinzufuegen\r
-    #\r
-    # Parameter: Array\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def add_vars(self,vars):\r
-        self.vars.update(vars)\r
-\r
-    # set_loop_data()\r
-    #\r
-    # Daten fuer eine Schleife setzen\r
-    #\r
-    # Parameter: 1. Name der Schleife\r
-    #            2. Array mit den Dictionaries mit den Variablen fuer\r
-    #               die Schleifendurchgaenge\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def set_loop_data(self,loop,data):\r
-        self.loop_vars[loop] = data\r
-\r
-    # add_loop_data()\r
-    #\r
-    # Daten fuer einen Schleifendurchgang hinzufuegen\r
-    #\r
-    # Parameter: 1. Name der Schleife\r
-    #            2. Dictionary mit den Variablen fuer den\r
-    #               Schleifendurchgang\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def add_loop_data(self,loop,data):\r
-        if self.loop_vars.has_key(loop) and type(self.loop_vars[loop]) is list:\r
-            self.loop_vars[loop].append(data)\r
-        else:\r
-            self.loop_vars[loop] = [data]\r
-\r
-    # parse()\r
-    #\r
-    # In der Template definierte Variablen auslesen, Variablen\r
-    # ersetzen, {IF}- und {TRIM}-Bloecke parsen\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse(self):\r
-        if self.old_parsing: return self.parse_old()\r
-\r
-        # Zuerst die Schleifen parsen\r
-\r
-        if self.loop_vars and self.loop_vars.keys():\r
-            loops = self.loop_vars.keys()\r
-\r
-            for loop in loops:\r
-                self.parse_loop(loop)\r
-\r
-        # In Template-Datei definierte Variablen auslesen\r
-\r
-        self.get_defined_vars()\r
-\r
-        # Variablen ersetzen\r
-\r
-        vars = self.get_var()\r
-\r
-        if vars is not None and type(vars) is list:\r
-            self.parse_if_blocks()\r
-            self.replace_vars()\r
-\r
-        # {TRIM}-Bloecke entfernen\r
-\r
-        self.parse_trim_blocks()\r
-\r
-    # parse_old()\r
-    #\r
-    # In der Template definierte Variablen auslesen, Variablen\r
-    # ersetzen, {IF}- und {TRIM}-Bloecke parsen\r
-    # (alte Methode)\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_old(self):\r
-        # Zuerst die Schleifen parsen\r
-\r
-        if self.loop_vars and self.loop_vars.keys():\r
-            loops = self.loop_vars.keys()\r
-\r
-            for loop in loops:\r
-                self.parse_loop(loop)\r
-\r
-        # Normale Variablen durchgehen\r
-\r
-        if self.get_var():\r
-            vars = self.get_var()\r
-\r
-            for var in vars:\r
-                val = self.get_var(var)\r
-\r
-                self.parse_if_block(var,val)\r
-\r
-                if type(val) is list:\r
-                    self.fillin_array(var,val)\r
-                else:\r
-                    self.fillin(var,val)\r
-\r
-        # Jetzt dasselbe mit denen, die direkt in der Template-Datei definiert\r
-        # sind, machen. Ich weiss, dass das eine ziemlich unsaubere Loesung ist,\r
-        # aber es funktioniert\r
-\r
-        self.get_defined_vars()\r
-\r
-        for var in self.defined_vars:\r
-            val = self.get_var(var)\r
-\r
-            self.parse_if_block(var,val)\r
-            self.fillin(var,val)\r
-\r
-        # {TRIM}-Bloecke entfernen\r
-\r
-        self.parse_trim_blocks()\r
-\r
-    # fillin()\r
-    #\r
-    # Variablen durch Text ersetzen\r
-    #\r
-    # Parameter: 1. Variable zum Ersetzen\r
-    #            2. Text, durch den die Variable ersetzt werden soll\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def fillin(self,var,text):\r
-        if text is None: text = ''\r
-\r
-        template = self.get_template();\r
-        template = template.replace('{'+str(var)+'}',str(text));\r
-\r
-        self.set_template(template);\r
-\r
-    # fillin_array()\r
-    #\r
-    # Variable durch Array ersetzen\r
-    #\r
-    # Parameter: 1. Variable zum Ersetzen\r
-    #            2. Array, durch das die Variable ersetzt werden soll\r
-    #            3. Zeichenkette, mit der das Array verbunden werden soll\r
-    #               (Standard: '')\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def fillin_array(self,var,array,glue=''):\r
-        self.fillin(var,str(glue).join(array))\r
-\r
-    # replace_vars()\r
-    #\r
-    # Variablen eine nach der anderen ersetzen. Sollte in einer Variable eine\r
-    # andere Variable auftauchen, so wird diese nicht ersetzt.\r
-    #\r
-    # Parameter: Array mit zu parsenden Variablen (optional)\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def replace_vars(self,valid=None):\r
-        template = self.get_template()\r
-\r
-        if valid is None:\r
-            valid_vars = self.get_var()\r
-        else:\r
-            valid_vars = valid\r
-\r
-        x = 0\r
-\r
-        while x < len(template):\r
-            if template[x] == '{':\r
-                for var in valid_vars:\r
-                    # Pruefen, ob hier eine gueltige Variable beginnt\r
-\r
-                    if template[x+1:x+len(var)+2] == var + '}':\r
-                        if type(self.get_var(var)) is list:\r
-                            content = ''.join(self.get_var(var))\r
-                        else:\r
-                            # Muss es nochmal zum String machen\r
-                            # Hilft gegen den "ordinal not in range(128)"-Fehler\r
-                            # Habe aber keine Ahnung, welche neuen Probleme das verursachen koennte\r
-                            # Bin gespannt...\r
-                            content = str(self.get_var(var))\r
-\r
-                        if content is None: content = ''\r
-\r
-                        # Daten vor und nach der Variable\r
-\r
-                        pre  = template[0:x]\r
-                        post = template[len(pre)+2+len(var):]\r
-\r
-                        # Alles neu zusammensetzen\r
-\r
-                        template = pre + content + post\r
-\r
-                        # Zaehler aendern\r
-\r
-                        x = len(pre + content) - 1\r
-\r
-            x += 1\r
-\r
-        self.set_template(template)\r
-\r
-    # to_file()\r
-    #\r
-    # Template in Datei schreiben\r
-    #\r
-    # Parameter: Datei-Handle\r
-    #\r
-    # Rueckgabe: Status-Code (Boolean)\r
-\r
-    def to_file(self,handle):\r
-        return handle.write(self.get_template())\r
-\r
-    # reset()\r
-    #\r
-    # Den gesicherten Stand des Template-Textes wiederherstellen\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def reset(self):\r
-        self.template = self.original\r
-\r
-    # save_state()\r
-    #\r
-    # Aktuellen Stand des Template-Textes sichern\r
-    # (alte Sicherung wird ueberschrieben)\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def save_state(self):\r
-        self.original = self.template\r
-\r
-    # parse_loop()\r
-    #\r
-    # Eine Schleife parsen\r
-    #\r
-    # Parameter: Name der Schleife\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_loop(self,name):\r
-        template = self.get_template()\r
-        if template.find('{LOOP '+name+'}') == -1: return\r
-\r
-        offset     = 0\r
-        name_len = len(name)\r
-\r
-        while template.find('{LOOP '+name+'}',offset) != -1:\r
-            begin = template.find('{LOOP '+name+'}',offset)\r
-\r
-            if template.find('{ENDLOOP}',begin+6+name_len) != -1:\r
-                end = template.find('{ENDLOOP}',begin+6+name_len)\r
-\r
-                block    = template[begin:end+9]\r
-                content = block[name_len+7:-9]\r
-\r
-                parsed_block = ''\r
-\r
-                x = 0\r
-\r
-                while x < len(self.loop_vars[name]):\r
-                    loop_data = self.loop_vars[name][x]\r
-                    loop_vars = loop_data.keys()\r
-\r
-                    ctpl = Template()\r
-                    ctpl.set_template(content)\r
-\r
-                    for loop_var in loop_vars:\r
-                        ctpl.set_var(name+'.'+loop_var,loop_data[loop_var])\r
-\r
-                    if self.old_parsing:\r
-                        ctpl.parse_old()\r
-                    else:\r
-                        ctpl.parse()\r
-\r
-                    parsed_block += ctpl.get_template()\r
-\r
-                    del(ctpl)\r
-                    x += 1\r
-\r
-                template = template.replace(block,parsed_block)\r
-                offset   = begin+len(parsed_block)\r
-\r
-            else:\r
-                break\r
-\r
-        self.set_template(template)\r
-\r
-    # get_defined_vars()\r
-    #\r
-    # In der Template-Datei definierte Variablen auslesen\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def get_defined_vars(self):\r
-        template = self.get_template()\r
-        if template.find('{DEFINE ') == -1: return\r
-\r
-        offset = 0\r
-\r
-        while template.find('{DEFINE ',offset) != -1:\r
-            begin  = template.find('{DEFINE ',offset)+8\r
-            offset = begin\r
-\r
-            name    = ''\r
-            content = ''\r
-\r
-            var_open     = 0\r
-            name_found   = 0\r
-            define_block = 0\r
-\r
-            x = begin\r
-\r
-            while x < len(template):\r
-                if template[x] == '\012' or template[x] == '\015':\r
-                    # Wenn in einem {DEFINE}-Block ein Zeilenumbruch gefunden wird,\r
-                    # brechen wir mit dem Parsen des Blockes ab\r
-\r
-                    break\r
-\r
-                if var_open == 1:\r
-                    if template[x] == '"':\r
-                        # Der Inhalt der Variable ist hier zu Ende\r
-\r
-                        var_open = 0\r
-\r
-                        if template[x+1] == '}':\r
-                            # Hier ist der Block zu Ende\r
-\r
-                            if self.get_var(name) is None:\r
-                                # Die Variable wird nur gesetzt, wenn sie nicht bereits gesetzt ist\r
-\r
-                                self.set_var(name,content)\r
-                                self.defined_vars.append(name)\r
-\r
-                            # {DEFINE}-Block entfernen\r
-\r
-                            pre  = template[0:begin-8]\r
-                            post = template[x+2:]\r
-\r
-                            template = pre+post\r
-\r
-                            # Fertig!\r
-\r
-                            offset = len(pre)\r
-                            break\r
-\r
-                    elif template[x] == '\\':\r
-                        # Ein Backslash wurde gefunden, er dient zum Escapen von Zeichen\r
-\r
-                        if template[x+1] == 'n':\r
-                            # "\n" in Zeilenumbrueche umwandeln\r
-\r
-                            content += "\n"\r
-                        else:\r
-                            content += template[x+1]\r
-\r
-                        x += 1\r
-\r
-                    else:\r
-                        content += template[x]\r
-\r
-                else:\r
-                    if name_found == 1:\r
-                        if var_open == 0:\r
-                            if template[x] == '"':\r
-                                var_open = 1\r
-                            else:\r
-                                break\r
-\r
-                    else:\r
-                        # Variablennamen auslesen\r
-\r
-                        if template[x] == '}' and name != '':\r
-                            # Wir haben einen {DEFINE}-Block\r
-\r
-                            name_found      = 1\r
-                            define_found = 1\r
-\r
-                            # Alles ab hier sollte mit dem Teil verbunden werden, der das\r
-                            # {DEFINE} in einer Zeile verarbeitet\r
-\r
-                            # Der Parser fuer {DEFINE}-Bloecke ist nicht rekursiv, was auch\r
-                            # nicht noetig sein sollte\r
-\r
-                            if template.find('{ENDDEFINE}',x) != -1:\r
-                                end = template.find('{ENDDEFINE}',x)\r
-                                x += 1\r
-\r
-                                content = template[x:end]\r
-\r
-                                if self.get_var(name) is None:\r
-                                    # Die Variable wird nur gesetzt, wenn sie nicht bereits gesetzt ist\r
-\r
-                                    self.set_var(name,content)\r
-                                    self.defined_vars.append(name)\r
-\r
-                                pre  = template[0:begin-8]\r
-                                post = template[end+11:]\r
-\r
-                                template = pre + post\r
-\r
-                                # Fertig!\r
-\r
-                                offset = len(pre)\r
-                                break\r
-\r
-                            else:\r
-                                break\r
-\r
-                        elif template[x] != ' ':\r
-                            name += template[x]\r
-\r
-                        elif template[x] != '':\r
-                            name_found = 1\r
-\r
-                        else:\r
-                            break\r
-\r
-                x += 1\r
-\r
-        self.set_template(template)\r
-\r
-    # parse_if_block()\r
-    #\r
-    # IF-Bloecke verarbeiten\r
-    #\r
-    # Parameter: 1. Name des IF-Blocks (das, was nach dem IF steht)\r
-    #            2. Status-Code (true  => Inhalt anzeigen\r
-    #                            false => Inhalt nicht anzeigen\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_if_block(self,name,state,no_negate=0):\r
-        name     = str(name)\r
-        template = self.get_template()\r
-\r
-        count = 0;\r
-\r
-        while template.find('{IF '+name+'}') >= 0:\r
-            count += 1\r
-\r
-            start    = template.find('{IF '+name+'}')\r
-            tpl_tmp  = template[start:]\r
-            splitted = tpl_tmp.split('{ENDIF}')\r
-\r
-            block = '' # Kompletter bedingter Block\r
-            ifs   = 0  # IF-Zaehler (wird fuer jedes IF erhoeht und fuer jedes ENDIF erniedrigt)\r
-\r
-            # {IF}\r
-\r
-            x = 0\r
-\r
-            while x < len(splitted):\r
-                # Verschachtelungsfehler abfangen\r
-                if x == len(splitted)-1: raise TplClassIFNestingError(self.file,name,count)\r
-\r
-                ifs += splitted[x].count('{IF ') # Zum Zaehler jedes Vorkommen von IF hinzuzaehlen\r
-                ifs -= 1                         # Zaehler um 1 erniedrigen\r
-                block += splitted[x]+'{ENDIF}'   # Daten zum Block hinzufuegen\r
-\r
-                x += 1\r
-\r
-                if ifs == 0:\r
-                    # Zaehler wieder 0, also haben wir das Ende des IF-Blocks gefunden :-))\r
-                    break\r
-\r
-            if_block = block[len(name)+5:-7] # Alles zwischen {IF} und {ENDIF}\r
-\r
-            # {ELSE}\r
-\r
-            else_block = '' # Alles ab {ELSE}\r
-            ifs        = 0    # IF-Zaehler\r
-\r
-            splitted = if_block.split('{ELSE}');\r
-\r
-            x = 0\r
-\r
-            while x < len(splitted):\r
-                ifs += splitted[x].count('{IF ')    # Zum Zaehler jedes Vorkommen von IF hinzuzaehlen\r
-                ifs -= splitted[x].count('{ENDIF}') # Vom Zaehler jedes Vorkommen von ENDIF abziehen\r
-\r
-                x += 1\r
-\r
-                if ifs == 0:\r
-                    # Zaehler 0, also haben wir das Ende des IF-Abschnitts gefunden\r
-\r
-                    # Aus dem Rest den ELSE-Block zusammenbauen\r
-\r
-                    y = x\r
-\r
-                    while y < len(splitted):\r
-                        else_block += '{ELSE}'+splitted[y]\r
-                        y += 1\r
-\r
-                    if else_block:\r
-                        if_block   = if_block[0:len(if_block)-len(else_block)]\r
-                        else_block = else_block[6:]\r
-\r
-                    break\r
-\r
-            if state:\r
-                replacement = if_block\r
-            else:\r
-                replacement = else_block\r
-\r
-            template = template.replace(block,replacement)\r
-\r
-        self.set_template(template)\r
-\r
-        # Evtl. verneinte Form parsen\r
-\r
-        if not no_negate:\r
-            self.parse_if_block('!'+name,not state,1)\r
-\r
-    # parse_if_blocks()\r
-    #\r
-    # IF-Bloecke zu allen definierten Variablen verarbeiten\r
-    #\r
-    # Parameter: Array mit zu verarbeitenden IF-Bloecken (optional)\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_if_blocks(self,valid=None):\r
-        if valid is None:\r
-            valid_vars = self.get_var()\r
-        else:\r
-            valid_vars = valid\r
-\r
-        for valid_var in valid_vars:\r
-            self.parse_if_block(valid_var,self.get_var(valid_var))\r
-\r
-    # parse_trim_blocks()\r
-    #\r
-    # {TRIM}-Bloecke parsen\r
-    #\r
-    # Dieser Parser ist nicht rekursiv, was auch nicht\r
-    # noetig sein sollte.\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_trim_blocks(self):\r
-        template = self.get_template()\r
-        if template.find('{TRIM}') == -1: return\r
-\r
-        offset = 0\r
-\r
-        while template.find('{TRIM}',offset) >= 0:\r
-            begin = template.find('{TRIM}',offset)\r
-\r
-            if template.find('{ENDTRIM}',begin+6) >= 0:\r
-                end = template.find('{ENDTRIM}',begin+6)\r
-\r
-                block    = template[begin:end+9]\r
-                content  = block[6:-9]\r
-\r
-                trimmed  = content.strip()\r
-\r
-                template = template.replace(block,trimmed)\r
-\r
-                offset   = begin+len(trimmed)\r
-            else:\r
-                break\r
-\r
-        self.set_template(template)\r
-\r
-    # parse_condtag()\r
-    #\r
-    # Bedingungstags in einem Vorlagentext verarbeiten\r
-    #\r
-    # Parameter: 1. Tagname\r
-    #            2. Status-Code (true  => Tag-Inhalt anzeigen\r
-    #                            false => Tag-Inhalt nicht anzeigen\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_condtag(self,condtag,state):\r
-        condtag  = str(condtag)\r
-        template = self.get_template()\r
-\r
-        while template.find('<'+condtag+'>') >= 0:\r
-            start   = template.find('<'+condtag+'>')                 # Beginn des Blocks\r
-            end     = template.find('</'+condtag+'>')+len(condtag)+3 # Ende des Blocks\r
-\r
-            extract = template[start:end]                            # Kompletten Bedingungsblock extrahieren...\r
-\r
-            if state:\r
-                replacement = extract[len(condtag)+2:0-len(condtag)-3]\r
-            else:\r
-                replacement = ''\r
-\r
-            template = template.replace(extract,replacement)         # Block durch neue Daten ersetzen\r
-\r
-        self.set_template(template)\r
-\r
-    # parse_includes()\r
-    #\r
-    # {INCLUDE}-Anweisungen verarbeiten\r
-    #\r
-    # Parameter: -nichts-\r
-    #\r
-    # Rueckgabe: -nichts- (Template-Objekt wird modifiziert)\r
-\r
-    def parse_includes(self):\r
-        template = self.get_template()\r
-        if template.find('{INCLUDE ') == -1: return\r
-\r
-        offset = 0\r
-\r
-        while template.find('{INCLUDE ',offset) >= 0:\r
-            begin = template.find('{INCLUDE ',offset)\r
-\r
-            start  = begin+9\r
-            offset = start\r
-            long   = 0\r
-\r
-            if template[start] == '"':\r
-                long = 1\r
-                start += 1\r
-\r
-            file = ''\r
-            skip = 0\r
-\r
-            x = start\r
-\r
-            while x < len(template):\r
-                if template[x] == '\012' or template[x] == '\015':\r
-                    skip = 1\r
-                    break\r
-                elif long == 0 and template[x] == ' ':\r
-                    skip = 1\r
-                    break\r
-                elif long == 1 and template[x] == '"':\r
-                    if template[x+1] != '}': skip = 1\r
-                    break\r
-                elif long == 0 and template[x] == '}':\r
-                    break\r
-                else:\r
-                    file += template[x]\r
-\r
-                x += 1\r
-\r
-            if skip == 1: continue\r
-\r
-            if file != '':\r
-                filepath = file\r
-\r
-                if not os.path.isabs(file):\r
-                    dir  = os.path.dirname(self.file)\r
-                    if not dir: dir = '.'\r
-                    filepath = os.path.normpath(dir+'/'+file)\r
-\r
-                if os.path.isfile(filepath):\r
-                    inc = Template()\r
-                    inc.read_file(file)\r
-\r
-                    if long == 1: end = start + len(file) + 2\r
-                    else:         end = start + len(file) + 1\r
-\r
-                    pre  = template[0:begin]\r
-                    post = template[end:]\r
-\r
-                    template = pre+inc.get_template()+post\r
-                    offset   = len(pre)+len(inc.get_template())\r
-\r
-                    del(inc)\r
-\r
-        self.set_template(template)\r
-\r
-# Klasse zum Erzeugen des Fehlers bei falsch verschachtelten\r
-# {IF}-Bloecken\r
-\r
-class TplClassIFNestingError:\r
-\r
-    def __init__(self,file,name,count):\r
-        self.file  = file\r
-        self.name  = name\r
-        self.count = count\r
-\r
-    def __str__(self):\r
-        return 'Nesting error found while parsing IF block "'+self.name+'" nr. '+str(self.count)+' in template file "'+self.file+'"'\r
-\r
-#\r
-### Ende ###
\ No newline at end of file

patrick-canterino.de