Compare commits

..

No commits in common. "4a3620db5e05480e9313f76ade8c1cadcc6d600e" and "30765cf7b39bc7dccbf70d84fcbacacc344b02f9" have entirely different histories.

4 changed files with 35 additions and 2622 deletions

View file

@ -17,75 +17,31 @@ using TextMateSharp.Themes;
namespace SourceGit.Models
{
public static class GrammarUtility
public class RegistryOptionsWrapper : IRegistryOptions
{
private static readonly ExtraGrammar[] s_extraGrammas =
[
new ExtraGrammar("source.toml", ".toml", "toml.json"),
new ExtraGrammar("source.kotlin", ".kotlin", "kotlin.json"),
new ExtraGrammar("source.hx", ".hx", "haxe.json"),
new ExtraGrammar("source.hxml", ".hxml", "hxml.json"),
];
public static string GetExtension(string file)
public RegistryOptionsWrapper(ThemeName defaultTheme)
{
var extension = Path.GetExtension(file);
if (extension == ".h")
extension = ".cpp";
else if (extension == ".resx" || extension == ".plist" || extension == ".manifest")
extension = ".xml";
else if (extension == ".command")
extension = ".sh";
else if (extension == ".kt" || extension == ".kts")
extension = ".kotlin";
_backend = new RegistryOptions(defaultTheme);
_extraGrammars = new List<IRawGrammar>();
return extension;
}
public static string GetScopeByExtension(string extension)
{
foreach (var grammar in s_extraGrammas)
string[] extraGrammarFiles = ["toml.json", "kotlin.json"];
foreach (var file in extraGrammarFiles)
{
if (grammar.Extension.Equals(extension, StringComparison.OrdinalIgnoreCase))
return grammar.Scope;
}
var asset = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/Grammars/{file}",
UriKind.RelativeOrAbsolute));
return null;
}
public static IRawGrammar Load(string scopeName)
{
foreach (var grammar in s_extraGrammas)
{
if (grammar.Scope.Equals(scopeName, StringComparison.OrdinalIgnoreCase))
try
{
var asset = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/Grammars/{grammar.File}",
UriKind.RelativeOrAbsolute));
try
{
return GrammarReader.ReadGrammarSync(new StreamReader(asset));
}
catch
{
break;
}
var grammar = GrammarReader.ReadGrammarSync(new StreamReader(asset));
_extraGrammars.Add(grammar);
}
catch
{
// ignore
}
}
return null;
}
private record ExtraGrammar(string Scope, string Extension, string File)
{
public readonly string Scope = Scope;
public readonly string Extension = Extension;
public readonly string File = File;
}
}
public class RegistryOptionsWrapper(ThemeName defaultTheme) : IRegistryOptions
{
public IRawTheme GetTheme(string scopeName)
{
return _backend.GetTheme(scopeName);
@ -93,7 +49,8 @@ namespace SourceGit.Models
public IRawGrammar GetGrammar(string scopeName)
{
return GrammarUtility.Load(scopeName) ?? _backend.GetGrammar(scopeName);
var grammar = _extraGrammars.Find(x => x.GetScopeName().Equals(scopeName, StringComparison.Ordinal));
return grammar ?? _backend.GetGrammar(scopeName);
}
public ICollection<string> GetInjections(string scopeName)
@ -113,11 +70,25 @@ namespace SourceGit.Models
public string GetScopeByFileName(string filename)
{
var ext = GrammarUtility.GetExtension(filename);
return GrammarUtility.GetScopeByExtension(ext) ?? _backend.GetScopeByExtension(ext);
var extension = Path.GetExtension(filename);
if (extension == ".h")
extension = ".cpp";
else if (extension == ".resx" || extension == ".plist" || extension == ".manifest")
extension = ".xml";
else if (extension == ".command")
extension = ".sh";
else if (extension == ".kt" || extension == ".kts")
extension = ".kotlin";
var grammar = _extraGrammars.Find(x => x.GetScopeName().EndsWith(extension, StringComparison.OrdinalIgnoreCase));
if (grammar != null)
return grammar.GetScopeName();
return _backend.GetScopeByExtension(extension);
}
private readonly RegistryOptions _backend = new(defaultTheme);
private readonly RegistryOptions _backend;
private readonly List<IRawGrammar> _extraGrammars;
}
public static class TextMateHelper

View file

@ -202,7 +202,7 @@ namespace SourceGit.Native
private void FixWindowFrameOnWin10(Window w)
{
if (w.WindowState != WindowState.Normal)
w.SystemDecorations = SystemDecorations.Full;
w.SystemDecorations = SystemDecorations.Full;
else
w.SystemDecorations = SystemDecorations.BorderOnly;
}

File diff suppressed because it is too large Load diff

View file

@ -1,70 +0,0 @@
{
"information_for_contributors": [
"This file has been copied from https://github.com/vshaxe/haxe-TmLanguage/blob/ddad8b4c6d0781ac20be0481174ec1be772c5da5/hxml.tmLanguage",
"and converted to JSON using https://marketplace.visualstudio.com/items?itemName=pedro-w.tmlanguage"
],
"fileTypes": [
"hxml"
],
"foldingStartMarker": "--next",
"foldingStopMarker": "\\n\\n",
"keyEquivalent": "^@H",
"name": "Hxml",
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.comment.hxml"
}
},
"match": "(#).*$\\n?",
"name": "comment.line.number-sign.hxml"
},
{
"begin": "(?<!\\w)(--macro)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.hxml"
}
},
"end": "\\n",
"patterns": [
{
"include": "source.hx#block-contents"
}
]
},
{
"match": "(?<!\\w)(-m|-main|--main|--run)\\b\\s*\\b(?:(([a-z][a-zA-Z0-9]*\\.)*)(_*[A-Z]\\w*))?\\b",
"captures": {
"1": {
"name": "keyword.other.hxml"
},
"2": {
"name": "support.package.hx"
},
"4": {
"name": "entity.name.type.hx"
}
}
},
{
"match": "(?<!\\w)(-cppia|-cpp?|-js|-as3|-swf-(header|version|lib(-extern)?)|-swf9?|-neko|-python|-php|-cs|-java-lib|-java|-xml|-lua|-hl|-x|-lib|-D|-resource|-exclude|-version|-v|-debug|-prompt|-cmd|-dce\\s+(std|full|no)?|--flash-strict|--no-traces|--flash-use-stage|--neko-source|--gen-hx-classes|-net-lib|-net-std|-c-arg|--each|--next|--display|--no-output|--times|--no-inline|--no-opt|--php-front|--php-lib|--php-prefix|--remap|--help-defines|--help-metas|-help|--help|-java|-cs|--js-modern|--interp|--eval|--dce|--wait|--connect|--cwd|--run).*$",
"captures": {
"1": {
"name": "keyword.other.hxml"
}
}
},
{
"match": "(?<!\\w)(--js(on)?|--lua|--swf-(header|version|lib(-extern)?)|--swf|--as3|--neko|--php|--cppia|--cpp|--cppia|--cs|--java-lib(-extern)?|--java|--jvm|--python|--hl|-p|--class-path|-L|--library|--define|-r|--resource|--cmd|-C|--verbose|--debug|--prompt|--xml|--json|--net-lib|--net-std|--c-arg|--version|--haxelib-global|-h|--main|--server-connect|--server-listen).*$",
"captures": {
"1": {
"name": "keyword.other.hxml"
}
}
}
],
"scopeName": "source.hxml",
"uuid": "CB1B853A-C4C8-42C3-BA70-1B1605BE51C1"
}