BeniBela online

Quellcodes

Auf dieser Seite sind Quellcodes, die man in eigenen Projekten benutzten kann, aufgelistet, Delphikomponenten sind jedoch auf einer eigenen Seite zu finden. Alle mit der MPL-Lizenz, GPL-Lizenz oder BSD-Lizenz versehenen Quellcodes dürfen beliebig verändert und vertrieben werden.
Bei der MPL und GPL müssen aber Änderungen veröffentlicht werden und bleiben unter der MPL lizenziert, bei der GPL gilt dies auch für Erweiterungen.
Steht eine Datei unter mehreren Lizenzen, darf man eine davon wählen.
Genauere und rechtskräftige Informationen sollten den Dateien bei liegen.
Braucht jemand unbedingt eine andere Lizenz, kann er mir eine E-Mail schicken.

Titel Beschreibung Sprache Lizenz
Internet Tools Ein vollständiger XPath 2/XQuery/JSONiq-Interpreter, ein Pattern-Matcher für HTML/XML-Templates, eine Autoupdate-Klasse und einen HTTP-Verbindungswrapper FPC GPL
Farbauswahldialog Ein Farbauswahldialog mit RGB- und HLS-Auswahlmöglichkeiten Delphi GPL
TCommandLineReader Eine Unit zum Lesen von Kommandozeilenparametern FPC, Delphi GPL
Big Decimal Math Funktionen zum Rechnen mit beliebig genauen Dezimalzahlen FPC GPL
Diagram-Tools Eine Diagrammkomponente, basierend auf einem Model/View-System FPC/Lazarus GPL
Non-VCL Canvas Eine Konvertierung des Delphi-Canvas nach Non-Vcl. Delphi MPL, GPL
BBUtils Häufig benötigte Funktionen, die einem bei FPC fehlen. Delphi, FPC GPL
Diffreader Eine Unit zum Lesen und Schreiben von Unified Diffs. FPC GPL
TCVirus Eine Unit/Komponente zum Entwickeln von Scherzprogrammen Delphi MPL, GPL
TAutoUpdater Eine Unit für ein automatisches Progammupdate FPC GPL
SimpleBrowser Ein kleiner, IE-basierter Browser (Delphi), (EXE) GPL
Huffmankomprimierer Eine Funktionssammlung für Huffman(de-)komprimierung. Delphi MPL, GPL
TRegExpr Kopie von TRegExpr von Andrey V. Sorokin Delphi, FPC GPL

 Internet Tools

GPL
Dieses Package enthält folgende Module:

  • Einen simplen HTML Parser, der eine HTML/XML-Datei parst und für jeden gelesen Tag und Text eine entsprechende Callbackfunktion aufruft.
  • Einen HTML Tree Parser, der den einfachen Parser verwendet, um eine HTML/XML-Datei zu lesen und in einen Elementstream umzuwandeln, der sich wie ein DOM-Baum verhält. Dabei werden zudem Fehler in der HTML-Datei wie nicht geschlossene Tags korrigiert und die Zeichenkodierung ermittelt.
  • Einen XPath 2 / XQuery Interpreter, der beliebige XPath 2 / XQuery Ausdrücke über dem DOM-ähnlichen Baum ausführen kann. Er ist vollständig in Pascal implementiert, unterstützt alle XPath 2 Funktionen/Ausdrücke und ist nahezu standardkompatibel (vergleiche seine Ergebnisse der vollständigen XQuery Testsuite oder beschränkt auf XPath 2). Er unterstützt auch JSONiq.
  • Ein Parser für CSS 3 Selectors, der in die XQuery Klasse eingebaut ist, der CSS Selektoren in XPath 2-Ausdrücke umwandeln, und diese dann ausführt.
  • Eine pattern-matching HTML Templateengine, die ein HTML Template auf eine Seite anwendet. Ein solches HTML-Template ist eine vereinfachte Version der zu verarbeitenden Seite. Die Struktur des Templates wird mit der Struktur der Seite verglichen, und jedes Template-Element wird mit einem übereinstimmenden Seiten-Element verknüpft, welches dieselben Eigenschaften und ähnliche Kinder aufweist. Die in den Template-Elementen enthaltenden Annotationen können dann die Werte der entsprechenden Seiten-Elemente auslesen. Zum Beispiel ein Template wie
    <a>{@href}</a>*
    liest die Addressen aller Links auf einer HTML Seite.
    Ein Template wie
    <table id="foobar"><tr><td>abc</td><td>{.}</td>*</tr>*</table>
    liest alle Tabellenzellen nach der Zelle mit dem Text abc in der Tabelle mit ID foobar. Und schließlich ein Template wie
    <table id="foobar"><tr>{temp := 0}<td>abc</td><td>{temp := $temp + .}</td>*{result := $temp}</tr>*</table>
    berechnet die Summe aller Tabellenzellen nach der abc-Zelle für alle Zeilen.
    Diese Templates lassen sich auch online or with Xidel ausprobieren.
  • Die multi page Templateengine speichert in ihren Templates mehrere Einzelseitentemplates, die nacheinander auf die angegebenen Seiten angewandt werden. Im Gegensatz zu den Einzelseitentemplates führt diese Engine kein pattern-matching durch (außer natürlich dem pattern-matching mit den enthaltenen Einzelseitentemplates zu den heruntergeladenen Seiten), sondern führt alle Aktionen in der angegebenen Reihenfolge durch. Dabei werden auch Variablen, Bedingungen und Schleifen unterstützt, so dass sie Turing vollständig ist.
  • Der HTTP/S-Verbindungswrapper kann Seiten mit beliebigen HTTP-Methoden (z.B.: GET/POST) herunterladen und kümmert sich automatisch um Cookies und Weiterleitungen. Außerdem kann er dynamisch zwischen Wininet (auf allen Windowscomputern vorhanden), Synapse (plattform-unabhängig, muss aber installiert werden) und Apache HttpComponents (alter Standard für Android) umschalten.
  • Die Autoupdateklasse ist ein Trivialbeispiel für die anderen Klassen, und kann automatisch ein Update herunterladen und installieren.


Stichpunktübersicht der Features:

  • Parser/Interpreter:
    • für xml/html Seiten, über ein sax und dom-ähnliches Interface
    • für XPath 2 / XQuery Ausdrücke
      • nahezu vollständig standardkompatibel: besteht 99.3% der XPath 2 Tests und 97.8% der XQuery 1 Tests in der XQuery Testsuite
        (unter Auslassung der Tests für ungültige Eingaben; die meisten fehlschlagenden Tests und XML Schemas, welche noch nicht unterstützt werden )
      • Plus Erweiterungen für OOP, CSS, Regexps, pattern-matching und JSONiq.
    • ! und || Operatoren von XPath/XQuery 3.0
    • für JSONiq: Eine Weiterentwicklung von XQuery zur Verarbeitung von JSON-Daten
    • für CSS 3 Selektoren
      • standardkompatibel (afaik, nicht viel getestet)
      • standalone oder innerhalb eines XPath Ausdrucks: //foobar/css("p#x a.class")/@href
    • für pattern-matching html/xml Templates:
      • Templates lassen sich einfach aus einer html-Datei erstellen und später updaten
      • Die Sprache kann reguläre, XPath 2 / XQuery, JSONiq und CSS 3 Selektor Ausdrücke einbinden
      • Es gibt Variablen, optionale Elemente, Schleifen und Bedingungen
      • z.B.: <p class="test"><span>Caption:</span><a>{.}</a>*</p> liest alle Links nach einem span-Element mit Text Caption: innerhalb eines Paragraphens mit Klasse test
    • für multi-page Templates
      • Mehrere pattern-matching Templates zusammen, die nacheinander auf unterschiedliche Seiten angewandt werden.
      • unterstützt Variablen, Bedingungen und Schleifen => Turing vollständig
  • HTTP/S-Wrapper:
    • Übertragungen über http und https mit Fortschrittsanzeige
    • Beliebige HTTP-Methoden, z.B.: GET, POST, PUT, ...
    • Unterstützte Plattformen:
      • Windows: via wininet
      • Android: via JNI-Aufruf der Apache HttpComponents
      • Andere (Linux, Mac): via dem plattform unabhängigen Synapse
      • Offline: Simulation eine Internetverbindung für Unittests
    • Unterstützung für http, https und socks-Proxy (nicht auf Android)
  • Auto update:
    • Verwendet ein XML-Format, um auf dem Server die aktuelle Version und das Changelog zu speichern.
    • Erlaubt unterschiedliche Updates für 32/64-bit Linux/Windows und BSD-Platformen
    • Überprüft, ob es eine neue Version gibt, indem nur eine kleine Datei (statt dem Changelog) heruntergeladen wird
    • Erlaubt das Ausführen des heruntergeladenen Installers mit beliebigen Kommandozeilenparametern
Mercurial repository

Onlinereferenz

Quellcode auf GitHub

Download (952 KB ) zur Übersicht

 Farbauswahldialog

GPL
Dieser Farbauswahl ähnelt dem Windowsstandarddialog, bietet aber mehr Möglichkeiten:
  • Es werden alle Komponenten von RGB und HLS angezeigt.
  • Man kann in einem Farbverlauf eine beliebige Komponente von RGB/HLS ändern
  • Diese Komponente wird sowohl in Abhängigkeit von den beiden anderen angezeigt wie auch unabhängig
  • Die beiden anderen Komponenten können in einem 2D-Farbverlauf ausgewählt werden
  • Dieser wird jeweils in Abhängigkeit der anderen Komponente angezeigt
  • Zusätzlich kann man eine Liste von änderbaren Farben anzeigen
screenshot:example screenshot:example


Quellcode auf GitHub

Download (16 KB ) zur Übersicht

 TCommandLineReader

GPL
Dies ist ein Kommandozeilenparser, der sowohl mit Delphi wie auch mit Free Pascal funktioniert, sowie unter Windows und Linux.
Vor der Abfrage von Parametern, müssen alle erlaubten Parameter deklariert werden. Dadurch kann vom Parser überprüft werden, dass der Benutzer nur erlaubte Parameter und nur richtige Parameterwerte (z.B.: Int vs. String) verwendet. Außerdem kann so bei Angabe eines falschen Parameters automatisch eine Hilfsliste aller unterstützenden Parameter angezeigt werden. Dies verhindert umgekehrt, dass es geheime, undokumentiere Optionen gibt.
Es gibt drei verschiedene Versionen des Parsers, die ersten beiden lesen die Argumente von der Kommandozeile, und zeigen die Hilfe auf stdout bzw. in einer Messagebox an. Die dritte Version (nur fpc) läuft als CGI-Anwendung und nimmt die Argumente über http GET/POST-Anfragen entgegen.

Zum Vergleich sind hier die Ausgaben meiner Klasse und der Standard-Kommandozeilenfunktionen bei Aufruf des Programms mit den Parameter '" a "' :
SystemTCommandLineReaderParamStrstring(cmdline)
Windows (Delphi 4)" a "' a '"executable" '" a "'
Windows (fpc 2.6)" a "' a 'executable '" a "'
Linux/bash (fpc 2.6)" a "" a "executable "" a ""

Die Features von rcmdline sind:
  • Automatische Typumwandlung in den angegeben Typen
  • Automatische Anzeige aller erlaubten Parameter
  • Linux (--xyz=bar oder -x bar) und Windows (/) -styleparameter werden erkannt
  • Verschiedene Eingabemöglichkeiten für Flags (-f, --flag, --enable-flag, --disable-flag)
  • Einfache (') und doppelte (") Anführungszeichen werden erkannt (auch unter Windows)
  • Existierende Dateien mit Leerzeichen im Namen auch ohne Verwendung von Anführungszeichen einlesbar
  • Kann als CGI-Anwendung laufen und auf GET/POST-Anfragen antworten (nur fpc)
  • Parameter können von einem String (z.B.: cmdline) oder einem Array (z.B.: indirekt ParamStr) gelesen werden


Onlinereferenz

Quellcode auf GitHub

Download (40 KB ) zur Übersicht

 Big Decimal Math

GPL
Diese Unit definiert einen BigDecimal-Typ, der beliebig genaue (BCD) Dezimalzahlen speichert und wie ein normaler numerischer Typ verwendet werden kann, z.B.:
  var bd: BigDecimal;
  bd := 12.34;
  bd := bd * 1000 - 42;  // bd = 12298
  bd := bd / 7.0;        // bd = 1756.85714285714286
  bd := StrToBigDecimal('123456789012345678901234567890123456789') + 1; // bd = 123456789012345678901234567890123456790
    


Features:

  • Funktioniert mit Zahlen zwischen 10-19327352814 und 1019327352814 mit bis zu 4831838208 Dezimalziffergenauigkeit
  • Implementiert alle Grundrechenarten und Vergleichsoperatoren
  • Die entsprechenden Operatoren sind überladen, so dass es wie ein normaler Zahlentyp verwendet werden kann
  • Funktionen zum Runden (auf, ab, kaufmännisch, ...)
  • Einige wenige höhere mathematische Funktionen, wie sqrt und power
  • Exakte Standard-float zu String Umwandlungsfunktionen
  • In reinem Pascal geschrieben, daher vollständig plattformunabhängig und ohne Abhängigkeiten
  • Die Hauptziele der Entwicklung sind Korrektheit und Einfachheit, nicht Geschwindigkeit.


Onlinereferenz

Quellcode auf GitHub

Download (68 KB ) zur Übersicht

 Diagram-Tools

GPL
Diese Unit zur Anzeige eines Diagrammes folgt einem ähnlichen Model/View-Konzept wie QT: Es gibt eine View-Komponente, welches die in einem Model gespeicherten Daten anzeigt und eine dazugehörige, abstrakte Modelklasse.
Dies ist sehr viel flexibler als der traditionelle Weg, bei welchem die Daten der anzeigenden Komponente direkt zugeordnet sind.
Features:
  • Model/View-Konzept mit automatische Synchronisation zwischen Views, welche identische Models zeigen
  • Füllen mit horizontalem/vertikalen Farbverlauf und unterschiedliche Linien/Punktstyles
  • Interpolation durch Geraden oder Splines möglich
  • Die Diagrammwerte können je nach Einstellung vom Benutzer verändert werden
  • Mehrere mögliche Achsen und Punktreihen mit samt einer Legende für letztere
  • Automatische Bereichswahl, Verarbeitung von Fließkommawerten
  • Standardmodels, mit Punktlisten, zyklischen Listen und einem Model zur Verknüpfung anderer Modelle
  • Es gibt eine Hilfedatei
screenshot:grid like screenshot:filled


Onlinereferenz

Quellcode auf GitHub

Download (72 KB ) zur Übersicht

 Non-VCL Canvas

MPL, GPL
Diese Quellcodesammlung ermöglicht es die üblichen Funktionen des Delphicanvas ohne die VCL-Codes zu benutzen, indem für jede VCL-Funktion eine Methode existiert, die direkt die entsprechende GDI-Funktion auffruft.
Ihre wichtigsten Elemente sind:
  • Funktionen zum Zeichnen von Ellipsen, Linien, Rechtecken und Polygonen.
  • Funktionen zum Kopieren von Bildausschnitten.
  • Funktionen zur Ausgabe von Text.
  • Klassen zur Einstellung von Vorder- und Hintergrundfarbe.
  • Eine Klasse zum Einstellen von Fonteigenschaften.
  • Eine Hash-klasse und ein Ressourcenmanager.
In einigen Bereichen sind sie den Delphimethoden sogar überlegen, so kann man beispielweise den Text auch gedreht ausgeben.
Es gibt eine ausführliche HTML-Doku, in der alle Funktionen beschrieben sind.

Download (28 KB ) zur Übersicht

 BBUtils

GPL
In diesen Units habe ich einige kleine Funktionen gesammelt, die einem bei der Programmierung mit FPC ständig fehlen. Es gibt:
  • Alle möglichen Arrayfunktionen (hinzufügen, löschen, vergleichen, ...)
  • Alle möglichen Stringfunktionen (pchar/ansistring, vergleichen, zerlegen, suchen, umwandeln, html-Entities, ...)
  • Alle möglichen date/time-parsing/formatting functions, für negative Jahre und Jahre nach 65535, und Zeitzonen
  • Stabile Sortierfunktion für Daten beliebiger Größe (merge+insert sort)
  • Mathematische Funktionen (ggt, Primzahlen, Bernoulli-Wahrscheinlichkeitsrechnung,...)
  • Automatische Übersetzung von mit tr['markierten String'] und Lazaruskomponenten
  • Einen Pascal-Preprocessor, der ähnlich zum C-Preprocessor, Pascalquellcode aus einer Templatedatei erzeugt


Onlinereferenz

Quellcode auf GitHub

Download (196 KB ) zur Übersicht

 Diffreader

GPL
Mit dieser Unit kann man ein Unified Diff in ein strukturiertes Format einlesen, verarbeiten und wieder als gültiges Diff speichern
  • Liest Unified Diffs für eine oder mehrere Dateien
  • Erzeugt gültige Diffs
  • Besitzt Funktionen um unnötige Daten zu entfernen (siehe mein Programm Simplify Diff)


Download (4 KB ) zur Übersicht

 TCVirus

MPL, GPL
TCvirus hat (unter anderem) folgende Funktionen:
  • Es liefert einen Canvas für das direkte Zeichnen auf den Bildschirm, unabhängig von geöffneten Fenstern.
  • Man kann den Bildschirm spiegeln
  • Es liefert Windowshandle für wichtige Objekte, wie dem Startbutton, der Taskleite und des Desktops, über die sie dann verändert werden können.
  • Man kann das Programm vor dem Taskmanager verstecken.
  • Man kann die CD-Schublade öffnen und schließen.
Da TCvirus ursprünglich eine Komponente war, gibt es zwei Units: Eine mit den eigentlichen Funktionen, und eine Komponente, die einen Wrapper für die erste Unit darstellt.
Will man die Komponente ohne die VCL nutzen, benötigt man meinen Non-VCL Canvas, der aber im Ziparchiv enthalten ist.

Download (68 KB ) zur Übersicht

 TAutoUpdater

GPL
Hiermit kann man in ein Programm ein automatisches Update übers Internet einbauen.
Um die Klasse benutzen zu können, braucht man eine wininet-Unit, die die Windowsinternetfunktionen enthält. (oben gibt es eine neuere Version, die ein besser konfigurierbares XML-Format verwendet) Funktionen:
  • Erkennen neuer Versionen
  • Download dieser
  • Ersetzen des eigenen Programms unter Windows NT und 9x-Schiene
  • Erkennen von Rechtemangel unter (Windows NT,...)


Download (12 KB ) zur Übersicht

 SimpleBrowser

GPL
Dies ist ein kleiner Browser, der auf dem Internet Explorer basiert.
Für einen Normaluser ist er vollkommen nutzlos, sein Aussehen kann aber beim Aufruf durch Kommandozeilenparameter festgelegt werden, was manchmal recht praktisch ist, wenn man nur eine bestimmte Seite anzeigen will.

Download (196 KB ) zur Übersicht

 Huffmankomprimierer

MPL, GPL
Diese Unit ermöglicht die (De-)Kompression von Strings mit dem Huffmanverfahren. In dem entstehenden, komprimierten String wird jedes Zeichen nicht mehr mit 8 Bit gespeichert, sondern die Bitlänge ist variabel, so dass häufige Zeichen mit weniger Bits als seltene gespeichert werden.
Es ist auch möglich Unicodestring, Arrays und Dateien zu komprimieren, indem sie von den entsprechenden Funktionen einfach als Ansistring interpretiert werden.
Die Unit läuft auch ohne die VCL.
Besonders eignet sich das Verfahren für normale Texte und andere Daten, wo einige wenige Zeichen sehr oft wiederholt werden. In beinahe jedem Fall ist die Kompressionsrate aber geringer als von modernen Komprimierungsverfahren, wie Rar oder Ace.

Download (16 KB ) zur Übersicht

 TRegExpr

GPL
Dies ist eine Kopie von TRegExpr 0.952 von Andrey V. Sorokin, dessen Seite www.regexpstudio.com tot zu sein scheint. Im wesentlichen ist eine Bibliothek für reguläre Ausdrücke, die sämtliche Regexp-Operationen unterstützt, inklusive Backtracking.
Ich habe ein paar Zeilen geändert, damit es besser mit FPC funktioniert, die größte Änderung ist im Grunde, dass ich die Unit umbenannt habe.

Download (92 KB ) zur Übersicht

www.benibela.de/sources_de.html
Inhalt zuletzt geändert: 2013-11-19 23:23:29+0100
Seite zuletzt geändert: 2013-11-19 23:23:29+0100
Für G+ Autorenanerkennung:
Homepage von