eXtrac3 (04.09.2018)
Thema: JavaScript - KCode Parser
-
18.08.2018, 11:44 #1
- Registriert seit
- 28.10.2011
- Beiträge
- 625
Thanked 281 Times in 169 PostsJavaScript - 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)
-
The Following User Says Thank You to Bubble Gum For This Useful Post:
-
18.08.2018, 16:27 #2
- Registriert seit
- 28.10.2011
- Beiträge
- 625
Thanked 281 Times in 169 PostsAW: 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.
-
The Following User Says Thank You to Bubble Gum For This Useful Post:
eXtrac3 (04.09.2018)
Ähnliche Themen
-
[S] Webseiten-Parser
Von Pwned im Forum HochsprachenAntworten: 3Letzter Beitrag: 24.07.2014, 00:09 -
KCodeParser (KCode to HTML)
Von uncopyable im Forum SourcecodeAntworten: 1Letzter Beitrag: 03.08.2012, 21:48 -
Briefkasten Parser
Von The Don of NYC im Forum SourcecodeAntworten: 0Letzter Beitrag: 13.07.2012, 23:08 -
KCode Painting (?)
Von Badboy12 im Forum Knuddels ProgrammierungAntworten: 2Letzter Beitrag: 28.06.2012, 19:34 -
KCodeParser (KCode to HTML)
Von uncopyable im Forum SourcecodeAntworten: 1Letzter Beitrag: 29.05.2012, 01:43
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.