diff --git a/.gitignore b/.gitignore index 504aa52..df30e2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ bin bin-tmp obj -Tesses.CrossLang.CrossShellInstaller/res \ No newline at end of file +shell_archive +*.crvm \ No newline at end of file diff --git a/Tesses.CrossLang.Args/cross.json b/Tesses.CrossLang.Args/cross.json index efafa11..bd3e379 100644 --- a/Tesses.CrossLang.Args/cross.json +++ b/Tesses.CrossLang.Args/cross.json @@ -4,7 +4,7 @@ "info": { "maintainer": "Mike Nolan", "type": "lib", - "repo": "https://gitea.site.tesses.net/tesses50/crosslang/crosslang-libs", + "repo": "https://onedev.site.tesses.net/CrossLang/CrossLangExtras", "homepage": "https://crosslang.tesseslanguage.com/", "license": "LGPLv3" } diff --git a/Tesses.CrossLang.Args/src/args.tcross b/Tesses.CrossLang.Args/src/args.tcross index f97e9de..2e91be4 100644 --- a/Tesses.CrossLang.Args/src/args.tcross +++ b/Tesses.CrossLang.Args/src/args.tcross @@ -33,7 +33,7 @@ func Tesses.CrossLang.Args(args) Options = options, FileName = filename, Flags = flags, - Arguments = pos + Arguments = pos, }; -} \ No newline at end of file +} diff --git a/Tesses.CrossLang.BuildEssentials/cross.json b/Tesses.CrossLang.BuildEssentials/cross.json index 03e636d..7252222 100644 --- a/Tesses.CrossLang.BuildEssentials/cross.json +++ b/Tesses.CrossLang.BuildEssentials/cross.json @@ -4,7 +4,7 @@ "info": { "maintainer": "Mike Nolan", "type": "lib", - "repo": "https://gitea.site.tesses.net/tesses50/crosslang/crosslang-libs", + "repo": "https://onedev.site.tesses.net/CrossLang/CrossLangExtras", "homepage": "https://crosslang.tesseslanguage.com/", "license": "LGPLv3" } diff --git a/Tesses.CrossLang.BuildEssentials/src/buildtool.tcross b/Tesses.CrossLang.BuildEssentials/src/buildtool.tcross index b31879d..ae0bcdc 100644 --- a/Tesses.CrossLang.BuildEssentials/src/buildtool.tcross +++ b/Tesses.CrossLang.BuildEssentials/src/buildtool.tcross @@ -23,16 +23,18 @@ func Tesses.CrossLang.BuildTool(pm) GetPackageDependencies = (this,name,version,dir)=>{ var dep = pm.GetPackage(name,version); if(TypeOf(dep) == "Null") throw $"Package {name} with version {version} does not exist"; + var pkgPath = dir / $"{name}-{version}.crvm"; + var strm = FS.Local.OpenFile(pkgPath,"wb"); + strm.WriteBlock(dep,0,dep.Count); strm.Close(); - var ms = MemoryStream(true); - ms.WriteBlock(dep,0,dep.Count); - ms.Seek(0,0); + var strm = FS.Local.OpenFile(pkgPath,"rb"); + var package = Tesses.CrossLang.CrossVMFile(); - package.Load(ms); - ms.Close(); + package.Read(strm); + strm.Close(); var deps = []; @@ -41,11 +43,10 @@ func Tesses.CrossLang.BuildTool(pm) deps.Add(this.GetPackageDependencies(dep.Name, dep.Version, dir)); } - return { Name = name, Version = version, - Info = package.Info, + Info = Json.Decode(package.Info), Dependencies = deps, Output = pkgPath }; @@ -87,8 +88,32 @@ func Tesses.CrossLang.BuildTool(pm) if(TypeOf(configData.info) != "Undefined") info = configData.info; + + FS.Local.CreateDirectory(dir / outputDir); + if(TypeOf(info.type) == "String" && info.type == "template") + { + //vfs, strm, name, version, info + var subdir = FS.SubdirFilesystem(FS.Local,dir); + var output = $"{name}-{version}.crvm"; + var outFile = FS.Local.OpenFile(dir / outputDir / output,"wb"); + + if(TypeOf(info.template_ignored_files) != "Undefined") + { + var ignored = ""; + each(var item : info.template_ignored_files) + { + ignored += $"{item}\n"; + } + FS.WriteAllText(FS.Local, dir / ".crossarchiveignore", ignored); + } + FS.CreateArchive(subdir, outFile, name, version, Json.Encode(info)); + outFile.Close(); + subdir.Close(); + return null; + } + FS.Local.CreateDirectory(dir / objDir / "packages"); FS.Local.CreateDirectory(dir/resDir); @@ -101,7 +126,6 @@ func Tesses.CrossLang.BuildTool(pm) if(Path.FromString(dep).IsRelative()) { dependencies.Add(this.BuildProject((dir / dep))); - } else dependencies.Add(this.BuildProject(dep)); @@ -112,7 +136,7 @@ func Tesses.CrossLang.BuildTool(pm) { each(var dep : configData.dependencies) { - dependencies.Add(this.GetPackageDependencies(dep.Name,dep.Version,dir / objDir / "packages")); + dependencies.Add(this.GetPackageDependencies(dep.name,dep.version,dir / objDir / "packages")); } } @@ -229,4 +253,4 @@ func Tesses.CrossLang.BuildTool(pm) return null; } }; -} \ No newline at end of file +} diff --git a/Tesses.CrossLang.Markup/cross.json b/Tesses.CrossLang.Markup/cross.json index 59978b3..af57195 100644 --- a/Tesses.CrossLang.Markup/cross.json +++ b/Tesses.CrossLang.Markup/cross.json @@ -4,7 +4,7 @@ "info": { "maintainer": "Mike Nolan", "type": "compile_tool", - "repo": "https://gitea.site.tesses.net/tesses50/crosslang/crosslang-libs", + "repo": "https://onedev.site.tesses.net/CrossLang/CrossLangExtras", "homepage": "https://crosslang.tesseslanguage.com/", "license": "LGPLv3" } diff --git a/Tesses.CrossLang.Markup/src/markup.tcross b/Tesses.CrossLang.Markup/src/markup.tcross index 48316a4..2e7b93a 100644 --- a/Tesses.CrossLang.Markup/src/markup.tcross +++ b/Tesses.CrossLang.Markup/src/markup.tcross @@ -292,6 +292,8 @@ func crossmarkupparser(tokens) } EnsureTokenType("ExitSpecial"); + + Console.WriteLine($"Creating page: {route}"); while(NotEnd()) { nodes.Add(parse_node()); @@ -352,6 +354,7 @@ func crossmarkupparser(tokens) throw "Not an identifier"; } } + Console.WriteLine($"Creating component: {name}"); EnsureTokenType("ExitSpecial"); while(NotEnd()) @@ -590,9 +593,31 @@ func crossmarkupgen(ast) } page_functions.Add({ Key = name, - Value = code + Value = code, + Embeds = "" }); } + func add_to_embeds(name, embeddata) + { + each(var item : page_functions) + { + if(item.Key == name) + { + if(item.Embeds.Count > 0) + { + item.Embeds += "else "; + } + item.Embeds += embeddata; + return null; + } + } + page_functions.Add({ + Key = name, + Value = "", + Embeds = embeddata + }); + } + func generate_node(node) { @@ -626,28 +651,29 @@ func crossmarkupgen(ast) } if(node.Type == "PageNode") { - var code = $"if(ctx.Path == \"{node.Route}\")"; - code += "{__writer = ctx.OpenResponseStream(); "; + var codea = $"if(ctx.Path == \"{node.Route}\")"; + codea += "{__writer = ctx.OpenResponseStream(); "; each(var a : node.Arguments) { - code += $"var {a} = ctx.QueryParams.TryGetFirst(\"{a}\");"; + codea += $"var {a} = ctx.QueryParams.TryGetFirst(\"{a}\");"; } each(var item : node.Nodes) { - code += generate_node(item); + codea += generate_node(item); } - code += " __writer.Close(); return true;}"; + codea += " __writer.Close(); return true;}"; - add_to_page(node.RouterFunction,code); + add_to_page(node.RouterFunction,codea); return ""; } else if(node.Type == "EmbedNode") { - var code = $"if(ctx.Path == \"{node.Route}\")"; - code += "{"; - code += $"ctx.WithMimeType(Net.Http.MimeType(\"{node.Name}\")).SendBytes(embed(\"{node.Name}\"));"; - code += "return true;"; - code += "}"; + var codea = $"if(ctx.Path == \"{node.Route}\")"; + codea += "{"; + codea += $"ctx.WithMimeType(Net.Http.MimeType(\"{node.Name}\")).SendBytes(embed(\"{node.Name}\"));"; + codea += "return true;"; + codea += "}"; + add_to_embeds(node.RouterFunction, codea); } else if(node.Type == "TextNode") { @@ -655,12 +681,12 @@ func crossmarkupgen(ast) } else if(node.Type == "ExprNode") { - var code = "write("; + var code = "write(("; each(var item : node.Nodes) { code += generate_node(item); } - code += ");"; + code += ").ToString());"; return code; } else if(node.Type == "CodeNode") @@ -761,14 +787,24 @@ func crossmarkupgen(ast) each(var pg : page_functions) { code += $"func {pg.Key}(ctx)"; - code += "{ ctx.WithMimeType(\"text/html\");"; + code += "{"; + if(pg.Embeds.Count > 0) + { + code += pg.Embeds + "else{"; + } + code += "ctx.WithMimeType(\"text/html\");"; code += "var __writer = null;"; code += "func write(__text){ __writer.WriteText(__text); }"; code += pg.Value; - code += "__writer.Close(); return false;}"; + code += "__writer.Close(); "; + if(pg.Embeds.Count > 0) + { + code += "}"; + } + code += " return false;}"; } return code; @@ -788,6 +824,7 @@ func EnumerateFiles(cfg,path) { if(cfg.Project.RegularFileExists(file)) { + Console.WriteLine($"Creating markup for: {file}"); var f = cfg.Project.OpenFile(file, "rb"); var ms = FS.MemoryStream(true); f.CopyTo(ms); @@ -806,13 +843,16 @@ func EnumerateFiles(cfg,path) func RunTool(cfg) { var text = ""; + text += EnumerateFiles(cfg, "/components"); text += EnumerateFiles(cfg, "/pages"); var c = crossmarkuplexer(text); + Console.WriteLine("Lexed"); var r = crossmarkupparser(c); + Console.WriteLine("Parsed"); var src = crossmarkupgen(r); - + Console.WriteLine("Gened"); cfg.GeneratedSource.Add({Source = src, FileName="markup.tcross"}); } \ No newline at end of file diff --git a/Tesses.CrossLang.PackageServer/cross.json b/Tesses.CrossLang.PackageServer/cross.json index 30270be..ac58642 100644 --- a/Tesses.CrossLang.PackageServer/cross.json +++ b/Tesses.CrossLang.PackageServer/cross.json @@ -1,10 +1,8 @@ { - "name": "Tesses.CrossLang.PackageServer", - "version": "1.0.0.0-prod", - "project_dependencies": [ - "./Tesses.CrossLang.Markup" - ], + "project_dependencies": ["../Tesses.CrossLang.Markup"], "info": { "type": "console" - } -} \ No newline at end of file + }, + "version": "1.0.0.0-prod", + "name": "Tesses.CrossLang.PackageServer" +} diff --git a/Tesses.CrossLang.PackageServer/pages/index.tcrml b/Tesses.CrossLang.PackageServer/pages/index.tcrml index 7a6da2a..64a70c2 100644 --- a/Tesses.CrossLang.PackageServer/pages/index.tcrml +++ b/Tesses.CrossLang.PackageServer/pages/index.tcrml @@ -1,3 +1,28 @@ -

Welcome to the package server

- \ No newline at end of file + + + + + +

1 John 4:4: You, dear children, are from God and have overcome them, because the one who is in you is greater than the one who is in the world.

+ + + diff --git a/Tesses.CrossLang.PackageServer/src/program.tcross b/Tesses.CrossLang.PackageServer/src/program.tcross index dd42bf8..0669b7d 100644 --- a/Tesses.CrossLang.PackageServer/src/program.tcross +++ b/Tesses.CrossLang.PackageServer/src/program.tcross @@ -1,4 +1,5 @@ +var count = 0; func main(args) { - Net.Http.ListenSimpleWithLoop(Router,4200); + Net.Http.ListenSimpleWithLoop(Router,4206); } \ No newline at end of file diff --git a/Tesses.CrossLang.Shell/cross.json b/Tesses.CrossLang.Shell/cross.json index d390224..70dd895 100644 --- a/Tesses.CrossLang.Shell/cross.json +++ b/Tesses.CrossLang.Shell/cross.json @@ -4,7 +4,7 @@ "info": { "maintainer": "Mike Nolan", "type": "console", - "repo": "https://gitea.site.tesses.net/tesses50/crosslang/crosslang-libs", + "repo": "https://onedev.site.tesses.net/CrossLang/CrossLangExtras", "homepage": "https://crosslang.tesseslanguage.com/", "license": "LGPLv3" }, diff --git a/Tesses.CrossLang.Shell/src/main.tcross b/Tesses.CrossLang.Shell/src/main.tcross index babd799..c066b16 100644 --- a/Tesses.CrossLang.Shell/src/main.tcross +++ b/Tesses.CrossLang.Shell/src/main.tcross @@ -1,9 +1,11 @@ func main(args) { var dd = Tesses.CrossLang.Args(args); - if(dd.Arguments.Count > 0) + + if(dd.Arguments.Count > 0) { var commandName = dd.Arguments[0]; + if(commandName == "args") { each(var arg : dd.Arguments) @@ -11,7 +13,7 @@ func main(args) Console.WriteLine(arg); } } - if(commandName == "build") + else if(commandName == "build") { var offline=false; var buildPath = "."; @@ -53,12 +55,148 @@ func main(args) env.LockRegister(); env.LoadFileWithDependencies(FS.Local,output); - var myArgs = []; + var myArgs = [output]; for(var i = 1; i < dd.Arguments.Count; i++) { myArgs.Add(dd.Arguments[i]); } return env.GetDictionary().main(myArgs); } + else if(commandName == "new") + { + func newHelp() + { + Console.WriteLine($"{dd.FileName} new [FLAGS] [directory_for_project]"); + Console.WriteLine("FLAGS"); + Console.WriteLine("--help: Shows this help"); + Console.WriteLine("--list: Lists all templates"); + Console.WriteLine("ARGUMENTS:"); + Console.WriteLine("template_name: The name of the template"); + Console.WriteLine("directory_for_project: The directory for the project, defaults to current directory"); + } + var dir = FS.MakeFull(Env.Config) / "Tesses" / "CrossLang" / "Templates"; + + each(var flag : dd.Flags) + { + if(flag == "list") + { + Console.WriteLine("List of templates:"); + each(var item : FS.Local.EnumeratePaths(dir)) + { + Console.WriteLine(item.ChangeExtension().GetFileName()); + } + return 0; + } + else if(flag == "help") + { + newHelp(); + return 1; + } + } + + if(dd.Arguments.Count < 2) + { + newHelp(); + return 1; + } + else + { + var templateFile = dir / $"{dd.Arguments[1]}.crvm"; + if(FS.Local.RegularFileExists(templateFile)) + { + var projectPath = "."; + if(dd.Arguments.Count > 2) projectPath = dd.Arguments[2]; + + projectPath = FS.MakeFull(projectPath); + + FS.Local.CreateDirectory(projectPath); + + var projectDir = FS.SubdirFilesystem(FS.Local, projectPath); + + + var strm = FS.Local.OpenFile(templateFile,"rb"); + + + + var res = FS.ExtractArchive(strm,projectDir); + + + strm.Close(); + + if(!projectDir.RegularFileExists("/cross.json")) + { + Console.WriteLine("Could not find /cross.json in template"); + return 1; + } + + var jsonText = FS.ReadAllText(projectDir, "/cross.json"); + var proj = Json.Decode(jsonText); + + proj.name = projectPath.GetFileName(); + proj.version = "1.0.0.0-prod"; + var old_info = proj.info; + proj.info = old_info.template_info; + proj.dependencies = old_info.template_project_dependencies; + var srcDir = proj.source_directory; + if(TypeOf(srcDir) == "Undefined") srcDir = "/src"; + + var filesToMutate = old_info.template_extra_text_ftles; + + if(TypeOf(filesToMutate) == "Undefined") filesToMutate = []; + + each(var f : projectDir.EnumeratePaths(srcDir)) + { + if(projectDir.RegularFileExists(f) && f.GetExtension() == ".tcross") + { + filesToMutate.Add(f); + } + } + + each(var ent : filesToMutate) + { + if(projectDir.RegularFileExists(ent)) + { + var src = FS.ReadAllText(projectDir, ent); + + var src = src.Replace("%PROJECT_NAME%",projectPath.GetFileName()); + + var src = src.Replace("%TEMPLATE_PROJECT_NAME%","%PROJECT_NAME"); + + FS.WriteAllText(projectDir, ent, src); + } + } + + FS.WriteAllText(projectDir, "/cross.json", Json.Encode(proj,true)); + + projectDir.Close(); + return 0; + } + else + { + Console.WriteLine($"Error could not find template {templateFile}"); + return 1; + } + } + } + else if(commandName == "install-template") + { + //crosslang install-template Tesses.CrossLang.Template.Console --version=1.0.0.0-prod + } + else if(commandName == "install-tool") + { + //crosslang install-tool Tesses.CrossLang.Tool.SomeTool --version=1.0.0.0-prod + } + else if(commandName == "add-project") + { + //crosslang add-project /path/to/project + } + else if(commandName == "add-dependency") + { + //crosslang add-dependency Tesses.CrossLang.Markup --version=1.0.0.0-prod + } + else if(commandName == "upload-package") + { + //crosslang upload-package [PACKAGE_NAME] + } } -} \ No newline at end of file +} diff --git a/Tesses.CrossLang.WebSite/components/counter.tcrml b/Tesses.CrossLang.WebSite/components/counter.tcrml new file mode 100644 index 0000000..1b4fca4 --- /dev/null +++ b/Tesses.CrossLang.WebSite/components/counter.tcrml @@ -0,0 +1,3 @@ + +

Count is

+ \ No newline at end of file diff --git a/Tesses.CrossLang.WebSite/components/shell.tcrml b/Tesses.CrossLang.WebSite/components/shell.tcrml new file mode 100644 index 0000000..e978cc1 --- /dev/null +++ b/Tesses.CrossLang.WebSite/components/shell.tcrml @@ -0,0 +1,36 @@ + + + + + + + + + CrossLang - <?expr Net.Http.HtmlEncode(title) ?> + + + +
+

CrossLang

+ +
+

+ + + + + + \ No newline at end of file diff --git a/Tesses.CrossLang.WebSite/cross.json b/Tesses.CrossLang.WebSite/cross.json new file mode 100644 index 0000000..9857c2b --- /dev/null +++ b/Tesses.CrossLang.WebSite/cross.json @@ -0,0 +1,8 @@ +{ + "project_dependencies": ["../Tesses.CrossLang.Markup"], + "info": { + "type": "console" + }, + "version": "1.0.0.0-prod", + "name": "Tesses.CrossLang.WebSite" +} diff --git a/Tesses.CrossLang.WebSite/pages/downloads.tcrml b/Tesses.CrossLang.WebSite/pages/downloads.tcrml new file mode 100644 index 0000000..e74336d --- /dev/null +++ b/Tesses.CrossLang.WebSite/pages/downloads.tcrml @@ -0,0 +1,35 @@ + + + + + + +

Source Code

+ +

Binaries

+ + + + diff --git a/Tesses.CrossLang.WebSite/pages/index.tcrml b/Tesses.CrossLang.WebSite/pages/index.tcrml new file mode 100644 index 0000000..4e0aab2 --- /dev/null +++ b/Tesses.CrossLang.WebSite/pages/index.tcrml @@ -0,0 +1,24 @@ + + + + + + +

This is the website for my programming language

+

1 John 4:4: You, dear children, are from God and have overcome them, because the one who is in you is greater than the one who is in the world.

+ + + diff --git a/Tesses.CrossLang.WebSite/res/favicon.ico b/Tesses.CrossLang.WebSite/res/favicon.ico new file mode 100644 index 0000000..3fd66ae Binary files /dev/null and b/Tesses.CrossLang.WebSite/res/favicon.ico differ diff --git a/Tesses.CrossLang.WebSite/res/simple.min.css b/Tesses.CrossLang.WebSite/res/simple.min.css new file mode 100644 index 0000000..0e54419 --- /dev/null +++ b/Tesses.CrossLang.WebSite/res/simple.min.css @@ -0,0 +1 @@ +:root{--sans-font:-apple-system,BlinkMacSystemFont,"Avenir Next",Avenir,"Nimbus Sans L",Roboto,"Noto Sans","Segoe UI",Arial,Helvetica,"Helvetica Neue",sans-serif;--mono-font:Consolas,Menlo,Monaco,"Andale Mono","Ubuntu Mono",monospace;--standard-border-radius:5px;--bg:#fff;--accent-bg:#f5f7ff;--text:#212121;--text-light:#585858;--border:#898ea4;--accent:#0d47a1;--accent-hover:#1266e2;--accent-text:var(--bg);--code:#d81b60;--preformatted:#444;--marked:#fd3;--disabled:#efefef}@media (prefers-color-scheme:dark){:root{color-scheme:dark;--bg:#212121;--accent-bg:#2b2b2b;--text:#dcdcdc;--text-light:#ababab;--accent:#ffb300;--accent-hover:#ffe099;--accent-text:var(--bg);--code:#f06292;--preformatted:#ccc;--disabled:#111}img,video{opacity:.8}}*,:before,:after{box-sizing:border-box}textarea,select,input,progress{-webkit-appearance:none;-moz-appearance:none;appearance:none}html{font-family:var(--sans-font);scroll-behavior:smooth}body{color:var(--text);background-color:var(--bg);grid-template-columns:1fr min(45rem,90%) 1fr;margin:0;font-size:1.15rem;line-height:1.5;display:grid}body>*{grid-column:2}body>header{background-color:var(--accent-bg);border-bottom:1px solid var(--border);text-align:center;grid-column:1/-1;padding:0 .5rem 2rem}body>header>:only-child{margin-block-start:2rem}body>header h1{max-width:1200px;margin:1rem auto}body>header p{max-width:40rem;margin:1rem auto}main{padding-top:1.5rem}body>footer{color:var(--text-light);text-align:center;border-top:1px solid var(--border);margin-top:4rem;padding:2rem 1rem 1.5rem;font-size:.9rem}h1{font-size:3rem}h2{margin-top:3rem;font-size:2.6rem}h3{margin-top:3rem;font-size:2rem}h4{font-size:1.44rem}h5{font-size:1.15rem}h6{font-size:.96rem}p{margin:1.5rem 0}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3{line-height:1.1}@media only screen and (width<=720px){h1{font-size:2.5rem}h2{font-size:2.1rem}h3{font-size:1.75rem}h4{font-size:1.25rem}}a,a:visited{color:var(--accent)}a:hover{text-decoration:none}button,.button,a.button,input[type=submit],input[type=reset],input[type=button]{border:1px solid var(--accent);background-color:var(--accent);color:var(--accent-text);padding:.5rem .9rem;line-height:normal;text-decoration:none}.button[aria-disabled=true],input:disabled,textarea:disabled,select:disabled,button[disabled]{cursor:not-allowed;background-color:var(--disabled);border-color:var(--disabled);color:var(--text-light)}input[type=range]{padding:0}abbr[title]{cursor:help;text-decoration-line:underline;text-decoration-style:dotted}button:enabled:hover,.button:not([aria-disabled=true]):hover,input[type=submit]:enabled:hover,input[type=reset]:enabled:hover,input[type=button]:enabled:hover{background-color:var(--accent-hover);border-color:var(--accent-hover);cursor:pointer}.button:focus-visible,button:focus-visible:where(:enabled),input:enabled:focus-visible:where([type=submit],[type=reset],[type=button]){outline:2px solid var(--accent);outline-offset:1px}header>nav{padding:1rem 0 0;font-size:1rem;line-height:2}header>nav ul,header>nav ol{flex-flow:wrap;place-content:space-around center;align-items:center;margin:0;padding:0;list-style-type:none;display:flex}header>nav ul li,header>nav ol li{display:inline-block}header>nav a,header>nav a:visited{border:1px solid var(--border);border-radius:var(--standard-border-radius);color:var(--text);margin:0 .5rem 1rem;padding:.1rem 1rem;text-decoration:none;display:inline-block}header>nav a:hover,header>nav a.current,header>nav a[aria-current=page],header>nav a[aria-current=true]{border-color:var(--accent);color:var(--accent);cursor:pointer}@media only screen and (width<=720px){header>nav a{border:none;padding:0;line-height:1;text-decoration:underline}}aside,details,pre,progress{background-color:var(--accent-bg);border:1px solid var(--border);border-radius:var(--standard-border-radius);margin-bottom:1rem}aside{float:right;width:30%;margin-inline-start:15px;padding:0 15px;font-size:1rem}[dir=rtl] aside{float:left}@media only screen and (width<=720px){aside{float:none;width:100%;margin-inline-start:0}}article,fieldset,dialog{border:1px solid var(--border);border-radius:var(--standard-border-radius);margin-bottom:1rem;padding:1rem}article h2:first-child,section h2:first-child,article h3:first-child,section h3:first-child{margin-top:1rem}section{border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin:3rem 0;padding:2rem 1rem}section+section,section:first-child{border-top:0;padding-top:0}section+section{margin-top:0}section:last-child{border-bottom:0;padding-bottom:0}details{padding:.7rem 1rem}summary{cursor:pointer;word-break:break-all;margin:-.7rem -1rem;padding:.7rem 1rem;font-weight:700}details[open]>summary+*{margin-top:0}details[open]>summary{margin-bottom:.5rem}details[open]>:last-child{margin-bottom:0}table{border-collapse:collapse;margin:1.5rem 0}figure>table{width:max-content;margin:0}td,th{border:1px solid var(--border);text-align:start;padding:.5rem}th{background-color:var(--accent-bg);font-weight:700}tr:nth-child(2n){background-color:var(--accent-bg)}table caption{margin-bottom:.5rem;font-weight:700}textarea,select,input,button,.button{font-size:inherit;border-radius:var(--standard-border-radius);box-shadow:none;max-width:100%;margin-bottom:.5rem;padding:.5rem;font-family:inherit;display:inline-block}textarea,select,input{color:var(--text);background-color:var(--bg);border:1px solid var(--border)}label{display:block}textarea:not([cols]){width:100%}select:not([multiple]){background-image:linear-gradient(45deg,transparent 49%,var(--text)51%),linear-gradient(135deg,var(--text)51%,transparent 49%);background-position:calc(100% - 15px),calc(100% - 10px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-inline-end:25px}[dir=rtl] select:not([multiple]){background-position:10px,15px}input[type=checkbox],input[type=radio]{vertical-align:middle;width:min-content;position:relative}input[type=checkbox]+label,input[type=radio]+label{display:inline-block}input[type=radio]{border-radius:100%}input[type=checkbox]:checked,input[type=radio]:checked{background-color:var(--accent)}input[type=checkbox]:checked:after{content:" ";border-right:solid var(--bg).08em;border-bottom:solid var(--bg).08em;background-color:#0000;border-radius:0;width:.18em;height:.32em;font-size:1.8em;position:absolute;top:.05em;left:.17em;transform:rotate(45deg)}input[type=radio]:checked:after{content:" ";background-color:var(--bg);border-radius:100%;width:.25em;height:.25em;font-size:32px;position:absolute;top:.125em;left:.125em}@media only screen and (width<=720px){textarea,select,input{width:100%}}input[type=color]{height:2.5rem;padding:.2rem}input[type=file]{border:0}hr{background:var(--border);border:none;height:1px;margin:1rem auto}mark{border-radius:var(--standard-border-radius);background-color:var(--marked);color:#000;padding:2px 5px}mark a{color:#0d47a1}img,video{border-radius:var(--standard-border-radius);max-width:100%;height:auto}figure{margin:0;display:block;overflow-x:auto}figure>img,figure>picture>img{margin-inline:auto;display:block}figcaption{text-align:center;color:var(--text-light);margin-block:1rem;font-size:.9rem}blockquote{border-inline-start:.35rem solid var(--accent);color:var(--text-light);margin-block:2rem;margin-inline:2rem 0;padding:.4rem .8rem;font-style:italic}cite{color:var(--text-light);font-size:.9rem;font-style:normal}dt{color:var(--text-light)}code,pre,pre span,kbd,samp{font-family:var(--mono-font);color:var(--code)}kbd{color:var(--preformatted);border:1px solid var(--preformatted);border-bottom:3px solid var(--preformatted);border-radius:var(--standard-border-radius);padding:.1rem .4rem}pre{max-width:100%;color:var(--preformatted);padding:1rem 1.4rem;overflow:auto}pre code{color:var(--preformatted);background:0 0;margin:0;padding:0}progress{width:100%}progress:indeterminate{background-color:var(--accent-bg)}progress::-webkit-progress-bar{border-radius:var(--standard-border-radius);background-color:var(--accent-bg)}progress::-webkit-progress-value{border-radius:var(--standard-border-radius);background-color:var(--accent)}progress::-moz-progress-bar{border-radius:var(--standard-border-radius);background-color:var(--accent);transition-property:width;transition-duration:.3s}progress:indeterminate::-moz-progress-bar{background-color:var(--accent-bg)}dialog{background-color:var(--bg);max-width:40rem;margin:auto}dialog::backdrop{background-color:var(--bg);opacity:.8}@media only screen and (width<=720px){dialog{max-width:100%;margin:auto 1em}}sup,sub{vertical-align:baseline;position:relative}sup{top:-.4em}sub{top:.3em}.notice{background:var(--accent-bg);border:2px solid var(--border);border-radius:var(--standard-border-radius);margin:2rem 0;padding:1.5rem}@media print{@page{margin:1cm}body{display:block}body>header{background-color:unset}body>header nav,body>footer{display:none}article{border:none;padding:0}a[href^=http]:after{content:" <" attr(href)">"}abbr[title]:after{content:" (" attr(title)")"}a{text-decoration:none}p{widows:3;orphans:3}hr{border-top:1px solid var(--border)}mark{border:1px solid var(--border)}pre,table,figure,img,svg{break-inside:avoid}pre code{white-space:pre-wrap}} \ No newline at end of file diff --git a/Tesses.CrossLang.WebSite/src/program.tcross b/Tesses.CrossLang.WebSite/src/program.tcross new file mode 100644 index 0000000..0669b7d --- /dev/null +++ b/Tesses.CrossLang.WebSite/src/program.tcross @@ -0,0 +1,5 @@ +var count = 0; +func main(args) +{ + Net.Http.ListenSimpleWithLoop(Router,4206); +} \ No newline at end of file diff --git a/crosslang-shell-install.tcross b/crosslang-shell-install.tcross deleted file mode 100644 index 48f49b8..0000000 --- a/crosslang-shell-install.tcross +++ /dev/null @@ -1,30 +0,0 @@ -func downloadPackage(name,version,path) -{ - var uri = $"https://cpkg.tesseslanguage.com/api/v1/download?name={Net.Http.UrlEncode(name)}&version={Net.Http.UrlEncode(version)}"; - var req = Net.Http.MakeRequest(uri); - if(req.StatusCode == 200) - { - var strm = FS.MemoryStream(true); - req.CopyToStream(strm); - - var f = FS.Local.OpenFile(path,"wb"); - strm.Seek(0,0); - strm.CopyTo(f); - f.Close(); - - strm.Close(); - req.Close(); - } - else - { - throw $"Error when downloading package {name} with version {version}"; - } - -} - -var shellDir = Path.FromString(Env.Config) / "Tesses" / "CrossLang" / "Shell"; -FS.Local.CreateDirectory(shellDir); - -downloadPackage("Tesses.CrossLang.Shell", "1.0.0.0-prod", shellDir / "Shell.crvm"); -downloadPackage("Tesses.CrossLang.Args", "1.0.0.0-prod", shellDir / "Tesses.CrossLang.Args-1.0.0.0-prod.crvm"); -downloadPackage("Tesses.CrossLang.BuildEssentials", "1.0.0.0-prod", shellDir / "Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm"); \ No newline at end of file diff --git a/install.sh b/install.sh index cc1f786..ff94ebb 100755 --- a/install.sh +++ b/install.sh @@ -1 +1,3 @@ -#!/bin/bash \ No newline at end of file +#!/bin/bash +bash ./script.sh +crossvm crosslang_shell_archive_maker/bin/crosslang_shell_archive_maker-1.0.0.0-prod.crvm install \ No newline at end of file diff --git a/script.sh b/script.sh index 4724061..d447c9d 100755 --- a/script.sh +++ b/script.sh @@ -2,4 +2,10 @@ cd Tesses.CrossLang.BuildEssentials && crossc -o ./bin-tmp -n Tesses.CrossLang.BuildEssentials -v 1.0.0.0-prod main.tcross src/*.tcross && cd .. crossvm ./Tesses.CrossLang.BuildEssentials/bin-tmp/Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm Tesses.CrossLang.Shell crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Tesses.CrossLang.PackageServer -#crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Tesses.CrossLang.Website \ No newline at end of file +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/console +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/web +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/template +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/lib +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/compiletool +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build crosslang_shell_archive_maker +crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Tesses.CrossLang.Website