1. #1

    Registriert seit
    28.10.2011
    Beiträge
    625
    Thanked 279 Times in 168 Posts

    Standard JavaScript - KCode Parser

    Knuddels bietet seit geraumer Zeit den KCode-Parser als Eigenständiges Modul in JavaScript an. Dies wird zum Beispiel verwendet, um den KCode im HTMLChat darzustellen oder in SystemApps/UserApps zu nutzen.

    Ich habe mir mal die Mühe gemacht, den kompletten Code zu analysieren und auch "human readable" zu machen. Das ganze habe ich aber bisher nur mit der aller ersten public-version gemacht, da das Package noch ziemlich klein ist und dementsprechend leichter zu analysieren ist. Diese Version beinhaltet aber sicher noch so einige Bugs oder es fehlen Features (logisch).

    Hier erst einmal eine Liste der Versionen:


    Vielleicht gehe ich da irgendwann einmal mit einem Compare durch um die Changes der einzelnen Versionen zu "dokumentieren". Wäre vielleicht ein nice-to-have, um zu sehen, was für Features die einzelnen Versionen bereits implementiert haben.

    Hier eine Tabelle mit den mutmaßlichen Klassen - Ich habe die vom logischen Resultat benannt; Sprich, das was die jeweilige Funktion bereitstellt. Durch erste Erkenntnisse scheinen es immer 25 Funktionen zu sein. Die werden anhand des Array-Indexes durch die aller erste Function gewrappt und von dort auf instanziiert/aufgerufen. Eigentlich recht simple, auch wenn es am Anfang vielleicht etwas verwirrend ist.

    01 - Extract Classes, Renaming.zip (files.fm)

    Index Name
    0 Main Entry
    1 Prototypes (Erstellt Polyfills oder erweitert Objekte...)
    2 Parser
    3 Container
    4 Entry
    5 Component
    6 PropertyNames
    7 Properties
    8 StringHelper
    9 ValueHelper
    10 EscapeKCode
    11 ProfileHelper
    12 CodeSnippets
    13 Command
    14 Link
    15 PseudoCSS
    16 Rewriter
    17 LinkingAction
    18 KImage
    19 PropertySet
    20 KCode (Container oder LineEntry?)
    21 Reader
    22 PropertiesLoader
    23 LinkHandler
    24 Destroyer
    25 Stylesheets (erstellt einfach ein <style>-Tag mit vordefinierter CSS)

    Weitere Source folgt. Ich bin gerade noch dabei, die Klassen einzeln zu bearbeiten. Das ist für das Renaming von Methoden/Variablen notwendig. Schließlich will ich am Ende vernünftigen Code haben. Nach dem der ganze KCode-Parser auseinander genommen wurde, werde ich vllt. basierend auf ES6 (mal schauen) einen neuen auf OpenSource-Basis erstellen, mal sehen.

    Um ein Beispiel zu nennen, wie das ganze nachher aussehen wird, hier mal ein Beispiel:
    Main

    g = d(1).Dc;
    a = d(2);
    var e = d(16),
    b = d(22),
    h = d(17),
    n = d(23).Qc,
    c = d(3),
    G = d(24);
    d = d(25);
    g();
    b.tb();
    d.Ec();
    window.KCode = {
    setRelativeURLRewriteFunction: e.Cb,
    Parser: a,
    LinkingAction: h,
    processLinkingActions: n,
    destroy: G.Qb,
    setCommonImageIDPrefix: c.bd,
    setHTMLIdPrefix: c.cd,
    version: "1.0.1"
    }


    Resultat:

    Prototypes.String();
    PropertiesLoader.init();
    StyleSheets.init();

    window.KCode = {
    setRelativeURLRewriteFunction: Rewriter.setRelativeURLRewriteFunction,
    Parser: Parser,
    LinkingAction: LinkingAction,
    processLinkingActions: LinkHandler.processLinkingActions,
    destroy: Destroyer.destroy,
    setCommonImageIDPrefix: Container.setCommonImageIDPrefix,
    setHTMLIdPrefix: Container.setHTMLIdPrefix,
    version: "1.0.1"
    }


    Prototypes

    function(g) {
    g.b = {
    Dc: function() {
    String.prototype.endsWith ||
    (String.prototype.endsWith = function(a) {
    return -1 !== this.indexOf(a, this.length - a.length)
    });
    String.prototype.startsWith || (String.prototype.startsWith = function(a) {
    return 0 === this.indexOf(a)
    })
    }
    }
    }


    Resultat:

    function Prototypes() {
    this.String = function String() {
    String.prototype.endsWith || (String.prototype.endsWith = function(input) {
    return (this.indexOf(input, this.length - input.length) !== -1);
    });

    String.prototype.startsWith || (String.prototype.startsWith = function(input) {
    return (this.indexOf(input) === 0);
    })
    }
    }
    Geändert von Bubble Gum (18.08.2018 um 11:52 Uhr)

  2. The Following User Says Thank You to Bubble Gum For This Useful Post:

    eXtrac3 (04.09.2018)

  3. #2

    Registriert seit
    28.10.2011
    Beiträge
    625
    Thanked 279 Times in 168 Posts

    Standard AW: JavaScript - KCode Parser

    Hier nun der nächste Schritt vom rebasing, sodass man die Klassen/Methoden/Variablen vernünftig refactoren kann und somit ein Massen-Rename gemacht werden kann.

    Kann an einigen Stellen noch etwas vergessen worden sein (ich hoffe nicht xD), da ich hier den Context auf der Klasse gebunden habe und auch gleich die vom minifier umgekackten Bedingungen korrigiert habe, sodass man nun viel mehr vom Code versteht. Im übrigen haben sich dabei die Klassennamen nicht geändert, da die von mir angedachte Funktionsweise der jeweiligen Klassen das ganze untermauert hatten. Vielleicht kann dies sich da aber in Zukunft vielleicht noch ändern.

    02 - Rebasing.zip (files.fm)

    Im nächsten Schritt gibt es dann das Renaming, wo die Variablen sowie Methoden einen vernünftigen Namen bekommen.

  4. The Following User Says Thank You to Bubble Gum For This Useful Post:

    eXtrac3 (04.09.2018)

Ähnliche Themen

  1. [S] Webseiten-Parser
    Von Pwned im Forum Hochsprachen
    Antworten: 3
    Letzter Beitrag: 24.07.2014, 00:09
  2. KCodeParser (KCode to HTML)
    Von uncopyable im Forum Sourcecode
    Antworten: 1
    Letzter Beitrag: 03.08.2012, 21:48
  3. Briefkasten Parser
    Von The Don of NYC im Forum Sourcecode
    Antworten: 0
    Letzter Beitrag: 13.07.2012, 23:08
  4. KCode Painting (?)
    Von Badboy12 im Forum Knuddels Programmierung
    Antworten: 2
    Letzter Beitrag: 28.06.2012, 19:34
  5. KCodeParser (KCode to HTML)
    Von uncopyable im Forum Sourcecode
    Antworten: 1
    Letzter Beitrag: 29.05.2012, 01:43
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.