Skip to content

Commit

Permalink
added domkit loadSource and DomkitStyle
Browse files Browse the repository at this point in the history
  • Loading branch information
ncannasse committed Jan 3, 2025
1 parent e598f63 commit c957fc4
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 35 deletions.
2 changes: 1 addition & 1 deletion hide/comp/DomkitEditor.hx
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
for( d in dirs ) {
var path = d+"/"+name+".domkit";
var content = try sys.io.File.getContent(ide.getPath(path)) catch( e : Dynamic ) continue;
var data = hrt.impl.DomkitViewer.parse(content);
var data = hrt.impl.DomkitViewer.DomkitFile.parse(content);
var node = null, params = new Map();

var parser = new domkit.MarkupParser();
Expand Down
2 changes: 1 addition & 1 deletion hide/view/Domkit.hx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class Domkit extends FileView {
</div>');

var content = sys.io.File.getContent(getPath());
var data = hrt.impl.DomkitViewer.parse(content);
var data = hrt.impl.DomkitViewer.DomkitFile.parse(content);
prevSave = data;
dmlEditor = new hide.comp.DomkitEditor(config, DML, data.dml, element.find(".dmlEditor"));
cssEditor = new hide.comp.DomkitEditor(config, Less, data.css, dmlEditor.checker, element.find(".cssEditor"));
Expand Down
141 changes: 108 additions & 33 deletions hrt/impl/DomkitViewer.hx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,45 @@ package hrt.impl;
#error "DomkitViewer requires --library hscript with -D hscriptPos"
#end

#if domkit
import h2d.domkit.BaseComponents;
#if (macro && domkit)

typedef DomkitFileData = { css : String, params : String, dml : String };
import haxe.macro.Expr;
import haxe.macro.Context;

class DomkitViewer {

public static function loadSource( path : String, pos : Position, fields : Array<Field> ) {
var fullPath = try Context.resolvePath(path+".domkit") catch( e : Dynamic ) return null;
if( fullPath == null )
return null;
var fullData = sys.io.File.getContent(fullPath);
var data = DomkitFile.parse(fullData);
var p = new domkit.MarkupParser();
var index = fullData.indexOf(data.dml);
try {
var m = p.parse(data.dml, fullPath, index);
switch( m.children[0].kind ) {
case Node(n) if( n.indexOf(":") >= 0 ): m.children[0].kind = Node(n.split(":")[0]);
default:
}
fields.push({
name : "__CSS",
access : [AStatic],
kind : FVar(null, macro hrt.impl.DomkitViewer.DomkitStyle.registerCSSSource($v{path})),
pos : pos,
});
return { dml : m, pos : Context.makePosition({ file : fullPath, min : index, max : index + data.dml.length }) };
} catch( e : domkit.Error ) {
Context.error(e.message, Context.makePosition({ file : fullPath, min : e.pmin, max : e.pmax }));
return null;
}
}

}

#elseif domkit

import h2d.domkit.BaseComponents;

class DomkitInterp extends hscript.Async.AsyncInterp {

Expand Down Expand Up @@ -80,7 +115,7 @@ class SourceComponent extends domkit.Component<h2d.Object, h2d.Object> {

function reload() {
var fullText = res.entry.getText();
var data = DomkitViewer.parse(fullText);
var data = DomkitFile.parse(fullText);
var p = new domkit.MarkupParser();
p.allowRawText = true;
var dml = p.parse(data.dml, res.entry.path, fullText.indexOf(data.dml));
Expand Down Expand Up @@ -271,33 +306,6 @@ class DomkitViewer extends h2d.Object {
return interp;
}

public static function parse( content : String ) : DomkitFileData {
var cssText = "";
var paramsText = "{}";

content = StringTools.trim(content);

if( StringTools.startsWith(content,"<css>") ) {
var pos = content.indexOf("</css>");
cssText = StringTools.trim(content.substr(5, pos - 6));
content = content.substr(pos + 6);
content = StringTools.trim(content);
}

if( StringTools.startsWith(content,"<params>") ) {
var pos = content.indexOf("</params>");
paramsText = StringTools.trim(content.substr(8, pos - 9));
content = content.substr(pos + 9);
content = StringTools.trim(content);
}

return {
css : cssText,
params : paramsText,
dml : content,
}
}

public static function toStr(data:DomkitFileData) {
var parts = ['<css>\n${data.css}\n</css>'];
if( data.params != '' && data.params != '{}' )
Expand Down Expand Up @@ -357,7 +365,7 @@ class DomkitViewer extends h2d.Object {

function createComponent( res : hxd.res.Resource, parent, args : Array<Dynamic> ) {
var fullText = res.entry.getText();
var data = parse(fullText);
var data = DomkitFile.parse(fullText);
var comp = null;
var prev = interp;
createRootArgs = args;
Expand Down Expand Up @@ -611,5 +619,72 @@ class DomkitViewer extends h2d.Object {
}
return comp;
}

}


class DomkitStyle extends h2d.domkit.Style {

public function new() {
super();
}

public function loadDefaults( globals : Array<hxd.res.Resource> ) {
for( r in globals )
load(r, true, true);
for( path in CSS_SOURCES )
load(hxd.res.Loader.currentInstance.load(path+".domkit"));
}

override function loadData( r : hxd.res.Resource ) {
if( r.entry.extension != "domkit" )
return super.loadData(r);
var fullData = r.entry.getText();
var data = DomkitFile.parse(fullData);
var cssIndex = fullData.indexOf(data.css);
var prefix = "\n";
while( prefix.length < cssIndex ) prefix += " ";
return prefix + data.css;
}

static var CSS_SOURCES = [];
public static function registerCSSSource( path : String ) {
CSS_SOURCES.push(path);
return true;
}
}

#end

typedef DomkitFileData = { css : String, params : String, dml : String };

class DomkitFile {

public static function parse( content : String ) : DomkitFileData {
var cssText = "";
var paramsText = "{}";

content = StringTools.trim(content);

if( StringTools.startsWith(content,"<css>") ) {
var pos = content.indexOf("</css>");
cssText = StringTools.trim(content.substr(5, pos - 6));
content = content.substr(pos + 6);
content = StringTools.trim(content);
}

if( StringTools.startsWith(content,"<params>") ) {
var pos = content.indexOf("</params>");
paramsText = StringTools.trim(content.substr(8, pos - 9));
content = content.substr(pos + 9);
content = StringTools.trim(content);
}

return {
css : cssText,
params : paramsText,
dml : content,
}
}

}
#end

0 comments on commit c957fc4

Please sign in to comment.