🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#175017
Author: ram@zedat.fu-ber
Date: Sat, 10 May 2025 09:26
39 lines
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