Thread View: de.comm.infosystems.www.authoring.misc
1 messages
1 total messages
Started by ram@zedat.fu-ber
Sat, 10 May 2025 09:26
Einlesen von ML/0
Author: ram@zedat.fu-ber
Date: Sat, 10 May 2025 09:26
Date: Sat, 10 May 2025 09:26
39 lines
1715 bytes
1715 bytes
(Die folgende Darstellung ist gegenüber dem tatsächlichen Quelltext vereinfacht.) Um die HTML-ähnliche Auszeichnungssprache ML/0 einzulesen, bedient sich das Programm der Python-Standardklasse "HTMLParser". Diese liest sich die ML/0-Eingabe durch (nachdem diese von unserem Programm etwas vorverarbeitet wurde). Dann ruft sie bei jeder Start- marke, die gefunden wurde, unsere Methode "handle_starttag" auf, und bei jeder Endmarke "handle_endtag". Wenn eine Endmarke gefunden wurde, wird der akkumulierte Inhalt des Elements von einem Stapel genommen und mit dem von einem anderen Stapel genommenem Elementtyp zusammen zu einem neuen Objekt verbunden. So wird aus einem h1-Element beispielsweise ein Objekt der Klasse H1. Dies ist die wesentliche Erklärung dafür, wie aus dem ML/0-Text ein Objektmodell wird. def handle_endtag(self, tag): contents = self.contents_stack.pop() self.block_stack.pop() obj = self._make_object(tag, contents) self.contents_stack[-1].append(obj) Die Methode für Startmarken schließt zunächst ein eventuell noch offenes Blockelement. (Dies ist eine Heuristik, die wahrscheinlich nicht immer das Gewünschte macht.) Anschließend wird eine neue leere Liste für den folgenden Inhalt des neu geöffneten Elements auf den Inhaltsstapel gelegt. Der Elementtyp wird auf den Blockstapel gelegt, der speichert, welche Blockelemente gerade offen sind. def handle_starttag(self, tag, attrs): if self.block_stack: . . . # close it self.contents_stack.append([]) self.block_stack.append(tag) (Zur Vereinfachung wurde in diesem Posting Quelltext für die Behandlung absatzinterner Auszeichnungen weggelassen.)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads