From 1b91711291b4308c89a0021bc316a34543213ed0 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Mon, 4 Aug 2014 20:11:19 -0400 Subject: [PATCH 1/9] Added definition for 'Hyper' key (does anyone use that anymore?) --- .../UniversalEditor.UserInterface/CommandShortcutKey.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/CommandShortcutKey.cs b/CSharp/Libraries/UniversalEditor.UserInterface/CommandShortcutKey.cs index b8b86ad6..554124c5 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/CommandShortcutKey.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/CommandShortcutKey.cs @@ -13,7 +13,8 @@ namespace UniversalEditor.UserInterface Shift = 2, Alt = 4, Meta = 8, - Super = 16 + Super = 16, + Hyper = 32 } public enum CommandShortcutKeyValue { From 8af2cb0ce6a20b85e905376eeba99edb236988d6 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Mon, 4 Aug 2014 20:11:40 -0400 Subject: [PATCH 2/9] This should have been AccelKey long time ago... --- CSharp/Engines/GTK/UniversalEditor.Engines.GTK/MainWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharp/Engines/GTK/UniversalEditor.Engines.GTK/MainWindow.cs b/CSharp/Engines/GTK/UniversalEditor.Engines.GTK/MainWindow.cs index 9fa7d5c1..7dc46463 100644 --- a/CSharp/Engines/GTK/UniversalEditor.Engines.GTK/MainWindow.cs +++ b/CSharp/Engines/GTK/UniversalEditor.Engines.GTK/MainWindow.cs @@ -76,7 +76,7 @@ namespace UniversalEditor.Engines.GTK menubar1.ShowAll (); } - private Gdk.Key AccelKeyFromCommandShortcutKey (CommandShortcutKey shortcutKey) + private AccelKey AccelKeyFromCommandShortcutKey (CommandShortcutKey shortcutKey) { AccelKey ak = new AccelKey(); switch (shortcutKey.Value) From e0af477712d1342def1afa50ad0655c39efb487e Mon Sep 17 00:00:00 2001 From: alcexhim Date: Mon, 4 Aug 2014 20:25:09 -0400 Subject: [PATCH 3/9] Ensure well-formed XML --- .../UniversalEditor.Content.PlatformIndependent.csproj | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj index b42e423a..53102b46 100644 --- a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj +++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj @@ -11,7 +11,8 @@ UniversalEditor.Content.PlatformIndependent v3.5 512 - + 10.0.0 + 2.0 true @@ -132,10 +133,10 @@ - + - + From 90ebd6d9fce80df1ec39b8d6ab9f7eca3cca5004 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Mon, 4 Aug 2014 20:26:48 -0400 Subject: [PATCH 4/9] Added Executable, Monolith, and Nintendo projects to GTK solution --- CSharp/UniversalEditor.GTK.sln | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/CSharp/UniversalEditor.GTK.sln b/CSharp/UniversalEditor.GTK.sln index efcb568e..dab4b4f2 100644 --- a/CSharp/UniversalEditor.GTK.sln +++ b/CSharp/UniversalEditor.GTK.sln @@ -67,6 +67,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Mic EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.UnrealEngine", "Plugins\UniversalEditor.Plugins.UnrealEngine\UniversalEditor.Plugins.UnrealEngine.csproj", "{DF96F24E-FED9-4BAC-8389-63590125DC61}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Executable", "Plugins\UniversalEditor.Plugins.Executable\UniversalEditor.Plugins.Executable.csproj", "{791A36F8-5D96-452B-89D2-78BA74596A1E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Monolith", "Plugins\UniversalEditor.Plugins.Monolith\UniversalEditor.Plugins.Monolith.csproj", "{988052D4-92F5-4A6F-BE1D-33852D1E5D1E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Nintendo", "Plugins\UniversalEditor.Plugins.Nintendo\UniversalEditor.Plugins.Nintendo.csproj", "{E0B0223C-3E44-4D2A-9FED-F1A319D84D39}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{5A423A3E-51C5-4188-8AD5-FB5C0CB76C6A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Surodoine", "..\..\Surodoine\Surodoine\Surodoine.csproj", "{E0897B7B-617A-4709-A4C6-FC0F6B441B2A}" @@ -259,6 +265,18 @@ Global {78D1381A-AF21-43B2-9DDA-727AF15539AB}.Release|Mixed Platforms.Build.0 = Release|Any CPU {78D1381A-AF21-43B2-9DDA-727AF15539AB}.Release|x86.ActiveCfg = Release|Any CPU {78D1381A-AF21-43B2-9DDA-727AF15539AB}.Release|x86.Build.0 = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|x86.ActiveCfg = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Debug|x86.Build.0 = Debug|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|Any CPU.Build.0 = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|x86.ActiveCfg = Release|Any CPU + {791A36F8-5D96-452B-89D2-78BA74596A1E}.Release|x86.Build.0 = Release|Any CPU {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -311,6 +329,18 @@ Global {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|x86.ActiveCfg = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|x86.ActiveCfg = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Debug|x86.Build.0 = Debug|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|Any CPU.Build.0 = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|x86.ActiveCfg = Release|Any CPU + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E}.Release|x86.Build.0 = Release|Any CPU {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Any CPU.Build.0 = Debug|Any CPU {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -417,6 +447,18 @@ Global {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|x86.ActiveCfg = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Debug|x86.Build.0 = Debug|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|Any CPU.Build.0 = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|x86.ActiveCfg = Release|Any CPU + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39}.Release|x86.Build.0 = Release|Any CPU {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Any CPU.Build.0 = Debug|Any CPU {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -551,6 +593,9 @@ Global {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D} = {71CFF024-26F7-4626-A526-B435FDF8D64E} {E6C9A73D-4556-4220-9BC7-302A7EE64C1A} = {71CFF024-26F7-4626-A526-B435FDF8D64E} {DF96F24E-FED9-4BAC-8389-63590125DC61} = {71CFF024-26F7-4626-A526-B435FDF8D64E} + {791A36F8-5D96-452B-89D2-78BA74596A1E} = {71CFF024-26F7-4626-A526-B435FDF8D64E} + {988052D4-92F5-4A6F-BE1D-33852D1E5D1E} = {71CFF024-26F7-4626-A526-B435FDF8D64E} + {E0B0223C-3E44-4D2A-9FED-F1A319D84D39} = {71CFF024-26F7-4626-A526-B435FDF8D64E} {E0897B7B-617A-4709-A4C6-FC0F6B441B2A} = {5A423A3E-51C5-4188-8AD5-FB5C0CB76C6A} {E0422169-2DF9-4B50-A019-84A3251727F9} = {4725A011-066E-4235-82C4-F2184BF56BBE} {B2A30AE0-2FDD-40D1-88CF-9E4B95277F95} = {E0422169-2DF9-4B50-A019-84A3251727F9} @@ -561,6 +606,10 @@ Global EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = Applications\UniversalEditor.Bootstrapper\UniversalEditor.Bootstrapper.csproj + Policies = $0 + $0.StandardHeader = $1 + $1.Text = @ \n ${FileName}\n \n Author:\n ${AuthorName} <${AuthorEmail}>\n\n Copyright (c) ${Year} ${CopyrightHolder}\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see . + $1.IncludeInNewFiles = True EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 6dd7fd907bd539a7fcd200859d88c8d6fe9886d2 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 05:56:27 -0400 Subject: [PATCH 5/9] Added more DesktopShortcutTypes (should've already been committed) --- .../DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs index 5031a896..36ab3d7b 100644 --- a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs @@ -7,6 +7,8 @@ namespace UniversalEditor.DataFormats.Shortcut.FreeDesktop { public enum DesktopShortcutType { - InternetLink + Application, + InternetLink, + Directory } } From 08be2be05163dd6e917d543f3d6d5a5177292792 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 13:25:17 -0400 Subject: [PATCH 6/9] Fixed ShortcutEditor --- .../Editors/ShortcutEditor.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs index 5536a1c1..0cb3fadd 100644 --- a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs +++ b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; +using UniversalEditor.ObjectModels.Shortcut; using UniversalEditor.UserInterface.WindowsForms; namespace UniversalEditor.Editors @@ -29,6 +30,7 @@ namespace UniversalEditor.Editors ShortcutObjectModel doc = (base.ObjectModel as ShortcutObjectModel); if (doc == null) return; + /* if (doc.Type == ShortcutType.Normal) { cboTargetType.SelectedIndex = 0; @@ -58,6 +60,7 @@ namespace UniversalEditor.Editors break; } } + */ if (doc.IconFileName != "") { From da6d524573caaf21ff24cea123215f1f47a5ebce Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 13:26:49 -0400 Subject: [PATCH 7/9] Fixed AudioCollection and Voicebank --- .../Audio/Voicebank/VoicebankEditor.designer.cs | 2 +- .../SynthesizedAudioCollectionTrack.cs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs index d40895ab..8af59141 100644 --- a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs @@ -46,7 +46,7 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Voicebank private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VoiceDatabaseEditor)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VoicebankEditor)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.button2 = new System.Windows.Forms.Button(); this.lvPhonemes = new System.Windows.Forms.ListView(); diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs index 19f1e38d..87ad8305 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs @@ -39,7 +39,22 @@ namespace UniversalEditor.ObjectModels.Multimedia.AudioCollection.Synthesized public string OriginalFileName { get { return mvarOriginalFileName; } set { mvarOriginalFileName = value; } } private SynthesizedAudioObjectModel mvarObjectModel = null; - public SynthesizedAudioObjectModel ObjectModel { get { return mvarObjectModel; } } + public SynthesizedAudioObjectModel ObjectModel { get { return mvarObjectModel; } set { mvarObjectModel = value; } } + + public object Clone() + { + SynthesizedAudioCollectionTrack clone = new SynthesizedAudioCollectionTrack(); + clone.AlbumTitle = (mvarAlbumTitle.Clone() as string); + clone.ArtistName = (mvarArtistName.Clone() as string); + clone.Comments = (mvarComments.Clone() as string); + clone.DumperName = (mvarDumperName.Clone() as string); + clone.GameTitle = (mvarGameTitle.Clone() as string); + clone.ObjectModel = (mvarObjectModel.Clone() as SynthesizedAudioObjectModel); + clone.OriginalFileName = (mvarOriginalFileName.Clone() as string); + clone.PublisherName = (mvarPublisherName.Clone() as string); + clone.SongTitle = (mvarSongTitle.Clone() as string); + return clone; + } } } From b1bf5be3dfa10b3b7e56c53aa52b7ca46fb5af4a Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 13:30:22 -0400 Subject: [PATCH 8/9] Fixed case sensitivity for VoicebankEditor --- ...lEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj index f7eb8fbb..a49f689e 100644 --- a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj @@ -103,7 +103,7 @@ UserControl - + VoicebankEditor.cs From 7b88fa36653fd80a1be4adfb3288bec1ffbf58ad Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 15:35:46 -0400 Subject: [PATCH 9/9] Moved Microsoft stuff into its own plugin --- .../Languages/English.xml | 2 +- .../MSCompressedCompressionMethod.cs | 2 +- .../MSCompressed/MSCompressedDataFormat.cs | 2 +- .../MSCompressedKWAJCompressionMethod.cs | 2 +- .../MSCompressedKWAJHeaderFlags.cs | 2 +- .../Shortcut/Microsoft/LNKDataFlags.cs | 102 ++++++++++++++ .../Shortcut/Microsoft/LNKDataFormat.cs | 124 ++++++++++++++++++ .../Microsoft/LNKFileAttributeFlags.cs | 13 ++ .../Shortcut/Microsoft/LNKHotkey.cs | 11 ++ .../Shortcut/Microsoft/LNKLocationFlags.cs | 29 ++++ .../Shortcut/Microsoft/LNKWindowState.cs | 11 ++ .../Properties/AssemblyInfo.cs | 36 +++++ .../UniversalEditor.Plugins.Microsoft.csproj | 64 +++++++++ 13 files changed, 395 insertions(+), 5 deletions(-) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedCompressionMethod.cs (76%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedDataFormat.cs (99%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedKWAJCompressionMethod.cs (90%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedKWAJHeaderFlags.cs (94%) create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml index f8f803f5..abb1ca2c 100644 --- a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml +++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml @@ -3,7 +3,7 @@ - + diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs similarity index 76% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs index 6710a70b..7256c501 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public enum MSCompressedCompressionMethod { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs similarity index 99% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs index 19347093..b2582acc 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs @@ -5,7 +5,7 @@ using System.Text; using UniversalEditor.Accessors; using UniversalEditor.ObjectModels.FileSystem; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public class MSCompressedDataFormat : DataFormat { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs similarity index 90% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs index 2cf36b1f..6dfba831 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public enum MSCompressedKWAJCompressionMethod { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs similarity index 94% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs index 96359bed..6f007114 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { [Flags()] public enum MSCompressedKWAJHeaderFlags diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs new file mode 100644 index 00000000..9c25b246 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKDataFlags + { + None = 0x00000000, + /// + /// The LNK file contains a link target identifier. + /// + HasTargetIDList = 0x00000001, + /// + /// The LNK file contains location information. + /// + HasLinkInfo = 0x00000002, + /// + /// The LNK file contains a description data string. + /// + HasName = 0x00000004, + /// + /// The LNK file contains a relative path data string. + /// + HasRelativePath = 0x00000008, + /// + /// The LNK file contains a working directory data string. + /// + HasWorkingDir = 0x00000010, + /// + /// The LNK file contains a command line arguments data string. + /// + HasArguments = 0x00000020, + /// + /// The LNK file contains a custom icon location. + /// + HasIconLocation = 0x00000040, + /// + /// The data strings in the LNK file are stored in Unicode (UTF-16 little-endian) instead of ASCII. + /// + IsUnicode = 0x00000080, + /// + /// The location information is ignored. + /// + ForceNoLinkInfo = 0x00000100, + /// + /// The LNK file contains environment variables that should be expanded. + /// + HasExpString = 0x00000200, + /// + /// A 16-bit target application is run in a separate virtual machine. + /// + RunInSeparateProcess = 0x00000400, + // Reserved = 0x00000800, + /// + /// The LNK file contains a Darwin (Mac OS-X) properties data block. + /// + HasDarwinID = 0x00001000, + /// + /// The target application is run as a different user. + /// + RunAsUser = 0x00002000, + /// + /// The LNK file contains an icon location data block. + /// + HasExpIcon = 0x00004000, + /// + /// The file system location is represented in the shell namespace when the path to an + /// item is parsed into the link target identifiers. + /// Contains a known folder location data block ? + /// + NoPidlAlias = 0x00008000, + // Reserved = 0x00010000, + // Windows Vista and later? + /// + /// The target application is run with the shim layer. The LNK file contains shim layer + /// properties data block. + /// + RunWithShimLayer = 0x00020000, + /// + /// The LNK does not contain a distributed link tracking data block. Note that LNK files + /// in Windows XP and earlier do not use the ForceNoLinkTrack flag. + /// + ForceNoLinkTrack = 0x00040000, + /// + /// The LNK file contains a metadata property store data block. + /// + EnableTargetMetadata = 0x00080000, + /// + /// The environment variables location block should be ignored. + /// + DisableLinkPathTracking = 0x00100000, + DisableKnownFolderTracking = 0x00200000, + DisableKnownFolderAlias = 0x00400000, + AllowLinkToLink = 0x00800000, + UnaliasOnSave = 0x01000000, + PreferEnvironmentPath = 0x02000000, + KeepLocalIDListForUNCTarget = 0x04000000 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs new file mode 100644 index 00000000..57295e71 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UniversalEditor.IO; +using UniversalEditor.ObjectModels.Shortcut; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public class LNKDataFormat : DataFormat + { + private static readonly Guid LNK_CLASSID = new Guid("00021401-0000-0000-00c0-000000000046}"); + + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = base.MakeReference(); + _dfr.Capabilities.Add(typeof(ShortcutObjectModel), DataFormatCapabilities.All); + _dfr.Sources.Add("https://03132e779c908f66a75b1162132f53bf2761aa1a.googledrive.com/host/0B3fBvzttpiiSQmluVC1YeDVvZWM/Windows%20Shortcut%20File%20%28LNK%29%20format.pdf"); + _dfr.Filters.Add("Microsoft shortcut", new byte?[][] { new byte?[] { 0x4C, 0x00, 0x00, 0x00 } }, new string[] { "*.lnk" }); + } + return _dfr; + } + + protected override void LoadInternal(ref ObjectModel objectModel) + { + ShortcutObjectModel shortcut = (objectModel as ShortcutObjectModel); + if (shortcut == null) throw new ObjectModelNotSupportedException(); + + Reader reader = base.Accessor.Reader; + + #region File header + uint headerSize = reader.ReadUInt32(); + if (headerSize != 0x0000004C) throw new InvalidDataFormatException("Invalid header size for shortcut file (not 0x0000004C)"); + + Guid classID = reader.ReadGuid(); + if (classID.Equals(LNK_CLASSID)) throw new InvalidDataFormatException("Class ID '" + classID.ToString("B") + "' does not match LNK class ID '" + LNK_CLASSID.ToString("B") + "'"); + + LNKDataFlags dataFlags = (LNKDataFlags)reader.ReadUInt32(); + LNKFileAttributeFlags fileAttributeFlags = (LNKFileAttributeFlags)reader.ReadUInt32(); + + long creationFILETIME = reader.ReadInt64(); + long accessedFILETIME = reader.ReadInt64(); + long modifiedFILETIME = reader.ReadInt64(); + int filesize = reader.ReadInt32(); + int iconindex = reader.ReadInt32(); + LNKWindowState windowState = (LNKWindowState)reader.ReadInt32(); + LNKHotkey hotkey = (LNKHotkey)reader.ReadInt16(); + short reserved1 = reader.ReadInt16(); + int reserved2 = reader.ReadInt32(); + int reserved3 = reader.ReadInt32(); + #endregion + #region Shell item identifiers list (Link target identifier) + if ((dataFlags & LNKDataFlags.HasTargetIDList) == LNKDataFlags.HasTargetIDList) + { + // The size of the link target identifier shell item identifiers list + ushort targetIDListSize = reader.ReadUInt16(); + // shell item identifiers (LIBFWSI) + } + #endregion + #region Location information + if ((dataFlags & LNKDataFlags.HasLinkInfo) == LNKDataFlags.HasLinkInfo) + { + uint locationInfoSize = reader.ReadUInt32(); + #region Location information header + uint locationInfoHeaderSize = reader.ReadUInt32(); + LNKLocationFlags locationFlags = (LNKLocationFlags)reader.ReadUInt32(); + + // Offset to the volume information. The offset is relative to the start of the + // location information. + uint volumeInformationOffset = reader.ReadUInt32(); + // Offset to the local path. The offset is relative to the start of the location + // information. + uint localPathOffset = reader.ReadUInt32(); + // Offset to the network share information. The offset is relative to the start of + // the location information. + uint networkShareInformationOffset = reader.ReadUInt32(); + // Offset to the common path. The offset is relative to the start of the location + // information. + uint commonPathOffset = reader.ReadUInt32(); + if (locationInfoHeaderSize > 28) + { + // Offset to the Unicode local path. + uint unicodeLocalPathOffset = reader.ReadUInt32(); + if (locationInfoHeaderSize > 32) + { + // Offset to the Unicode common path. + uint unicodeCommonPathOffset = reader.ReadUInt32(); + } + } + #endregion + + // The full filename can be determined by: + // • combining the local path and the common path + // • combining the network share name (in the network share information) with + // the common path + + // Note that the network share name is not necessarily terminated by a path + // separator. Currently it is assumed that the same applies to the local path. + // Also, the file can contain an empty common path where the local path contains + // the full path. + } + #endregion + #region Data strings + #endregion + #region Extra data blocks + #endregion + } + + protected override void SaveInternal(ObjectModel objectModel) + { + ShortcutObjectModel shortcut = (objectModel as ShortcutObjectModel); + if (shortcut == null) throw new ObjectModelNotSupportedException(); + + Writer writer = base.Accessor.Writer; + writer.WriteUInt32(0x0000004C); + + throw new NotImplementedException(); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs new file mode 100644 index 00000000..044379fb --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKFileAttributeFlags + { + None = 0 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs new file mode 100644 index 00000000..c0217aed --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public enum LNKHotkey : short + { + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs new file mode 100644 index 00000000..149b843b --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKLocationFlags + { + None = 0x00000000, + /// + /// The linked file is on a volume. If set, the volume information and the local path + /// contain data. + /// + VolumeIDAndLocalBasePath = 0x0001, + /// + /// The linked file is on a network share. If set, the network share information and + /// common path contain data. + /// + /// + /// Although [MS-SHLLINK] states that when the CommonNetworkRelativeLinkAndPathSuffix + /// location flag is not set the offset to the network share information should be zero, + /// the value can still be set, but is not necessarily valid. This behavior was seen on + /// Windows 95. + /// + CommonNetworkRelativeLinkAndPathSuffix = 0x0002 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs new file mode 100644 index 00000000..1dc6b7eb --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public enum LNKWindowState + { + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..d66fc6ba --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UniversalEditor.Plugins.Microsoft")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("City of Orlando")] +[assembly: AssemblyProduct("UniversalEditor.Plugins.Microsoft")] +[assembly: AssemblyCopyright("Copyright © City of Orlando 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("40fdeaf4-17e9-4b69-80ab-3221452736fb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj new file mode 100644 index 00000000..42060a1e --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj @@ -0,0 +1,64 @@ + + + + + Debug + AnyCPU + {4698BC3F-EC29-42EB-9AED-3D8F9983A108} + Library + Properties + UniversalEditor + UniversalEditor.Plugins.Microsoft + v3.5 + 512 + + + + true + full + false + ..\..\Output\Debug\Plugins\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\Output\Release\Plugins\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + {2d4737e6-6d95-408a-90db-8dff38147e85} + UniversalEditor.Core + + + {30467e5c-05bc-4856-aadc-13906ef4cadd} + UniversalEditor.Essential + + + + + + \ No newline at end of file