From 4554884728145741a4369350ff56dc5812b0400b Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Mon, 15 Feb 2021 23:01:59 +0100 Subject: [PATCH 1/4] Parse classes during XAML compilation. --- .../AvaloniaXamlIlLanguageParseIntrinsics.cs | 9 +++++++++ .../Transformers/AvaloniaXamlIlWellKnownTypes.cs | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs index 7c4cc8d28b..616a811a84 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs @@ -198,6 +198,15 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions return ConvertDefinitionList(node, text, types, types.RowDefinitions, types.RowDefinition, "row definitions", out result); } + if (type.Equals(types.Classes)) + { + var classes = text.Split(' '); + var classNodes = classes.Select(c => new XamlConstantNode(node, types.XamlIlTypes.String, c)).ToArray(); + + result = new AvaloniaXamlIlAvaloniaListConstantAstNode(node, types, types.Classes, types.XamlIlTypes.String, classNodes); + return true; + } + result = null; return false; } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs index 125701ca9e..34aae2c5ed 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs @@ -77,6 +77,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers public IXamlType RowDefinitions { get; } public IXamlType ColumnDefinition { get; } public IXamlType ColumnDefinitions { get; } + public IXamlType Classes { get; } public AvaloniaXamlIlWellKnownTypes(TransformerConfiguration cfg) { @@ -166,6 +167,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers ColumnDefinitions = cfg.TypeSystem.GetType("Avalonia.Controls.ColumnDefinitions"); RowDefinition = cfg.TypeSystem.GetType("Avalonia.Controls.RowDefinition"); RowDefinitions = cfg.TypeSystem.GetType("Avalonia.Controls.RowDefinitions"); + Classes = cfg.TypeSystem.GetType("Avalonia.Controls.Classes"); } } From 8d90e8b9197a77278d59238f39fd4fde8812dab0 Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 16 Feb 2021 10:43:58 +0100 Subject: [PATCH 2/4] Update XamlX --- src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github b/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github index ea80a607c5..f3ca2028f4 160000 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github @@ -1 +1 @@ -Subproject commit ea80a607c5e9d8f000160dbbb48c27ed4cfafbc9 +Subproject commit f3ca2028f4f64be3556a6afd22f192902de095e5 From b460a5f1208fa9b430ef41656607306cc00f4d2b Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 16 Feb 2021 15:18:27 +0100 Subject: [PATCH 3/4] Use text node instead. --- .../CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs index 616a811a84..90d596b584 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs @@ -201,7 +201,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions if (type.Equals(types.Classes)) { var classes = text.Split(' '); - var classNodes = classes.Select(c => new XamlConstantNode(node, types.XamlIlTypes.String, c)).ToArray(); + var classNodes = classes.Select(c => new XamlAstTextNode(node, c)).ToArray(); result = new AvaloniaXamlIlAvaloniaListConstantAstNode(node, types, types.Classes, types.XamlIlTypes.String, classNodes); return true; From 8eb9afa815a5bfb8f48a335538e0596d593e534e Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 16 Feb 2021 19:39:50 +0100 Subject: [PATCH 4/4] Specify string type directly. --- .../CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs index 90d596b584..059b5650cb 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs @@ -201,7 +201,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions if (type.Equals(types.Classes)) { var classes = text.Split(' '); - var classNodes = classes.Select(c => new XamlAstTextNode(node, c)).ToArray(); + var classNodes = classes.Select(c => new XamlAstTextNode(node, c, types.XamlIlTypes.String)).ToArray(); result = new AvaloniaXamlIlAvaloniaListConstantAstNode(node, types, types.Classes, types.XamlIlTypes.String, classNodes); return true;