[
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n**/Properties/launchSettings.json\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk \n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output \nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder \n.mfractor/\n"
  },
  {
    "path": "CustomAnalysisRules.Test.ruleset",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RuleSet Name=\"Analysis Rules for Test\" Description=\"Code analysis rules used for test projects.\" ToolsVersion=\"14.0\">\n  <Include Path=\"CustomAnalysisRules.ruleset\" Action=\"Default\" />\n  <Rules AnalyzerId=\"StyleCop.Analyzers\" RuleNamespace=\"StyleCop.Analyzers\">\n    <Rule Id=\"SA1652\" Action=\"None\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.CodeQuality.Analyzers\" RuleNamespace=\"Microsoft.CodeQuality.Analyzers\">\n    <Rule Id=\"CA1707\" Action=\"None\" />\n    <Rule Id=\"CA1000\" Action=\"None\" />\n    <Rule Id=\"CA1008\" Action=\"None\" />\n    <Rule Id=\"CA1010\" Action=\"None\" />\n    <Rule Id=\"CA1012\" Action=\"None\" />\n    <Rule Id=\"CA1014\" Action=\"None\" />\n    <Rule Id=\"CA1016\" Action=\"None\" />\n    <Rule Id=\"CA1017\" Action=\"None\" />\n    <Rule Id=\"CA1018\" Action=\"None\" />\n    <Rule Id=\"CA1024\" Action=\"None\" />\n    <Rule Id=\"CA1027\" Action=\"None\" />\n    <Rule Id=\"CA1028\" Action=\"None\" />\n    <Rule Id=\"CA1030\" Action=\"None\" />\n    <Rule Id=\"CA1033\" Action=\"None\" />\n    <Rule Id=\"CA1034\" Action=\"None\" />\n    <Rule Id=\"CA1036\" Action=\"None\" />\n    <Rule Id=\"CA1040\" Action=\"None\" />\n    <Rule Id=\"CA1041\" Action=\"None\" />\n    <Rule Id=\"CA1043\" Action=\"None\" />\n    <Rule Id=\"CA1044\" Action=\"None\" />\n    <Rule Id=\"CA1050\" Action=\"None\" />\n    <Rule Id=\"CA1051\" Action=\"None\" />\n    <Rule Id=\"CA1052\" Action=\"None\" />\n    <Rule Id=\"CA1054\" Action=\"None\" />\n    <Rule Id=\"CA1055\" Action=\"None\" />\n    <Rule Id=\"CA1056\" Action=\"None\" />\n    <Rule Id=\"CA1060\" Action=\"None\" />\n    <Rule Id=\"CA1061\" Action=\"None\" />\n    <Rule Id=\"CA1063\" Action=\"None\" />\n    <Rule Id=\"CA1064\" Action=\"None\" />\n    <Rule Id=\"CA1065\" Action=\"None\" />\n    <Rule Id=\"CA1066\" Action=\"None\" />\n    <Rule Id=\"CA1067\" Action=\"None\" />\n    <Rule Id=\"CA1068\" Action=\"None\" />\n    <Rule Id=\"CA1507\" Action=\"None\" />\n    <Rule Id=\"CA1708\" Action=\"None\" />\n    <Rule Id=\"CA1710\" Action=\"None\" />\n    <Rule Id=\"CA1711\" Action=\"None\" />\n    <Rule Id=\"CA1714\" Action=\"None\" />\n    <Rule Id=\"CA1715\" Action=\"None\" />\n    <Rule Id=\"CA1716\" Action=\"None\" />\n    <Rule Id=\"CA1717\" Action=\"None\" />\n    <Rule Id=\"CA1720\" Action=\"None\" />\n    <Rule Id=\"CA1721\" Action=\"None\" />\n    <Rule Id=\"CA1724\" Action=\"None\" />\n    <Rule Id=\"CA1725\" Action=\"None\" />\n    <Rule Id=\"CA1801\" Action=\"None\" />\n    <Rule Id=\"CA1802\" Action=\"None\" />\n    <Rule Id=\"CA1806\" Action=\"None\" />\n    <Rule Id=\"CA1812\" Action=\"None\" />\n    <Rule Id=\"CA1814\" Action=\"None\" />\n    <Rule Id=\"CA1815\" Action=\"None\" />\n    <Rule Id=\"CA1819\" Action=\"None\" />\n    <Rule Id=\"CA1822\" Action=\"None\" />\n    <Rule Id=\"CA1823\" Action=\"None\" />\n    <Rule Id=\"CA2007\" Action=\"None\" />\n    <Rule Id=\"CA2119\" Action=\"None\" />\n    <Rule Id=\"CA2211\" Action=\"None\" />\n    <Rule Id=\"CA2214\" Action=\"None\" />\n    <Rule Id=\"CA2217\" Action=\"None\" />\n    <Rule Id=\"CA2219\" Action=\"None\" />\n    <Rule Id=\"CA2222\" Action=\"None\" />\n    <Rule Id=\"CA2225\" Action=\"None\" />\n    <Rule Id=\"CA2226\" Action=\"None\" />\n    <Rule Id=\"CA2227\" Action=\"None\" />\n    <Rule Id=\"CA2231\" Action=\"None\" />\n    <Rule Id=\"CA2244\" Action=\"None\" />\n    <Rule Id=\"CA9999\" Action=\"None\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.NetCore.CSharp.Analyzers\" RuleNamespace=\"Microsoft.NetCore.CSharp.Analyzers\">\n    <Rule Id=\"CA1309\" Action=\"None\" />\n    <Rule Id=\"CA1414\" Action=\"None\" />\n    <Rule Id=\"CA1601\" Action=\"None\" />\n    <Rule Id=\"CA1810\" Action=\"None\" />\n    <Rule Id=\"CA1824\" Action=\"None\" />\n    <Rule Id=\"CA1825\" Action=\"None\" />\n    <Rule Id=\"CA2010\" Action=\"None\" />\n    <Rule Id=\"CA2201\" Action=\"None\" />\n    <Rule Id=\"CA2205\" Action=\"None\" />\n    <Rule Id=\"CA2207\" Action=\"None\" />\n    <Rule Id=\"CA2215\" Action=\"None\" />\n    <Rule Id=\"CA5350\" Action=\"None\" />\n    <Rule Id=\"CA5351\" Action=\"None\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.NetCore.Analyzers\" RuleNamespace=\"Microsoft.NetCore.Analyzers\">\n    <Rule Id=\"CA1304\" Action=\"None\" />\n    <Rule Id=\"CA1305\" Action=\"None\" />\n    <Rule Id=\"CA1307\" Action=\"None\" />\n    <Rule Id=\"CA1308\" Action=\"None\" />\n    <Rule Id=\"CA1401\" Action=\"None\" />\n    <Rule Id=\"CA1813\" Action=\"None\" />\n    <Rule Id=\"CA1816\" Action=\"None\" />\n    <Rule Id=\"CA1820\" Action=\"None\" />\n    <Rule Id=\"CA1826\" Action=\"None\" />\n    <Rule Id=\"CA2002\" Action=\"None\" />\n    <Rule Id=\"CA2008\" Action=\"None\" />\n    <Rule Id=\"CA2009\" Action=\"None\" />\n    <Rule Id=\"CA2101\" Action=\"None\" />\n    <Rule Id=\"CA2208\" Action=\"None\" />\n    <Rule Id=\"CA2216\" Action=\"None\" />\n    <Rule Id=\"CA2241\" Action=\"None\" />\n    <Rule Id=\"CA2242\" Action=\"None\" />\n    <Rule Id=\"CA2243\" Action=\"None\" />\n    <Rule Id=\"CA9999\" Action=\"None\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.CodeQuality.CSharp.Analyzers\" RuleNamespace=\"Microsoft.CodeQuality.CSharp.Analyzers\">\n    <Rule Id=\"Async001\" Action=\"None\" />\n    <Rule Id=\"Async002\" Action=\"None\" />\n    <Rule Id=\"Async003\" Action=\"None\" />\n    <Rule Id=\"Async004\" Action=\"None\" />\n    <Rule Id=\"Async005\" Action=\"None\" />\n    <Rule Id=\"Async006\" Action=\"None\" />\n    <Rule Id=\"CA1001\" Action=\"None\" />\n    <Rule Id=\"CA1003\" Action=\"None\" />\n    <Rule Id=\"CA1019\" Action=\"None\" />\n    <Rule Id=\"CA1032\" Action=\"None\" />\n    <Rule Id=\"CA1200\" Action=\"None\" />\n    <Rule Id=\"CA1500\" Action=\"None\" />\n    <Rule Id=\"CA1726\" Action=\"None\" />\n    <Rule Id=\"CA1821\" Action=\"None\" />\n    <Rule Id=\"CA2000\" Action=\"None\" />\n    <Rule Id=\"CA2001\" Action=\"None\" />\n    <Rule Id=\"CA2109\" Action=\"None\" />\n    <Rule Id=\"CA2200\" Action=\"None\" />\n    <Rule Id=\"CA2234\" Action=\"None\" />\n  </Rules>\n</RuleSet>"
  },
  {
    "path": "CustomAnalysisRules.ruleset",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RuleSet Name=\"Analysis Rules\" Description=\"Code analysis rules.\" ToolsVersion=\"14.0\">\n  <Include Path=\"minimumrecommendedrules.ruleset\" Action=\"Default\" />\n  <Include Path=\"securityrules.ruleset\" Action=\"Default\" />\n  <Rules AnalyzerId=\"Microsoft.CodeAnalysis.CSharp.Features\" RuleNamespace=\"Microsoft.CodeAnalysis.CSharp.Features\">\n    <Rule Id=\"IDE0003\" Action=\"Warning\" />\n    <Rule Id=\"IDE0004\" Action=\"Warning\" />\n    <Rule Id=\"IDE0005\" Action=\"Warning\" />\n    <Rule Id=\"IDE1005\" Action=\"Warning\" />\n  </Rules>\n  <Rules AnalyzerId=\"StyleCop.Analyzers\" RuleNamespace=\"StyleCop.Analyzers\">\n    <Rule Id=\"CS1591\" Action=\"None\" />\n    <Rule Id=\"SA0001\" Action=\"None\" />\n    <Rule Id=\"SA1101\" Action=\"None\" />\n    <Rule Id=\"SA1308\" Action=\"None\" />\n    <Rule Id=\"SA1309\" Action=\"None\" />\n    <Rule Id=\"SA1512\" Action=\"None\" />\n    <Rule Id=\"SA1600\" Action=\"None\" />\n    <Rule Id=\"SA1602\" Action=\"None\" />\n    <Rule Id=\"SA1615\" Action=\"None\" />\n    <Rule Id=\"SA1623\" Action=\"None\" />\n    <Rule Id=\"SA1629\" Action=\"None\" />\n    <Rule Id=\"SA1652\" Action=\"None\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.CodeQuality.Analyzers\" RuleNamespace=\"Microsoft.CodeQuality.Analyzers\">\n    <Rule Id=\"CA2007\" Action=\"Info\" />\n    <Rule Id=\"CA1716\" Action=\"Info\" />\n    <Rule Id=\"CA1054\" Action=\"Info\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.CodeQuality.CSharp.Analyzers\" RuleNamespace=\"Microsoft.CodeQuality.CSharp.Analyzers\">\n    <Rule Id=\"CA1032\" Action=\"Info\" />\n  </Rules>\n  <Rules AnalyzerId=\"Microsoft.NetCore.Analyzers\" RuleNamespace=\"Microsoft.NetCore.Analyzers\">\n    <Rule Id=\"CA1305\" Action=\"Info\" />\n  </Rules>\n</RuleSet>"
  },
  {
    "path": "Directory.Build.props",
    "content": "<Project>\n  <PropertyGroup>\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n    <WarningsAsErrors />\n    <DebugType>Full</DebugType>\n    <LangVersion>7.3</LangVersion>\n    <HighEntropyVA>true</HighEntropyVA>\n    <EnableSourceLink Condition=\"$([MSBuild]::IsOSPlatform('osx'))\">false</EnableSourceLink>\n    <EnableSourceControlManagerQueries>$(EnableSourceLink)</EnableSourceControlManagerQueries>\n    <!--This will target the latest patch release of the runtime released with the current SDK.  -->\n    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(EnableSourceLink)' == 'true' \">\n    <PublishRepositoryUrl>true</PublishRepositoryUrl>\n    <EmbedUntrackedSources>true</EmbedUntrackedSources>\n    <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>\n  </PropertyGroup>\n\n  <Choose>\n    <When Condition=\"$(MSBuildProjectName.Contains('Test'))\">\n      <PropertyGroup>\n        <IsPackable>false</IsPackable>\n        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\\CustomAnalysisRules.Test.ruleset</CodeAnalysisRuleSet>\n      </PropertyGroup>\n    </When>\n    <Otherwise>\n      <PropertyGroup>\n        <IsPackable>true</IsPackable>\n        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\\CustomAnalysisRules.ruleset</CodeAnalysisRuleSet>\n      </PropertyGroup>\n    </Otherwise>\n  </Choose>\n\n  <ItemGroup>\n    <AdditionalFiles Include=\"$(MSBuildThisFileDirectory)\\stylecop.json\" Link=\"stylecop.json\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.SourceLink.GitHub\" Version=\"1.0.0\" />\n    <PackageReference Include=\"StyleCop.Analyzers\" Version=\"1.1.118\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 James231\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Start Menu Manager\n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MLD56V6HQWCKU&source=url)\n\n<img align=\"left\" width=\"64\" height=\"64\" src=\"https://cdn.jam-es.com/img/start-menu-manager/icon.png\">\n\nWindows 10 App to improve you productivity with shortcuts. See the features below:  \n\n:star: :star: :star: And if you like it ... please star it! :star: :star: :star:  \n\nIntroduction Video:\n\n[<img width=\"640\" height=\"360\" src=\"https://cdn.jam-es.com/img/start-menu-manager/thumbnail.png\">](https://youtu.be/22APfw-ZSxI)\n\n### Add Shorcuts to Start Menu\n\nThe app lets you add any kind of shortcut to the Start Menu:  \n- Website Shorcuts  \n- Software Shorcuts  \n- File Shorcuts  \n- Folder Shorcuts  \n- Shorcuts to run Commands/Scripts  \n- 'Group' Shortcuts which open multiple things at the same time  \n\n\n### Add Shortcuts Anywhere\n\nOnce created, those shorcuts can be moved or added elsewhere. They can be pinned to the Start Menu, added to the Taskbar, added to your Desktop, or put anywhere you like.  \n  \n### Fixes Windows 10 Bugs\n\nWindows 10 Search is buggy and inconsistent. Sometimes you might type in the exact name of an app, but get redirected to Bing search results inside a web brower.  \n  \nStart Menu Manager fixes this. All shorctuts are treated like apps so they get priority in Windows 10 Search and appear at the top of the search results.  \n\n### Additional Features\n\n - Clean modern Graphical Interface with light/dark themes.  \n - Want an icon for your shortcut? The app can extract images from your favorite websites to use as shortcut icons.  \n - Or provide custom icons as `.ico` files.  \n - Shortcuts can be saved to JSON format so you can copy them between devices.  \n - You can also generate the shortcuts from JSON using a terminal to avoid the GUI.\n - If you don't like it, uninstallation removes all shortcuts and leaves no 'junk' behind.  \n - No performance loss as no background processes are used. Apps will start with an almost unnoticable overhead.\n\n## Screenshots\n\nClick for full size.\n\n[<img width=\"108\" height=\"103\" src=\"https://cdn.jam-es.com/img/start-menu-manager/screen1.png\">](https://cdn.jam-es.com/img/start-menu-manager/screen1.png)\n\n[<img width=\"129\" height=\"83\" src=\"https://cdn.jam-es.com/img/start-menu-manager/screen2.png\">](https://cdn.jam-es.com/img/start-menu-manager/screen2.png)\n\n[<img width=\"154\" height=\"80\" src=\"https://cdn.jam-es.com/img/start-menu-manager/screen3.png\">](https://cdn.jam-es.com/img/start-menu-manager/screen3.png)\n\n## Installation\n\nRequires Windows 10 with recent updates.  \n\n**Disclaimer:** The app needs to run with Administrator privileges, so it can access the directories to place the shortcuts. If you don't have Administrator privileges, then it won't work.\n\n1. Go to the [GitHub Releases page](https://github.com/James231/Start-Menu-Manager/releases).  \n2. Scroll Down and download the `.msi` file in the 'Assets' section.  \n3. Run the installer to install the software.  \n\n## How to Use\n\nIt should be intuitive from the app, but just in case ...  \n  \n1. Open the 'Start Menu Manager' app through the Start Menu.  \n2. Click the 'Add Shortcut' button to begin creating a shorcut.  \n3. Change the 'Shortcut Name'. This will be the name which appears in the Start Menu and Windows Search.  \n4. Change the 'Shortcut Type' to the kind of shortcut you want to create. And fill in the details for that type. E.g. Set the 'Website Url' for Web shortcuts.  \n5. Next to 'Icon' press 'Select from Website' to pick an icon from your favorite website.  \n6. Create as many shortcuts as you want in the same way.  \n7. Press 'Generate' to create the shortcuts. You'll see them added to the start menu under 'Recently Added'.  \n  \n**Optional:**  \n8. In the Start Menu, right click on the shortcut to pin it, or add it to the Taskbar.  \n9. Naviagate to the Start Menu folder through the App Settings and copy the shortcut to wherever you want it.  \n  \n**Note:** When generating the shorcuts, icons might not immediatley be displayed correctly in the Start Menu. This is a bug with Windows. One fix is to look in the 'Display' settings in the Windows 10 Settings App. Change the 'Scale and Layout' percentage, wait a few seconds, then change it back again.  \n\n## Uninstall\n\nOpen the 'Apps & Features' page in the Windows 10 Settings app. Select 'Start Menu Manager' and select 'Uninstall'. Everything is removed, including the shorctuts you created with the tool.\n\n## Building the App from Source\n\nIf you want to get your hands dirty you can build from the source code. Just clone the repository and open the solution (`.sln`) in Visual Studio 2019 or later.  \n  \nThe `StartMenuManager.GUI` project contains the main WPF application. `StartMenuManager.Builder` is a console app which creates the shorcuts a from JSON file. `StartMenuManager.Runner` is a console app used to run the Shortcuts when they are clicked. There are a few other class libraries, a project which acts as an uninstallation step, and an Wix installer project.  \n\nVS may prompt you to open as an administrator, since running the app requires those privileges.  \n  \nOnce built, the various console apps (`.exe` files with `.dll`s) need to be put in the correct locations relative to each other. See the `Program Files` of an installed version of the app to see the correct setup.  \n  \n## License\n\nThis code is released under MIT license. This means you can use this for whatever you want. Modify, distribute, sell, fork, and use this as much as you like. Both for personal and commercial use. I hold no responsibility if anything goes wrong.  \n  \nIf you use this, you don't need to refer to this repo, or give me any kind of credit but it would be appreciated. At least a :star: would be nice.  \n\nIt took a lot of work to make this available for free. If you are feeling more generous, perhaps you could consider donating?\n\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MLD56V6HQWCKU&source=url)\n\n## Contributing\n\nPull Requests are welcome. But, note that by creating a pull request you are giving me permission to merge your code and release it under the MIT license mentioned above. At no point will you be able to withdraw merged code from the repository, or change the license under which it has been made available.\n\n## References\n\nThis wouldn't have been possible without ...\n\n[Material Design In Xaml](http://materialdesigninxaml.net/) - The WPF styles used in this app.  \n  \n[AvalonEdit](http://avalonedit.net/) - The code editor WPF control used for the JSON editing in the app.  \n  \n[AvalonEditHighlightingThemes](https://github.com/Dirkster99/AvalonEditHighlightingThemes) - Implementation of Themes in AvalonEdit. Used for light/dark JSON editing themes.  \n\n[FontAwesome.WPF](https://www.nuget.org/packages/FontAwesome.WPF/) - Only used for the loading spinner on the Icon Extractor page.\n  \n[Json.NET](https://www.newtonsoft.com/json) - JSON serializer.  \n\n[JsonSubTypes](https://www.newtonsoft.com/json) - JSON SubType implementation for Json.NET.  \n\n[Wix Toolset](https://wixtoolset.org/) - Used to create the `.msi` installer.\n\n... and obvious credit to Microsoft for C#, WPF, .NET, and the best OS in existence :)\n"
  },
  {
    "path": "StartMenuManager.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30330.147\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"HL\", \"src\\HL\\HL.csproj\", \"{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"StartMenuManager.Builder\", \"src\\StartMenuManager.Builder\\StartMenuManager.Builder.csproj\", \"{72692F58-2690-4677-A87B-A686BCAA6FF2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"StartMenuManager.Core\", \"src\\StartMenuManager.Core\\StartMenuManager.Core.csproj\", \"{03E687E5-87C9-4234-86F9-1E746E428764}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"StartMenuManager.GUI\", \"src\\StartMenuManager.GUI\\StartMenuManager.GUI.csproj\", \"{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"StartMenuManager.PreUninstall\", \"src\\StartMenuManager.PreUninstall\\StartMenuManager.PreUninstall.csproj\", \"{E9C16107-0F20-4B36-A65F-54D4290736AB}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"StartMenuManager.Runner\", \"src\\StartMenuManager.Runner\\StartMenuManager.Runner.csproj\", \"{567580BE-01CE-420C-86F5-1E91EF50BEEE}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"TextEditLib\", \"src\\TextEditLib\\TextEditLib.csproj\", \"{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}\"\nEndProject\nProject(\"{930C7802-8A8C-48F9-8165-68863BCCD9DD}\") = \"StartMenuManager.GUI.Installer\", \"src\\StartMenuManager.GUI.Installer\\StartMenuManager.GUI.Installer.wixproj\", \"{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3DFE9408-3EC2-45F6-B814-ACA60A4DA722}.Release|x86.Build.0 = Release|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{72692F58-2690-4677-A87B-A686BCAA6FF2}.Release|x86.Build.0 = Release|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{03E687E5-87C9-4234-86F9-1E746E428764}.Release|x86.Build.0 = Release|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E9C16107-0F20-4B36-A65F-54D4290736AB}.Release|x86.Build.0 = Release|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{567580BE-01CE-420C-86F5-1E91EF50BEEE}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3BAB726C-8CFA-4631-80F3-FB05D3CE2D78}.Release|x86.Build.0 = Release|Any CPU\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Debug|x86.Build.0 = Debug|x86\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Release|x86.ActiveCfg = Release|x86\n\t\t{B7CBB2B3-65E2-44FB-AAD6-9BD76884D09D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {9B76E47D-2E1B-4E6E-B7D2-7D9C00328767}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/HL/AssemblyInfo.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\n\n#pragma warning disable\n\n[assembly: ThemeInfo(\n\tResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n\t\t\t\t\t\t\t\t\t //(used if a resource is not found in the page,\n\t\t\t\t\t\t\t\t\t // or application resource dictionaries)\n\tResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n\t\t\t\t\t\t\t\t\t\t\t  //(used if a resource is not found in the page,\n\t\t\t\t\t\t\t\t\t\t\t  // app, or any theme specific resource dictionaries)\n)]\n"
  },
  {
    "path": "src/HL/HL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net4;netcoreapp3.0</TargetFrameworks>\n    <UseWPF>true</UseWPF>\n    <Version>1.0.4</Version>\n    <AssemblyVersion>1.0.4</AssemblyVersion>\n    <FileVersion>1.0.4</FileVersion>\n    <Company>Open Source</Company>\n    <Product>Dirkster.HL</Product>\n    <Copyright>2019-2020</Copyright>\n    <Description>This assembly implements a docking layout system for WPF.</Description>\n\n    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>\n    <PackageProjectUrl>https://github.com/Dirkster99/HL</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/Dirkster99/HL</RepositoryUrl>\n    <PackageId>Dirkster.HL</PackageId>\n    <Authors>https://github.com/Dirkster99/HL</Authors>\n    <PackageLicenseFile>LICENSE</PackageLicenseFile>\n\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageTags>avalonedit dark-theme light-theme theming highlighting</PackageTags>\n    <PackageReleaseNotes>Mutlitargetting NetCore3 and Net 4.0</PackageReleaseNotes>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"images/icon.png\" Pack=\"true\" PackagePath=\"\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"Modes\\ModeV1.xsd\" />\n    <None Remove=\"Modes\\ModeV2.xsd\" />\n    <None Remove=\"Modes\\ModeV2_htd.xsd\" />\n    <None Remove=\"Resources\\Light\\AS3.xshd\" />\n    <None Remove=\"Resources\\Light\\ASPX.xshd\" />\n    <None Remove=\"Resources\\Light\\Boo.xshd\" />\n    <None Remove=\"Resources\\Light\\Coco-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\CPP-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\CSharp-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\CSS-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\DOSBATCH.xshd\" />\n    <None Remove=\"Resources\\Light\\FSharp-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\Gcode.xshd\" />\n    <None Remove=\"Resources\\Light\\GRazor-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\HLSL.xshd\" />\n    <None Remove=\"Resources\\Light\\HTML-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\INI.xshd\" />\n    <None Remove=\"Resources\\Light\\Java-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\JavaScript-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\Log.xshd\" />\n    <None Remove=\"Resources\\Light\\MarkDown-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\Pascal.xshd\" />\n    <None Remove=\"Resources\\Light\\Patch-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\PHP-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\PLSQL.xshd\" />\n    <None Remove=\"Resources\\Light\\PowerShell.xshd\" />\n    <None Remove=\"Resources\\Light\\Python-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\Ruby.xshd\" />\n    <None Remove=\"Resources\\Light\\scheme.xshd\" />\n    <None Remove=\"Resources\\Light\\squirrel.xshd\" />\n    <None Remove=\"Resources\\Light\\Tex-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\TSQL-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\TXT.xshd\" />\n    <None Remove=\"Resources\\Light\\VB-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\vtl.xshd\" />\n    <None Remove=\"Resources\\Light\\XML-Mode.xshd\" />\n    <None Remove=\"Resources\\Light\\XmlDoc.xshd\" />\n    <None Remove=\"Resources\\Themes\\Dark.xshtd\" />\n    <None Remove=\"Resources\\Themes\\TrueBlue.xshtd\" />\n    <None Remove=\"Resources\\Themes\\VS2019_Dark.xshtd\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Modes\\ModeV1.xsd\">\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Modes\\ModeV2.xsd\">\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Modes\\ModeV2_htd.xsd\">\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Resources\\Light\\AS3.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\ASPX.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Boo.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Coco-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\CPP-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\CSharp-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\CSS-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\DOSBATCH.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\FSharp-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Gcode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\GRazor-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\HLSL.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\HTML-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\INI.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Java-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\JavaScript-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Log.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\MarkDown-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Pascal.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Patch-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\PHP-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\PLSQL.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\PowerShell.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Python-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Ruby.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\scheme.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\squirrel.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\Tex-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\TSQL-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\TXT.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\VB-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\vtl.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\XML-Mode.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Light\\XmlDoc.xshd\" />\n    <EmbeddedResource Include=\"Resources\\Themes\\Dark.xshtd\" />\n    <EmbeddedResource Include=\"Resources\\Themes\\TrueBlue.xshtd\" />\n    <EmbeddedResource Include=\"Resources\\Themes\\VS2019_Dark.xshtd\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AvalonEdit\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <!-- NuGet Packaging -->\n  <ItemGroup>\n    <None Include=\"LICENSE\" Pack=\"true\" PackagePath=\"\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"LICENSE\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/HL/HighlightingTheme/GlobalStyle.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.HighlightingTheme\n{\n\tusing HL.Xshtd.interfaces;\n\tusing System.Windows.Media;\n\n\t/// <summary>\n\t/// Implements an object that holds general color and style definitions for the\n\t/// Editor. These style definitions are usually non-highlighting language specific\n\t/// (eg Hyperlink color) and can overwrite existing WPF definition (eg background or\n\t/// foreground color)\n\t/// </summary>\n\tpublic class GlobalStyle : AbstractFreezable, IFreezable\n\t{\n\t\t#region fields\n\t\tprivate string _TypeName;\n\t\tprivate Color? _Foregroundcolor;\n\t\tprivate Color? _Backgroundcolor;\n\t\tprivate Color? _Bordercolor;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Construct a named (eg. 'Comment') WordStyle object\n\t\t/// </summary>\n\t\t/// <param name=\"typeName\"></param>\n\t\tpublic GlobalStyle(string typeName)\n\t\t  : this()\n\t\t{\n\t\t\tthis.TypeName = typeName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Hidden standard constructor\n\t\t/// </summary>\n\t\tprotected GlobalStyle()\n\t\t{\n\t\t\tthis.TypeName = string.Empty;\n\t\t\t_Foregroundcolor = null;\n\t\t\t_Backgroundcolor = null;\n\t\t\t_Bordercolor = null;\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Typed name of <seealso cref=\"GlobalStyle\"/> object\n\t\t/// \n\t\t/// (eg 'DefaultStyle', 'NonPrintableCharacter' ...,\n\t\t/// (this is usually the key in a collection of these styles)\n\t\t/// </summary>\n\t\tpublic string TypeName\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _TypeName;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (IsFrozen)\n\t\t\t\t\tthrow new System.InvalidOperationException(\"Property is already frozen.\");\n\n\t\t\t\t_TypeName = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get/set brush definition for the foreground used in this style\n\t\t/// </summary>\n\t\tpublic Color? foregroundcolor\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Foregroundcolor;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (IsFrozen)\n\t\t\t\t\tthrow new System.InvalidOperationException(\"Property is already frozen.\");\n\n\t\t\t\t_Foregroundcolor = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get/set brush definition for the background used in this style\n\t\t/// </summary>\n\t\tpublic Color? backgroundcolor\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Backgroundcolor;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (IsFrozen)\n\t\t\t\t\tthrow new System.InvalidOperationException(\"Property is already frozen.\");\n\n\t\t\t\t_Backgroundcolor = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get/set brush definition for the border used in this style\n\t\t/// </summary>\n\t\tpublic Color? bordercolor\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Bordercolor;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (IsFrozen)\n\t\t\t\t\tthrow new System.InvalidOperationException(\"Property is already frozen.\");\n\n\t\t\t\t_Bordercolor = value;\n\t\t\t}\n\t\t}\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Returns a string that represents the current object.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"[\" + (string.IsNullOrEmpty(this.TypeName) ? string.Empty : this.TypeName) + \"]\";\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/HighlightingTheme/SyntaxDefinition.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.HighlightingTheme\n{\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing ICSharpCode.AvalonEdit.Utils;\n\tusing System;\n\tusing System.Collections.Generic;\n\n\t/// <summary>\n\t/// Implements the object that keeps track of each syntax definition reference\n\t/// within a highlighting theme definition.\n\t/// </summary>\n\tpublic class SyntaxDefinition : AbstractFreezable, IFreezable\n\t{\n\t\t#region fields\n\t\tstring _Name;\n\t\tprivate readonly Dictionary<string, HighlightingColor> _NamedHighlightingColors;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tpublic SyntaxDefinition(string paramName)\n\t\t\t: this()\n\t\t{\n\t\t\tthis._Name = paramName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tpublic SyntaxDefinition()\n\t\t{\n\t\t\tthis.Extensions = new NullSafeCollection<string>();\n\t\t\t_NamedHighlightingColors = new Dictionary<string, HighlightingColor>();\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets/Sets the name of the color.\n\t\t/// </summary>\n\t\tpublic string Name\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Name;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (IsFrozen)\n\t\t\t\t\tthrow new InvalidOperationException();\n\n\t\t\t\t_Name = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the associated extensions.\n\t\t/// </summary>\n\t\tpublic IList<string> Extensions { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Gets an enumeration of all highlighting colors that are defined\n\t\t/// for this highlighting pattern (eg. C#) as part of a highlighting theme (eg 'True Blue').\n\t\t/// </summary>\n\t\tpublic IEnumerable<HighlightingColor> NamedHighlightingColors\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _NamedHighlightingColors.Values;\n\t\t\t}\n\t\t}\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Returns a string that represents the current object.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"[\" + GetType().Name + \" \" + (string.IsNullOrEmpty(this.Name) ? string.Empty : this.Name) + \"]\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a named color definition or null.\n\t\t/// </summary>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <returns></returns>\n\t\tpublic HighlightingColor ColorGet(string name)\n\t\t{\n\t\t\tHighlightingColor color;\n\t\t\tif (_NamedHighlightingColors.TryGetValue(name, out color))\n\t\t\t\treturn color;\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds another named color definition.\n\t\t/// Exceptions:\n\t\t///   <see cref=\"System.ArgumentNullException\"/>\n\t\t///     key is null.\n\t\t///\n\t\t///   <see cref=\"System.ArgumentException\"/>\n\t\t///     An element with the same key already exists in the System.Collections.Generic.Dictionary`2.\n\t\t/// </summary>\n\t\t/// <param name=\"color\"></param>\n\t\tpublic void ColorAdd(HighlightingColor color)\n\t\t{\n\t\t\t_NamedHighlightingColors.Add(color.Name, color);\n\t\t}\n\n\t\tinternal void ColorReplace(string name, HighlightingColor themeColor)\n\t\t{\n\t\t\t_NamedHighlightingColors.Remove(name);\n\t\t\t_NamedHighlightingColors.Add(name, themeColor);\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/Interfaces/IHLTheme.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing System.Collections.ObjectModel;\n\tusing HL.HighlightingTheme;\n\tusing HL.Xshtd;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\n\t/// <summary>\n\t/// Defines a highlighting theme which is based on a WPF theme (eg. 'Light')\n\t/// with a corresponding set of highlighting definitions (eg. 'XML', 'C#' etc)\n\t/// to ensure that highlightings are correct in the contecxt of\n\t/// (different background colors) WPF themes.\n\t/// </summary>\n\tpublic interface IHLTheme\n\t{\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets the display independent key value that should by unique in an\n\t\t/// overall collection of highlighting themes and should be used for retrieval purposes.\n\t\t/// </summary>\n\t\tstring Key { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the prefix of the XSHD resources that should be used to lookup\n\t\t/// the actual resource for this theme.\n\t\t/// \n\t\t/// This property is null for a derived highlighting theme since finding its\n\t\t/// base highlighting should by performed through <see cref=\"HLBaseKey\"/>\n\t\t/// and the corresponding <see cref=\"HLBasePrefix\"/> property of that entry.\n\t\t/// </summary>\n\t\tstring HLBasePrefix { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the name of theme (eg. 'Dark' or 'Light' which is used as\n\t\t/// the base of a derived highlighting theme.\n\t\t/// \n\t\t/// This property has the same value as the <see cref=\"Key\"/> property\n\t\t/// if the highlighting is GENERIC (since these highlightings come without\n\t\t/// additional theme resources).\n\t\t/// </summary>\n\t\tstring HLBaseKey { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the prefix of the resource under which a theme resource definition\n\t\t/// file xshTd can be found (eg 'HL.Resources.Themes').\n\t\t/// </summary>\n\t\tstring HLThemePrefix { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the file name under which a theme resource definition\n\t\t/// file xshTd can be found (eg 'Dark.xshtd').\n\t\t/// </summary>\n\t\tstring HLThemeFileName { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the name of theme (eg. 'Dark', 'Light' or 'True Blue' for display purposes in the UI.\n\t\t/// </summary>\n\t\tstring DisplayName { get; }\n\n\t\t/// <summary>\n\t\t/// Gets a copy of all highlightings defined in this object.\n\t\t/// </summary>\n\t\tReadOnlyCollection<IHighlightingDefinition> HighlightingDefinitions { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the theme highlighting definition for this theme\n\t\t/// or null (highlighting definition is generic and not based on a theme).\n\t\t/// </summary>\n\t\tIHighlightingThemeDefinition HlTheme { get; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets whether built-in themes have already been registered or not\n\t\t/// Use this to avoid registration of built-in themes twice for one and the\n\t\t/// same highlighting theme.\n\t\t/// </summary>\n\t\tbool IsBuiltInThemesRegistered { get; set; }\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Gets the highlighting definition by name, or null if it is not found.\n\t\t/// </summary>\n\t\tIHighlightingDefinition GetDefinition(string name);\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting definition by extension.\n\t\t/// Returns null if the definition is not found.\n\t\t/// </summary>\n\t\tIHighlightingDefinition GetDefinitionByExtension(string extension);\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"highlighting\">The highlighting definition.</param>\n\t\tvoid RegisterHighlighting(string name, string[] extensions, IHighlightingDefinition highlighting);\n\n\t\t/// <summary>\n\t\t/// Gets the highlighting theme definition  by name, or null if it is not found.\n\t\t/// </summary>\n\t\t/// <param name=\"highlightingName\"></param>\n\t\tSyntaxDefinition GetThemeDefinition(string highlightingName);\n\n\t\t/// <summary>\n\t\t/// Converts a XSHD reference from namespace prefix and themename\n\t\t/// into a <see cref=\"XhstdThemeDefinition\"/> object and returns it.\n\t\t/// </summary>\n\t\t/// <param name=\"hLPrefix\"></param>\n\t\t/// <param name=\"hLThemeName\"></param>\n\t\t/// <returns></returns>\n\t\tXhstdThemeDefinition ResolveHighLightingTheme(string hLPrefix, string hLThemeName);\n\t\t#endregion methods\n\t}\n}"
  },
  {
    "path": "src/HL/Interfaces/IThemedHighlightingManager.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Interfaces\n{\n\tusing HL.Manager;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Collections.ObjectModel;\n\n\t/// <summary>\n\t/// Defines a Highlighting Manager that associates syntax highlighting definitions with file extentions\n\t/// (*.cs -> 'C#') with consideration of the current WPF App theme\n\t/// \n\t/// Extension  App Theme   SyntaxHighlighter\n\t/// (*.cs  +   'Dark')  -> 'C#' (with color definitions for 'Dark')\n\t/// </summary>\n\tpublic interface IThemedHighlightingManager : IHighlightingDefinitionReferenceResolver,\n\t\t\t\t\t\t\t\t\t\t\t\t  IHighlightingThemeDefinitionReferenceResolver\n\t{\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets the current highlighting theme (eg 'Light' or 'Dark') that should be used as\n\t\t/// a base for the syntax highlighting in AvalonEdit.\n\t\t/// </summary>\n\t\tIHLTheme CurrentTheme { get; }\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Gets a copy of all highlightings.\n\t\t/// </summary>\n\t\tReadOnlyCollection<IHighlightingDefinition> HighlightingDefinitions { get; }\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting definition by extension.\n\t\t/// Returns null if the definition is not found.\n\t\t/// </summary>\n\t\tIHighlightingDefinition GetDefinitionByExtension(string extension);\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition for the <see cref=\"CurrentTheme\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"highlighting\">The highlighting definition.</param>\n\t\tvoid RegisterHighlighting(string name, string[] extensions, IHighlightingDefinition highlighting);\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"lazyLoadedHighlighting\">A function that loads the highlighting definition.</param>\n\t\tvoid RegisterHighlighting(string name, string[] extensions, Func<IHighlightingDefinition> lazyLoadedHighlighting);\n\n\t\t/// <summary>\n\t\t/// Resets the highlighting theme based on the name of the WPF App Theme\n\t\t/// (eg: WPF APP Theme 'Dark' -> Resolve highlighting 'C#' to 'Dark'->'C#')\n\t\t/// \n\t\t/// Throws an <see cref=\"IndexOutOfRangeException\"/> if the WPF APP theme is not known.\n\t\t/// </summary>\n\t\t/// <param name=\"name\"></param>\n\t\tvoid SetCurrentTheme(string name);\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/LICENSE",
    "content": "﻿Copyright 2019-2020 Dirkster99\n\nMIT License (https://opensource.org/licenses/MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "src/HL/Manager/BusyManager.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\n\t/// <summary>\n\t/// This class is used to prevent stack overflows by representing a 'busy' flag\n\t/// that prevents reentrance when another call is running.\n\t/// However, using a simple 'bool busy' is not thread-safe, so we use a\n\t/// thread-static BusyManager.\n\t/// </summary>\n\tinternal static class BusyManager\n\t{\n\t\t[System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Performance\", \"CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes\")]\n\t\t[System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1034:NestedTypesShouldNotBeVisible\",\n\t\t\tJustification = \"Should always be used with 'var'\")]\n\t\tpublic struct BusyLock : IDisposable\n\t\t{\n\t\t\tpublic static readonly BusyLock Failed = new BusyLock(null);\n\n\t\t\treadonly List<object> objectList;\n\n\t\t\tinternal BusyLock(List<object> objectList)\n\t\t\t{\n\t\t\t\tthis.objectList = objectList;\n\t\t\t}\n\n\t\t\tpublic bool Success\n\t\t\t{\n\t\t\t\tget { return objectList != null; }\n\t\t\t}\n\n\t\t\tpublic void Dispose()\n\t\t\t{\n\t\t\t\tif (objectList != null)\n\t\t\t\t{\n\t\t\t\t\tobjectList.RemoveAt(objectList.Count - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[ThreadStatic] static List<object> _activeObjects;\n\n\t\tpublic static BusyLock Enter(object obj)\n\t\t{\n\t\t\tList<object> activeObjects = _activeObjects;\n\t\t\tif (activeObjects == null)\n\t\t\t\tactiveObjects = _activeObjects = new List<object>();\n\t\t\tfor (int i = 0; i < activeObjects.Count; i++)\n\t\t\t{\n\t\t\t\tif (activeObjects[i] == obj)\n\t\t\t\t\treturn BusyLock.Failed;\n\t\t\t}\n\t\t\tactiveObjects.Add(obj);\n\t\t\treturn new BusyLock(activeObjects);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/DefaultHighlightingManager.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.HighlightingTheme;\n\tusing HL.Resources;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Diagnostics;\n\tusing System.IO;\n\tusing System.Xml;\n\n\t/// <summary>\n\t/// Implements a default highlighting manager for\n\t/// AvalonEdit based themable syntax highlighting definitions.\n\t/// </summary>\n\tinternal sealed class DefaultHighlightingManager : ThemedHighlightingManager\n\t{\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Static class constructor\n\t\t/// </summary>\n\t\tstatic DefaultHighlightingManager()\n\t\t{\n\t\t\tvar defaultManager = new DefaultHighlightingManager();\n\n\t\t\tvar theme = new HLTheme(\"Dark\", \"Light\", \"Dark\",\n\t\t\t\t\t\t\t\t\tHL_THEMES_NAMESPACE_ROOT, \"Dark.xshtd\", defaultManager);\n\t\t\tdefaultManager.ThemedHighlightingAdd(theme.Key, theme);\n\n\t\t\ttheme = new HLTheme(\"Light\", HL_GENERIC_NAMESPACE_ROOT, \"Light\");\n\t\t\tdefaultManager.ThemedHighlightingAdd(theme.Key, theme);\n\n\t\t\t// Setup default theme without registration of Highlightings\n\t\t\tdefaultManager.SetCurrentThemeInternal(theme.Key);\n\n\t\t\ttheme = new HLTheme(\"TrueBlue\", \"Light\", \"True Blue\",\n\t\t\t\t\t\t\t\tHL_THEMES_NAMESPACE_ROOT, \"TrueBlue.xshtd\", defaultManager);\n\t\t\tdefaultManager.ThemedHighlightingAdd(theme.Key, theme);\n\n\t\t\ttheme = new HLTheme(\"VS2019_Dark\", \"Light\", \"VS2019 Dark\",\n\t\t\t\t\t\t\t\tHL_THEMES_NAMESPACE_ROOT, \"VS2019_Dark.xshtd\", defaultManager);\n\t\t\tdefaultManager.ThemedHighlightingAdd(theme.Key, theme);\n\n\t\t\tHLResources.RegisterBuiltInHighlightings(defaultManager, defaultManager.CurrentTheme);\n\n\t\t\tInstance = defaultManager;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Default class constructor\n\t\t/// </summary>\n\t\tpublic DefaultHighlightingManager()\n\t\t\t: base()\n\t\t{\n\t\t}\n\t\t#endregion ctors\n\n\t\t/// <summary>\n\t\t/// Gets an instance of a <see cref=\"DefaultHighlightingManager\"/> object.\n\t\t/// </summary>\n\t\tpublic new static readonly DefaultHighlightingManager Instance;\n\n\t\t/// <summary>\n\t\t/// Registering a built-in highlighting including highlighting themes (if any).\n\t\t/// </summary>\n\t\t/// <param name=\"theme\"></param>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <param name=\"extensions\"></param>\n\t\t/// <param name=\"resourceName\"></param>\n\t\tinternal void RegisterHighlighting(IHLTheme theme,\n\t\t\t\t\t\t\t\t\t\t   string name,\n\t\t\t\t\t\t\t\t\t\t   string[] extensions,\n\t\t\t\t\t\t\t\t\t\t   string resourceName)\n\t\t{\n\t\t\ttry\n\t\t\t{\n#if DEBUG\n\t\t\t\t// don't use lazy-loading in debug builds, show errors immediately\n\t\t\t\tICSharpCode.AvalonEdit.Highlighting.Xshd.XshdSyntaxDefinition xshd;\n\t\t\t\tusing (Stream s = HLResources.OpenStream(GetPrefix(CurrentTheme.HLBaseKey), resourceName))\n\t\t\t\t{\n\t\t\t\t\tusing (XmlTextReader reader = new XmlTextReader(s))\n\t\t\t\t\t{\n\t\t\t\t\t\txshd = HighlightingLoader.LoadXshd(reader, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDebug.Assert(name == xshd.Name);\n\t\t\t\tif (extensions != null)\n\t\t\t\t\tDebug.Assert(System.Linq.Enumerable.SequenceEqual(extensions, xshd.Extensions));\n\t\t\t\telse\n\t\t\t\t\tDebug.Assert(xshd.Extensions.Count == 0);\n\n\t\t\t\tvar hlTheme = theme.HlTheme;\n\t\t\t\tSyntaxDefinition themedHighlights = null;\n\n\t\t\t\tif (hlTheme != null)\n\t\t\t\t{\n\t\t\t\t\tthemedHighlights = hlTheme.GetNamedSyntaxDefinition(name);\n\t\t\t\t}\n\n\t\t\t\t// round-trip xshd:\n\t\t\t\t//\t\t\t\t\tstring resourceFileName = Path.Combine(Path.GetTempPath(), resourceName);\n\t\t\t\t//\t\t\t\t\tusing (XmlTextWriter writer = new XmlTextWriter(resourceFileName, System.Text.Encoding.UTF8)) {\n\t\t\t\t//\t\t\t\t\t\twriter.Formatting = Formatting.Indented;\n\t\t\t\t//\t\t\t\t\t\tnew Xshd.SaveXshdVisitor(writer).WriteDefinition(xshd);\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t\tusing (FileStream fs = File.Create(resourceFileName + \".bin\")) {\n\t\t\t\t//\t\t\t\t\t\tnew System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, xshd);\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t\tusing (FileStream fs = File.Create(resourceFileName + \".compiled\")) {\n\t\t\t\t//\t\t\t\t\t\tnew System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, Xshd.HighlightingLoader.Load(xshd, this));\n\t\t\t\t//\t\t\t\t\t}\n\n\t\t\t\tbase.RegisterHighlighting(name, extensions,\n\t\t\t\t\t\t\t\t\t\t  HighlightingLoader.Load(themedHighlights, xshd, this));\n#else\n\t\t\t\tbase.RegisterHighlighting(name, extensions, LoadHighlighting(theme, name, resourceName));\n#endif\n\t\t\t}\n\t\t\tcatch (HighlightingDefinitionInvalidException ex)\n\t\t\t{\n\t\t\t\tthrow new InvalidOperationException(\"The built-in highlighting '\" + name + \"' is invalid.\", ex);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a function that is used to load highlighting definition in a delayed/defered way\n\t\t/// (usually active only when 'Release' is configured).\n\t\t/// </summary>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <param name=\"theme\"></param>\n\t\t/// <param name=\"resourceName\"></param>\n\t\t/// <returns></returns>\n\t\t[System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t Justification = \"LoadHighlighting is used only in release builds\")]\n\t\tFunc<IHighlightingDefinition> LoadHighlighting(IHLTheme theme, string name, string resourceName)\n\t\t{\n\t\t\tFunc<IHighlightingDefinition> func = delegate\n\t\t\t{\n\t\t\t\tICSharpCode.AvalonEdit.Highlighting.Xshd.XshdSyntaxDefinition xshd;\n\t\t\t\tusing (Stream s = HLResources.OpenStream(GetPrefix(CurrentTheme.HLBaseKey), resourceName))\n\t\t\t\t{\n\t\t\t\t\tusing (XmlTextReader reader = new XmlTextReader(s))\n\t\t\t\t\t{\n\t\t\t\t\t\t// in release builds, skip validating the built-in highlightings\n\t\t\t\t\t\txshd = HighlightingLoader.LoadXshd(reader, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar hlTheme = theme.HlTheme;\n\t\t\t\tSyntaxDefinition themedHighlights = null;\n\n\t\t\t\tif (hlTheme != null)\n\t\t\t\t{\n\t\t\t\t\tthemedHighlights = hlTheme.GetNamedSyntaxDefinition(name);\n\t\t\t\t}\n\n\t\t\t\treturn HighlightingLoader.Load(themedHighlights, xshd, this);\n\t\t\t};\n\n\t\t\treturn func;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/DelayLoadedHighlightingDefinition.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Collections.Generic;\n\n\tinternal sealed class DelayLoadedHighlightingDefinition : IHighlightingDefinition\n\t{\n\t\treadonly object lockObj = new object();\n\t\treadonly string name;\n\t\tFunc<IHighlightingDefinition> lazyLoadingFunction;\n\t\tIHighlightingDefinition definition;\n\t\tException storedException;\n\n\t\tpublic DelayLoadedHighlightingDefinition(string name, Func<IHighlightingDefinition> lazyLoadingFunction)\n\t\t{\n\t\t\tthis.name = name;\n\t\t\tthis.lazyLoadingFunction = lazyLoadingFunction;\n\t\t}\n\n\t\tpublic string Name\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (name != null)\n\t\t\t\t\treturn name;\n\t\t\t\telse\n\t\t\t\t\treturn GetDefinition().Name;\n\t\t\t}\n\t\t}\n\n\t\t[System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t Justification = \"The exception will be rethrown\")]\n\t\tIHighlightingDefinition GetDefinition()\n\t\t{\n\t\t\tFunc<IHighlightingDefinition> func;\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tif (this.definition != null)\n\t\t\t\t\treturn this.definition;\n\t\t\t\tfunc = this.lazyLoadingFunction;\n\t\t\t}\n\t\t\tException exception = null;\n\t\t\tIHighlightingDefinition def = null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tusing (var busyLock = BusyManager.Enter(this))\n\t\t\t\t{\n\t\t\t\t\tif (!busyLock.Success)\n\t\t\t\t\t\tthrow new InvalidOperationException(\"Tried to create delay-loaded highlighting definition recursively. Make sure the are no cyclic references between the highlighting definitions.\");\n\t\t\t\t\tdef = func();\n\t\t\t\t}\n\t\t\t\tif (def == null)\n\t\t\t\t\tthrow new InvalidOperationException(\"Function for delay-loading highlighting definition returned null\");\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\texception = ex;\n\t\t\t}\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tthis.lazyLoadingFunction = null;\n\t\t\t\tif (this.definition == null && this.storedException == null)\n\t\t\t\t{\n\t\t\t\t\tthis.definition = def;\n\t\t\t\t\tthis.storedException = exception;\n\t\t\t\t}\n\t\t\t\tif (this.storedException != null)\n\t\t\t\t\tthrow new HighlightingDefinitionInvalidException(\"Error delay-loading highlighting definition\", this.storedException);\n\t\t\t\treturn this.definition;\n\t\t\t}\n\t\t}\n\n\t\tpublic HighlightingRuleSet MainRuleSet\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn GetDefinition().MainRuleSet;\n\t\t\t}\n\t\t}\n\n\t\tpublic HighlightingRuleSet GetNamedRuleSet(string name)\n\t\t{\n\t\t\treturn GetDefinition().GetNamedRuleSet(name);\n\t\t}\n\n\t\tpublic HighlightingColor GetNamedColor(string name)\n\t\t{\n\t\t\treturn GetDefinition().GetNamedColor(name);\n\t\t}\n\n\t\tpublic IEnumerable<HighlightingColor> NamedHighlightingColors\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn GetDefinition().NamedHighlightingColors;\n\t\t\t}\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn this.Name;\n\t\t}\n\n\t\tpublic IDictionary<string, string> Properties\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn GetDefinition().Properties;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/ExtensionMethods.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Diagnostics;\n\t////    using System.Windows;\n\t////    using System.Windows.Controls;\n\t////    using System.Windows.Media;\n\tusing System.Xml;\n\n\tstatic class ExtensionMethods\n\t{\n\t\t#region Epsilon / IsClose / CoerceValue\n\t\t/// <summary>\n\t\t/// Epsilon used for <c>IsClose()</c> implementations.\n\t\t/// We can use up quite a few digits in front of the decimal point (due to visual positions being relative to document origin),\n\t\t/// and there's no need to be too accurate (we're dealing with pixels here),\n\t\t/// so we will use the value 0.01.\n\t\t/// Previosly we used 1e-8 but that was causing issues:\n\t\t/// http://community.sharpdevelop.net/forums/t/16048.aspx\n\t\t/// </summary>\n\t\tpublic const double Epsilon = 0.01;\n\n\t\t/// <summary>\n\t\t/// Returns true if the doubles are close (difference smaller than 0.01).\n\t\t/// </summary>\n\t\tpublic static bool IsClose(this double d1, double d2)\n\t\t{\n\t\t\tif (d1 == d2) // required for infinities\n\t\t\t\treturn true;\n\t\t\treturn Math.Abs(d1 - d2) < Epsilon;\n\t\t}\n\n\t\t////        /// <summary>\n\t\t////        /// Returns true if the doubles are close (difference smaller than 0.01).\n\t\t////        /// </summary>\n\t\t////        public static bool IsClose(this Size d1, Size d2)\n\t\t////        {\n\t\t////            return IsClose(d1.Width, d2.Width) && IsClose(d1.Height, d2.Height);\n\t\t////        }\n\t\t////\n\t\t////        /// <summary>\n\t\t////        /// Returns true if the doubles are close (difference smaller than 0.01).\n\t\t////        /// </summary>\n\t\t////        public static bool IsClose(this Vector d1, Vector d2)\n\t\t////        {\n\t\t////            return IsClose(d1.X, d2.X) && IsClose(d1.Y, d2.Y);\n\t\t////        }\n\n\t\t/// <summary>\n\t\t/// Forces the value to stay between mininum and maximum.\n\t\t/// </summary>\n\t\t/// <returns>minimum, if value is less than minimum.\n\t\t/// Maximum, if value is greater than maximum.\n\t\t/// Otherwise, value.</returns>\n\t\tpublic static double CoerceValue(this double value, double minimum, double maximum)\n\t\t{\n\t\t\treturn Math.Max(Math.Min(value, maximum), minimum);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Forces the value to stay between mininum and maximum.\n\t\t/// </summary>\n\t\t/// <returns>minimum, if value is less than minimum.\n\t\t/// Maximum, if value is greater than maximum.\n\t\t/// Otherwise, value.</returns>\n\t\tpublic static int CoerceValue(this int value, int minimum, int maximum)\n\t\t{\n\t\t\treturn Math.Max(Math.Min(value, maximum), minimum);\n\t\t}\n\t\t#endregion\n\n////        #region CreateTypeface\n////        /// <summary>\n////        /// Creates typeface from the framework element.\n////        /// </summary>\n////        public static Typeface CreateTypeface(this FrameworkElement fe)\n////        {\n////            return new Typeface((FontFamily)fe.GetValue(TextBlock.FontFamilyProperty),\n////                                (FontStyle)fe.GetValue(TextBlock.FontStyleProperty),\n////                                (FontWeight)fe.GetValue(TextBlock.FontWeightProperty),\n////                                (FontStretch)fe.GetValue(TextBlock.FontStretchProperty));\n////        }\n////        #endregion\n\n\t\t#region AddRange / Sequence\n\t\tpublic static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> elements)\n\t\t{\n\t\t\tforeach (T e in elements)\n\t\t\t\tcollection.Add(e);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Creates an IEnumerable with a single value.\n\t\t/// </summary>\n\t\tpublic static IEnumerable<T> Sequence<T>(T value)\n\t\t{\n\t\t\tyield return value;\n\t\t}\n\t\t#endregion\n\n\t\t#region XML reading\n\t\t/// <summary>\n\t\t/// Gets the value of the attribute, or null if the attribute does not exist.\n\t\t/// </summary>\n\t\tpublic static string GetAttributeOrNull(this XmlElement element, string attributeName)\n\t\t{\n\t\t\tXmlAttribute attr = element.GetAttributeNode(attributeName);\n\t\t\treturn attr != null ? attr.Value : null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the value of the attribute as boolean, or null if the attribute does not exist.\n\t\t/// </summary>\n\t\tpublic static bool? GetBoolAttribute(this XmlElement element, string attributeName)\n\t\t{\n\t\t\tXmlAttribute attr = element.GetAttributeNode(attributeName);\n\t\t\treturn attr != null ? (bool?)XmlConvert.ToBoolean(attr.Value) : null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the value of the attribute as boolean, or null if the attribute does not exist.\n\t\t/// </summary>\n\t\tpublic static bool? GetBoolAttribute(this XmlReader reader, string attributeName)\n\t\t{\n\t\t\tstring attributeValue = reader.GetAttribute(attributeName);\n\t\t\tif (attributeValue == null)\n\t\t\t\treturn null;\n\t\t\telse\n\t\t\t\treturn XmlConvert.ToBoolean(attributeValue);\n\t\t}\n\t\t#endregion\n\n////        #region DPI independence\n////        public static Rect TransformToDevice(this Rect rect, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;\n////            return Rect.Transform(rect, matrix);\n////        }\n////\n////        public static Rect TransformFromDevice(this Rect rect, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;\n////            return Rect.Transform(rect, matrix);\n////        }\n////\n////        public static Size TransformToDevice(this Size size, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;\n////            return new Size(size.Width * matrix.M11, size.Height * matrix.M22);\n////        }\n////\n////        public static Size TransformFromDevice(this Size size, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;\n////            return new Size(size.Width * matrix.M11, size.Height * matrix.M22);\n////        }\n////\n////        public static Point TransformToDevice(this Point point, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;\n////            return new Point(point.X * matrix.M11, point.Y * matrix.M22);\n////        }\n////\n////        public static Point TransformFromDevice(this Point point, Visual visual)\n////        {\n////            Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;\n////            return new Point(point.X * matrix.M11, point.Y * matrix.M22);\n////        }\n////        #endregion\n\n\t\t#region System.Drawing <-> WPF conversions\n\t\t////        public static System.Drawing.Point ToSystemDrawing(this Point p)\n\t\t////        {\n\t\t////            return new System.Drawing.Point((int)p.X, (int)p.Y);\n\t\t////        }\n\t\t////\n\t\t////        public static Point ToWpf(this System.Drawing.Point p)\n\t\t////        {\n\t\t////            return new Point(p.X, p.Y);\n\t\t////        }\n\t\t////\n\t\t////        public static Size ToWpf(this System.Drawing.Size s)\n\t\t////        {\n\t\t////            return new Size(s.Width, s.Height);\n\t\t////        }\n\t\t////\n\t\t////        public static Rect ToWpf(this System.Drawing.Rectangle rect)\n\t\t////        {\n\t\t////            return new Rect(rect.Location.ToWpf(), rect.Size.ToWpf());\n\t\t////        }\n\t\t#endregion\n\n////        public static IEnumerable<DependencyObject> VisualAncestorsAndSelf(this DependencyObject obj)\n////        {\n////            while (obj != null)\n////            {\n////                yield return obj;\n////                if (obj is Visual || obj is System.Windows.Media.Media3D.Visual3D)\n////                {\n////                    obj = VisualTreeHelper.GetParent(obj);\n////                }\n////                else if (obj is FrameworkContentElement)\n////                {\n////                    // When called with a non-visual such as a TextElement, walk up the\n////                    // logical tree instead.\n////                    obj = ((FrameworkContentElement)obj).Parent;\n////                }\n////                else\n////                {\n////                    break;\n////                }\n////            }\n////        }\n////\n////        [Conditional(\"DEBUG\")]\n////        public static void CheckIsFrozen(Freezable f)\n////        {\n////            if (f != null && !f.IsFrozen)\n////                Debug.WriteLine(\"Performance warning: Not frozen: \" + f.ToString());\n////        }\n\n\t\t[Conditional(\"DEBUG\")]\n\t\tpublic static void Log(bool condition, string format, params object[] args)\n\t\t{\n\t\t\tif (condition)\n\t\t\t{\n\t\t\t\tstring output = DateTime.Now.ToString(\"hh:MM:ss\") + \": \" + string.Format(format, args) + Environment.NewLine + Environment.StackTrace;\n\t\t\t\tConsole.WriteLine(output);\n\t\t\t\tDebug.WriteLine(output);\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/HL/Manager/HLTheme.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.HighlightingTheme;\n\tusing HL.Resources;\n\tusing HL.Xshtd;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Collections.ObjectModel;\n\tusing System.IO;\n\tusing System.Linq;\n\tusing System.Xml;\n\n\t/// <summary>\n\t/// Implements a highlighting theme which is based on a WPF theme (eg. 'Light')\n\t/// with a corresponding set of highlighting definitions (eg. 'XML', 'C#' etc)\n\t/// to ensure that highlightings are correct in the contecxt of\n\t/// (different background colors) WPF themes.\n\t/// </summary>\n\tinternal class HLTheme : IHLTheme\n\t{\n\t\t#region fields\n\t\tprivate readonly object lockObj = new object();\n\t\tprivate Dictionary<string, IHighlightingDefinition> highlightingsByName = new Dictionary<string, IHighlightingDefinition>();\n\t\tprivate Dictionary<string, IHighlightingDefinition> highlightingsByExtension = new Dictionary<string, IHighlightingDefinition>(StringComparer.OrdinalIgnoreCase);\n\t\tprivate List<IHighlightingDefinition> allHighlightings = new List<IHighlightingDefinition>();\n\t\tprivate bool _HLThemeIsInitialized;\n\n\t\tprivate XhstdThemeDefinition _xshtd;\n\t\tprivate XmlHighlightingThemeDefinition _hlTheme;\n\t\tprivate readonly IHighlightingThemeDefinitionReferenceResolver _hLThemeResolver;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Class constructor for GENERIC highlighting definitions.\n\t\t/// \n\t\t/// Generic highlighting definitions ar usually defined in xshd\n\t\t/// files and stand on their own (do not need additional processing/resources\n\t\t/// to compute highlighting rules and formating information).\n\t\t/// </summary>\n\t\t/// <param name=\"paramKey\"></param>\n\t\t/// <param name=\"paramHLBasePrefix\"></param>\n\t\t/// <param name=\"paramDisplayName\"></param>\n\t\tpublic HLTheme(string paramKey,\n\t\t\t\t\t   string paramHLBasePrefix,\n\t\t\t\t\t   string paramDisplayName)\n\t\t\t: this()\n\t\t{\n\t\t\tKey = paramKey;\n\t\t\tHLBasePrefix = paramHLBasePrefix;  // This Highlighting is GENERIC - based on 'itself'\n\t\t\tHLBaseKey = paramKey;\n\n\t\t\tDisplayName = paramDisplayName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Class constructor for derived highlighting themes.\n\t\t/// \n\t\t/// Derived highlighting themes have a base highlighting (eg 'Light')\n\t\t/// and an 'overwritting' highlighting themes definition using an xshTd file resource.\n\t\t/// </summary>\n\t\t/// <param name=\"paramKey\"></param>\n\t\t/// <param name=\"paramHLBaseKey\"></param>\n\t\t/// <param name=\"paramDisplayName\"></param>\n\t\t/// <param name=\"paramHLThemePrefix\"></param>\n\t\t/// <param name=\"paramHLThemeName\"></param>\n\t\t/// <param name=\"themeResolver\"></param>\n\t\tpublic HLTheme(string paramKey,\n\t\t\tstring paramHLBaseKey,\n\t\t\t\t\t   string paramDisplayName,\n\t\t\t\t\t   string paramHLThemePrefix, string paramHLThemeName,\n\t\t\t\t\t   IHighlightingThemeDefinitionReferenceResolver themeResolver)\n\t\t\t: this()\n\t\t{\n\t\t\tKey = paramKey;\n\t\t\tHLBaseKey = paramHLBaseKey;\n\n\t\t\tHLThemePrefix = paramHLThemePrefix;\n\t\t\tHLThemeFileName = paramHLThemeName;\n\n\t\t\t_hLThemeResolver = themeResolver;\n\n\t\t\tDisplayName = paramDisplayName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Hidden class constructor\n\t\t/// </summary>\n\t\tprotected HLTheme()\n\t\t{\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets the display independent key value that should by unique in an\n\t\t/// overall collection of highlighting themes and should be used for retrieval purposes.\n\t\t/// </summary>\n\t\tpublic string Key { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the prefix of the XSHD resources that should be used to lookup\n\t\t/// the actual resource for this theme.\n\t\t/// \n\t\t/// This property is null for a derived highlighting theme since finding its\n\t\t/// base highlighting should by performed through <see cref=\"HLBaseKey\"/>\n\t\t/// and the corresponding <see cref=\"HLBasePrefix\"/> property of that entry.\n\t\t/// </summary>\n\t\tpublic string HLBasePrefix { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the name of theme (eg. 'Dark' or 'Light' which is used as\n\t\t/// the base of a derived highlighting theme.\n\t\t/// \n\t\t/// This property has the same value as the <see cref=\"Key\"/> property\n\t\t/// if the highlighting is GENERIC (since these highlightings come without\n\t\t/// additional theme resources).\n\t\t/// </summary>\n\t\tpublic string HLBaseKey { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the prefix of the resource under which a theme resource definition\n\t\t/// file xshTd can be found (eg 'HL.Resources.Themes').\n\t\t/// </summary>\n\t\tpublic string HLThemePrefix { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the file name under which a theme resource definition\n\t\t/// file xshTd can be found (eg 'Dark.xshtd').\n\t\t/// </summary>\n\t\tpublic string HLThemeFileName { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the name of theme (eg. 'Dark', 'Light' or 'True Blue' for display purposes in the UI.\n\t\t/// </summary>\n\t\tpublic string DisplayName { get; }\n\n\t\t/// <summary>\n\t\t/// Gets an (ordered by Name) list copy of all highlightings defined in this object.\n\t\t/// </summary>\n\t\tpublic ReadOnlyCollection<IHighlightingDefinition> HighlightingDefinitions\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tlock (lockObj)\n\t\t\t\t{\n\t\t\t\t\treturn Array.AsReadOnly(allHighlightings.OrderBy(x => x.Name).ToArray());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the theme highlighting definition for this theme\n\t\t/// or null (highlighting definition is generic and not based on a theme).\n\t\t/// </summary>\n\t\tpublic IHighlightingThemeDefinition HlTheme\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tResolveHighLightingTheme();\n\n\t\t\t\treturn _hlTheme;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets/sets whether built-in themes have already been registered or not\n\t\t/// Use this to avoid registration of built-in themes twice for one and the\n\t\t/// same highlighting theme.\n\t\t/// </summary>\n\t\tpublic bool IsBuiltInThemesRegistered { get; set; }\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Gets the highlighting definition by name, or null if it is not found.\n\t\t/// </summary>\n\t\tpublic IHighlightingDefinition GetDefinition(string name)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tthis.ResolveHighLightingTheme();\n\n\t\t\t\tIHighlightingDefinition rh;\n\t\t\t\tif (highlightingsByName.TryGetValue(name, out rh))\n\t\t\t\t\treturn rh;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the highlighting theme definition  by name, or null if it is not found.\n\t\t/// </summary>\n\t\tpublic SyntaxDefinition GetThemeDefinition(string highlightingName)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tthis.ResolveHighLightingTheme();\n\n\t\t\t\treturn _hlTheme.GetNamedSyntaxDefinition(highlightingName);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting definition by extension.\n\t\t/// Returns null if the definition is not found.\n\t\t/// </summary>\n\t\tpublic IHighlightingDefinition GetDefinitionByExtension(string extension)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tthis.ResolveHighLightingTheme();\n\n\t\t\t\tIHighlightingDefinition rh;\n\t\t\t\tif (highlightingsByExtension.TryGetValue(extension, out rh))\n\t\t\t\t\treturn rh;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"highlighting\">The highlighting definition.</param>\n\t\tpublic void RegisterHighlighting(string name,\n\t\t\t\t\t\t\t\t\t\t string[] extensions,\n\t\t\t\t\t\t\t\t\t\t IHighlightingDefinition highlighting)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\t// Perform an update if this highlighting happens to be available already \n\t\t\t\tvar itemInList = allHighlightings.FirstOrDefault(i => name == i.Name);\n\t\t\t\tif (itemInList != null)\n\t\t\t\t\tallHighlightings.Remove(itemInList);\n\n\t\t\t\tallHighlightings.Add(highlighting);\n\t\t\t\tif (name != null)\n\t\t\t\t{\n\t\t\t\t\thighlightingsByName[name] = highlighting;\n\t\t\t\t}\n\n\t\t\t\tif (extensions != null)\n\t\t\t\t{\n\t\t\t\t\tforeach (string ext in extensions)\n\t\t\t\t\t{\n\t\t\t\t\t\thighlightingsByExtension[ext] = highlighting;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Loads the highlighting theme for this highlighting definition\n\t\t/// (if an additional theme was configured)\n\t\t/// </summary>\n\t\tprotected virtual void ResolveHighLightingTheme()\n\t\t{\n\t\t\tif (_hlTheme != null || _HLThemeIsInitialized == true)\n\t\t\t\treturn;\n\n\t\t\t_HLThemeIsInitialized = true;            // Initialize this at most once\n\n\t\t\t// Load the highlighting theme and setup converter to XmlHighlightingThemeDefinition\n\t\t\t_xshtd = ResolveHighLightingTheme(HLThemePrefix, HLThemeFileName);\n\n\t\t\tif (_hLThemeResolver == null || _xshtd == null)\n\t\t\t\treturn;\n\n\t\t\t_hlTheme = new XmlHighlightingThemeDefinition(_xshtd, _hLThemeResolver);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts a XSHTD reference from namespace prefix and themename\n\t\t/// into a <see cref=\"XhstdThemeDefinition\"/> object and returns it.\n\t\t/// </summary>\n\t\t/// <param name=\"hLPrefix\"></param>\n\t\t/// <param name=\"hLThemeName\"></param>\n\t\t/// <returns></returns>\n\t\tpublic XhstdThemeDefinition ResolveHighLightingTheme(string hLPrefix, string hLThemeName)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(hLPrefix) || string.IsNullOrEmpty(hLThemeName))\n\t\t\t\treturn null;\n\n\t\t\tusing (Stream s = HLResources.OpenStream(hLPrefix, hLThemeName))\n\t\t\t{\n\t\t\t\tusing (XmlTextReader reader = new XmlTextReader(s))\n\t\t\t\t{\n\t\t\t\t\treturn HighlightingThemeLoader.LoadXshd(reader, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/HighlightingBrush.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing System;\n\tusing System.Diagnostics;\n\tusing System.Reflection;\n\tusing System.Runtime.Serialization;\n\tusing System.Windows;\n\tusing System.Windows.Media;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing ICSharpCode.AvalonEdit.Rendering;\n\n\t/// <summary>\n\t/// HighlightingBrush implementation that finds a brush using a resource.\n\t/// </summary>\n\t[Serializable]\n\tsealed class SystemColorHighlightingBrush : HighlightingBrush, ISerializable\n\t{\n\t\treadonly PropertyInfo property;\n\n\t\tpublic SystemColorHighlightingBrush(PropertyInfo property)\n\t\t{\n\t\t\tDebug.Assert(property.ReflectedType == typeof(SystemColors));\n\t\t\tDebug.Assert(typeof(Brush).IsAssignableFrom(property.PropertyType));\n\t\t\tthis.property = property;\n\t\t}\n\n\t\tpublic override Brush GetBrush(ITextRunConstructionContext context)\n\t\t{\n\t\t\treturn (Brush)property.GetValue(null, null);\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn property.Name;\n\t\t}\n\n\t\tSystemColorHighlightingBrush(SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tproperty = typeof(SystemColors).GetProperty(info.GetString(\"propertyName\"));\n\t\t\tif (property == null)\n\t\t\t\tthrow new ArgumentException(\"Error deserializing SystemColorHighlightingBrush\");\n\t\t}\n\n\t\tvoid ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tinfo.AddValue(\"propertyName\", property.Name);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tSystemColorHighlightingBrush other = obj as SystemColorHighlightingBrush;\n\t\t\tif (other == null)\n\t\t\t\treturn false;\n\t\t\treturn object.Equals(this.property, other.property);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\treturn property.GetHashCode();\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/HL/Manager/HighlightingLoader.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.HighlightingTheme;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing ICSharpCode.AvalonEdit.Highlighting.Xshd;\n\tusing System;\n\tusing System.Xml;\n\tusing System.Xml.Schema;\n\n\t/// <summary>\n\t/// Static class with helper methods to load XSHD highlighting files.\n\t/// </summary>\n\tpublic static class HighlightingLoader\n\t{\n\t\t#region XSHD loading\n\t\t/// <summary>\n\t\t/// Lodas a syntax definition from the xml reader.\n\t\t/// </summary>\n\t\tpublic static XshdSyntaxDefinition LoadXshd(XmlReader reader)\n\t\t{\n\t\t\treturn LoadXshd(reader, false);\n\t\t}\n\n\t\tinternal static XshdSyntaxDefinition LoadXshd(XmlReader reader, bool skipValidation)\n\t\t{\n\t\t\tif (reader == null)\n\t\t\t\tthrow new ArgumentNullException(\"reader\");\n\t\t\ttry\n\t\t\t{\n\t\t\t\treader.MoveToContent();\n\t\t\t\t////                if (reader.NamespaceURI == V2Loader.Namespace)\n\t\t\t\t////                {\n\t\t\t\treturn V2Loader.LoadDefinition(reader, skipValidation);\n\t\t\t\t////                }\n\t\t\t\t////                else\n\t\t\t\t////                {\n\t\t\t\t////                    return V1Loader.LoadDefinition(reader, skipValidation);\n\t\t\t\t////                }\n\t\t\t}\n\t\t\tcatch (XmlSchemaException ex)\n\t\t\t{\n\t\t\t\tthrow WrapException(ex, ex.LineNumber, ex.LinePosition);\n\t\t\t}\n\t\t\tcatch (XmlException ex)\n\t\t\t{\n\t\t\t\tthrow WrapException(ex, ex.LineNumber, ex.LinePosition);\n\t\t\t}\n\t\t}\n\n\t\tstatic Exception WrapException(Exception ex, int lineNumber, int linePosition)\n\t\t{\n\t\t\treturn new HighlightingDefinitionInvalidException(FormatExceptionMessage(ex.Message, lineNumber, linePosition), ex);\n\t\t}\n\n\t\tinternal static string FormatExceptionMessage(string message, int lineNumber, int linePosition)\n\t\t{\n\t\t\tif (lineNumber <= 0)\n\t\t\t\treturn message;\n\t\t\telse\n\t\t\t\treturn \"Error at position (line \" + lineNumber + \", column \" + linePosition + \"):\\n\" + message;\n\t\t}\n\n\t\tinternal static XmlReader GetValidatingReader(XmlReader input, bool ignoreWhitespace, XmlSchemaSet schemaSet)\n\t\t{\n\t\t\tXmlReaderSettings settings = new XmlReaderSettings();\n\t\t\tsettings.CloseInput = true;\n\t\t\tsettings.IgnoreComments = true;\n\t\t\tsettings.IgnoreWhitespace = ignoreWhitespace;\n\t\t\tif (schemaSet != null)\n\t\t\t{\n\t\t\t\tsettings.Schemas = schemaSet;\n\t\t\t\tsettings.ValidationType = ValidationType.Schema;\n\t\t\t}\n\t\t\treturn XmlReader.Create(input, settings);\n\t\t}\n\n\t\tinternal static XmlSchemaSet LoadSchemaSet(XmlReader schemaInput)\n\t\t{\n\t\t\tXmlSchemaSet schemaSet = new XmlSchemaSet();\n\t\t\tschemaSet.Add(null, schemaInput);\n\t\t\tschemaSet.ValidationEventHandler += delegate (object sender, ValidationEventArgs args)\n\t\t\t{\n\t\t\t\tthrow new HighlightingDefinitionInvalidException(args.Message);\n\t\t\t};\n\t\t\treturn schemaSet;\n\t\t}\n\t\t#endregion\n\n\t\t#region Load Highlighting from XSHD\n\t\t/// <summary>\n\t\t/// Creates a highlighting definition from the XSHD file.\n\t\t/// </summary>\n\t\tpublic static IHighlightingDefinition Load(XshdSyntaxDefinition syntaxDefinition,\n\t\t\t\t\t\t\t\t\t\t\t\t   IHighlightingDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\tif (syntaxDefinition == null)\n\t\t\t\tthrow new ArgumentNullException(\"syntaxDefinition\");\n\n\t\t\treturn new XmlHighlightingDefinition(syntaxDefinition, resolver);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Loads a highlighting definition base on a:\n\t\t/// </summary>\n\t\t/// <param name=\"themedHighlights\">\n\t\t/// Themed Highlighting Definition\n\t\t/// (This contains the color definition for a highlighting in this theme)\n\t\t/// </param>\n\t\t/// <param name=\"syntaxDefinition\">\n\t\t/// A Highlighting definition\n\t\t/// (This contains the pattern matching and color definitions where the later\n\t\t///  is usually overwritten be a highlighting theme)\n\t\t/// </param>\n\t\t/// <param name=\"resolver\">An object that can resolve a highlighting definition by its name.</param>\n\t\t/// <returns></returns>\n\t\tpublic static IHighlightingDefinition Load(SyntaxDefinition themedHighlights,\n\t\t\t\t\t\t\t\t\t\t\t\t   XshdSyntaxDefinition syntaxDefinition,\n\t\t\t\t\t\t\t\t\t\t\t\t   IHighlightingDefinitionReferenceResolver resolver\n\t\t\t\t\t\t\t\t\t\t\t\t   )\n\t\t{\n\t\t\tif (syntaxDefinition == null)\n\t\t\t\tthrow new ArgumentNullException(\"syntaxDefinition\");\n\n\t\t\treturn new XmlHighlightingDefinition(themedHighlights, syntaxDefinition, resolver);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Creates a highlighting definition from the XSHD file that is already initialled\n\t\t/// in the <see cref=\"XmlReader\"/> instance of the <paramref name=\"reader\"/> parameter.\n\t\t/// </summary>\n\t\tpublic static IHighlightingDefinition Load(XmlReader reader,\n\t\t\t\t\t\t\t\t\t\t\t\t   IHighlightingDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\treturn Load(LoadXshd(reader), resolver);\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/HighlightingThemeLoader.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.Xshtd;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Xml;\n\tusing System.Xml.Schema;\n\n\t/// <summary>\n\t/// Static class with helper methods to load XSHTD highlighting files.\n\t/// </summary>\n\tstatic class HighlightingThemeLoader\n\t{\n\t\t#region XSHD loading\n\t\t/// <summary>\n\t\t/// Lodas a syntax definition from the xml reader.\n\t\t/// </summary>\n\t\tpublic static XhstdThemeDefinition LoadXshd(XmlReader reader)\n\t\t{\n\t\t\treturn LoadXshd(reader, false);\n\t\t}\n\n\t\tinternal static XhstdThemeDefinition LoadXshd(XmlReader reader, bool skipValidation)\n\t\t{\n\t\t\tif (reader == null)\n\t\t\t\tthrow new ArgumentNullException(\"reader\");\n\t\t\ttry\n\t\t\t{\n\t\t\t\treader.MoveToContent();\n\t\t\t\tif (reader.NamespaceURI == XshtdLoader.Namespace)\n\t\t\t\t{\n\t\t\t\t\treturn XshtdLoader.LoadDefinition(reader, skipValidation);\n\t\t\t\t}\n\n\t\t\t\tthrow new ArgumentOutOfRangeException(reader.NamespaceURI);\n\t\t\t}\n\t\t\tcatch (XmlSchemaException ex)\n\t\t\t{\n\t\t\t\tthrow WrapException(ex, ex.LineNumber, ex.LinePosition);\n\t\t\t}\n\t\t\tcatch (XmlException ex)\n\t\t\t{\n\t\t\t\tthrow WrapException(ex, ex.LineNumber, ex.LinePosition);\n\t\t\t}\n\t\t}\n\n\t\tstatic Exception WrapException(Exception ex, int lineNumber, int linePosition)\n\t\t{\n\t\t\treturn new HighlightingDefinitionInvalidException(FormatExceptionMessage(ex.Message, lineNumber, linePosition), ex);\n\t\t}\n\n\t\tinternal static string FormatExceptionMessage(string message, int lineNumber, int linePosition)\n\t\t{\n\t\t\tif (lineNumber <= 0)\n\t\t\t\treturn message;\n\t\t\telse\n\t\t\t\treturn \"Error at position (line \" + lineNumber + \", column \" + linePosition + \"):\\n\" + message;\n\t\t}\n\n\t\tinternal static XmlReader GetValidatingReader(XmlReader input, bool ignoreWhitespace, XmlSchemaSet schemaSet)\n\t\t{\n\t\t\tXmlReaderSettings settings = new XmlReaderSettings();\n\t\t\tsettings.CloseInput = true;\n\t\t\tsettings.IgnoreComments = true;\n\t\t\tsettings.IgnoreWhitespace = ignoreWhitespace;\n\t\t\tif (schemaSet != null)\n\t\t\t{\n\t\t\t\tsettings.Schemas = schemaSet;\n\t\t\t\tsettings.ValidationType = ValidationType.Schema;\n\t\t\t}\n\t\t\treturn XmlReader.Create(input, settings);\n\t\t}\n\n\t\tinternal static XmlSchemaSet LoadSchemaSet(XmlReader schemaInput)\n\t\t{\n\t\t\tXmlSchemaSet schemaSet = new XmlSchemaSet();\n\t\t\tschemaSet.Add(null, schemaInput);\n\t\t\tschemaSet.ValidationEventHandler += delegate (object sender, ValidationEventArgs args)\n\t\t\t{\n\t\t\t\tthrow new HighlightingDefinitionInvalidException(args.Message);\n\t\t\t};\n\t\t\treturn schemaSet;\n\t\t}\n\t\t#endregion\n\n\t\t#region Load Highlighting from XSHD\n\t\t/// <summary>\n\t\t/// Creates a highlighting definition from the XSHD file.\n\t\t/// </summary>\n\t\tpublic static IHighlightingThemeDefinition Load(XhstdThemeDefinition syntaxDefinition,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tIHighlightingThemeDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\tif (syntaxDefinition == null)\n\t\t\t\tthrow new ArgumentNullException(\"syntaxDefinition\");\n\n\t\t\treturn new XmlHighlightingThemeDefinition(syntaxDefinition, resolver);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Creates a highlighting definition from the XSHD file.\n\t\t/// </summary>\n\t\tpublic static IHighlightingThemeDefinition Load(XmlReader reader,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tIHighlightingThemeDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\treturn Load(LoadXshd(reader), resolver);\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/ThemedHighlightingManager.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.HighlightingTheme;\n\tusing HL.Interfaces;\n\tusing HL.Resources;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Collections.ObjectModel;\n\n\t/// <summary>\n\t/// Implements a Highlighting Manager that associates syntax highlighting definitions with file extentions\n\t/// (*.cs -> 'C#') with consideration of the current WPF App theme\n\t/// \n\t/// Extension  App Theme   SyntaxHighlighter\n\t/// (*.cs  +   'Dark')  -> 'C#' (with color definitions for 'Dark')\n\t/// </summary>\n\tpublic class ThemedHighlightingManager : IThemedHighlightingManager\n\t{\n\t\t#region fields\n\t\t/// <summary>\n\t\t/// Defines the root namespace under which the built-in xshd highlighting\n\t\t/// resource files can be found\n\t\t/// (eg all highlighting for 'Light' should be located here).\n\t\t/// </summary>\n\t\tpublic const string HL_GENERIC_NAMESPACE_ROOT = \"HL.Resources.Light\";\n\n\t\t/// <summary>\n\t\t/// Defines the root namespace under which the built-in additional xshtd highlighting theme\n\t\t/// resource files can be found\n\t\t/// (eg 'Dark' and 'TrueBlue' themes should be located here).\n\t\t/// </summary>\n\t\tpublic const string HL_THEMES_NAMESPACE_ROOT = \"HL.Resources.Themes\";\n\n\t\tprivate readonly object lockObj = new object();\n\t\tprivate readonly Dictionary<string, IHLTheme> _ThemedHighlightings;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tpublic ThemedHighlightingManager()\n\t\t{\n\t\t\t_ThemedHighlightings = new Dictionary<string, IHLTheme>();\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets the current highlighting theme (eg 'Light' or 'Dark') that should be used as\n\t\t/// a base for the syntax highlighting in AvalonEdit.\n\t\t/// </summary>\n\t\tpublic IHLTheme CurrentTheme { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Gets the default HighlightingManager instance.\n\t\t/// The default HighlightingManager comes with built-in highlightings.\n\t\t/// </summary>\n\t\tpublic static IThemedHighlightingManager Instance\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn DefaultHighlightingManager.Instance;\n\t\t\t}\n\t\t}\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Gets the highlighting definition by name, or null if it is not found.\n\t\t/// </summary>\n\t\tIHighlightingDefinition IHighlightingDefinitionReferenceResolver.GetDefinition(string name)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tif (CurrentTheme != null)\n\t\t\t\t\treturn CurrentTheme.GetDefinition(name);\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an (ordered by Name) list copy of all highlightings defined in this object\n\t\t/// or an empty collection if there is no highlighting definition available.\n\t\t/// </summary>\n\t\tpublic ReadOnlyCollection<IHighlightingDefinition> HighlightingDefinitions\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tlock (lockObj)\n\t\t\t\t{\n\t\t\t\t\tif (CurrentTheme != null)\n\t\t\t\t\t\treturn CurrentTheme.HighlightingDefinitions;\n\n\t\t\t\t\treturn new ReadOnlyCollection<IHighlightingDefinition>(new List<IHighlightingDefinition>());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting definition by extension.\n\t\t/// Returns null if the definition is not found.\n\t\t/// </summary>\n\t\tpublic IHighlightingDefinition GetDefinitionByExtension(string extension)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tIHLTheme theme;\n\t\t\t\tif (_ThemedHighlightings.TryGetValue(CurrentTheme.Key, out theme) == true)\n\t\t\t\t{\n\t\t\t\t\treturn theme.GetDefinitionByExtension(extension);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition for the <see cref=\"CurrentTheme\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"highlighting\">The highlighting definition.</param>\n\t\tpublic void RegisterHighlighting(string name, string[] extensions, IHighlightingDefinition highlighting)\n\t\t{\n\t\t\tif (highlighting == null)\n\t\t\t\tthrow new ArgumentNullException(\"highlighting\");\n\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tif (this.CurrentTheme != null)\n\t\t\t\t{\n\t\t\t\t\tCurrentTheme.RegisterHighlighting(name, extensions, highlighting);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Registers a highlighting definition.\n\t\t/// </summary>\n\t\t/// <param name=\"name\">The name to register the definition with.</param>\n\t\t/// <param name=\"extensions\">The file extensions to register the definition for.</param>\n\t\t/// <param name=\"lazyLoadedHighlighting\">A function that loads the highlighting definition.</param>\n\t\tpublic void RegisterHighlighting(string name, string[] extensions, Func<IHighlightingDefinition> lazyLoadedHighlighting)\n\t\t{\n\t\t\tif (lazyLoadedHighlighting == null)\n\t\t\t\tthrow new ArgumentNullException(\"lazyLoadedHighlighting\");\n\n\t\t\tRegisterHighlighting(name, extensions, new DelayLoadedHighlightingDefinition(name, lazyLoadedHighlighting));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the current highlighting based on the name of the given highighting theme.\n\t\t/// (eg: WPF APP Theme 'TrueBlue' -> Resolve highlighting 'C#' to 'TrueBlue'->'C#')\n\t\t/// \n\t\t/// Throws an <see cref=\"IndexOutOfRangeException\"/> if the WPF APP theme is not known.\n\t\t/// </summary>\n\t\t/// <param name=\"themeNameKey\"></param>\n\t\tpublic void SetCurrentTheme(string themeNameKey)\n\t\t{\n\t\t\tSetCurrentThemeInternal(themeNameKey);\n\t\t\tHLResources.RegisterBuiltInHighlightings(DefaultHighlightingManager.Instance, CurrentTheme);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds another highlighting theme into the current collection of highlighting themes.\n\t\t/// </summary>\n\t\t/// <param name=\"key\"></param>\n\t\t/// <param name=\"theme\"></param>\n\t\tpublic void ThemedHighlightingAdd(string key, IHLTheme theme)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\t_ThemedHighlightings.Add(key, theme);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes a highlighting theme from the current collection\n\t\t/// of highlighting themes.\n\t\t/// </summary>\n\t\t/// <param name=\"removekey\"></param>\n\t\tpublic void ThemedHighlightingRemove(string removekey)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\t_ThemedHighlightings.Remove(removekey);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes the current default theme available at start-up of application\n\t\t/// (without registration of highlightings).\n\t\t/// </summary>\n\t\t/// <param name=\"themeNameKey\"></param>\n\t\tprotected void SetCurrentThemeInternal(string themeNameKey)\n\t\t{\n\t\t\tCurrentTheme = _ThemedHighlightings[themeNameKey];\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Helper method to find the correct namespace of an internal xshd resource\n\t\t/// based on the name of a (WPF) theme (eg. 'TrueBlue') and an internal\n\t\t/// constant (eg. 'HL.Resources')\n\t\t/// </summary>\n\t\t/// <param name=\"themeNameKey\"></param>\n\t\t/// <returns></returns>\n\t\tprotected virtual string GetPrefix(string themeNameKey)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tIHLTheme theme;\n\t\t\t\tif (_ThemedHighlightings.TryGetValue(themeNameKey, out theme) == true)\n\t\t\t\t{\n\t\t\t\t\treturn theme.HLBasePrefix;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the highlighting theme definition by name, or null if there is none to be found.\n\t\t/// </summary>\n\t\t/// <param name=\"highlightingName\"></param>\n\t\tSyntaxDefinition IHighlightingThemeDefinitionReferenceResolver.GetThemeDefinition(string highlightingName)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tif (CurrentTheme != null)\n\t\t\t\t\treturn CurrentTheme.GetThemeDefinition(highlightingName);\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the highlighting theme definition by name of the theme (eg 'Dark2' or 'TrueBlue')\n\t\t/// and the highlighting, or null if there is none to be found.\n\t\t/// </summary>\n\t\t/// <param name=\"hlThemeName\"></param>\n\t\t/// <param name=\"highlightingName\"></param>\n\t\tSyntaxDefinition IHighlightingThemeDefinitionReferenceResolver.GetThemeDefinition(string hlThemeName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  string highlightingName)\n\t\t{\n\t\t\tlock (lockObj)\n\t\t\t{\n\t\t\t\tIHLTheme highlighting;\n\t\t\t\tthis._ThemedHighlightings.TryGetValue(hlThemeName, out highlighting);\n\n\t\t\t\tif (highlighting != null)\n\t\t\t\t\treturn highlighting.GetThemeDefinition(hlThemeName);\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/V2Loader.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.Resources;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing ICSharpCode.AvalonEdit.Highlighting.Xshd;\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Diagnostics;\n\tusing System.Windows;\n\tusing System.Windows.Media;\n\tusing System.Xml;\n\tusing System.Xml.Schema;\n\n\t/// <summary>\n\t/// Loads .xshd files, version 2.0.\n\t/// Version 2.0 files are recognized by the namespace.\n\t/// </summary>\n\tstatic class V2Loader\n\t{\n\t\tpublic const string Namespace = \"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\";\n\n\t\tstatic XmlSchemaSet schemaSet;\n\n\t\tstatic XmlSchemaSet SchemaSet\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (schemaSet == null)\n\t\t\t\t{\n\t\t\t\t\tschemaSet = HighlightingLoader.LoadSchemaSet(new XmlTextReader(\n\t\t\t\t\t\tHLResources.OpenStream(\"HL.Modes\", \"ModeV2.xsd\")));\n\t\t\t\t}\n\t\t\t\treturn schemaSet;\n\t\t\t}\n\t\t}\n\n\t\tpublic static XshdSyntaxDefinition LoadDefinition(XmlReader reader, bool skipValidation)\n\t\t{\n\t\t\treader = HighlightingLoader.GetValidatingReader(reader, true, skipValidation ? null : SchemaSet);\n\t\t\treader.Read();\n\t\t\treturn ParseDefinition(reader);\n\t\t}\n\n\t\tstatic XshdSyntaxDefinition ParseDefinition(XmlReader reader)\n\t\t{\n\t\t\tDebug.Assert(reader.LocalName == \"SyntaxDefinition\");\n\t\t\tXshdSyntaxDefinition def = new XshdSyntaxDefinition();\n\t\t\tdef.Name = reader.GetAttribute(\"name\");\n\t\t\tstring extensions = reader.GetAttribute(\"extensions\");\n\t\t\tif (extensions != null)\n\t\t\t\tdef.Extensions.AddRange(extensions.Split(';'));\n\t\t\tParseElements(def.Elements, reader);\n\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.EndElement);\n\t\t\tDebug.Assert(reader.LocalName == \"SyntaxDefinition\");\n\t\t\treturn def;\n\t\t}\n\n\t\tstatic void ParseElements(ICollection<XshdElement> c, XmlReader reader)\n\t\t{\n\t\t\tif (reader.IsEmptyElement)\n\t\t\t\treturn;\n\t\t\twhile (reader.Read() && reader.NodeType != XmlNodeType.EndElement)\n\t\t\t{\n\t\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.Element);\n\t\t\t\tif (reader.NamespaceURI != Namespace)\n\t\t\t\t{\n\t\t\t\t\tif (!reader.IsEmptyElement)\n\t\t\t\t\t\treader.Skip();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch (reader.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"RuleSet\":\n\t\t\t\t\t\tc.Add(ParseRuleSet(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Property\":\n\t\t\t\t\t\tc.Add(ParseProperty(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Color\":\n\t\t\t\t\t\tc.Add(ParseNamedColor(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Keywords\":\n\t\t\t\t\t\tc.Add(ParseKeywords(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Span\":\n\t\t\t\t\t\tc.Add(ParseSpan(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Import\":\n\t\t\t\t\t\tc.Add(ParseImport(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Rule\":\n\t\t\t\t\t\tc.Add(ParseRule(reader));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new NotSupportedException(\"Unknown element \" + reader.Name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic XshdElement ParseProperty(XmlReader reader)\n\t\t{\n\t\t\tXshdProperty property = new XshdProperty();\n\t\t\tSetPosition(property, reader);\n\t\t\tproperty.Name = reader.GetAttribute(\"name\");\n\t\t\tproperty.Value = reader.GetAttribute(\"value\");\n\t\t\treturn property;\n\t\t}\n\n\t\tstatic XshdRuleSet ParseRuleSet(XmlReader reader)\n\t\t{\n\t\t\tXshdRuleSet ruleSet = new XshdRuleSet();\n\t\t\tSetPosition(ruleSet, reader);\n\t\t\truleSet.Name = reader.GetAttribute(\"name\");\n\t\t\truleSet.IgnoreCase = reader.GetBoolAttribute(\"ignoreCase\");\n\n\t\t\tCheckElementName(reader, ruleSet.Name);\n\t\t\tParseElements(ruleSet.Elements, reader);\n\t\t\treturn ruleSet;\n\t\t}\n\n\t\tstatic XshdRule ParseRule(XmlReader reader)\n\t\t{\n\t\t\tXshdRule rule = new XshdRule();\n\t\t\tSetPosition(rule, reader);\n\t\t\trule.ColorReference = ParseColorReference(reader);\n\t\t\tif (!reader.IsEmptyElement)\n\t\t\t{\n\t\t\t\treader.Read();\n\t\t\t\tif (reader.NodeType == XmlNodeType.Text)\n\t\t\t\t{\n\t\t\t\t\trule.Regex = reader.ReadContentAsString();\n\t\t\t\t\trule.RegexType = XshdRegexType.IgnorePatternWhitespace;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rule;\n\t\t}\n\n\t\tstatic XshdKeywords ParseKeywords(XmlReader reader)\n\t\t{\n\t\t\tXshdKeywords keywords = new XshdKeywords();\n\t\t\tSetPosition(keywords, reader);\n\t\t\tkeywords.ColorReference = ParseColorReference(reader);\n\t\t\treader.Read();\n\t\t\twhile (reader.NodeType != XmlNodeType.EndElement)\n\t\t\t{\n\t\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.Element);\n\t\t\t\tkeywords.Words.Add(reader.ReadElementString());\n\t\t\t}\n\t\t\treturn keywords;\n\t\t}\n\n\t\tstatic XshdImport ParseImport(XmlReader reader)\n\t\t{\n\t\t\tXshdImport import = new XshdImport();\n\t\t\tSetPosition(import, reader);\n\t\t\timport.RuleSetReference = ParseRuleSetReference(reader);\n\t\t\tif (!reader.IsEmptyElement)\n\t\t\t\treader.Skip();\n\t\t\treturn import;\n\t\t}\n\n\t\tstatic XshdSpan ParseSpan(XmlReader reader)\n\t\t{\n\t\t\tXshdSpan span = new XshdSpan();\n\t\t\tSetPosition(span, reader);\n\t\t\tspan.BeginRegex = reader.GetAttribute(\"begin\");\n\t\t\tspan.EndRegex = reader.GetAttribute(\"end\");\n\t\t\tspan.Multiline = reader.GetBoolAttribute(\"multiline\") ?? false;\n\t\t\tspan.SpanColorReference = ParseColorReference(reader);\n\t\t\tspan.RuleSetReference = ParseRuleSetReference(reader);\n\t\t\tif (!reader.IsEmptyElement)\n\t\t\t{\n\t\t\t\treader.Read();\n\t\t\t\twhile (reader.NodeType != XmlNodeType.EndElement)\n\t\t\t\t{\n\t\t\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.Element);\n\t\t\t\t\tswitch (reader.Name)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"Begin\":\n\t\t\t\t\t\t\tif (span.BeginRegex != null)\n\t\t\t\t\t\t\t\tthrow Error(reader, \"Duplicate Begin regex\");\n\t\t\t\t\t\t\tspan.BeginColorReference = ParseColorReference(reader);\n\t\t\t\t\t\t\tspan.BeginRegex = reader.ReadElementString();\n\t\t\t\t\t\t\tspan.BeginRegexType = XshdRegexType.IgnorePatternWhitespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"End\":\n\t\t\t\t\t\t\tif (span.EndRegex != null)\n\t\t\t\t\t\t\t\tthrow Error(reader, \"Duplicate End regex\");\n\t\t\t\t\t\t\tspan.EndColorReference = ParseColorReference(reader);\n\t\t\t\t\t\t\tspan.EndRegex = reader.ReadElementString();\n\t\t\t\t\t\t\tspan.EndRegexType = XshdRegexType.IgnorePatternWhitespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"RuleSet\":\n\t\t\t\t\t\t\tif (span.RuleSetReference.ReferencedElement != null)\n\t\t\t\t\t\t\t\tthrow Error(reader, \"Cannot specify both inline RuleSet and RuleSet reference\");\n\t\t\t\t\t\t\tspan.RuleSetReference = new XshdReference<XshdRuleSet>(ParseRuleSet(reader));\n\t\t\t\t\t\t\treader.Read();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new NotSupportedException(\"Unknown element \" + reader.Name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn span;\n\t\t}\n\n\t\tstatic Exception Error(XmlReader reader, string message)\n\t\t{\n\t\t\treturn Error(reader as IXmlLineInfo, message);\n\t\t}\n\n\t\tstatic Exception Error(IXmlLineInfo lineInfo, string message)\n\t\t{\n\t\t\tif (lineInfo != null)\n\t\t\t\treturn new HighlightingDefinitionInvalidException(HighlightingLoader.FormatExceptionMessage(message, lineInfo.LineNumber, lineInfo.LinePosition));\n\t\t\telse\n\t\t\t\treturn new HighlightingDefinitionInvalidException(message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the element's position to the XmlReader's position.\n\t\t/// </summary>\n\t\tstatic void SetPosition(XshdElement element, XmlReader reader)\n\t\t{\n\t\t\tIXmlLineInfo lineInfo = reader as IXmlLineInfo;\n\t\t\tif (lineInfo != null)\n\t\t\t{\n\t\t\t\telement.LineNumber = lineInfo.LineNumber;\n\t\t\t\telement.ColumnNumber = lineInfo.LinePosition;\n\t\t\t}\n\t\t}\n\n\t\tstatic XshdReference<XshdRuleSet> ParseRuleSetReference(XmlReader reader)\n\t\t{\n\t\t\tstring ruleSet = reader.GetAttribute(\"ruleSet\");\n\t\t\tif (ruleSet != null)\n\t\t\t{\n\t\t\t\t// '/' is valid in highlighting definition names, so we need the last occurence\n\t\t\t\tint pos = ruleSet.LastIndexOf('/');\n\t\t\t\tif (pos >= 0)\n\t\t\t\t{\n\t\t\t\t\treturn new XshdReference<XshdRuleSet>(ruleSet.Substring(0, pos), ruleSet.Substring(pos + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn new XshdReference<XshdRuleSet>(null, ruleSet);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn new XshdReference<XshdRuleSet>();\n\t\t\t}\n\t\t}\n\n\t\tstatic void CheckElementName(XmlReader reader, string name)\n\t\t{\n\t\t\tif (name != null)\n\t\t\t{\n\t\t\t\tif (name.Length == 0)\n\t\t\t\t\tthrow Error(reader, \"The empty string is not a valid name.\");\n\t\t\t\tif (name.IndexOf('/') >= 0)\n\t\t\t\t\tthrow Error(reader, \"Element names must not contain a slash.\");\n\t\t\t}\n\t\t}\n\n\t\t#region ParseColor\n\t\tstatic XshdColor ParseNamedColor(XmlReader reader)\n\t\t{\n\t\t\tXshdColor color = ParseColorAttributes(reader);\n\t\t\t// check removed: invisible named colors may be useful now that apps can read highlighting data\n\t\t\t//if (color.Foreground == null && color.FontWeight == null && color.FontStyle == null)\n\t\t\t//\tthrow Error(reader, \"A named color must have at least one element.\");\n\t\t\tcolor.Name = reader.GetAttribute(\"name\");\n\t\t\tCheckElementName(reader, color.Name);\n\t\t\tcolor.ExampleText = reader.GetAttribute(\"exampleText\");\n\t\t\treturn color;\n\t\t}\n\n\t\tstatic XshdReference<XshdColor> ParseColorReference(XmlReader reader)\n\t\t{\n\t\t\tstring color = reader.GetAttribute(\"color\");\n\t\t\tif (color != null)\n\t\t\t{\n\t\t\t\tint pos = color.LastIndexOf('/');\n\t\t\t\tif (pos >= 0)\n\t\t\t\t{\n\t\t\t\t\treturn new XshdReference<XshdColor>(color.Substring(0, pos), color.Substring(pos + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn new XshdReference<XshdColor>(null, color);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn new XshdReference<XshdColor>(ParseColorAttributes(reader));\n\t\t\t}\n\t\t}\n\n\t\tstatic XshdColor ParseColorAttributes(XmlReader reader)\n\t\t{\n\t\t\tXshdColor color = new XshdColor();\n\t\t\tSetPosition(color, reader);\n\t\t\tIXmlLineInfo position = reader as IXmlLineInfo;\n\t\t\tcolor.Foreground = ParseColor(position, reader.GetAttribute(\"foreground\"));\n\t\t\tcolor.Background = ParseColor(position, reader.GetAttribute(\"background\"));\n\t\t\tcolor.FontWeight = ParseFontWeight(reader.GetAttribute(\"fontWeight\"));\n\t\t\tcolor.FontStyle = ParseFontStyle(reader.GetAttribute(\"fontStyle\"));\n\t\t\tcolor.Underline = reader.GetBoolAttribute(\"underline\");\n\t\t\treturn color;\n\t\t}\n\n\t\tinternal readonly static ColorConverter ColorConverter = new ColorConverter();\n\t\tinternal readonly static FontWeightConverter FontWeightConverter = new FontWeightConverter();\n\t\tinternal readonly static FontStyleConverter FontStyleConverter = new FontStyleConverter();\n\n\t\tstatic HighlightingBrush ParseColor(IXmlLineInfo lineInfo, string color)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(color))\n\t\t\t\treturn null;\n\t\t\tif (color.StartsWith(\"SystemColors.\", StringComparison.Ordinal))\n\t\t\t\treturn GetSystemColorBrush(lineInfo, color);\n\t\t\telse\n\t\t\t\treturn FixedColorHighlightingBrush((Color?)ColorConverter.ConvertFromInvariantString(color));\n\t\t}\n\n\t\tinternal static SystemColorHighlightingBrush GetSystemColorBrush(IXmlLineInfo lineInfo, string name)\n\t\t{\n\t\t\tDebug.Assert(name.StartsWith(\"SystemColors.\", StringComparison.Ordinal));\n\t\t\tstring shortName = name.Substring(13);\n\t\t\tvar property = typeof(SystemColors).GetProperty(shortName + \"Brush\");\n\t\t\tif (property == null)\n\t\t\t\tthrow Error(lineInfo, \"Cannot find '\" + name + \"'.\");\n\t\t\treturn new SystemColorHighlightingBrush(property);\n\t\t}\n\n\t\tstatic HighlightingBrush FixedColorHighlightingBrush(Color? color)\n\t\t{\n\t\t\tif (color == null)\n\t\t\t\treturn null;\n\t\t\treturn new SimpleHighlightingBrush(color.Value);\n\t\t}\n\n\t\tstatic FontWeight? ParseFontWeight(string fontWeight)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(fontWeight))\n\t\t\t\treturn null;\n\t\t\treturn (FontWeight?)FontWeightConverter.ConvertFromInvariantString(fontWeight);\n\t\t}\n\n\t\tstatic FontStyle? ParseFontStyle(string fontStyle)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(fontStyle))\n\t\t\t\treturn null;\n\t\t\treturn (FontStyle?)FontStyleConverter.ConvertFromInvariantString(fontStyle);\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/XmlHighlightingDefinition.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.HighlightingTheme;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing ICSharpCode.AvalonEdit.Highlighting.Xshd;\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Diagnostics;\n\tusing System.Linq;\n\tusing System.Runtime.Serialization;\n\tusing System.Text;\n\tusing System.Text.RegularExpressions;\n\n\t[Serializable]\n\tsealed class XmlHighlightingDefinition : IHighlightingDefinition\n\t{\n\t\tpublic string Name { get; private set; }\n\n\t\tpublic XmlHighlightingDefinition(XshdSyntaxDefinition xshd,\n\t\t\t\t\t\t\t\t\t\t IHighlightingDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\tInitializeDefinitions(xshd, resolver);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Class constructor from highlighting theme definition resolver\n\t\t/// and highlighting definition (and resolver)\n\t\t/// </summary>\n\t\t/// <param name=\"xshd\"></param>\n\t\t/// <param name=\"resolver\"></param>\n\t\t/// <param name=\"themedHighlights\"></param>\n\t\tpublic XmlHighlightingDefinition(SyntaxDefinition themedHighlights,\n\t\t\t\t\t\t\t\t\t\t XshdSyntaxDefinition xshd,\n\t\t\t\t\t\t\t\t\t\t IHighlightingDefinitionReferenceResolver resolver\n\t\t\t\t\t\t\t\t\t\t )\n\t\t{\n\t\t\t_themedHighlights = themedHighlights;\n\t\t\tInitializeDefinitions(xshd, resolver);\n\t\t}\n\n\t\t#region RegisterNamedElements\n\t\tsealed class RegisterNamedElementsVisitor : IXshdVisitor\n\t\t{\n\t\t\tXmlHighlightingDefinition def;\n\t\t\tinternal readonly Dictionary<XshdRuleSet, HighlightingRuleSet> ruleSets\n\t\t\t\t= new Dictionary<XshdRuleSet, HighlightingRuleSet>();\n\n\t\t\tpublic RegisterNamedElementsVisitor(XmlHighlightingDefinition def)\n\t\t\t{\n\t\t\t\tthis.def = def;\n\t\t\t}\n\n\t\t\tpublic object VisitRuleSet(XshdRuleSet ruleSet)\n\t\t\t{\n\t\t\t\tHighlightingRuleSet hrs = new HighlightingRuleSet();\n\t\t\t\truleSets.Add(ruleSet, hrs);\n\t\t\t\tif (ruleSet.Name != null)\n\t\t\t\t{\n\t\t\t\t\tif (ruleSet.Name.Length == 0)\n\t\t\t\t\t\tthrow Error(ruleSet, \"Name must not be the empty string\");\n\t\t\t\t\tif (def.ruleSetDict.ContainsKey(ruleSet.Name))\n\t\t\t\t\t\tthrow Error(ruleSet, \"Duplicate rule set name '\" + ruleSet.Name + \"'.\");\n\n\t\t\t\t\tdef.ruleSetDict.Add(ruleSet.Name, hrs);\n\t\t\t\t}\n\t\t\t\truleSet.AcceptElements(this);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tpublic object VisitColor(XshdColor color)\n\t\t\t{\n\t\t\t\tif (color.Name != null)\n\t\t\t\t{\n\t\t\t\t\tif (color.Name.Length == 0)\n\t\t\t\t\t\tthrow Error(color, \"Name must not be the empty string\");\n\n\t\t\t\t\tif (def.colorDict.ContainsKey(color.Name))\n\t\t\t\t\t\tthrow Error(color, \"Duplicate color name '\" + color.Name + \"'.\");\n\n\t\t\t\t\tdef.colorDict.Add(color.Name, new HighlightingColor());\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tpublic object VisitKeywords(XshdKeywords keywords)\n\t\t\t{\n\t\t\t\treturn keywords.ColorReference.AcceptVisitor(this);\n\t\t\t}\n\n\t\t\tpublic object VisitSpan(XshdSpan span)\n\t\t\t{\n\t\t\t\tspan.BeginColorReference.AcceptVisitor(this);\n\t\t\t\tspan.SpanColorReference.AcceptVisitor(this);\n\t\t\t\tspan.EndColorReference.AcceptVisitor(this);\n\t\t\t\treturn span.RuleSetReference.AcceptVisitor(this);\n\t\t\t}\n\n\t\t\tpublic object VisitImport(XshdImport import)\n\t\t\t{\n\t\t\t\treturn import.RuleSetReference.AcceptVisitor(this);\n\t\t\t}\n\n\t\t\tpublic object VisitRule(XshdRule rule)\n\t\t\t{\n\t\t\t\treturn rule.ColorReference.AcceptVisitor(this);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region TranslateElements\n\t\tsealed class TranslateElementVisitor : IXshdVisitor\n\t\t{\n\t\t\treadonly XmlHighlightingDefinition def;\n\t\t\treadonly Dictionary<XshdRuleSet, HighlightingRuleSet> ruleSetDict;\n\t\t\treadonly Dictionary<HighlightingRuleSet, XshdRuleSet> reverseRuleSetDict;\n\t\t\treadonly IHighlightingDefinitionReferenceResolver resolver;\n\t\t\tHashSet<XshdRuleSet> processingStartedRuleSets = new HashSet<XshdRuleSet>();\n\t\t\tHashSet<XshdRuleSet> processedRuleSets = new HashSet<XshdRuleSet>();\n\t\t\tbool ignoreCase;\n\n\t\t\tpublic TranslateElementVisitor(XmlHighlightingDefinition def, Dictionary<XshdRuleSet, HighlightingRuleSet> ruleSetDict, IHighlightingDefinitionReferenceResolver resolver)\n\t\t\t{\n\t\t\t\tDebug.Assert(def != null);\n\t\t\t\tDebug.Assert(ruleSetDict != null);\n\t\t\t\tthis.def = def;\n\t\t\t\tthis.ruleSetDict = ruleSetDict;\n\t\t\t\tthis.resolver = resolver;\n\t\t\t\treverseRuleSetDict = new Dictionary<HighlightingRuleSet, XshdRuleSet>();\n\t\t\t\tforeach (var pair in ruleSetDict)\n\t\t\t\t{\n\t\t\t\t\treverseRuleSetDict.Add(pair.Value, pair.Key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic object VisitRuleSet(XshdRuleSet ruleSet)\n\t\t\t{\n\t\t\t\tHighlightingRuleSet rs = ruleSetDict[ruleSet];\n\t\t\t\tif (processedRuleSets.Contains(ruleSet))\n\t\t\t\t\treturn rs;\n\t\t\t\tif (!processingStartedRuleSets.Add(ruleSet))\n\t\t\t\t\tthrow Error(ruleSet, \"RuleSet cannot be processed because it contains cyclic <Import>\");\n\n\t\t\t\tbool oldIgnoreCase = ignoreCase;\n\t\t\t\tif (ruleSet.IgnoreCase != null)\n\t\t\t\t\tignoreCase = ruleSet.IgnoreCase.Value;\n\n\t\t\t\trs.Name = ruleSet.Name;\n\n\t\t\t\tforeach (XshdElement element in ruleSet.Elements)\n\t\t\t\t{\n\t\t\t\t\tobject o = element.AcceptVisitor(this);\n\t\t\t\t\tHighlightingRuleSet elementRuleSet = o as HighlightingRuleSet;\n\t\t\t\t\tif (elementRuleSet != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tMerge(rs, elementRuleSet);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tHighlightingSpan span = o as HighlightingSpan;\n\t\t\t\t\t\tif (span != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trs.Spans.Add(span);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tHighlightingRule elementRule = o as HighlightingRule;\n\t\t\t\t\t\t\tif (elementRule != null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\trs.Rules.Add(elementRule);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tignoreCase = oldIgnoreCase;\n\t\t\t\tprocessedRuleSets.Add(ruleSet);\n\n\t\t\t\treturn rs;\n\t\t\t}\n\n\t\t\tstatic void Merge(HighlightingRuleSet target, HighlightingRuleSet source)\n\t\t\t{\n\t\t\t\ttarget.Rules.AddRange(source.Rules);\n\t\t\t\ttarget.Spans.AddRange(source.Spans);\n\t\t\t}\n\n\t\t\tpublic object VisitColor(XshdColor color)\n\t\t\t{\n\t\t\t\tHighlightingColor c = null;\n\n\t\t\t\tif (def._themedHighlights == null)\n\t\t\t\t{\n\t\t\t\t\tif (color.Name != null)\n\t\t\t\t\t\tc = def.colorDict[color.Name];\n\t\t\t\t\telse if (color.Foreground == null && color.Background == null && color.Underline == null && color.FontStyle == null && color.FontWeight == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\telse\n\t\t\t\t\t\tc = new HighlightingColor();\n\n\t\t\t\t\tc.Name = color.Name;\n\t\t\t\t\tc.Foreground = color.Foreground;\n\t\t\t\t\tc.Background = color.Background;\n\t\t\t\t\tc.Underline = color.Underline;\n\t\t\t\t\tc.FontStyle = color.FontStyle;\n\t\t\t\t\tc.FontWeight = color.FontWeight;\n\t\t\t\t}\n\n\t\t\t\treturn c;\n\t\t\t}\n\n\t\t\tpublic object VisitKeywords(XshdKeywords keywords)\n\t\t\t{\n\t\t\t\tif (keywords.Words.Count == 0)\n\t\t\t\t\treturn Error(keywords, \"Keyword group must not be empty.\");\n\t\t\t\tforeach (string keyword in keywords.Words)\n\t\t\t\t{\n\t\t\t\t\tif (string.IsNullOrEmpty(keyword))\n\t\t\t\t\t\tthrow Error(keywords, \"Cannot use empty string as keyword\");\n\t\t\t\t}\n\t\t\t\tStringBuilder keyWordRegex = new StringBuilder();\n\t\t\t\t// We can use \"\\b\" only where the keyword starts/ends with a letter or digit, otherwise we don't\n\t\t\t\t// highlight correctly. (example: ILAsm-Mode.xshd with \".maxstack\" keyword)\n\t\t\t\tif (keywords.Words.All(IsSimpleWord))\n\t\t\t\t{\n\t\t\t\t\tkeyWordRegex.Append(@\"\\b(?>\");\n\t\t\t\t\t// (?> = atomic group\n\t\t\t\t\t// atomic groups increase matching performance, but we\n\t\t\t\t\t// must ensure that the keywords are sorted correctly.\n\t\t\t\t\t// \"\\b(?>in|int)\\b\" does not match \"int\" because the atomic group captures \"in\".\n\t\t\t\t\t// To solve this, we are sorting the keywords by descending length.\n\t\t\t\t\tint i = 0;\n\t\t\t\t\tforeach (string keyword in keywords.Words.OrderByDescending(w => w.Length))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (i++ > 0)\n\t\t\t\t\t\t\tkeyWordRegex.Append('|');\n\t\t\t\t\t\tkeyWordRegex.Append(Regex.Escape(keyword));\n\t\t\t\t\t}\n\t\t\t\t\tkeyWordRegex.Append(@\")\\b\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tkeyWordRegex.Append('(');\n\t\t\t\t\tint i = 0;\n\t\t\t\t\tforeach (string keyword in keywords.Words)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (i++ > 0)\n\t\t\t\t\t\t\tkeyWordRegex.Append('|');\n\t\t\t\t\t\tif (char.IsLetterOrDigit(keyword[0]))\n\t\t\t\t\t\t\tkeyWordRegex.Append(@\"\\b\");\n\t\t\t\t\t\tkeyWordRegex.Append(Regex.Escape(keyword));\n\t\t\t\t\t\tif (char.IsLetterOrDigit(keyword[keyword.Length - 1]))\n\t\t\t\t\t\t\tkeyWordRegex.Append(@\"\\b\");\n\t\t\t\t\t}\n\t\t\t\t\tkeyWordRegex.Append(')');\n\t\t\t\t}\n\t\t\t\treturn new HighlightingRule\n\t\t\t\t{\n\t\t\t\t\tColor = GetColor(keywords, keywords.ColorReference),\n\t\t\t\t\tRegex = CreateRegex(keywords, keyWordRegex.ToString(), XshdRegexType.Default)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tstatic bool IsSimpleWord(string word)\n\t\t\t{\n\t\t\t\treturn char.IsLetterOrDigit(word[0]) && char.IsLetterOrDigit(word, word.Length - 1);\n\t\t\t}\n\n\t\t\tRegex CreateRegex(XshdElement position, string regex, XshdRegexType regexType)\n\t\t\t{\n\t\t\t\tif (regex == null)\n\t\t\t\t\tthrow Error(position, \"Regex missing\");\n\t\t\t\tRegexOptions options = RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture;\n\t\t\t\tif (regexType == XshdRegexType.IgnorePatternWhitespace)\n\t\t\t\t\toptions |= RegexOptions.IgnorePatternWhitespace;\n\t\t\t\tif (ignoreCase)\n\t\t\t\t\toptions |= RegexOptions.IgnoreCase;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\treturn new Regex(regex, options);\n\t\t\t\t}\n\t\t\t\tcatch (ArgumentException ex)\n\t\t\t\t{\n\t\t\t\t\tthrow Error(position, ex.Message);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tHighlightingColor GetColor(XshdElement position, XshdReference<XshdColor> colorReference)\n\t\t\t{\n\t\t\t\tif (colorReference.InlineElement != null)\n\t\t\t\t{\n\t\t\t\t\treturn (HighlightingColor)colorReference.InlineElement.AcceptVisitor(this);\n\t\t\t\t}\n\t\t\t\telse if (colorReference.ReferencedElement != null)\n\t\t\t\t{\n\t\t\t\t\tIHighlightingDefinition definition = GetDefinition(position, colorReference.ReferencedDefinition);\n\t\t\t\t\tHighlightingColor color = definition.GetNamedColor(colorReference.ReferencedElement);\n\t\t\t\t\tif (color == null)\n\t\t\t\t\t\tthrow Error(position, \"Could not find color named '\" + colorReference.ReferencedElement + \"'.\");\n\t\t\t\t\treturn color;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tIHighlightingDefinition GetDefinition(XshdElement position, string definitionName)\n\t\t\t{\n\t\t\t\tif (definitionName == null)\n\t\t\t\t\treturn def;\n\t\t\t\tif (resolver == null)\n\t\t\t\t\tthrow Error(position, \"Resolving references to other syntax definitions is not possible because the IHighlightingDefinitionReferenceResolver is null.\");\n\t\t\t\tIHighlightingDefinition d = resolver.GetDefinition(definitionName);\n\t\t\t\tif (d == null)\n\t\t\t\t\tthrow Error(position, \"Could not find definition with name '\" + definitionName + \"'.\");\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tHighlightingRuleSet GetRuleSet(XshdElement position, XshdReference<XshdRuleSet> ruleSetReference)\n\t\t\t{\n\t\t\t\tif (ruleSetReference.InlineElement != null)\n\t\t\t\t{\n\t\t\t\t\treturn (HighlightingRuleSet)ruleSetReference.InlineElement.AcceptVisitor(this);\n\t\t\t\t}\n\t\t\t\telse if (ruleSetReference.ReferencedElement != null)\n\t\t\t\t{\n\t\t\t\t\tIHighlightingDefinition definition = GetDefinition(position, ruleSetReference.ReferencedDefinition);\n\t\t\t\t\tHighlightingRuleSet ruleSet = definition.GetNamedRuleSet(ruleSetReference.ReferencedElement);\n\t\t\t\t\tif (ruleSet == null)\n\t\t\t\t\t\tthrow Error(position, \"Could not find rule set named '\" + ruleSetReference.ReferencedElement + \"'.\");\n\t\t\t\t\treturn ruleSet;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic object VisitSpan(XshdSpan span)\n\t\t\t{\n\t\t\t\tstring endRegex = span.EndRegex;\n\t\t\t\tif (string.IsNullOrEmpty(span.BeginRegex) && string.IsNullOrEmpty(span.EndRegex))\n\t\t\t\t\tthrow Error(span, \"Span has no start/end regex.\");\n\t\t\t\tif (!span.Multiline)\n\t\t\t\t{\n\t\t\t\t\tif (endRegex == null)\n\t\t\t\t\t\tendRegex = \"$\";\n\t\t\t\t\telse if (span.EndRegexType == XshdRegexType.IgnorePatternWhitespace)\n\t\t\t\t\t\tendRegex = \"($|\" + endRegex + \"\\n)\";\n\t\t\t\t\telse\n\t\t\t\t\t\tendRegex = \"($|\" + endRegex + \")\";\n\t\t\t\t}\n\t\t\t\tHighlightingColor wholeSpanColor = GetColor(span, span.SpanColorReference);\n\t\t\t\treturn new HighlightingSpan\n\t\t\t\t{\n\t\t\t\t\tStartExpression = CreateRegex(span, span.BeginRegex, span.BeginRegexType),\n\t\t\t\t\tEndExpression = CreateRegex(span, endRegex, span.EndRegexType),\n\t\t\t\t\tRuleSet = GetRuleSet(span, span.RuleSetReference),\n\t\t\t\t\tStartColor = GetColor(span, span.BeginColorReference),\n\t\t\t\t\tSpanColor = wholeSpanColor,\n\t\t\t\t\tEndColor = GetColor(span, span.EndColorReference),\n\t\t\t\t\tSpanColorIncludesStart = true,\n\t\t\t\t\tSpanColorIncludesEnd = true\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tpublic object VisitImport(XshdImport import)\n\t\t\t{\n\t\t\t\tHighlightingRuleSet hrs = GetRuleSet(import, import.RuleSetReference);\n\t\t\t\tXshdRuleSet inputRuleSet;\n\t\t\t\tif (reverseRuleSetDict.TryGetValue(hrs, out inputRuleSet))\n\t\t\t\t{\n\t\t\t\t\t// ensure the ruleset is processed before importing its members\n\t\t\t\t\tif (VisitRuleSet(inputRuleSet) != hrs)\n\t\t\t\t\t\tDebug.Fail(\"this shouldn't happen\");\n\t\t\t\t}\n\t\t\t\treturn hrs;\n\t\t\t}\n\n\t\t\tpublic object VisitRule(XshdRule rule)\n\t\t\t{\n\t\t\t\treturn new HighlightingRule\n\t\t\t\t{\n\t\t\t\t\tColor = GetColor(rule, rule.ColorReference),\n\t\t\t\t\tRegex = CreateRegex(rule, rule.Regex, rule.RegexType)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\tstatic Exception Error(XshdElement element, string message)\n\t\t{\n\t\t\tif (element.LineNumber > 0)\n\t\t\t\treturn new HighlightingDefinitionInvalidException(\n\t\t\t\t\t\"Error at line \" + element.LineNumber + \":\\n\" + message);\n\t\t\telse\n\t\t\t\treturn new HighlightingDefinitionInvalidException(message);\n\t\t}\n\n\t\tDictionary<string, HighlightingRuleSet> ruleSetDict = new Dictionary<string, HighlightingRuleSet>();\n\t\tDictionary<string, HighlightingColor> colorDict = new Dictionary<string, HighlightingColor>();\n\t\t[OptionalField]\n\t\tDictionary<string, string> propDict = new Dictionary<string, string>();\n\n\t\tprivate bool _isThemeInitialized;\n\n\t\t/// <summary>\n\t\t/// Defines highlighting theme information (if any is applicable) for this highlighting.\n\t\t/// </summary>\n\t\tprivate readonly SyntaxDefinition _themedHighlights;\n\n\t\tpublic HighlightingRuleSet MainRuleSet { get; private set; }\n\n\t\tpublic HighlightingRuleSet GetNamedRuleSet(string name)\n\t\t{\n\t\t\tApplyTheme();\n\n\t\t\tif (string.IsNullOrEmpty(name))\n\t\t\t\treturn MainRuleSet;\n\n\t\t\tHighlightingRuleSet r;\n\t\t\tif (ruleSetDict.TryGetValue(name, out r))\n\t\t\t\treturn r;\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tpublic HighlightingColor GetNamedColor(string name)\n\t\t{\n\t\t\tApplyTheme();\n\n\t\t\tHighlightingColor c;\n\t\t\tif (colorDict.TryGetValue(name, out c))\n\t\t\t\treturn c;\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tpublic IEnumerable<HighlightingColor> NamedHighlightingColors\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tApplyTheme();\n\n\t\t\t\treturn colorDict.Values;\n\t\t\t}\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn this.Name;\n\t\t}\n\n\t\tpublic IDictionary<string, string> Properties\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn propDict;\n\t\t\t}\n\t\t}\n\n\t\tprivate void InitializeDefinitions(XshdSyntaxDefinition xshd, IHighlightingDefinitionReferenceResolver resolver)\n\t\t{\n\t\t\tthis.Name = xshd.Name;\n\n\t\t\t// Create HighlightingRuleSet instances\n\t\t\tvar rnev = new RegisterNamedElementsVisitor(this);\n\t\t\txshd.AcceptElements(rnev);\n\n\t\t\t// Assign MainRuleSet so that references can be resolved\n\t\t\tforeach (XshdElement element in xshd.Elements)\n\t\t\t{\n\t\t\t\tXshdRuleSet xrs = element as XshdRuleSet;\n\t\t\t\tif (xrs != null && xrs.Name == null)\n\t\t\t\t{\n\t\t\t\t\tif (MainRuleSet != null)\n\t\t\t\t\t\tthrow Error(element, \"Duplicate main RuleSet. There must be only one nameless RuleSet!\");\n\t\t\t\t\telse\n\t\t\t\t\t\tMainRuleSet = rnev.ruleSets[xrs];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (MainRuleSet == null)\n\t\t\t\tthrow new HighlightingDefinitionInvalidException(\"Could not find main RuleSet.\");\n\n\t\t\t// Translate elements within the rulesets (resolving references and processing imports)\n\t\t\txshd.AcceptElements(new TranslateElementVisitor(this, rnev.ruleSets, resolver));\n\n\t\t\tforeach (var p in xshd.Elements.OfType<XshdProperty>())\n\t\t\t\tpropDict.Add(p.Name, p.Value);\n\t\t}\n\n\t\tprivate void ApplyTheme()\n\t\t{\n\t\t\tif (_themedHighlights == null || _isThemeInitialized)\n\t\t\t\treturn;\n\n\t\t\t_isThemeInitialized = true;\n\n\t\t\t// Replace matching colors in highlightingdefinition with colors from theme sytaxdefinition.\n\t\t\tvar items = colorDict.ToArray();\n\t\t\tfor (int i = 0; i < items.Length; i++)\n\t\t\t{\n\t\t\t\tHighlightingColor newColor = _themedHighlights.ColorGet(items[i].Key);\n\n\t\t\t\tif (newColor != null)\n\t\t\t\t{\n\t\t\t\t\tstring key = items[i].Key;\n\t\t\t\t\tcolorDict.Remove(key);\n\t\t\t\t\tcolorDict.Add(key, newColor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Manager/XshtdLoader.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Manager\n{\n\tusing HL.Resources;\n\tusing HL.Xshtd;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Diagnostics;\n\tusing System.Windows;\n\tusing System.Windows.Media;\n\tusing System.Xml;\n\tusing System.Xml.Schema;\n\n\t/// <summary>\n\t/// Loads .xshd files, version 2.0.\n\t/// Version 2.0 files are recognized by the namespace.\n\t/// </summary>\n\tstatic class XshtdLoader\n\t{\n\t\tpublic const string Namespace = \"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\";\n\n\t\tstatic XmlSchemaSet schemaSet;\n\n\t\tstatic XmlSchemaSet SchemaSet\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (schemaSet == null)\n\t\t\t\t{\n\t\t\t\t\tschemaSet = HighlightingLoader.LoadSchemaSet(new XmlTextReader(\n\t\t\t\t\t\tHLResources.OpenStream(\"HL.Modes\", \"ModeV2_htd.xsd\")));\n\t\t\t\t}\n\t\t\t\treturn schemaSet;\n\t\t\t}\n\t\t}\n\n\t\tpublic static XhstdThemeDefinition LoadDefinition(XmlReader reader, bool skipValidation)\n\t\t{\n\t\t\treader = HighlightingLoader.GetValidatingReader(reader, true, skipValidation ? null : SchemaSet);\n\t\t\treader.Read();\n\t\t\treturn ParseDefinition(reader);\n\t\t}\n\n\t\tstatic XhstdThemeDefinition ParseDefinition(XmlReader reader)\n\t\t{\n\t\t\tDebug.Assert(reader.LocalName == \"ThemeSyntaxDefinition\");\n\t\t\tXhstdThemeDefinition def = new XhstdThemeDefinition();\n\n\t\t\tdef.Name = reader.GetAttribute(\"name\");\n\n\t\t\tStack<XshtdElement> xmlPath = new Stack<XshtdElement>();\n\t\t\txmlPath.Push(def);\n\n\t\t\tParseElements(def.Elements, reader, xmlPath);\n\n\t\t\tvar def1 = xmlPath.Pop();\n\n\t\t\tDebug.Assert(object.Equals(def, def1));\n\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.EndElement);\n\t\t\tDebug.Assert(reader.LocalName == \"ThemeSyntaxDefinition\");\n\n\t\t\treturn def;\n\t\t}\n\n\t\tstatic void ParseElements(ICollection<XshtdElement> c,\n\t\t\t\t\t\t\t\t  XmlReader reader,\n\t\t\t\t\t\t\t\t  Stack<XshtdElement> xmlPath)\n\t\t{\n\t\t\tif (reader.IsEmptyElement)\n\t\t\t\treturn;\n\n\t\t\twhile (reader.Read() && reader.NodeType != XmlNodeType.EndElement)\n\t\t\t{\n\t\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.Element);\n\t\t\t\tif (reader.NamespaceURI != Namespace)\n\t\t\t\t{\n\t\t\t\t\tif (!reader.IsEmptyElement)\n\t\t\t\t\t\treader.Skip();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tswitch (reader.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"SyntaxDefinition\":\n\t\t\t\t\t\tc.Add(ParseSyntaxDefinition(reader, xmlPath));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"Color\":\n\t\t\t\t\t\tvar parent = xmlPath.Peek() as XshtdSyntaxDefinition;\n\t\t\t\t\t\tif (parent == null)\n\t\t\t\t\t\t\tthrow new Exception(\"Syntax Error: Color cannot occurr outside of SyntaxDefinition\");\n\n\t\t\t\t\t\tc.Add(ParseNamedColor(reader, parent));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"GlobalStyles\":\n\t\t\t\t\t\tParseGlobalStyles(reader, xmlPath);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"DefaultStyle\":\n\t\t\t\t\tcase \"CurrentLineBackground\":\n\t\t\t\t\tcase \"LineNumbersForeground\":\n\t\t\t\t\tcase \"Selection\":\n\t\t\t\t\tcase \"NonPrintableCharacter\":\n\t\t\t\t\tcase \"Hyperlink\":\n\t\t\t\t\t\tParseGlobalStyle(reader, xmlPath);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new NotSupportedException(\"Unknown element \" + reader.Name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic XshtdSyntaxDefinition ParseSyntaxDefinition(XmlReader reader,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t   Stack<XshtdElement> xmlPath)\n\t\t{\n\t\t\tDebug.Assert(reader.LocalName == \"SyntaxDefinition\");\n\t\t\tXshtdSyntaxDefinition def = new XshtdSyntaxDefinition();\n\n\t\t\tdef.Name = reader.GetAttribute(\"name\");\n\t\t\tstring extensions = reader.GetAttribute(\"extensions\");\n\n\t\t\tif (extensions != null)\n\t\t\t\tdef.Extensions.AddRange(extensions.Split(';'));\n\n\t\t\txmlPath.Push(def);\n\t\t\tParseElements(def.Elements, reader, xmlPath);\n\n\t\t\tdef = xmlPath.Pop() as XshtdSyntaxDefinition;\n\n\t\t\tDebug.Assert(def != null);\n\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.EndElement);\n\t\t\tDebug.Assert(reader.LocalName == \"SyntaxDefinition\");\n\n\t\t\treturn def;\n\t\t}\n\n\t\tprivate static XshtdElement ParseGlobalStyles(XmlReader reader, Stack<XshtdElement> xmlPath)\n\t\t{\n\t\t\tDebug.Assert(reader.LocalName == \"GlobalStyles\");\n\n\t\t\tvar def = xmlPath.Peek() as XhstdThemeDefinition;\n\t\t\tDebug.Assert(def != null);\n\n\t\t\txmlPath.Push(def.GlobalStyleElements);\n\t\t\tParseElements(null, reader, xmlPath);\n\t\t\tvar def2 = xmlPath.Pop();\n\n\t\t\tDebug.Assert(object.Equals(def.GlobalStyleElements, def2));\n\t\t\tDebug.Assert(reader.NodeType == XmlNodeType.EndElement);\n\t\t\tDebug.Assert(reader.LocalName == \"GlobalStyles\");\n\n\t\t\treturn null;\n\t\t}\n\n\t\tprivate static XshtdElement ParseGlobalStyle(XmlReader reader, Stack<XshtdElement> xmlPath)\n\t\t{\n\t\t\tvar def = xmlPath.Peek() as XshtdGlobalStyles;\n\t\t\tDebug.Assert(def != null);\n\n\t\t\tvar style = new XshtdGlobalStyle(def);\n\n\t\t\tstyle.TypeName = reader.Name;\n\n\t\t\tstring color;\n\t\t\tcolor = reader.GetAttribute(\"background\");\n\t\t\tif (string.IsNullOrEmpty(color) == false)\n\t\t\t\tstyle.background = (Color?)ColorConverter.ConvertFromInvariantString(color);\n\n\t\t\tcolor = reader.GetAttribute(\"foreground\");\n\t\t\tif (string.IsNullOrEmpty(color) == false)\n\t\t\t\tstyle.foreground = (Color?)ColorConverter.ConvertFromInvariantString(color);\n\n\t\t\tcolor = reader.GetAttribute(\"bordercolor\");\n\t\t\tif (string.IsNullOrEmpty(color) == false)\n\t\t\t\tstyle.bordercolor = (Color?)ColorConverter.ConvertFromInvariantString(color);\n\n\t\t\tdef.Elements.Add(style);\n\n\t\t\treturn def;\n\t\t}\n\n\t\tstatic Exception Error(XmlReader reader, string message)\n\t\t{\n\t\t\treturn Error(reader as IXmlLineInfo, message);\n\t\t}\n\n\t\tstatic Exception Error(IXmlLineInfo lineInfo, string message)\n\t\t{\n\t\t\tif (lineInfo != null)\n\t\t\t\treturn new HighlightingDefinitionInvalidException(HighlightingLoader.FormatExceptionMessage(message, lineInfo.LineNumber, lineInfo.LinePosition));\n\t\t\telse\n\t\t\t\treturn new HighlightingDefinitionInvalidException(message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the element's position to the XmlReader's position.\n\t\t/// </summary>\n\t\tstatic void SetPosition(XshtdElement element, XmlReader reader)\n\t\t{\n\t\t\tIXmlLineInfo lineInfo = reader as IXmlLineInfo;\n\t\t\tif (lineInfo != null)\n\t\t\t{\n\t\t\t\telement.LineNumber = lineInfo.LineNumber;\n\t\t\t\telement.ColumnNumber = lineInfo.LinePosition;\n\t\t\t}\n\t\t}\n\n\t\tstatic void CheckElementName(XmlReader reader, string name)\n\t\t{\n\t\t\tif (name != null)\n\t\t\t{\n\t\t\t\tif (name.Length == 0)\n\t\t\t\t\tthrow Error(reader, \"The empty string is not a valid name.\");\n\t\t\t\tif (name.IndexOf('/') >= 0)\n\t\t\t\t\tthrow Error(reader, \"Element names must not contain a slash.\");\n\t\t\t}\n\t\t}\n\n\t\t#region ParseColor\n\t\tstatic XshtdColor ParseNamedColor(XmlReader reader, XshtdSyntaxDefinition syntax)\n\t\t{\n\t\t\tXshtdColor color = ParseColorAttributes(reader, syntax);\n\t\t\t// check removed: invisible named colors may be useful now that apps can read highlighting data\n\t\t\t//if (color.Foreground == null && color.FontWeight == null && color.FontStyle == null)\n\t\t\t//\tthrow Error(reader, \"A named color must have at least one element.\");\n\t\t\tcolor.Name = reader.GetAttribute(\"name\");\n\t\t\tCheckElementName(reader, color.Name);\n\t\t\tcolor.ExampleText = reader.GetAttribute(\"exampleText\");\n\t\t\treturn color;\n\t\t}\n\n\t\tstatic XshtdColor ParseColorAttributes(XmlReader reader, XshtdSyntaxDefinition syntax)\n\t\t{\n\t\t\tXshtdColor color = new XshtdColor(syntax);\n\t\t\tSetPosition(color, reader);\n\n\t\t\tIXmlLineInfo position = reader as IXmlLineInfo;\n\n\t\t\tcolor.Foreground = ParseColor(position, reader.GetAttribute(\"foreground\"));\n\t\t\tcolor.Background = ParseColor(position, reader.GetAttribute(\"background\"));\n\t\t\tcolor.FontWeight = ParseFontWeight(reader.GetAttribute(\"fontWeight\"));\n\t\t\tcolor.FontStyle = ParseFontStyle(reader.GetAttribute(\"fontStyle\"));\n\t\t\tcolor.Underline = reader.GetBoolAttribute(\"underline\");\n\n\t\t\treturn color;\n\t\t}\n\n\t\tinternal readonly static ColorConverter ColorConverter = new ColorConverter();\n\t\tinternal readonly static FontWeightConverter FontWeightConverter = new FontWeightConverter();\n\t\tinternal readonly static FontStyleConverter FontStyleConverter = new FontStyleConverter();\n\n\t\tstatic HighlightingBrush ParseColor(IXmlLineInfo lineInfo, string color)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(color))\n\t\t\t\treturn null;\n\t\t\tif (color.StartsWith(\"SystemColors.\", StringComparison.Ordinal))\n\t\t\t\treturn GetSystemColorBrush(lineInfo, color);\n\t\t\telse\n\t\t\t\treturn FixedColorHighlightingBrush((Color?)ColorConverter.ConvertFromInvariantString(color));\n\t\t}\n\n\t\tinternal static SystemColorHighlightingBrush GetSystemColorBrush(IXmlLineInfo lineInfo, string name)\n\t\t{\n\t\t\tDebug.Assert(name.StartsWith(\"SystemColors.\", StringComparison.Ordinal));\n\t\t\tstring shortName = name.Substring(13);\n\t\t\tvar property = typeof(SystemColors).GetProperty(shortName + \"Brush\");\n\t\t\tif (property == null)\n\t\t\t\tthrow Error(lineInfo, \"Cannot find '\" + name + \"'.\");\n\t\t\treturn new SystemColorHighlightingBrush(property);\n\t\t}\n\n\t\tstatic HighlightingBrush FixedColorHighlightingBrush(Color? color)\n\t\t{\n\t\t\tif (color == null)\n\t\t\t\treturn null;\n\t\t\treturn new SimpleHighlightingBrush(color.Value);\n\t\t}\n\n\t\tstatic FontWeight? ParseFontWeight(string fontWeight)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(fontWeight))\n\t\t\t\treturn null;\n\t\t\treturn (FontWeight?)FontWeightConverter.ConvertFromInvariantString(fontWeight);\n\t\t}\n\n\t\tstatic FontStyle? ParseFontStyle(string fontStyle)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(fontStyle))\n\t\t\t\treturn null;\n\t\t\treturn (FontStyle?)FontStyleConverter.ConvertFromInvariantString(fontStyle);\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "src/HL/Modes/ModeV1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >\n\t<xsd:annotation>\n\t\t<xsd:documentation>\n\t\tThis schema defines the syntax for mode definitions in SharpDevelop.\n\t\tThe schema can be simplified quite a bit but it does the job as is.\n\n\n\t\tIf you are using this file as a reference it is probably easiest to scroll to\n\t\tthe botton to find the definition of the root element called SyntaxDefinition and\n\t\tthen unwind the different type definitions and refernces.\n\n\t\tNote on coloring:\n\t\tMany tags define how some symbol should be colored. If a specific symbol\n\t\tcan not be matched onto either a Span definition, Keyword, or a Digit/Number it\n\t\twill be rendered in the current default color. Which is the default color of the\n\t\tcurrent span or the default color of the mode as a whole if no span has been entered.\n\t\t</xsd:documentation>\n\t</xsd:annotation>\n\n\t<!-- Defines the default rendering of the mode -->\n\t<xsd:complexType name=\"EnvironmentEntry\">\n\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"CustomEnvironmentEntry\">\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<!-- The environment tag defines the coloring of various attributes in SharpDevelop -->\n\t<xsd:complexType name=\"Environment\">\n\n\t\t<xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t<xsd:element name=\"Default\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\" />\n\t\t\t<xsd:element name=\"Selection\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"VRuler\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"InvalidLines\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"CaretMarker\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"CaretLine\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t<xsd:element name=\"LineNumbers\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t<xsd:element name=\"FoldLine\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"FoldMarker\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"SelectedFoldLine\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t<xsd:element name=\"EOLMarkers\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"SpaceMarkers\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t<xsd:element name=\"TabMarkers\" type=\"EnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t<xsd:element name=\"Custom\" type=\"CustomEnvironmentEntry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t</xsd:choice>\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"Properties\">\n\t\t<xsd:sequence>\n\t\t\t<xsd:element name=\"Property\" type=\"Property\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t</xsd:sequence>\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"Property\">\n\t\t<!-- The actual KeyWord, typically reserved words or symbols in a programming language -->\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"value\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<!-- The Digits tag defines the color for rendering Digits-->\n\t<xsd:complexType name=\"Digits\">\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<!-- Defines the delimiting characters of the syntax, e.g., the characters that, \"break up\" a line\n    into separate symbols, typically key words. It is not necessary, or desirable to include the\n    characters that denot the start or end of a span. Space and Tab are implicitly defined as delimeters\n    and they don't need to be includeded explicitly (this will probably be changed at some future time).-->\n\t<xsd:complexType name=\"Delimiters\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<!-- The beginning symbol of a Span -->\n\t<xsd:complexType name=\"Begin\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t\t<xsd:attribute name=\"singleword\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"startofline\" type=\"xsd:boolean\" />\n\t\t\t\t<!-- The default rendering style for the Begin symbol. If not specified\n\t\t\t\t\t the defaul rendering style for the span will be used. -->\n\t\t\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<!-- The end symbol of a Span -->\n\t<xsd:complexType name=\"End\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t\t<xsd:attribute name=\"singleword\" type=\"xsd:boolean\" />\n\t\t\t\t<!-- The default rendering style for the End symbol. If not specified\n\t\t\t\t\t the defaul rendering style for the span will be used. -->\n\t\t\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"Span\">\n\t\t<xsd:sequence>\n\t\t\t<!-- Defines the symbol that indicates the beginning of the span. -->\n\t\t\t<xsd:element name=\"Begin\" type=\"Begin\" />\n\t\t\t<!-- Defines the symbol that indicates the end of the span. May be omitted for\n\t\t\t\t one-line spans. -->\n\t\t\t<xsd:element name=\"End\" minOccurs=\"0\" type=\"End\" />\n\t\t</xsd:sequence>\n\t\t<!-- The name of the span definition -->\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t<!-- Defines the rule set that is applicable in the Span. May be omitted. -->\n\t\t<xsd:attribute name=\"rule\" type=\"xsd:string\" />\n\t\t<!-- Defines wether the Span should terminate automatically at the end of line. Typical examples\n       \t\t include one-line comments such as // in C++ or REM in Windows .Bat files. -->\n\t\t<xsd:attribute name=\"stopateol\" type=\"xsd:boolean\" />\n\n\t\t<!-- OBSOLUTE: Defines whether C-style escape sequences using \\ are applicable or not in the span. -->\n\t\t<xsd:attribute name=\"noescapesequences\" type=\"xsd:boolean\" />\n\n\t\t<!-- defines the escape character -->\n\t\t<xsd:attribute name=\"escapecharacter\" type=\"xsd:string\" />\n\n\t\t<!-- The default rendering style for the span -->\n\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"MarkPrevious\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t\t<!-- Svante Lidman, looking in the code it is a bit unclear what the intent is here... -->\n\t\t\t\t<xsd:attribute name=\"markmarker\" type=\"xsd:boolean\" />\n\t\t\t\t<!-- The rendering style to be used -->\n\t\t\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<!-- Allows you to define the coloring of the symbol that follows a specified symbol -->\n\t<xsd:complexType name=\"MarkFollowing\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t\t<!-- Svante Lidman, looking in the code it is a bit unclear what the intent is here... -->\n\t\t\t\t<xsd:attribute name=\"markmarker\" type=\"xsd:boolean\" />\n\t\t\t\t<!-- The rendering style to be used -->\n\t\t\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"Key\">\n\t\t<!-- The actual KeyWord, typically reserved words or symbols in a programming language -->\n\t\t<xsd:attribute name=\"word\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\n\t<!-- A grouping of keywords that sholuld be colored the same way -->\n\t<xsd:complexType name=\"KeyWords\">\n\t\t<xsd:sequence>\n\t\t\t<!-- allow groups with 0 keywords: this simplifies the syntax highlighting editor -->\n\t\t\t<!-- A KeyWord -->\n\t\t\t<xsd:element name=\"Key\" type=\"Key\" minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t</xsd:sequence>\n\t\t<!-- The name of the KeyWord group -->\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t<!-- The rendering style of the  KeyWord group -->\n\t\t<xsd:attribute name=\"bold\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"italic\" type=\"xsd:boolean\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" />\n\t\t<xsd:attribute name=\"bgcolor\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<xsd:complexType name=\"RuleSet\">\n\t\t<xsd:sequence>\n\t\t\t<!-- Defines the delimiting characters of the syntax, e.g., the characters that, \"break up\" a line\n        \t\t into separate symbols, typically key words. It is not necessary, or desirable to include the\n        \t\t characters that denot the start or end of a span. Space and Tab are implicitly defined as delimeters\n        \t\t and they don't need to be includeded explicitly (this will probably be changed at some future time).-->\n\t\t\t<xsd:element name=\"Delimiters\" type=\"Delimiters\" minOccurs=\"0\" maxOccurs=\"1\">\n\t\t\t</xsd:element>\n\t\t\t<!-- A Span tag defines a scope, or what can be seen as a separate parsing context where a different set of\n            \t highlighting rules are applicable compared to the text where the span is found.\n            \t Examples of spans include:\n            \t - A string in a language as C\n            \t - A <script> tag in Html\n            \t - The internals of a tag in XML (between < and >).\n            \t A span can have a rule set associated with it that defines the highlighting rules that are applicable\n            \t in the span. -->\n\t\t\t<xsd:element name=\"Span\" type=\"Span\" minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t\t<!-- The MarkPrevious tag allows you to define the coloring of the item that preceeds a specific\n            \t symbol. An example of where this comes in handy is when coloring the contents of an XML-tag,\n            \t in particular the attributes and attribute names. The following definition:\n            \t <MarkPrevious bold=\"false\" italic=\"false\" color=\"Red\">=</MarkPrevious>\n\t\t\t\t will make teh highlighter color words that are followed by an = to be colored in Red.\n\t\t\t\t You can see this in this file if you view it with the default XML-mode in SharpDevelop. -->\n\t\t\t<xsd:element name=\"MarkPrevious\" type=\"MarkPrevious\" minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t\t<!-- The MarkFollowing tag works similarly as the MarkPrevious tag but relates to the coloring\n            of the symbol that follows the specified symbol. -->\n\t\t\t<xsd:element name=\"MarkFollowing\" type=\"MarkFollowing\" minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t\t<!-- Defines a group of keywords that should be colored the same way -->\n\t\t\t<xsd:element name=\"KeyWords\" type=\"KeyWords\" minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t</xsd:sequence>\n\t\t<!-- The name of the RuleSet. Used when you refer to the RuleSet in the rule attribute of a Span tag.\n        \t Each mode file should have a rule definition without a defined name. This denotes the default rule\n        \t set for the mode. -->\n\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t<!-- Allows you to use another mode, defined in another file as a RuleSet. For an example see the\n        \t use of the JavaScript mode from the HTML-mode. -->\n\t\t<xsd:attribute name=\"reference\" type=\"xsd:string\" />\n\t\t<!-- Defines whether case is significant for matching keywords in the mode. -->\n\t\t<xsd:attribute name=\"ignorecase\" type=\"xsd:boolean\" />\n\t\t<!-- OBSOLETE: noescapesequences -->\n\t\t<xsd:attribute name=\"noescapesequences\" type=\"xsd:boolean\" />\n\t\t<!-- defines the escape character -->\n\t\t<xsd:attribute name=\"escapecharacter\" type=\"xsd:string\" />\n\t</xsd:complexType>\n\n\t<!-- The RuleSets tag is just a grouping of the set of RuleSets for a mode. -->\n\t<xsd:complexType name=\"RuleSets\">\n\t\t<xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t<!-- Any number of RuleSet tag can be defined in a mode -->\n\t\t\t<xsd:element name=\"RuleSet\" type=\"RuleSet\" minOccurs=\"1\" maxOccurs=\"unbounded\">\n\t\t\t</xsd:element>\n\t\t</xsd:sequence>\n\t</xsd:complexType>\n\n\t<!-- SyntaxDefinition is the root-element in a mode definition file -->\n\t<xsd:element name=\"SyntaxDefinition\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:sequence>\n\t\t\t\t<!-- The Environment tag defines colors, for various standard elements in the SharpDevelop GUI, if\n\t\t\t\t     not given the default values are used. -->\n\t\t\t\t<xsd:element name=\"Environment\" type=\"Environment\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t\t<!-- The Properties section defines properties which are bound to the highlighting -->\n\t\t\t\t<xsd:element name=\"Properties\" type=\"Properties\" minOccurs=\"0\" maxOccurs=\"1\" />\n\n\t\t\t\t<!-- The Digits tag defines the color for rendering Digits-->\n\t\t\t\t<xsd:element name=\"Digits\" type=\"Digits\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\n\t\t\t\t<!-- The RuleSets tag defines the rule sets that are used in the mode. Note that all modes are defined in\n\t\t\t\t\t a flat structture even if they are used recursively. For an example of a mode that uses\n\t\t\t\t\t multiple rule sets see the XML-mode. There is a top level rule-set and and another rule-set\n\t\t\t\t\t that handles highligting within a tag, i.e., between < and >. -->\n\t\t\t\t<xsd:element name=\"RuleSets\" type=\"RuleSets\" />\n\t\t\t</xsd:sequence>\n\t\t\t<!-- The name of the mode. This is used when you, in the defintion of a RuleSet refers to another\n\t\t\t\t mode. I.e., one that is defined in an external file. For an example of this see the HTML-Mode that\n\t\t\t\t uses the JavaScript-mode this way. -->\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t<!-- The file extensions that the mode is applicable for. Extensions must be written with lower case and\n\t\t\t\t should include the ., as in .txt. If several extensions are applicable they should be separeated with | -->\n\t\t\t<xsd:attribute name=\"extensions\" type=\"xsd:string\" />\n\t\t\t<!-- Name of a syntax mode where rulesets, spans, keywords and other settings are imported from -->\n\t\t\t<xsd:attribute name=\"extends\" type=\"xsd:string\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n</xsd:schema>\n"
  },
  {
    "path": "src/HL/Modes/ModeV2.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xsd:schema version=\"2\" elementFormDefault=\"qualified\" targetNamespace=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n\t<!-- Font Weight -->\n\t<xsd:simpleType name=\"FontWeight\">\n\t\t<xsd:union>\n\t\t\t<xsd:simpleType>\n\t\t\t\t<xsd:restriction base=\"xsd:integer\">\n\t\t\t\t\t<xsd:minInclusive value=\"1\"/>\n\t\t\t\t\t<xsd:maxInclusive value=\"999\"/>\n\t\t\t\t</xsd:restriction>\n\t\t\t</xsd:simpleType>\n\t\t\t<xsd:simpleType>\n\t\t\t\t<xsd:restriction base=\"xsd:string\">\n\t\t\t\t\t<xsd:enumeration value=\"bold\"/>\n\t\t\t\t\t<xsd:enumeration value=\"normal\"/>\n\t\t\t\t\t<xsd:enumeration value=\"regular\"/>\n\t\t\t\t\t<!-- should we support other font weight names? -->\n\t\t\t\t</xsd:restriction>\n\t\t\t</xsd:simpleType>\n\t\t</xsd:union>\n\t</xsd:simpleType>\n\n\t<!-- Font Style -->\n\t<xsd:simpleType name=\"FontStyle\">\n\t\t<xsd:restriction base=\"xsd:string\">\n\t\t\t<xsd:enumeration value=\"italic\"/>\n\t\t\t<xsd:enumeration value=\"normal\"/>\n\t\t\t<xsd:enumeration value=\"oblique\"/>\n\t\t</xsd:restriction>\n\t</xsd:simpleType>\n\n\t<!-- Color -->\n\t<xsd:attributeGroup name=\"ColorAttributes\">\n\t\t<xsd:attribute name=\"foreground\" type=\"xsd:string\" use=\"optional\" />\n\t\t<xsd:attribute name=\"background\" type=\"xsd:string\" use=\"optional\" />\n\t\t<xsd:attribute name=\"fontWeight\" type=\"FontWeight\" use=\"optional\" />\n\t\t<xsd:attribute name=\"fontStyle\" type=\"FontStyle\" use=\"optional\" />\n\t\t<xsd:attribute name=\"underline\" type=\"xsd:boolean\" use=\"optional\" />\n\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t</xsd:attributeGroup>\n\n\t<xsd:attributeGroup name=\"ColorReferenceAttributes\">\n\t\t<xsd:attributeGroup ref=\"ColorAttributes\" />\n\t\t<xsd:attribute name=\"color\" type=\"xsd:string\" use=\"optional\" />\n\t</xsd:attributeGroup>\n\n\t<xsd:element name=\"Color\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t<xsd:attribute name=\"exampleText\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:attributeGroup ref=\"ColorAttributes\"/>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<xsd:element name=\"Property\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t<xsd:attribute name=\"value\" type=\"xsd:string\" use=\"required\" />\n\t\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Regular expression -->\n\t<xsd:simpleType name=\"regex\">\n\t\t<xsd:restriction base=\"xsd:string\"/>\n\t</xsd:simpleType>\n\n\t<xsd:simpleType name=\"regexIgnorePatternWhitespace\">\n\t\t<xsd:restriction base=\"xsd:string\"/>\n\t</xsd:simpleType>\n\n\t<!-- Keywords -->\n\t<xsd:element name=\"Keywords\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:sequence>\n\t\t\t\t<xsd:element ref=\"Word\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t</xsd:sequence>\n\t\t\t<xsd:attributeGroup ref=\"ColorReferenceAttributes\"/>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<xsd:element name=\"Word\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:simpleContent>\n\t\t\t\t<xsd:extension base=\"xsd:string\">\n\t\t\t\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t\t\t\t</xsd:extension>\n\t\t\t</xsd:simpleContent>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Spans -->\n\t<xsd:element name=\"Span\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:sequence>\n\t\t\t\t<xsd:element ref=\"Begin\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t<xsd:element ref=\"End\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t<xsd:element ref=\"RuleSet\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t</xsd:sequence>\n\n\t\t\t<xsd:attributeGroup ref=\"ColorReferenceAttributes\"/>\n\t\t\t<xsd:attribute name=\"multiline\" type=\"xsd:boolean\" use=\"optional\"/>\n\t\t\t<xsd:attribute name=\"ruleSet\" type=\"xsd:string\" use=\"optional\"/>\n\t\t\t<xsd:attribute name=\"begin\" type=\"regex\" use=\"optional\"/>\n\t\t\t<xsd:attribute name=\"end\" type=\"regex\" use=\"optional\"/>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<xsd:complexType name=\"SpanBeginEnd\">\n\t\t<xsd:simpleContent>\n\t\t\t<xsd:extension base=\"regexIgnorePatternWhitespace\">\n\t\t\t\t<xsd:attributeGroup ref=\"ColorReferenceAttributes\"/>\n\t\t\t</xsd:extension>\n\t\t</xsd:simpleContent>\n\t</xsd:complexType>\n\n\t<xsd:element name=\"Begin\" type=\"SpanBeginEnd\"/>\n\t<xsd:element name=\"End\" type=\"SpanBeginEnd\"/>\n\n\t<!-- Imports -->\n\t<xsd:element name=\"Import\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:attribute name=\"ruleSet\" type=\"xsd:string\" use=\"required\"/>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Rules -->\n\t<xsd:element name=\"Rule\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:simpleContent>\n\t\t\t\t<xsd:extension base=\"regexIgnorePatternWhitespace\">\n\t\t\t\t\t<xsd:attributeGroup ref=\"ColorReferenceAttributes\"/>\n\t\t\t\t</xsd:extension>\n\t\t\t</xsd:simpleContent>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Rule set -->\n\t<xsd:element name=\"RuleSet\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t<xsd:element ref=\"Keywords\"/>\n\t\t\t\t<xsd:element ref=\"Span\"/>\n\t\t\t\t<xsd:element ref=\"Import\"/>\n\t\t\t\t<xsd:element ref=\"Rule\"/>\n\t\t\t\t<xsd:any namespace=\"##other\" processContents=\"lax\" />\n\t\t\t</xsd:choice>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:attribute name=\"ignoreCase\" type=\"xsd:boolean\" use=\"optional\" />\n\t\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Main syntax definition -->\n\t<xsd:element name=\"SyntaxDefinition\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n\t\t\t\t<xsd:element ref=\"Property\"/>\n\t\t\t\t<xsd:element ref=\"Color\"/>\n\t\t\t\t<xsd:element ref=\"RuleSet\"/>\n\t\t\t\t<xsd:any namespace=\"##other\" processContents=\"lax\" />\n\t\t\t</xsd:choice>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:attribute name=\"extensions\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n</xsd:schema>"
  },
  {
    "path": "src/HL/Modes/ModeV2_htd.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xsd:schema version=\"2\" elementFormDefault=\"qualified\"\n            targetNamespace=\"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\"\n            xmlns=\"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\"\n            xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n\n    <xsd:simpleType name=\"ColorDefinition\">\n        <xsd:union>\n          <xsd:simpleType>\n            <xsd:restriction base=\"xsd:string\">\n              <xsd:pattern value=\"\\#[0-9a-fA-F]+\"/>\n            </xsd:restriction>\n          </xsd:simpleType>\n          <xsd:simpleType>\n            <xsd:restriction base=\"xsd:string\">\n              <xsd:enumeration value=\"Black\"/> <!-- #000000 -->\n              <xsd:enumeration value=\"Navy\"/>  <!-- #000080 -->\n              <xsd:enumeration value=\"DarkBlue\"/> <!-- #00008B -->\n              <xsd:enumeration value=\"MediumBlue\"/> <!-- #0000CD -->\n              <xsd:enumeration value=\"Blue\"/> <!-- #0000FF -->\n              <xsd:enumeration value=\"DarkGreen\"/> <!-- #006400 -->\n              <xsd:enumeration value=\"Green\"/> <!-- #008000 -->\n              <xsd:enumeration value=\"Teal\"/> <!-- #008080 -->\n              <xsd:enumeration value=\"DarkCyan\"/> <!-- #008B8B -->\n              <xsd:enumeration value=\"DeepSkyBlue\"/> <!-- #00BFFF -->\n              <xsd:enumeration value=\"DarkTurquoise\"/> <!-- #00CED1 -->\n              <xsd:enumeration value=\"MediumSpringGreen\"/> <!-- #00FA9A -->\n              <xsd:enumeration value=\"Lime\"/> <!-- #00FF00 -->\n              <xsd:enumeration value=\"SpringGreen\"/> <!-- #00FF7F -->\n              <xsd:enumeration value=\"Aqua\"/> <!-- #00FFFF -->\n              <xsd:enumeration value=\"Cyan\"/> <!-- #00FFFF -->\n              <xsd:enumeration value=\"MidnightBlue\"/> <!-- #191970 -->\n              <xsd:enumeration value=\"DodgerBlue\"/> <!-- #1E90FF -->\n              <xsd:enumeration value=\"LightSeaGreen\"/> <!-- #20B2AA -->\n              <xsd:enumeration value=\"ForestGreen\"/> <!-- #228B22 -->\n              <xsd:enumeration value=\"SeaGreen\"/> <!-- #2E8B57 -->\n              <xsd:enumeration value=\"DarkSlateGray\"/> <!-- #2F4F4F -->\n              <xsd:enumeration value=\"LimeGreen\"/> <!-- #32CD32 -->\n              <xsd:enumeration value=\"MediumSeaGreen\"/> <!-- #3CB371 -->\n              <xsd:enumeration value=\"Turquoise\"/> <!-- #40E0D0 -->\n              <xsd:enumeration value=\"RoyalBlue\"/> <!-- #4169E1 -->\n              <xsd:enumeration value=\"SteelBlue\"/> <!-- #4682B4 -->\n              <xsd:enumeration value=\"DarkSlateBlue\"/> <!-- #483D8B -->\n              <xsd:enumeration value=\"MediumTurquoise\"/> <!-- #48D1CC -->\n              <xsd:enumeration value=\"Indigo\"/> <!-- #4B0082 -->\n              <xsd:enumeration value=\"DarkOliveGreen\"/> <!--  #556B2F -->\n              <xsd:enumeration value=\"CadetBlue\"/> <!-- #5F9EA0 -->\n              <xsd:enumeration value=\"CornflowerBlue\"/> <!-- #6495ED -->\n              <xsd:enumeration value=\"MediumAquaMarine\"/> <!-- #66CDAA -->\n              <xsd:enumeration value=\"DimGray\"/> <!-- #696969 -->\n              <xsd:enumeration value=\"SlateBlue\"/> <!-- #6A5ACD -->\n              <xsd:enumeration value=\"OliveDrab\"/> <!-- #6B8E23 -->\n              <xsd:enumeration value=\"SlateGray\"/> <!-- #708090 -->\n              <xsd:enumeration value=\"LightSlateGray\"/> <!-- #778899 -->\n              <xsd:enumeration value=\"MediumSlateBlue\"/> <!-- #7B68EE -->\n              <xsd:enumeration value=\"LawnGreen\"/> <!-- #7CFC00 -->\n              <xsd:enumeration value=\"Chartreuse\"/> <!-- #7FFF00 -->\n              <xsd:enumeration value=\"Aquamarine\"/> <!-- #7FFFD4 -->\n              <xsd:enumeration value=\"Maroon\"/> <!-- #800000 -->\n              <xsd:enumeration value=\"Purple\"/> <!-- #800080 -->\n              <xsd:enumeration value=\"Olive\"/> <!-- #808000 -->\n              <xsd:enumeration value=\"Gray\"/> <!-- #808080 -->\n              <xsd:enumeration value=\"SkyBlue\"/> <!-- #87CEEB -->\n              <xsd:enumeration value=\"LightSkyBlue\"/> <!-- #87CEFA -->\n              <xsd:enumeration value=\"BlueViolet\"/> <!-- #8A2BE2 -->\n              <xsd:enumeration value=\"DarkRed\"/> <!-- #8B0000 -->\n              <xsd:enumeration value=\"DarkMagenta\"/> <!-- #8B008B -->\n              <xsd:enumeration value=\"SaddleBrown\"/> <!-- #8B4513 -->\n              <xsd:enumeration value=\"DarkSeaGreen\"/> <!-- #8FBC8F -->\n              <xsd:enumeration value=\"LightGreen\"/> <!-- #90EE90 -->\n              <xsd:enumeration value=\"MediumPurple\"/> <!-- #9370D8 -->\n              <xsd:enumeration value=\"DarkViolet\"/> <!-- #9400D3 -->\n              <xsd:enumeration value=\"PaleGreen\"/> <!-- #98FB98 -->\n              <xsd:enumeration value=\"DarkOrchid\"/> <!-- #9932CC -->\n              <xsd:enumeration value=\"YellowGreen\"/> <!-- #9ACD32 -->\n              <xsd:enumeration value=\"Sienna\"/> <!-- #A0522D -->\n              <xsd:enumeration value=\"Brown\"/> <!-- #A52A2A -->\n              <xsd:enumeration value=\"DarkGray\"/> <!-- #A9A9A9 -->\n              <xsd:enumeration value=\"LightBlue\"/> <!-- #ADD8E6 -->\n              <xsd:enumeration value=\"GreenYellow\"/> <!-- #ADFF2F -->\n              <xsd:enumeration value=\"PaleTurquoise\"/> <!-- #AFEEEE -->\n              <xsd:enumeration value=\"LightSteelBlue\"/> <!-- #B0C4DE -->\n              <xsd:enumeration value=\"PowderBlue\"/> <!-- #B0E0E6 -->\n              <xsd:enumeration value=\"FireBrick\"/> <!-- #B22222 -->\n              <xsd:enumeration value=\"DarkGoldenRod\"/> <!-- #B8860B -->\n              <xsd:enumeration value=\"MediumOrchid\"/> <!-- #BA55D3 -->\n              <xsd:enumeration value=\"RosyBrown\"/> <!-- #BC8F8F -->\n              <xsd:enumeration value=\"DarkKhaki\"/> <!-- #BDB76B -->\n              <xsd:enumeration value=\"Silver\"/> <!-- #C0C0C0 -->\n              <xsd:enumeration value=\"MediumVioletRed\"/> <!-- #C71585 -->\n              <xsd:enumeration value=\"IndianRed\"/> <!-- #CD5C5C -->\n              <xsd:enumeration value=\"Peru\"/> <!-- #CD853F -->\n              <xsd:enumeration value=\"Chocolate\"/> <!-- #D2691E -->\n              <xsd:enumeration value=\"Tan\"/> <!-- #D2B48C -->\n              <xsd:enumeration value=\"LightGray\"/> <!-- #D3D3D3 -->\n              <xsd:enumeration value=\"PaleVioletRed\"/> <!-- #D87093 -->\n              <xsd:enumeration value=\"Thistle\"/> <!-- #D8BFD8 -->\n              <xsd:enumeration value=\"Orchid\"/> <!-- #DA70D6 -->\n              <xsd:enumeration value=\"GoldenRod\"/> <!-- #DAA520 -->\n              <xsd:enumeration value=\"Crimson\"/> <!-- #DC143C -->\n              <xsd:enumeration value=\"Gainsboro\"/> <!-- #DCDCDC -->\n              <xsd:enumeration value=\"Plum\"/> <!-- #DDA0DD -->\n              <xsd:enumeration value=\"BurlyWood\"/> <!-- #DEB887 -->\n              <xsd:enumeration value=\"LightCyan\"/> <!-- #E0FFFF -->\n              <xsd:enumeration value=\"Lavender\"/> <!-- #E6E6FA -->\n              <xsd:enumeration value=\"DarkSalmon\"/> <!-- #E9967A -->\n              <xsd:enumeration value=\"Violet\"/> <!-- #EE82EE -->\n              <xsd:enumeration value=\"PaleGoldenRod\"/> <!-- #EEE8AA -->\n              <xsd:enumeration value=\"LightCoral\"/> <!-- #F08080 -->\n              <xsd:enumeration value=\"Khaki\"/> <!-- #F0E68C -->\n              <xsd:enumeration value=\"AliceBlue\"/> <!-- #F0F8FF -->\n              <xsd:enumeration value=\"HoneyDew\"/> <!-- #F0FFF0 -->\n              <xsd:enumeration value=\"Azure\"/> <!-- #F0FFFF -->\n              <xsd:enumeration value=\"SandyBrown\"/> <!-- #F4A460 -->\n              <xsd:enumeration value=\"Wheat\"/> <!-- #F5DEB3 -->\n              <xsd:enumeration value=\"Beige\"/> <!-- #F5F5DC -->\n              <xsd:enumeration value=\"WhiteSmoke\"/> <!-- #F5F5F5 -->\n              <xsd:enumeration value=\"MintCream\"/> <!-- #F5FFFA -->\n              <xsd:enumeration value=\"GhostWhite\"/> <!-- #F8F8FF -->\n              <xsd:enumeration value=\"Salmon\"/> <!-- #FA8072 -->\n              <xsd:enumeration value=\"AntiqueWhite\"/> <!-- #FAEBD7 -->\n              <xsd:enumeration value=\"Linen\"/> <!-- #FAF0E6 -->\n              <xsd:enumeration value=\"LightGoldenRodYellow\"/> <!-- #FAFAD2 -->\n              <xsd:enumeration value=\"OldLace\"/> <!-- #FDF5E6 -->\n              <xsd:enumeration value=\"Red\"/> <!-- #FF0000 -->\n              <xsd:enumeration value=\"Fuchsia\"/> <!-- #FF00FF -->\n              <xsd:enumeration value=\"Magenta\"/> <!-- #FF00FF -->\n              <xsd:enumeration value=\"DeepPink\"/> <!-- #FF1493 -->\n              <xsd:enumeration value=\"OrangeRed\"/> <!-- #FF4500 -->\n              <xsd:enumeration value=\"Tomato\"/> <!-- #FF6347 -->\n              <xsd:enumeration value=\"HotPink\"/> <!-- #FF69B4 -->\n              <xsd:enumeration value=\"Coral\"/> <!-- #FF7F50 -->\n              <xsd:enumeration value=\"Darkorange\"/> <!-- #FF8C00 -->\n              <xsd:enumeration value=\"LightSalmon\"/> <!-- #FFA07A -->\n              <xsd:enumeration value=\"Orange\"/> <!-- #FFA500 -->\n              <xsd:enumeration value=\"LightPink\"/> <!-- #FFB6C1 -->\n              <xsd:enumeration value=\"Pink\"/> <!-- #FFC0CB -->\n              <xsd:enumeration value=\"Gold\"/> <!-- #FFD700 -->\n              <xsd:enumeration value=\"PeachPuff\"/> <!-- #FFDAB9 -->\n              <xsd:enumeration value=\"NavajoWhite\"/> <!-- #FFDEAD -->\n              <xsd:enumeration value=\"Moccasin\"/> <!-- #FFE4B5 -->\n              <xsd:enumeration value=\"Bisque\"/> <!-- #FFE4C4 -->\n              <xsd:enumeration value=\"MistyRose\"/> <!-- #FFE4E1 -->\n              <xsd:enumeration value=\"BlanchedAlmond\"/> <!-- #FFEBCD -->\n              <xsd:enumeration value=\"PapayaWhip\"/> <!-- #FFEFD5 -->\n              <xsd:enumeration value=\"LavenderBlush\"/> <!-- #FFF0F5 -->\n              <xsd:enumeration value=\"SeaShell\"/> <!-- #FFF5EE -->\n              <xsd:enumeration value=\"Cornsilk\"/> <!-- #FFF8DC -->\n              <xsd:enumeration value=\"LemonChiffon\"/> <!-- #FFFACD -->\n              <xsd:enumeration value=\"FloralWhite\"/> <!-- #FFFAF0 -->\n              <xsd:enumeration value=\"Snow\"/> <!-- #FFFAFA -->\n              <xsd:enumeration value=\"Yellow\"/> <!-- #FFFF00 -->\n              <xsd:enumeration value=\"LightYellow\"/> <!-- #FFFFE0 -->\n              <xsd:enumeration value=\"Ivory\"/> <!-- #FFFFF0 -->\n              <xsd:enumeration value=\"White\"/> <!-- #FFFFFF -->\n            </xsd:restriction>\n          </xsd:simpleType>\n        </xsd:union>\n    </xsd:simpleType>\n\n\t<!-- Font Weight -->\n\t<xsd:simpleType name=\"FontWeight\">\n\t\t<xsd:union>\n\t\t\t<xsd:simpleType>\n\t\t\t\t<xsd:restriction base=\"xsd:integer\">\n\t\t\t\t\t<xsd:minInclusive value=\"1\"/>\n\t\t\t\t\t<xsd:maxInclusive value=\"999\"/>\n\t\t\t\t</xsd:restriction>\n\t\t\t</xsd:simpleType>\n\t\t\t<xsd:simpleType>\n\t\t\t\t<xsd:restriction base=\"xsd:string\">\n\t\t\t\t\t<xsd:enumeration value=\"bold\"/>\n\t\t\t\t\t<xsd:enumeration value=\"normal\"/>\n\t\t\t\t\t<xsd:enumeration value=\"regular\"/>\n\t\t\t\t\t<!-- should we support other font weight names? -->\n\t\t\t\t</xsd:restriction>\n\t\t\t</xsd:simpleType>\n\t\t</xsd:union>\n\t</xsd:simpleType>\n\n\t<!-- Font Style -->\n\t<xsd:simpleType name=\"FontStyle\">\n\t\t<xsd:restriction base=\"xsd:string\">\n\t\t\t<xsd:enumeration value=\"italic\"/>\n\t\t\t<xsd:enumeration value=\"normal\"/>\n\t\t\t<xsd:enumeration value=\"oblique\"/>\n\t\t</xsd:restriction>\n\t</xsd:simpleType>\n\n\t<!-- Color -->\n\t<xsd:attributeGroup name=\"ColorAttributes\">\n\t\t<xsd:attribute name=\"foreground\" type=\"ColorDefinition\" use=\"optional\" />\n\t\t<xsd:attribute name=\"background\" type=\"ColorDefinition\" use=\"optional\" />\n\t\t<xsd:attribute name=\"fontWeight\" type=\"FontWeight\" use=\"optional\" />\n\t\t<xsd:attribute name=\"fontStyle\" type=\"FontStyle\" use=\"optional\" />\n\t\t<xsd:attribute name=\"underline\" type=\"xsd:boolean\" use=\"optional\" />\n\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t</xsd:attributeGroup>\n\n\t<xsd:element name=\"Color\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t<xsd:attribute name=\"exampleText\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:attributeGroup ref=\"ColorAttributes\"/>\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n\t<!-- Main syntax definitions control themable elements for each highlighting definition -->\n\t<xsd:element name=\"SyntaxDefinition\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n\t\t\t\t<xsd:element ref=\"Color\"/>\n\t\t\t</xsd:choice>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:attribute name=\"extensions\" type=\"xsd:string\" use=\"optional\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n  <!-- Begin Specify GlobalStyle elements -->\n  <!-- Default editor foreground and background color -->\n  <xsd:element name=\"DefaultStyle\">\n    <xsd:complexType>\n      <xsd:attribute name=\"foreground\" type=\"ColorDefinition\" use=\"required\" />\n      <xsd:attribute name=\"background\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <!-- Background color for the current line in the editor -->\n  <xsd:element name=\"CurrentLineBackground\">\n    <xsd:complexType>\n      <xsd:attribute name=\"background\" type=\"ColorDefinition\" use=\"required\" />\n      <xsd:attribute name=\"bordercolor\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <!-- Foreground color of the Line numbers display in the editor-->\n  <xsd:element name=\"LineNumbersForeground\">\n    <xsd:complexType>\n      <xsd:attribute name=\"foreground\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <xsd:element name=\"Selection\">\n    <xsd:complexType>\n      <xsd:attribute name=\"foreground\"  type=\"ColorDefinition\" use=\"required\" />\n      <xsd:attribute name=\"background\"  type=\"ColorDefinition\" use=\"required\" />\n      <xsd:attribute name=\"bordercolor\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <xsd:element name=\"NonPrintableCharacter\">\n    <xsd:complexType>\n      <xsd:attribute name=\"foreground\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <xsd:element name=\"Hyperlink\">\n    <xsd:complexType>\n      <xsd:attribute name=\"foreground\" type=\"ColorDefinition\" use=\"required\" />\n      <xsd:attribute name=\"background\" type=\"ColorDefinition\" use=\"required\" />\n    </xsd:complexType>\n  </xsd:element>\n\n  <!--\n    GlobalStyle elements control WPF Theming elements of the text editor\n    (editor standard background, foreground, hyperlink color etc)\n  -->\n  <xsd:element name=\"GlobalStyles\">\n    <xsd:complexType>\n      <xsd:all>\n        <!-- Default editor foreground and background color -->\n        <xsd:element ref=\"DefaultStyle\"          minOccurs=\"0\" maxOccurs=\"1\"/>\n        \n        <!-- Background color for the current line in the editor -->\n        <xsd:element ref=\"CurrentLineBackground\" minOccurs=\"0\" maxOccurs=\"1\"/>\n        \n        <!-- Foreground color of the Line numbers display in the editor-->\n        <xsd:element ref=\"LineNumbersForeground\" minOccurs=\"0\" maxOccurs=\"1\"/>\n        <xsd:element ref=\"Selection\"             minOccurs=\"0\" maxOccurs=\"1\"/>\n        <xsd:element ref=\"NonPrintableCharacter\" minOccurs=\"0\" maxOccurs=\"1\"/>\n        <xsd:element ref=\"Hyperlink\"             minOccurs=\"0\" maxOccurs=\"1\"/>\n      </xsd:all>\n    </xsd:complexType>\n  </xsd:element>\n  <!-- End Specify GlobalStyle elements -->\n\n  <xsd:element name=\"ThemeSyntaxDefinition\">\n\t\t<xsd:complexType>\n\t\t\t<xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t<xsd:element ref=\"SyntaxDefinition\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n        <xsd:element ref=\"GlobalStyles\" minOccurs=\"0\" maxOccurs=\"1\"/>\n        <xsd:any namespace=\"##other\" processContents=\"lax\" />\n\t\t\t</xsd:choice>\n\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\" />\n\t\t\t<xsd:anyAttribute namespace=\"##other\" processContents=\"lax\" />\n\t\t</xsd:complexType>\n\t</xsd:element>\n\n</xsd:schema>"
  },
  {
    "path": "src/HL/Resources/HLResources.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Resources\n{\n\tusing System.IO;\n\tusing HL.Manager;\n\n\tinternal class HLResources\n\t{\n\t\t/// <summary>\n\t\t/// Open a <see cref=\"Stream\"/> object to an internal resource (eg: xshd file)\n\t\t/// to load its contents from an 'Embedded Resource'.\n\t\t/// </summary>\n\t\t/// <param name=\"prefix\"></param>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static Stream OpenStream(string prefix, string name)\n\t\t{\n\t\t\tstring fileRef = prefix + \".\" + name;\n\n\t\t\tStream s = typeof(HLResources).Assembly.GetManifestResourceStream(fileRef);\n\t\t\tif (s == null)\n\t\t\t\tthrow new FileNotFoundException(\"The resource file '\" + fileRef + \"' was not found.\");\n\n\t\t\treturn s;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Registers the built-in highlighting definitions on first time request for a definition\n\t\t/// or when the application changes its WPF Theme (eg. from 'Light' to 'Dark') to load the\n\t\t/// appropriate highlighting resource when queried for it.\n\t\t/// </summary>\n\t\t/// <param name=\"hlm\"></param>\n\t\t/// <param name=\"theme\"></param>\n\t\tinternal static void RegisterBuiltInHighlightings(\n\t\t\tDefaultHighlightingManager hlm,\n\t\t\tIHLTheme theme)\n\t\t{\n\t\t\t// This registration was already performed for this highlighting theme\n\t\t\tif (theme.IsBuiltInThemesRegistered == true)\n\t\t\t\treturn;\n\n\t\t\thlm.RegisterHighlighting(theme, \"XmlDoc\", null, \"XmlDoc.xshd\");\n\n\t\t\thlm.RegisterHighlighting(theme, \"C#\", new[] { \".cs\" }, \"CSharp-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Gcode\", new[] { \".nc\" }, \"Gcode.xshd\");\n\n\t\t\thlm.RegisterHighlighting(theme, \"GRazor\", new[] { \".grazor\" }, \"GRazor-Mode.xshd\");\n\n\n\t\t\thlm.RegisterHighlighting(theme, \"JavaScript\", new[] { \".js\" }, \"JavaScript-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"HTML\", new[] { \".htm\", \".html\" }, \"HTML-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"ASP/XHTML\", new[] { \".asp\", \".aspx\", \".asax\", \".asmx\", \".ascx\", \".master\" }, \"ASPX.xshd\");\n\n\t\t\thlm.RegisterHighlighting(theme, \"Boo\", new[] { \".boo\" }, \"Boo.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Coco\", new[] { \".atg\" }, \"Coco-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"CSS\", new[] { \".css\" }, \"CSS-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"C++\", new[] { \".c\", \".h\", \".cc\", \".cpp\", \".hpp\" }, \"CPP-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Java\", new[] { \".java\" }, \"Java-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Patch\", new[] { \".patch\", \".diff\" }, \"Patch-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"PowerShell\", new[] { \".ps1\", \".psm1\", \".psd1\" }, \"PowerShell.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"PHP\", new[] { \".php\" }, \"PHP-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Python\", new[] { \".py\", \".pyw\" }, \"Python-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"TeX\", new[] { \".tex\" }, \"Tex-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"TSQL\", new[] { \".sql\" }, \"TSQL-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"VB\", new[] { \".vb\" }, \"VB-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"XML\", (\".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;\" +\n\t\t\t\t\t\t\t\t\t\t\t \".xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;\" +\n\t\t\t\t\t\t\t\t\t\t\t \".booproj;.build;.xfrm;.targets;.xaml;.xpt;\" +\n\t\t\t\t\t\t\t\t\t\t\t \".xft;.map;.wsdl;.disco;.ps1xml;.nuspec\").Split(';'),\n\t\t\t\t\t\t\t\t\t\t\t \"XML-Mode.xshd\");\n\n\t\t\thlm.RegisterHighlighting(theme, \"MarkDown\", new[] { \".md\" }, \"MarkDown-Mode.xshd\");\n\n\t\t\t// Additional Highlightings\n\n\t\t\thlm.RegisterHighlighting(theme, \"ActionScript3\", new[] { \".as\" }, \"AS3.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"BAT\", new[] { \".bat\", \".dos\" }, \"DOSBATCH.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"F#\", new[] { \".fs\" }, \"FSharp-Mode.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"HLSL\", new[] { \".fx\" }, \"HLSL.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"INI\", new[] { \".cfg\", \".conf\", \".ini\", \".iss\" }, \"INI.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"LOG\", new[] { \".log\" }, \"Log.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Pascal\", new[] { \".pas\" }, \"Pascal.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"PLSQL\", new[] { \".plsql\" }, \"PLSQL.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Ruby\", new[] { \".rb\" }, \"Ruby.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Scheme\", new[] { \".sls\", \".sps\", \".ss\", \".scm\" }, \"scheme.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"Squirrel\", new[] { \".nut\" }, \"squirrel.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"TXT\", new[] { \".txt\" }, \"TXT.xshd\");\n\t\t\thlm.RegisterHighlighting(theme, \"VTL\", new[] { \".vtl\", \".vm\" }, \"vtl.xshd\");\n\n\t\t\ttheme.IsBuiltInThemesRegistered = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Resources/Light/AS3.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- Source: http://sindney.com/blog/posts/as3-syntax-in-avalonedit/ -->\n<SyntaxDefinition name=\"ActionScript3\" extensions=\".as\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n    <!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->\n    <Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n    <Color name=\"String\" foreground=\"Brown\" exampleText=\"'str'\"/>\n    <Color name=\"MethodCall\" foreground=\"DarkBlue\" exampleText=\"o.ToString();\"/>\n    <Color name=\"Digits\" foreground=\"DarkBlue\" exampleText=\"3.1415\"/>\n\n    <Color name=\"Keyword\" foreground=\"DarkBlue\" />\n    <Color name=\"Keyword1\" foreground=\"Blue\" />\n\n    <Color name=\"CommentMarkerSet\"           foreground=\"Red\"     fontWeight=\"bold\"  />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\" />\n\n    <RuleSet name=\"CommentMarkerSet\">\n      <Keywords color=\"CommentMarkerSet\">\n        <Word>TODO</Word>\n        <Word>FIXME</Word>\n      </Keywords>\n      <Keywords color=\"CommentMarkerSetHackUndone\">\n        <Word>HACK</Word>\n        <Word>UNDONE</Word>\n      </Keywords>\n    </RuleSet>\n \n    <!-- This is the main ruleset. -->\n    <RuleSet>\n        <Span color=\"Comment\">\n            <Begin color=\"XmlDoc/DocComment\">///</Begin>\n            <RuleSet>\n                <Import ruleSet=\"XmlDoc/DocCommentSet\"/>\n                <Import ruleSet=\"CommentMarkerSet\"/>\n            </RuleSet>\n        </Span>\n \n        <Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n            <Begin>//</Begin>\n        </Span>\n \n        <Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n            <Begin>/\\*</Begin>\n            <End>\\*/</End>\n        </Span>\n \n        <Span color=\"String\">\n            <Begin>\"</Begin>\n            <End>\"</End>\n            <RuleSet>\n                <!-- span for escape sequences -->\n                <Span begin=\"\\\\\" end=\".\"/>\n            </RuleSet>\n        </Span>\n \n        <Keywords color=\"Keyword\">\n            <Word>null</Word>\n            <Word>Infinity</Word>\n            <Word>NaN</Word>\n            <Word>undefined</Word>\n            <Word>true</Word>\n            <Word>false</Word>\n            <Word>dynamic</Word>\n            <Word>private</Word>\n            <Word>public</Word>\n            <Word>static</Word>\n            <Word>intrinsic</Word>\n            <Word>internal</Word>\n            <Word>native</Word>\n            <Word>override</Word>\n            <Word>protected</Word>\n            <Word>AS3</Word>\n            <Word>final</Word>\n            <Word>void</Word>\n            <Word>arguments</Word>\n            <Word>Array</Word>\n            <Word>Boolean</Word>\n            <Word>Class</Word>\n            <Word>int</Word>\n            <Word>Math</Word>\n            <Word>Namespace</Word>\n            <Word>Number</Word>\n            <Word>Object</Word>\n            <Word>RegExp</Word>\n            <Word>uint</Word>\n            <Word>XML</Word>\n            <Word>Bitmap</Word>\n            <Word>BitmapData</Word>\n            <Word>DisplayObject</Word>\n            <Word>DisplayObjectContainer</Word>\n            <Word>MovieClip</Word>\n            <Word>Shape</Word>\n            <Word>Sprite</Word>\n            <Word>Stage</Word>\n            <Word>ColorTransform</Word>\n            <Word>Matrix</Word>\n            <Word>Point</Word>\n            <Word>Rectangle</Word>\n            <Word>Transform</Word>\n            <Word>Sound</Word>\n            <Word>Video</Word>\n            <Word>TextField</Word>\n            <Word>ContextMenu</Word>\n            <Word>Keyboard</Word>\n            <Word>Mouse</Word>\n            <Word>ByteArray</Word>\n            <Word>Dictionary</Word>\n            <Word>Endian</Word>\n            <Word>Proxy</Word>\n            <Word>Timer</Word>\n        </Keywords>\n \n        <Keywords color=\"Keyword1\">\n            <Word>class</Word>\n            <Word>extends</Word>\n            <Word>implements</Word>\n            <Word>import</Word>\n            <Word>interface</Word>\n            <Word>new</Word>\n            <Word>case</Word>\n            <Word>do</Word>\n            <Word>while</Word>\n            <Word>else</Word>\n            <Word>if</Word>\n            <Word>for</Word>\n            <Word>in</Word>\n            <Word>switch</Word>\n            <Word>throw</Word>\n            <Word>get</Word>\n            <Word>set</Word>\n            <Word>function</Word>\n            <Word>var</Word>\n            <Word>try</Word>\n            <Word>catch</Word>\n            <Word>finally</Word>\n            <Word>while</Word>\n            <Word>with</Word>\n            <Word>default</Word>\n            <Word>break</Word>\n            <Word>continue</Word>\n            <Word>delete</Word>\n            <Word>return</Word>\n            <Word>each</Word>\n            <Word>const</Word>\n            <Word>namespace</Word>\n            <Word>package</Word>\n            <Word>include</Word>\n            <Word>use</Word>\n            <Word>is</Word>\n            <Word>as</Word>\n            <Word>instanceof</Word>\n            <Word>typeof</Word>\n            <Word>void</Word>\n        </Keywords>\n \n        <!-- Mark previous rule-->\n        <Rule color=\"MethodCall\">\n        \\b\n        [\\d\\w_]+  # an identifier\n        (?=\\s*\\() # followed by (\n        </Rule>\n \n        <!-- Digits -->\n        <Rule color=\"Digits\">\n            \\b0[xX][0-9a-fA-F]+  # hex number\n        |   \\b\n            (   \\d+(\\.[0-9]+)?   #number with optional floating point\n            |   \\.[0-9]+         #or just starting with floating point\n            )\n            ([eE][+-]?[0-9]+)? # optional exponent\n        </Rule>\n    </RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/ASPX.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"ASP/XHTML\" extensions=\".asp;.aspx;.asax;.asmx;.ascx;.master\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"ASPSectionStartEndTags\" foreground=\"Black\" background=\"Yellow\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n\t<Color name=\"ASPSection\" foreground=\"Black\" background=\"#FFF7F2E3\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span ruleSet=\"ASP\" multiline=\"true\">\n\t\t\t<Begin color=\"ASPSectionStartEndTags\">&lt;%</Begin>\n\t\t\t<End color=\"ASPSectionStartEndTags\">%&gt;</End>\n\t\t</Span>\n\t\t<Import ruleSet=\"HTML/\" />\n\t</RuleSet>\n\t<RuleSet name=\"ASP\">\n\t\t<Import ruleSet=\"C#/\" />\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/Boo.xshd",
    "content": "﻿<SyntaxDefinition name=\"Boo\" extensions=\".boo\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\"         foreground=\"Green\" />\n  <Color name=\"Comment1\"        foreground=\"Gray\" />\n  <Color name=\"Comment2\"        foreground=\"#FF999999\" />\n  <Color name=\"NestedComments\"  foreground=\"Teal\" />\n\n  <Color name=\"String\"           foreground=\"Blue\" />\n  <Color name=\"CodeInsideString\" foreground=\"#FF993366\" />\n\n  <Color name=\"Keywords\"  foreground=\"Black\"        fontWeight=\"bold\"    />\n  <Color name=\"Keywords1\" foreground=\"DarkCyan\"     fontWeight=\"bold\" />\n  <Color name=\"Keywords2\" foreground=\"Blue\"         fontWeight=\"bold\"     />\n  <Color name=\"Keywords3\" foreground=\"Navy\"                               />\n  <Color name=\"Keywords4\" foreground=\"Teal\"         fontWeight=\"bold\"     />\n  <Color name=\"Keywords5\" foreground=\"Olive\"                              />\n  <Color name=\"Keywords6\" foreground=\"Purple\"        fontWeight=\"bold\"    />\n  <Color name=\"Keywords7\" foreground=\"Red\"                                />\n  <Color name=\"Keywords8\" foreground=\"Blue\"          fontWeight=\"bold\"    />\n  <Color name=\"Keywords9\" foreground=\"Brown\"                              />\n  <Color name=\"Keywords10\" foreground=\"Blue\"         fontWeight=\"bold\"    />\n  <Color name=\"Keywords11\" foreground=\"Green\"        fontWeight=\"bold\"    />\n  <Color name=\"Keywords12\" foreground=\"SaddleBrown\"                       />\n  <Color name=\"Keywords13\" foreground=\"Black\"        fontWeight=\"bold\"    />\n  <Color name=\"Keywords14\" foreground=\"Maroon\"                            />\n  <Color name=\"Keywords15\" foreground=\"Purple\"                            />\n  <Color name=\"Keywords16\" foreground=\"Blue\"         fontWeight=\"bold\"    />\n  <Color name=\"Keywords17\" foreground=\"Gray\"                              />\n  <Color name=\"Keywords18\" foreground=\"Blue\"         fontWeight=\"bold\"    />\n  <Color name=\"Keywords19\" foreground=\"MidnightBlue\"                      />\n  <Color name=\"Keywords20\" foreground=\"DarkBlue\"                          />\n\n  <Color name=\"Regex\" foreground=\"#FFFF6600\" />\n\n  <Color name=\"CommentMarkerSet\"           foreground=\"Red\"     fontWeight=\"bold\" />\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\" />\n\n  <RuleSet name=\"CommentMarkerSet\">\n    <Keywords color=\"CommentMarkerSet\">\n      <Word>TODO</Word>\n      <Word>FIXME</Word>\n    </Keywords>\n    <Keywords color=\"CommentMarkerSetHackUndone\">\n      <Word>HACK</Word>\n      <Word>UNDONE</Word>\n    </Keywords>\n  </RuleSet>\n\n  <RuleSet>\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>\"\"\"</Begin>\n\t\t\t<End>\"\"\"</End>\n\t\t</Span>\n\t\t<Span color=\"Comment1\">\n\t\t\t<Begin>\\#</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment2\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\" ruleSet=\"comments set\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n    \n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t\t<Span color=\"CodeInsideString\" ruleSet=\"\">\n\t\t\t\t\t<!-- ruleSet=\"\" reference this file's main ruleset, allowing normal boo code inside ${} -->\n\t\t\t\t\t<Begin>\\$\\{</Begin>\n\t\t\t\t\t<End>}</End>\n\t\t\t\t</Span>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"Regex\" multiline=\"true\">\n\t\t\t<Begin>@/</Begin>\n\t\t\t<End>/</End>\n\t\t</Span>\n\t\t<Span color=\"Regex\">\n\t\t\t<!-- this is a span (not a rule) because \" within a regex doesn't start a string literal -->\n\t\t\t<Begin>/\\S+/</Begin>\n\t\t\t<End></End> <!-- end immediately after Begin -->\n\t\t</Span>\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>self</Word>\n\t\t\t<Word>super</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords1\">\n\t\t\t<Word>is</Word>\n\t\t\t<Word>isa</Word>\n\t\t\t<Word>and</Word>\n\t\t\t<Word>or</Word>\n\t\t\t<Word>not</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords2\">\n\t\t\t<Word>else</Word>\n\t\t\t<Word>elif</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>match</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>unless</Word>\n\t\t\t<Word>otherwise</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>while</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords3\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>return</Word>\n\t\t\t<Word>yield</Word>\n\t\t\t<Word>goto</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords4\">\n\t\t\t<Word>try</Word>\n\t\t\t<Word>raise</Word>\n\t\t\t<Word>ensure</Word>\n\t\t\t<Word>except</Word>\n\t\t\t<Word>retry</Word>\n\t\t\t<Word>success</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords5\">\n\t\t\t<Word>fixed</Word>\n\t\t\t<Word>unsafe</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords6\">\n\t\t\t<Word>bool</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>single</Word>\n\t\t\t<Word>byte</Word>\n\t\t\t<Word>sbyte</Word>\n\t\t\t<Word>short</Word>\n\t\t\t<Word>ushort</Word>\n\t\t\t<Word>int</Word>\n\t\t\t<Word>uint</Word>\n\t\t\t<Word>long</Word>\n\t\t\t<Word>ulong</Word>\n\t\t\t<Word>date</Word>\n\t\t\t<Word>timespan</Word>\n\t\t\t<Word>decimal</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>object</Word>\n\t\t\t<Word>duck</Word>\n\t\t\t<Word>string</Word>\n\t\t\t<Word>regex</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords7\">\n\t\t\t<Word>void</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords8\">\n\t\t\t<Word>cast</Word>\n\t\t\t<Word>as</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords9\">\n\t\t\t<Word>override</Word>\n\t\t\t<Word>static</Word>\n\t\t\t<Word>virtual</Word>\n\t\t\t<Word>abstract</Word>\n\t\t\t<Word>final</Word>\n\t\t\t<Word>transient</Word>\n\t\t\t<Word>partial</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords10\">\n\t\t\t<Word>public</Word>\n\t\t\t<Word>protected</Word>\n\t\t\t<Word>private</Word>\n\t\t\t<Word>internal</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords11\">\n\t\t\t<Word>namespace</Word>\n\t\t\t<Word>import</Word>\n\t\t\t<Word>from</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords12\">\n\t\t\t<Word>get</Word>\n\t\t\t<Word>set</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords13\">\n\t\t\t<Word>null</Word>\n\t\t\t<Word>value</Word>\n\t\t\t<Word>true</Word>\n\t\t\t<Word>false</Word>\n\t\t\t<Word>ast</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords14\">\n\t\t\t<Word>using</Word>\n\t\t\t<Word>unchecked</Word>\n\t\t\t<Word>checked</Word>\n\t\t\t<Word>lock</Word>\n\t\t\t<Word>getter</Word>\n\t\t\t<Word>required</Word>\n\t\t\t<Word>rawArrayIndexing</Word>\n\t\t\t<Word>normalArrayIndexing</Word>\n\t\t\t<Word>yieldAll</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords15\">\n\t\t\t<Word>assert</Word>\n\t\t\t<Word>array</Word>\n\t\t\t<Word>matrix</Word>\n\t\t\t<Word>print</Word>\n\t\t\t<Word>gets</Word>\n\t\t\t<Word>prompt</Word>\n\t\t\t<Word>enumerate</Word>\n\t\t\t<Word>zip</Word>\n\t\t\t<Word>filter</Word>\n\t\t\t<Word>map</Word>\n\t\t\t<Word>cat</Word>\n\t\t\t<Word>__eval__</Word>\n\t\t\t<Word>__switch__</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords16\">\n\t\t\t<Word>constructor</Word>\n\t\t\t<Word>destructor</Word>\n\t\t\t<Word>def</Word>\n\t\t\t<Word>include</Word>\n\t\t\t<Word>event</Word>\n\t\t\t<Word>ref</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords17\">\n\t\t\t<Word>pass</Word>\n\t\t</Keywords>\n    <Keywords color=\"Keywords18\">\n\t\t\t<Word>enum</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>struct</Word>\n\t\t\t<Word>interface</Word>\n\t\t\t<Word>mixin</Word>\n\t\t\t<Word>callable</Word>\n\t\t\t<Word>do</Word>\n\t\t\t<Word>of</Word>\n\t\t</Keywords>\n\t\t<Rule color=\"Keywords19\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n\t\t<Rule color=\"Keywords20\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"comments set\">\n\t\t<!-- allows nested /**/ comments, coloring them Green/Teal alternately -->\n\t\t<Span color=\"NestedComments\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span color=\"Comment\" ruleSet=\"comments set\" multiline=\"true\">\n\t\t\t\t\t<Begin>/\\*</Begin>\n\t\t\t\t\t<End>\\*/</End>\n\t\t\t\t</Span>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/CPP-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for C/C++ 2001 by Andrea Paatz and Mike Krueger -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"C++\" extensions=\".c;.h;.cc;.cpp;.hpp\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" />\n\t<Color name=\"Character\" foreground=\"Fuchsia\" />\n\t<Color name=\"String\" foreground=\"Fuchsia\" />\n\t<Color name=\"Preprocessor\" foreground=\"Green\" />\n\t<Color name=\"Punctuation\" foreground=\"DarkGreen\" />\n\t<Color name=\"MethodName\" foreground=\"MidnightBlue\" fontWeight=\"bold\" />\n\t<Color name=\"Digits\" foreground=\"DarkBlue\" />\n\t<Color name=\"CompoundKeywords\" foreground=\"Black\" fontWeight=\"bold\" />\n\t<Color name=\"This\" foreground=\"Black\" fontWeight=\"bold\" />\n\t<Color name=\"Operators\" foreground=\"#FF008B8B\" fontWeight=\"bold\" />\n\t<Color name=\"Namespace\" foreground=\"#FF008000\" fontWeight=\"bold\" />\n\t<Color name=\"Friend\" foreground=\"#FFA52A2A\" />\n\t<Color name=\"Modifiers\" foreground=\"#FF0000FF\" fontWeight=\"bold\" />\n\t<Color name=\"TypeKeywords\" foreground=\"#FFFF0000\" />\n\t<Color name=\"BooleanConstants\" foreground=\"#FF000000\" fontWeight=\"bold\" />\n\t<Color name=\"Keywords\" foreground=\"#FF0000FF\" fontWeight=\"bold\" />\n\t<Color name=\"LoopKeywords\" foreground=\"#FF0000FF\" fontWeight=\"bold\" />\n\t<Color name=\"JumpKeywords\" foreground=\"#FF000080\" />\n\t<Color name=\"ExceptionHandling\" foreground=\"#FF008080\" fontWeight=\"bold\" />\n\t<Color name=\"ControlFlow\" foreground=\"#FF0000FF\" fontWeight=\"bold\" />\n\t<RuleSet ignoreCase=\"false\">\n\t\t<Rule color=\"Punctuation\">\n\t\t[?,.;()\\[\\]{}+\\-/%*&lt;&gt;^=~!&amp;]+\n\t\t</Rule>\n\t\t<Keywords color=\"CompoundKeywords\">\n\t\t\t<Word>__abstract</Word>\n\t\t\t<Word>__box</Word>\n\t\t\t<Word>__delegate</Word>\n\t\t\t<Word>__gc</Word>\n\t\t\t<Word>__identifier</Word>\n\t\t\t<Word>__nogc</Word>\n\t\t\t<Word>__pin</Word>\n\t\t\t<Word>__property</Word>\n\t\t\t<Word>__sealed</Word>\n\t\t\t<Word>__try_cast</Word>\n\t\t\t<Word>__typeof</Word>\n\t\t\t<Word>__value</Word>\n\t\t\t<Word>__event</Word>\n\t\t\t<Word>__hook</Word>\n\t\t\t<Word>__raise</Word>\n\t\t\t<Word>__unhook</Word>\n\t\t\t<Word>__interface</Word>\n\t\t\t<Word>ref class</Word>\n\t\t\t<Word>ref struct</Word>\n\t\t\t<Word>value class</Word>\n\t\t\t<Word>value struct</Word>\n\t\t\t<Word>interface class</Word>\n\t\t\t<Word>interface struct</Word>\n\t\t\t<Word>enum class</Word>\n\t\t\t<Word>enum struct</Word>\n\t\t\t<Word>delegate</Word>\n\t\t\t<Word>event</Word>\n\t\t\t<Word>property</Word>\n\t\t\t<Word>abstract</Word>\n\t\t\t<Word>override</Word>\n\t\t\t<Word>sealed</Word>\n\t\t\t<Word>generic</Word>\n\t\t\t<Word>where</Word>\n\t\t\t<Word>finally</Word>\n\t\t\t<Word>for each</Word>\n\t\t\t<Word>gcnew</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>initonly</Word>\n\t\t\t<Word>literal</Word>\n\t\t\t<Word>nullptr</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"This\">\n\t\t\t<Word>this</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Operators\">\n\t\t\t<Word>and</Word>\n\t\t\t<Word>and_eq</Word>\n\t\t\t<Word>bitand</Word>\n\t\t\t<Word>bitor</Word>\n\t\t\t<Word>new</Word>\n\t\t\t<Word>not</Word>\n\t\t\t<Word>not_eq</Word>\n\t\t\t<Word>or</Word>\n\t\t\t<Word>or_eq</Word>\n\t\t\t<Word>xor</Word>\n\t\t\t<Word>xor_eq</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Namespace\">\n\t\t\t<Word>using</Word>\n\t\t\t<Word>namespace</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Friend\">\n\t\t\t<Word>friend</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Modifiers\">\n\t\t\t<Word>private</Word>\n\t\t\t<Word>protected</Word>\n\t\t\t<Word>public</Word>\n\t\t\t<Word>const</Word>\n\t\t\t<Word>volatile</Word>\n\t\t\t<Word>static</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"TypeKeywords\">\n\t\t\t<Word>bool</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>unsigned</Word>\n\t\t\t<Word>union</Word>\n\t\t\t<Word>virtual</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>float</Word>\n\t\t\t<Word>short</Word>\n\t\t\t<Word>signed</Word>\n\t\t\t<Word>void</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>enum</Word>\n\t\t\t<Word>struct</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"BooleanConstants\">\n\t\t\t<Word>false</Word>\n\t\t\t<Word>true</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"LoopKeywords\">\n\t\t\t<Word>do</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>while</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"JumpKeywords\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>goto</Word>\n\t\t\t<Word>return</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"ExceptionHandling\">\n\t\t\t<Word>catch</Word>\n\t\t\t<Word>throw</Word>\n\t\t\t<Word>try</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"ControlFlow\">\n\t\t\t<Word>case</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>default</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>asm</Word>\n\t\t\t<Word>auto</Word>\n\t\t\t<Word>compl</Word>\n\t\t\t<Word>mutable</Word>\n\t\t\t<Word>const_cast</Word>\n\t\t\t<Word>delete</Word>\n\t\t\t<Word>dynamic_cast</Word>\n\t\t\t<Word>explicit</Word>\n\t\t\t<Word>export</Word>\n\t\t\t<Word>extern</Word>\n\t\t\t<Word>inline</Word>\n\t\t\t<Word>int</Word>\n\t\t\t<Word>long</Word>\n\t\t\t<Word>operator</Word>\n\t\t\t<Word>register</Word>\n\t\t\t<Word>reinterpret_cast</Word>\n\t\t\t<Word>sizeof</Word>\n\t\t\t<Word>static_cast</Word>\n\t\t\t<Word>template</Word>\n\t\t\t<Word>typedef</Word>\n\t\t\t<Word>typeid</Word>\n\t\t\t<Word>typename</Word>\n\t\t</Keywords>\n\t\t<Span color=\"Preprocessor\">\n\t\t\t<Begin>\\#</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"Character\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Rule color=\"MethodName\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/CSS-Mode.xshd",
    "content": "﻿<SyntaxDefinition name=\"CSS\" extensions=\".css\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Gray\" exampleText=\"/* comment */\" />\n\t<Color name=\"String\" foreground=\"Green\" exampleText=\"body { background: url(&quot;image.png&quot;) }\" />\n\t<Color name=\"Selector\" foreground=\"DarkBlue\" fontWeight=\"bold\" exampleText=\"div p\" />\n\t<Color name=\"Class\" foreground=\"DarkMagenta\" exampleText=\"#para\" />\n\t<Color name=\"Property\" foreground=\"Red\" exampleText=\"p { color: red; }\" />\n\t<Color name=\"Value\" foreground=\"Blue\" exampleText=\"p { color: red; }\" />\n\t<Color name=\"CurlyBraces\" foreground=\"Black\" exampleText=\"{ }\" />\n\t<Color name=\"Colon\" foreground=\"Black\" exampleText=\":\" />\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t<Span\n\t\t\tcolor=\"Property\"\n\t\t\tmultiline=\"true\"\n\t\t\truleSet=\"CSSBlock\">\n\t\t\t<Begin color=\"CurlyBraces\">\\{</Begin>\n\t\t\t<End color=\"CurlyBraces\">\\}</End>\n\t\t</Span>\n\t\t<Span color=\"Class\">\n\t\t\t<Begin>\\#</Begin>\n\t\t\t<End>\\s</End>\n\t\t</Span>\n\t\t<Rule color=\"Selector\">[\\d\\w]</Rule>\n\t</RuleSet>\n\n\t<RuleSet name=\"CSSBlock\">\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t<Span color=\"Value\" multiline=\"true\">\n\t\t\t<Begin color=\"Colon\">\\:</Begin>\n\t\t\t<End color=\"CurlyBraces\">\\;|(?=\\})</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t\t\t<Begin>\"</Begin>\n\t\t\t\t\t<End>\"</End>\n\t\t\t\t\t<RuleSet>\n\t\t\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t\t\t</RuleSet>\n\t\t\t\t</Span>\n\t\t\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t\t\t<Begin>'</Begin>\n\t\t\t\t\t<End>'</End>\n\t\t\t\t\t<RuleSet>\n\t\t\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t\t\t</RuleSet>\n\t\t\t\t</Span>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t</RuleSet>\n</SyntaxDefinition>\n\n"
  },
  {
    "path": "src/HL/Resources/Light/CSharp-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"C#\" extensions=\".cs\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n\t<Color name=\"String\" foreground=\"Blue\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\t<Color name=\"StringInterpolation\" foreground=\"Black\" exampleText=\"string text = $&quot;Hello, {name}!&quot;\"/>\n\t<Color name=\"Char\" foreground=\"Magenta\" exampleText=\"char linefeed = '\\n';\"/>\n\t<Color name=\"Preprocessor\" foreground=\"Green\" exampleText=\"#region Title\" />\n\t<Color name=\"Punctuation\" exampleText=\"a(b.c);\" />\n\t<Color name=\"ValueTypeKeywords\" fontWeight=\"bold\" foreground=\"Red\" exampleText=\"bool b = true;\" />\n\t<Color name=\"ReferenceTypeKeywords\" foreground=\"Red\" exampleText=\"object o;\" />\n\t<Color name=\"MethodCall\" foreground=\"MidnightBlue\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n\t<Color name=\"NumberLiteral\" foreground=\"DarkBlue\" exampleText=\"3.1415f\"/>\n\t<Color name=\"ThisOrBaseReference\" fontWeight=\"bold\" exampleText=\"this.Do(); base.Do();\"/>\n\t<Color name=\"NullOrValueKeywords\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"if (a) {} else {}\"/>\n\t<Color name=\"GotoKeywords\" foreground=\"Navy\" exampleText=\"continue; return null;\"/>\n\t<Color name=\"ContextKeywords\" foreground=\"Navy\" exampleText=\"var a = from x in y select z;\"/>\n\t<Color name=\"ExceptionKeywords\" fontWeight=\"bold\" foreground=\"Teal\" exampleText=\"try {} catch {} finally {}\"/>\n\t<Color name=\"CheckedKeyword\" fontWeight=\"bold\" foreground=\"DarkGray\" exampleText=\"checked {}\"/>\n\t<Color name=\"UnsafeKeywords\" foreground=\"Olive\" exampleText=\"unsafe { fixed (..) {} }\"/>\n\t<Color name=\"OperatorKeywords\" fontWeight=\"bold\" foreground=\"Pink\" exampleText=\"public static implicit operator...\"/>\n\t<Color name=\"ParameterModifiers\" fontWeight=\"bold\" foreground=\"DeepPink\" exampleText=\"(ref int a, params int[] b)\"/>\n\t<Color name=\"Modifiers\" foreground=\"Brown\" exampleText=\"static readonly int a;\"/>\n\t<Color name=\"Visibility\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"public override void ToString();\"/>\n\t<Color name=\"NamespaceKeywords\" fontWeight=\"bold\" foreground=\"Green\" exampleText=\"namespace A.B { using System; }\"/>\n\t<Color name=\"GetSetAddRemove\" foreground=\"SaddleBrown\" exampleText=\"int Prop { get; set; }\"/>\n\t<Color name=\"TrueFalse\" fontWeight=\"bold\" foreground=\"DarkCyan\" exampleText=\"b = false; a = true;\" />\n\t<Color name=\"TypeKeywords\" fontWeight=\"bold\" foreground=\"DarkCyan\" exampleText=\"if (x is int) { a = x as int; type = typeof(int); size = sizeof(int); c = new object(); }\"/>\n\t<Color name=\"SemanticKeywords\" fontWeight=\"bold\" foreground=\"DarkCyan\" exampleText=\"if (args == null) throw new ArgumentNullException(nameof(args));\" />\n\n  <Color name=\"CommentMarkerSetTodo\"       foreground=\"Red\"     fontWeight=\"bold\"/>\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\"/>\n\n  <Property name=\"DocCommentMarker\" value=\"///\" />\n\t\n\t<RuleSet name=\"CommentMarkerSet\">\n\t\t<Keywords color=\"CommentMarkerSetTodo\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"CommentMarkerSetHackUndone\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\t\n\t<!-- This is the main ruleset. -->\n\t<RuleSet>\n\t\t<Span color=\"Preprocessor\">\n\t\t\t<Begin>\\#</Begin>\n\t\t\t<RuleSet name=\"PreprocessorSet\">\n\t\t\t\t<Span> <!-- preprocessor directives that allows comments -->\n\t\t\t\t\t<Begin fontWeight=\"bold\">\n\t\t\t\t\t\t(define|undef|if|elif|else|endif|line)\\b\n\t\t\t\t\t</Begin>\n\t\t\t\t\t<RuleSet>\n\t\t\t\t\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t\t\t\t\t<Begin>//</Begin>\n\t\t\t\t\t\t</Span>\n\t\t\t\t\t</RuleSet>\n\t\t\t\t</Span>\n\t\t\t\t<Span> <!-- preprocessor directives that don't allow comments -->\n\t\t\t\t\t<Begin fontWeight=\"bold\">\n\t\t\t\t\t\t(region|endregion|error|warning|pragma)\\b\n\t\t\t\t\t</Begin>\n\t\t\t\t</Span>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin color=\"XmlDoc/DocComment\">///(?!/)</Begin>\n\t\t\t<RuleSet>\n\t\t\t\t<Import ruleSet=\"XmlDoc/DocCommentSet\"/>\n\t\t\t\t<Import ruleSet=\"CommentMarkerSet\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Char\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>@\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin='\"\"' end=\"\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\\$\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t\t<Span begin=\"\\{\\{\" end=\"\"/>\n\t\t\t\t<!-- string interpolation -->\n\t\t\t\t<Span begin=\"{\" end=\"}\" color=\"StringInterpolation\" ruleSet=\"\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<!-- don't highlight \"@int\" as keyword -->\n\t\t<Rule>\n\t\t\t@[\\w\\d_]+\n\t\t</Rule>\n\t\t\n\t\t<Keywords color=\"ThisOrBaseReference\">\n\t\t\t<Word>this</Word>\n\t\t\t<Word>base</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"TypeKeywords\">\n\t\t\t<Word>as</Word>\n\t\t\t<Word>is</Word>\n\t\t\t<Word>new</Word>\n\t\t\t<Word>sizeof</Word>\n\t\t\t<Word>typeof</Word>\n\t\t\t<Word>stackalloc</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"TrueFalse\">\n\t\t\t<Word>true</Word>\n\t\t\t<Word>false</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>else</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>default</Word>\n\t\t\t<Word>do</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>foreach</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>lock</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"GotoKeywords\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>goto</Word>\n\t\t\t<Word>return</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"ContextKeywords\">\n\t\t\t<Word>yield</Word>\n\t\t\t<Word>partial</Word>\n\t\t\t<Word>global</Word>\n\t\t\t<Word>where</Word>\n\t\t\t<Word>select</Word>\n\t\t\t<Word>group</Word>\n\t\t\t<Word>by</Word>\n\t\t\t<Word>into</Word>\n\t\t\t<Word>from</Word>\n\t\t\t<Word>ascending</Word>\n\t\t\t<Word>descending</Word>\n\t\t\t<Word>orderby</Word>\n\t\t\t<Word>let</Word>\n\t\t\t<Word>join</Word>\n\t\t\t<Word>on</Word>\n\t\t\t<Word>equals</Word>\n\t\t\t<Word>var</Word>\n\t\t\t<Word>dynamic</Word>\n\t\t\t<Word>await</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"ExceptionKeywords\">\n\t\t\t<Word>try</Word>\n\t\t\t<Word>throw</Word>\n\t\t\t<Word>catch</Word>\n\t\t\t<Word>finally</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"CheckedKeyword\">\n\t\t\t<Word>checked</Word>\n\t\t\t<Word>unchecked</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"UnsafeKeywords\">\n\t\t\t<Word>fixed</Word>\n\t\t\t<Word>unsafe</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"ValueTypeKeywords\">\n\t\t\t<Word>bool</Word>\n\t\t\t<Word>byte</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>decimal</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>enum</Word>\n\t\t\t<Word>float</Word>\n\t\t\t<Word>int</Word>\n\t\t\t<Word>long</Word>\n\t\t\t<Word>sbyte</Word>\n\t\t\t<Word>short</Word>\n\t\t\t<Word>struct</Word>\n\t\t\t<Word>uint</Word>\n\t\t\t<Word>ushort</Word>\n\t\t\t<Word>ulong</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"ReferenceTypeKeywords\">\n\t\t\t<Word>class</Word>\n\t\t\t<Word>interface</Word>\n\t\t\t<Word>delegate</Word>\n\t\t\t<Word>object</Word>\n\t\t\t<Word>string</Word>\n\t\t\t<Word>void</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"OperatorKeywords\">\n\t\t\t<Word>explicit</Word>\n\t\t\t<Word>implicit</Word>\n\t\t\t<Word>operator</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"ParameterModifiers\">\n\t\t\t<Word>params</Word>\n\t\t\t<Word>ref</Word>\n\t\t\t<Word>out</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"Modifiers\">\n\t\t\t<Word>abstract</Word>\n\t\t\t<Word>const</Word>\n\t\t\t<Word>event</Word>\n\t\t\t<Word>extern</Word>\n\t\t\t<Word>override</Word>\n\t\t\t<Word>readonly</Word>\n\t\t\t<Word>sealed</Word>\n\t\t\t<Word>static</Word>\n\t\t\t<Word>virtual</Word>\n\t\t\t<Word>volatile</Word>\n\t\t\t<Word>async</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"Visibility\">\n\t\t\t<Word>public</Word>\n\t\t\t<Word>protected</Word>\n\t\t\t<Word>private</Word>\n\t\t\t<Word>internal</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"NamespaceKeywords\">\n\t\t\t<Word>namespace</Word>\n\t\t\t<Word>using</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"GetSetAddRemove\">\n\t\t\t<Word>get</Word>\n\t\t\t<Word>set</Word>\n\t\t\t<Word>add</Word>\n\t\t\t<Word>remove</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"NullOrValueKeywords\">\n\t\t\t<Word>null</Word>\n\t\t\t<Word>value</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"SemanticKeywords\">\n\t\t\t<Word>nameof</Word>\n\t\t</Keywords>\n\n\t\t<!-- Mark previous rule-->\n\t\t<Rule color=\"MethodCall\">\n\t\t\\b\n\t\t[\\d\\w_]+  # an identifier\n\t\t(?=\\s*\\() # followed by (\n\t\t</Rule>\n\t\t\n\t\t<!-- Digits -->\n\t\t<Rule color=\"NumberLiteral\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t|\t\n\t\t\t(\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+           #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\t\t\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/Coco-Mode.xshd",
    "content": "<?xml version=\"1.0\" ?>\n<!-- syntaxdefinition for Coco/R 2003 by Mike Krueger -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"Coco\" extensions=\".atg\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\"       foreground=\"#FF808080\" fontStyle=\"italic\" />\n\t<Color name=\"Punctuation\"   foreground=\"#FF000000\" fontWeight=\"bold\" />\n\t<Color name=\"String\"        foreground=\"#FF006400\" />\n\n  <Color name=\"Keywords\"      foreground=\"#FF0000FF\" fontWeight=\"bold\" />\n  <Color name=\"COMPILER\"      foreground=\"Black\" />\n\n  <Color name=\"Lt_Gt_Color\"   foreground=\"#FF000000\" />\n  <Color name=\"Bracket_Color\" foreground=\"#FF008000\" fontWeight=\"bold\" fontStyle=\"italic\"/>\n  <Color name=\"CSharp_Color\"  foreground=\"#FF2F4F4F\" fontWeight=\"normal\" fontStyle=\"normal\" />\n\n  <Color name=\"CSharp1_Color\" foreground=\"#FF00008B\" fontWeight=\"normal\" fontStyle=\"normal\" />\n\n  <RuleSet ignoreCase=\"false\">\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[{}\\(\\)\\[\\]|+\\-=\\.]+\n\t\t</Rule>\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>ANY</Word>\n\t\t\t<Word>CHARACTERS</Word>\n\t\t\t<Word>COMMENTS</Word>\n\t\t\t<Word>COMPILER</Word>\n\t\t\t<Word>CONTEXT</Word>\n\t\t\t<Word>END</Word>\n\t\t\t<Word>FROM</Word>\n\t\t\t<Word>IF</Word>\n\t\t\t<Word>IGNORE</Word>\n\t\t\t<Word>NAMESPACE</Word>\n\t\t\t<Word>NESTED</Word>\n\t\t\t<Word>PRAGMAS</Word>\n\t\t\t<Word>PRODUCTIONS</Word>\n\t\t\t<Word>SYNC</Word>\n\t\t\t<Word>TO</Word>\n\t\t\t<Word>TOKENS</Word>\n\t\t\t<Word>TOKENNAMES</Word>\n\t\t\t<Word>WEAK</Word>\n\t\t\t<Word>using</Word>\n\t\t</Keywords>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t<Span color=\"COMPILER\" ruleSet=\"CSharp\" multiline=\"true\">\n\t\t\t<Begin color=\"Keywords\">COMPILER</Begin>\n\t\t\t<End color=\"Keywords\">TOKENNAMES</End>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t</Span>\n\t\t<Span color=\"Lt_Gt_Color\" ruleSet=\"ParamList\">\n\t\t\t<Begin color=\"Lt_Gt_Color\" fontWeight=\"bold\">&lt;</Begin>\n\t\t\t<End color=\"Lt_Gt_Color\" fontWeight=\"bold\">&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"CSharp_Color\" ruleSet=\"CSharp\" multiline=\"true\">\n\t\t\t<Begin color=\"Bracket_Color\">\\(\\.</Begin>\n\t\t\t<End color=\"Bracket_Color\">\\.\\)</End>\n\t\t</Span>\n\t\t<Rule color=\"CSharp1_Color\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"CSharp\" ignoreCase=\"false\">\n\t\t<Import ruleSet=\"C#/\" />\n\t\t<Rule color=\"CSharp1_Color\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"ParamList\" ignoreCase=\"false\">\n\t\t<Import ruleSet=\"C#/\" />\n\t\t<Rule color=\"CSharp1_Color\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"RuleDefinition\" ignoreCase=\"false\">\n\t\t<Rule color=\"CSharp1_Color\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/DOSBATCH.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"BAT\" extensions=\".bat;.dos\"\n                  xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"String\"  foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"String2\" foreground=\"Red\" background=\"#22DDDDDD\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Comment\" foreground=\"Green\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Digits\"      foreground=\"Blue\" fontStyle=\"italic\" fontWeight=\"normal\" />\n  <Color name=\"Punctuation\" foreground=\"Red\"  exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"PARAMETER\"   foreground=\"Brown\" exampleText=\"%1\"/>\n  <Color name=\"VARIABLE\"    foreground=\"Orange\" exampleText=\"%MYVAR%\"/>\n\n  <Color name=\"GOTO\"        foreground=\"#0000FF\" background=\"#40AAAAAA\"/>\n  <Color name=\"GOTO_TARGET\" foreground=\"#0000FF\" background=\"#80AAAAAA\"/>\n\n  <Color name=\"AtCommand\" foreground=\"Blue\" fontWeight=\"normal\" />\n\n  <Color name=\"Command\"  foreground=\"Blue\"      fontWeight=\"normal\" />\n  <Color name=\"Command1\" foreground=\"#FF8000FF\" fontWeight=\"normal\" />\n  <Color name=\"Command2\" foreground=\"#FF5000FF\" fontWeight=\"normal\" />\n  <Color name=\"Command3\" foreground=\"#FFFF6000\" fontWeight=\"normal\" />\n\n  <RuleSet ignoreCase=\"true\">\n\n    <Span color=\"String2\" multiline=\"false\" begin=\"&quot;\" end=\"&quot;\" >\n      <RuleSet>\n        <Rule color=\"PARAMETER\">%[0-9]</Rule>\n        <Rule color=\"VARIABLE\">%[A-Z]+%</Rule>\n      </RuleSet>\n    </Span>\n\n    <Rule color=\"PARAMETER\">[-/][A-Z]+</Rule>\n\n    <Span color=\"String2\" multiline=\"false\" begin=\"\\(\" end=\"\\)\" >\n      <RuleSet>\n        <Rule color=\"PARAMETER\">%[0-9]</Rule>\n        <Rule color=\"VARIABLE\">%[A-Z]+%</Rule>\n      </RuleSet>\n    </Span>\n\n    <!-- span for escape sequences -->\n    <Span  color=\"Comment\" begin=\"^[R][E][M]\" end=\"\\n\"/>\n\n    <Rule color=\"Punctuation\">\n      [?,;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Rule color=\"GOTO\">[G][O][T][O]+[ ]+[A-Z]+</Rule>\n\n    <Rule color=\"GOTO_TARGET\">^:[A-Z]+</Rule>\n\n    <Span color=\"VARIABLE\"  multiline=\"false\">\n      <Begin>%</Begin>\n      <End>%</End>\n    </Span>\n\n    <Rule color=\"Digits\">\n      [ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+[0-9]+[ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\\n\n    </Rule>\n\n    <!-- Highlight commands that start start with an at sign -->\n    <Rule color=\"AtCommand\">\n      ^@[A-Z]+\n    </Rule>\n\n    <Rule color=\"Command\">(ECHO\\.)</Rule>\n\n    <Keywords color=\"Command\"><!-- http://technet.microsoft.com/en-us/library/bb490890.aspx -->\n      <Word>ASSOC</Word>\n      <Word>AT</Word>\n      <Word>ATTRIB</Word>\n      <Word>BREAK</Word>\n      <Word>CACLS</Word>\n      <Word>CALL</Word>\n      <Word>CD</Word>\n      <Word>CHCP</Word>\n      <Word>CHDIR</Word>\n      <Word>CHKDSK</Word>\n      <Word>CLS</Word>\n      <Word>CMD</Word>\n      <Word>COLOR</Word>\n      <Word>COMP</Word>\n      <Word>COMPACT</Word>\n      <Word>CONVERT</Word>\n      <Word>COPY</Word>\n      <Word>DATE</Word>\n      <Word>DEL</Word>\n      <Word>DIR</Word>\n      <Word>DISKCOMP</Word>\n      <Word>DISKCOPY</Word>\n      <Word>DOSKEY</Word>\n      <Word>ECHO</Word>\n      <!--Word>ECHO.</Word -->\n      <Word>ENABLEEXTENSIONS</Word>\n      <Word>ENDLOCAL</Word>\n      <Word>ERASE</Word>\n      <Word>EXIT</Word>\n      <Word>FC</Word>\n      <Word>FIND</Word>\n      <Word>FINDSTR</Word>\n      <Word>FOR</Word>\n      <Word>FORMAT</Word>\n      <Word>FTYPE</Word>\n      <!-- Word>GOTO</Word -->\n      <Word>GRAFTABL</Word>\n      <Word>HELP</Word>\n      <Word>IF</Word>\n      <Word>KEYB</Word>\n      <Word>LABEL</Word>\n      <Word>MD</Word>\n      <Word>MKDIR</Word>\n      <Word>MODE</Word>\n      <Word>MORE</Word>\n      <Word>MOVE</Word>\n      <Word>NET</Word>\n      <Word>PATH</Word>\n      <Word>PAUSE</Word>\n      <Word>POPD</Word>\n      <Word>PRINT</Word>\n      <Word>PROMPT</Word>\n      <Word>PUSHD</Word>\n      <Word>RD</Word>\n      <Word>RECOVER</Word>\n      <!-- Word>REM</Word -->\n      <Word>REN</Word>\n      <Word>RENAME</Word>\n      <Word>REPLACE</Word>\n      <Word>RESTORE</Word>\n      <Word>RMDIR</Word>\n      <Word>SET</Word>\n      <Word>SETLOCAL</Word>\n      <Word>SHIFT</Word>\n      <Word>SORT</Word>\n      <Word>START</Word>\n      <Word>SUBST</Word>\n      <Word>TIME</Word>\n      <Word>TITLE</Word>\n      <Word>TREE</Word>\n      <Word>TYPE</Word>\n      <Word>VER</Word>\n      <Word>VERIFY</Word>\n      <Word>VOL</Word>\n      <Word>XCOPY</Word>\n    </Keywords>\n\n    <Keywords color=\"Command1\"><!-- Parts of commands -->\n      <Word>DO</Word><!-- for -->\n      <Word>IN</Word>\n      <Word>NOT</Word><!-- if -->\n      <Word>ERRORLEVEL</Word>\n      <Word>EXIST</Word>\n      <Word>EQU</Word>\n      <Word>NEQ</Word>\n      <Word>LSS</Word>\n      <Word>LEQ</Word>\n      <Word>GTR</Word>\n      <Word>GEQ</Word>\n      <Word>CMDEXTVERSION</Word>\n      <Word>DEFINED</Word>\n      <Word>CON</Word><!-- mode -->\n      <Word>COM</Word>\n      <Word>MIN</Word>\n      <Word>MAX</Word>\n      <Word>SEPARATE</Word>\n      <Word>SHARED</Word>\n      <Word>LOW</Word>\n      <Word>NORMAL</Word>\n      <Word>HIGH</Word>\n      <Word>REALTIME</Word>\n      <Word>WAIT</Word>\n      <Word>OTHER</Word><!-- verify -->\n      <Word>nul</Word><!-- miscellaneous -->\n    </Keywords>\n\n    <Keywords color=\"Command2\"><!-- Command modifiers and operators -->\n      <Word>EOL</Word>\n      <Word>SKIP</Word>\n      <Word>DELIMS</Word>\n      <Word>TOKENS</Word>\n      <Word>ON</Word>\n      <Word>OFF</Word>\n      <Word>USE</Word>\n    </Keywords>\n\n    <Keywords color=\"Command3\"><!-- comparison operators -->\n      <Word>==</Word>\n      <Word>EQU</Word>\n      <Word>NEQ</Word>\n      <Word>LSS</Word>\n      <Word>LEQ</Word>\n      <Word>GTR</Word>\n      <Word>GEQ</Word>\n    </Keywords>\n\n  </RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/FSharp-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"F#\" extensions=\".fs\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n  <Color name=\"Digits\"        foreground=\"DarkBlue\" exampleText=\"3.1415f\"/>\n  <Color name=\"Comment\"       foreground=\"Green\"    exampleText=\"// comment\" />\n  <Color name=\"Punctuation\"   foreground=\"Blue\"     exampleText=\"a(b.c);\" />\n\n  <Color name=\"String\"        foreground=\"#ffa31515\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\t<Color name=\"Char\"          foreground=\"Magenta\"   exampleText=\"char linefeed = '\\n';\"/>\n\n  <Color name=\"Preprocessor\"         foreground=\"Green\"        exampleText=\"#region Title\" />\n\t<Color name=\"ReferenceTypes\"       foreground=\"Red\"          exampleText=\"object o;\" />\n\t<Color name=\"MethodCall\"           foreground=\"MidnightBlue\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n\t<Color name=\"NullOrValueKeywords\"  fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n\t<Color name=\"Modifiers\"            foreground=\"Brown\" exampleText=\"static readonly int a;\"/>\n\t<Color name=\"Visibility\"           foreground=\"Blue\"  fontWeight=\"bold\" exampleText=\"public override void ToString();\"/>\n  <Color name=\"NamespaceKeywords\"    foreground=\"Green\" fontWeight=\"bold\" exampleText=\"namespace A.B { using System; }\"/>\n\t<Color name=\"GetSetAddRemove\"      foreground=\"SaddleBrown\" exampleText=\"int Prop { get; set; }\"/>\n  <Color name=\"ReservedKeywords\"     foreground=\"Red\"  fontWeight=\"normal\" fontStyle=\"italic\" />\n  <Color name=\"CurrentKeywords\"      foreground=\"Blue\" fontWeight=\"normal\" fontStyle=\"italic\" />\n\n  <Color name=\"CommentMarkerSetTodo\"       foreground=\"Red\" fontWeight=\"bold\" />\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\"/>\n\n  <RuleSet name=\"CommentMarkerSet\">\n\t\t<Keywords color=\"CommentMarkerSetTodo\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"CommentMarkerSetHackUndone\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\t\n\t<!-- This is the main ruleset. -->\n\t<RuleSet>\n\t\t<Span color=\"Preprocessor\">\n\t\t\t<Begin>\\#</Begin>\n\t\t\t<RuleSet name=\"PreprocessorSet\">\n\t\t\t\t<Span> <!-- preprocessor directives that allows comments -->\n\t\t\t\t\t<Begin fontWeight=\"bold\">\n            (define|undef|if|elif|else|endif|line)\\b\n          </Begin>\n\t\t\t\t\t<RuleSet>\n\t\t\t\t\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t\t\t\t\t<Begin>//</Begin>\n\t\t\t\t\t\t</Span>\n\t\t\t\t\t</RuleSet>\n\t\t\t\t</Span>\n\t\t\t\t<Span> <!-- preprocessor directives that don't allow comments -->\n\t\t\t\t\t<Begin fontWeight=\"bold\">\n\t\t\t\t\t\t(region|endregion|error|warning|pragma)\\b\n\t\t\t\t\t</Begin>\n\t\t\t\t</Span>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n    <Span color=\"Comment\"><!-- XML Documentation -->\n\t\t\t<Begin color=\"XmlDoc/DocComment\">///</Begin>\n\t\t\t<RuleSet>\n\t\t\t\t<Import ruleSet=\"XmlDoc/DocCommentSet\"/>\n\t\t\t\t<Import ruleSet=\"CommentMarkerSet\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n    <!-- One Line Documentation -->\n    <Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\n    <!-- Multi Line Comment -->\n    <Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n\t\t\t<Begin>\\(\\*</Begin>\n\t\t\t<End>\\*\\)</End>\n\t\t</Span>\n\n    <!-- String -->\t\t\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Char\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n    <!-- Verbatim interpreted string -->\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>@\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin='\"\"' end=\"\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<!-- don't highlight \"@int\" as keyword -->\n\t\t<Rule>\n\t\t\t@[\\w\\d_]+\n\t\t</Rule>\n\n    <Keywords color=\"CurrentKeywords\">\n      <Word>and</Word>\n      <Word>as</Word>\n      <Word>assert</Word>\n      <Word>begin</Word>\n      <Word>default</Word>\n      <Word>do</Word>\n      <Word>done</Word>\n      <Word>downcast</Word>\n      <Word>downto</Word>\n      <Word>else</Word>\n      <Word>enum</Word>\n      <Word>exception</Word>\n      <Word>extern</Word>\n      <Word>false</Word>\n      <Word>finally</Word>\n      <Word>for</Word>\n      <Word>fun</Word>\n      <Word>function</Word>\n      <Word>if</Word>\n      <Word>in</Word>\n      <Word>inherit</Word>\n      <Word>land</Word>\n      <Word>lazy</Word>\n      <Word>let</Word>\n      <Word>match</Word>\n      <Word>module</Word>\n      <Word>mutable</Word>\n      <Word>new</Word>\n      <Word>of</Word>\n      <Word>open</Word>\n      <Word>or</Word>\n      <Word>rec</Word>\n      <Word>sig</Word>\n      <Word>struct</Word>\n      <Word>then</Word>\n      <Word>to</Word>\n      <Word>true</Word>\n      <Word>try</Word>\n      <Word>type</Word>\n      <Word>val</Word>\n      <Word>when</Word>\n      <Word>inline</Word>\n      <Word>upcast</Word>\n      <Word>while</Word>\n    </Keywords>\n    <Keywords color=\"ReservedKeywords\">\n      <Word>atomic</Word>\n      <Word>break</Word>\n      <Word>checked</Word>\n      <Word>component</Word>\n      <Word>const</Word>\n      <Word>constraint</Word>\n      <Word>constructor</Word>\n      <Word>continue</Word>\n      <Word>decimal</Word>\n      <Word>eager</Word>\n      <Word>event</Word>\n      <Word>external</Word>\n      <Word>fixed</Word>\n      <Word>functor</Word>\n      <Word>include</Word>\n      <Word>method</Word>\n      <Word>mixin</Word>\n      <Word>process</Word>\n      <Word>property</Word>\n      <Word>pure</Word>\n      <Word>readonly</Word>\n      <Word>return</Word>\n      <Word>sealed</Word>\n    </Keywords>\n\n    <Keywords color=\"ReferenceTypes\">\n\t\t\t<Word>class</Word>\n      <Word>end</Word>\n      <Word>interface</Word>\n\t\t\t<Word>delegate</Word>\n\t\t\t<Word>object</Word>\n\t\t\t<Word>string</Word>\n    </Keywords>\n\n\t\t<Keywords color=\"Modifiers\">\n\t\t\t<Word>abstract</Word>\n      <Word>member</Word>\n      <Word>with</Word>\n      <!--Word>const</Word -->\n      <!--Word>event</Word -->\n\t\t\t<!--Word>extern</Word -->\n\t\t\t<Word>override</Word>\n      <!-- Word>readonly</Word -->\n\t\t\t<!-- Word>sealed</Word -->\n\t\t\t<Word>static</Word>\n\t\t\t<Word>virtual</Word>\n\t\t\t<Word>volatile</Word>\n\t\t\t<Word>async</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"Visibility\">\n\t\t\t<Word>public</Word>\n\t\t\t<Word>protected</Word>\n\t\t\t<Word>private</Word>\n\t\t\t<Word>internal</Word>\n\t\t</Keywords>\n\n\n    <Keywords color=\"NamespaceKeywords\">\n\t\t\t<Word>namespace</Word>\n\t\t\t<Word>using</Word>\n\t\t</Keywords>\n\n    <Keywords color=\"GetSetAddRemove\">\n\t\t\t<Word>get</Word>\n\t\t\t<Word>set</Word>\n\t\t\t<Word>add</Word>\n\t\t\t<Word>remove</Word>\n\t\t</Keywords>\n\n    <Keywords color=\"NullOrValueKeywords\">\n\t\t\t<Word>null</Word>\n      <!-- Word>value</Word -->\n\t\t</Keywords>\n\n\t\t<!-- Mark previous rule -->\n\t\t<Rule color=\"MethodCall\">\n\t\t\\b\n\t\t[\\d\\w_]+  # an identifier\n\t\t(?=\\s*\\() # followed by (\n\t\t</Rule>\n\n\t\t<!-- Digits -->\n\t\t<Rule color=\"Digits\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t|\t\n\t\t\t(\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+           #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\t\t\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/GRazor-Mode.xshd",
    "content": "﻿<SyntaxDefinition\n\txmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\"\n\tname=\"GRazor\"\n\textensions=\".grazor\">\n\n  <Color name=\"csBack\" background=\"#2d2e27\" />\n  <Color name=\"debuggreen\" background=\"Green\" />\n  <Color name=\"debugred\" background=\"Red\" />\n  <Color name=\"white\" background=\"Transparent\" foreground=\"White\" />\n\n  <Color name=\"CommentBlockStartEndTags\" foreground=\"Yellow\" background=\"#2d2e27\" />\n\t<Color name=\"CodeBlockStartEndTags\" foreground=\"White\" background=\"#3d3d1c\" />\n\t<Color name=\"RazorCodeMarker\" foreground=\"White\" background=\"#3d3d1c\" />\n\t<Color name=\"DirectiveKeywords\" foreground=\"Brown\" fontWeight=\"bold\" />\n\t<Color name=\"AttributeName\" foreground=\"Red\" />\n\t<Color name=\"AttributeValue\" foreground=\"Blue\" />\n\t<Color name=\"Entity\" foreground=\"Teal\" />\n\t<Color name=\"BrokenEntity\" foreground=\"Olive\" />\n\n\t<Color name=\"Comment\" foreground=\"#57a64a\" />\n\t<Color name=\"String\" foreground=\"Blue\" />\n\t<Color name=\"Char\" foreground=\"Magenta\" />\n\t<Color name=\"Punctuation\" foreground=\"#FF00FF00\" />\n\t<Color name=\"ValueTypes\" fontWeight=\"bold\" foreground=\"Red\" />\n\t<Color name=\"ReferenceTypes\" foreground=\"Red\" />\n\t<Color name=\"MethodCall\" foreground=\"MidnightBlue\" fontWeight=\"bold\" />\n\t<Color name=\"NumberLiteral\" foreground=\"DarkBlue\" />\n\t<Color name=\"ThisOrBaseReference\" fontWeight=\"bold\" />\n\t<Color name=\"NullOrValueKeywords\" fontWeight=\"bold\" />\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Blue\" />\n\t<Color name=\"GotoKeywords\" foreground=\"Navy\" />\n\t<Color name=\"ContextKeywords\" foreground=\"Navy\" />\n\t<Color name=\"ExceptionKeywords\" fontWeight=\"bold\" foreground=\"Teal\" />\n\t<Color name=\"CheckedKeyword\" fontWeight=\"bold\" foreground=\"DarkGray\" />\n\t<Color name=\"UnsafeKeywords\" foreground=\"Olive\" />\n\t<Color name=\"OperatorKeywords\" fontWeight=\"bold\" foreground=\"Pink\" />\n\t<Color name=\"ParameterModifiers\" fontWeight=\"bold\" foreground=\"DeepPink\" />\n\t<Color name=\"Modifiers\" foreground=\"Brown\" />\n\t<Color name=\"Visibility\" fontWeight=\"bold\" foreground=\"Blue\" />\n\t<Color name=\"NamespaceKeywords\" fontWeight=\"bold\" foreground=\"Green\" />\n\t<Color name=\"GetSetAddRemove\" foreground=\"SaddleBrown\" />\n\t<Color name=\"TrueFalse\" fontWeight=\"bold\" foreground=\"DarkCyan\" />\n\t<Color name=\"TypeKeywords\" fontWeight=\"bold\" foreground=\"DarkCyan\" />\n  \n  <RuleSet ignoreCase=\"true\">\n    <Import ruleSet=\"grazor\" />\n  </RuleSet>\n  \n\t<RuleSet name=\"grazor\">\n    <Import ruleSet=\"razor\" />\n    <Import ruleSet=\"Gcode/\" />\n\t</RuleSet>\n\n  <RuleSet name=\"razor\">\n    <!-- Razor comment block -->\n    <Span ruleSet=\"RazorCommentBlock\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@\\*</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\*\\@</End>\n    </Span>\n\n    <!-- Razor code block -->\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@\\{</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n    <!-- Razor explicit expression block -->\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@\\(</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\)</End>\n    </Span>\n\n    <!-- Razor function block -->\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@functions\\s*\\{</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n    <!-- Razor for block -->\n    <Span ruleSet=\"for\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@for</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n    <!-- Razor if block -->\n    <Span ruleSet=\"if\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@if</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n    <!-- Razor foreach block -->\n    <Span ruleSet=\"foreach\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@foreach</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n    <!-- Razor while block -->\n    <Span ruleSet=\"while\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@while</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\}</End>\n    </Span>\n\n\n    <!-- Escaping Razor code marker -->\n    <Span>\n      <Begin color=\"white\">@@</Begin>\n    </Span>\n\n    <Span ruleSet=\"csharp\" multiline=\"false\">\n      <Begin color=\"RazorCodeMarker\">\\@</Begin>\n      <End>\\)|\\&lt;</End>\n    </Span>\n  </RuleSet>\n  \n  <RuleSet name=\"for\">\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>(?&lt;=@for)\\s*\\(</Begin>\n      <End>\\)</End>\n    </Span>\n    <Span ruleSet=\"grazor\" multiline=\"false\">\n      <Begin color=\"CommentBlockStartEndTags\">@:</Begin>\n      <End>$</End>\n    </Span>\n    <Import ruleSet=\"razor\" />\n  </RuleSet>\n  <RuleSet name=\"foreach\">\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>(?&lt;=@foreach)\\s*\\(</Begin>\n      <End>\\)</End>\n    </Span>\n    <Span ruleSet=\"grazor\" multiline=\"false\">\n      <Begin color=\"CommentBlockStartEndTags\">@:</Begin>\n      <End>$</End>\n    </Span>\n    <Import ruleSet=\"razor\" />\n  </RuleSet>\n  <RuleSet name=\"if\">\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>(?&lt;=@if)\\s*\\(</Begin>\n      <End>\\)</End>\n    </Span>\n    <Span ruleSet=\"grazor\" multiline=\"false\">\n      <Begin color=\"CommentBlockStartEndTags\">@:</Begin>\n      <End>$</End>\n    </Span>\n    <Import ruleSet=\"razor\" />\n  </RuleSet>\n  <RuleSet name=\"while\">\n    <Span color=\"csBack\" ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>(?&lt;=@while)\\s*\\(</Begin>\n      <End>\\)</End>\n    </Span>\n    <Span ruleSet=\"grazor\" multiline=\"false\">\n      <Begin color=\"CommentBlockStartEndTags\">@:</Begin>\n      <End>$</End>\n    </Span>\n    <Import ruleSet=\"razor\" />\n  </RuleSet>\n\n\t<RuleSet name=\"RazorCommentBlock\">\n\t\t<Rule color=\"Comment\">.</Rule>\n\t</RuleSet>\n\n\t<RuleSet name=\"EntitySet\">\n\t\t<Rule color=\"Entity\">\n\t\t\t&amp;\n\t\t\t[\\w\\d\\#]+\n\t\t\t;\n\t\t</Rule>\n\n\t\t<Rule color=\"BrokenEntity\">\n\t\t\t&amp;\n\t\t\t[\\w\\d\\#]*\n\t\t\t#missing ;\n\t\t</Rule>\n\t</RuleSet>\n\n  <RuleSet name=\"RazorCode\">\n    <Span>\n      <Begin>@@</Begin>\n    </Span>\n\n    <Span ruleSet=\"RazorCommentBlock\" multiline=\"true\">\n      <Begin color=\"CommentBlockStartEndTags\">\\@\\*</Begin>\n      <End color=\"CommentBlockStartEndTags\">\\*\\@</End>\n    </Span>\n\n    <Rule color=\"RazorCodeMarker\">@</Rule>\n\n    <Span ruleSet=\"RazorCode\" multiline=\"true\">\n      <Begin>\\{</Begin>\n      <End>\\}</End>\n    </Span>\n\n    <Span ruleSet=\"RazorCode\" multiline=\"true\">\n      <Begin>\\(</Begin>\n      <End>\\)</End>\n    </Span>\n\n    <Import ruleSet=\"C#/\" />\n\n    <Span color=\"String\">\n      <Begin>\"</Begin>\n      <End>\"</End>\n      <RuleSet>\n        <!-- span for escape sequences -->\n        <Span begin=\"\\\\\" end=\".\"/>\n      </RuleSet>\n    </Span>\n\n    <Span color=\"Char\">\n      <Begin>'</Begin>\n      <End>'</End>\n      <RuleSet>\n        <!-- span for escape sequences -->\n        <Span begin=\"\\\\\" end=\".\"/>\n      </RuleSet>\n    </Span>\n\n    <Keywords color=\"ThisOrBaseReference\">\n      <Word>this</Word>\n      <Word>base</Word>\n    </Keywords>\n\n    <Keywords color=\"TypeKeywords\">\n      <Word>as</Word>\n      <Word>is</Word>\n      <Word>new</Word>\n      <Word>sizeof</Word>\n      <Word>typeof</Word>\n      <Word>stackalloc</Word>\n    </Keywords>\n\n    <Keywords color=\"TrueFalse\">\n      <Word>true</Word>\n      <Word>false</Word>\n    </Keywords>\n\n    <Keywords color=\"Keywords\">\n      <Word>else</Word>\n      <Word>if</Word>\n      <Word>switch</Word>\n      <Word>case</Word>\n      <Word>default</Word>\n      <Word>do</Word>\n      <Word>for</Word>\n      <Word>foreach</Word>\n      <Word>in</Word>\n      <Word>while</Word>\n      <Word>lock</Word>\n    </Keywords>\n\n    <Keywords color=\"GotoKeywords\">\n      <Word>break</Word>\n      <Word>continue</Word>\n      <Word>goto</Word>\n      <Word>return</Word>\n    </Keywords>\n\n    <Keywords color=\"ContextKeywords\">\n      <Word>yield</Word>\n      <Word>partial</Word>\n      <Word>global</Word>\n      <Word>where</Word>\n      <Word>select</Word>\n      <Word>group</Word>\n      <Word>by</Word>\n      <Word>into</Word>\n      <Word>from</Word>\n      <Word>ascending</Word>\n      <Word>descending</Word>\n      <Word>orderby</Word>\n      <Word>let</Word>\n      <Word>join</Word>\n      <Word>on</Word>\n      <Word>equals</Word>\n      <Word>var</Word>\n      <Word>dynamic</Word>\n    </Keywords>\n\n    <Keywords color=\"ExceptionKeywords\">\n      <Word>try</Word>\n      <Word>throw</Word>\n      <Word>catch</Word>\n      <Word>finally</Word>\n    </Keywords>\n\n    <Keywords color=\"CheckedKeyword\">\n      <Word>checked</Word>\n      <Word>unchecked</Word>\n    </Keywords>\n\n    <Keywords color=\"UnsafeKeywords\">\n      <Word>fixed</Word>\n      <Word>unsafe</Word>\n    </Keywords>\n\n    <Keywords color=\"ValueTypes\">\n      <Word>bool</Word>\n      <Word>byte</Word>\n      <Word>char</Word>\n      <Word>decimal</Word>\n      <Word>double</Word>\n      <Word>enum</Word>\n      <Word>float</Word>\n      <Word>int</Word>\n      <Word>long</Word>\n      <Word>sbyte</Word>\n      <Word>short</Word>\n      <Word>struct</Word>\n      <Word>uint</Word>\n      <Word>ushort</Word>\n      <Word>ulong</Word>\n    </Keywords>\n\n    <Keywords color=\"ReferenceTypes\">\n      <Word>class</Word>\n      <Word>interface</Word>\n      <Word>delegate</Word>\n      <Word>object</Word>\n      <Word>string</Word>\n      <Word>void</Word>\n    </Keywords>\n\n    <Keywords color=\"OperatorKeywords\">\n      <Word>explicit</Word>\n      <Word>implicit</Word>\n      <Word>operator</Word>\n    </Keywords>\n\n    <Keywords color=\"ParameterModifiers\">\n      <Word>params</Word>\n      <Word>ref</Word>\n      <Word>out</Word>\n    </Keywords>\n\n    <Keywords color=\"Modifiers\">\n      <Word>abstract</Word>\n      <Word>const</Word>\n      <Word>event</Word>\n      <Word>extern</Word>\n      <Word>override</Word>\n      <Word>readonly</Word>\n      <Word>sealed</Word>\n      <Word>static</Word>\n      <Word>virtual</Word>\n      <Word>volatile</Word>\n    </Keywords>\n\n    <Keywords color=\"Visibility\">\n      <Word>public</Word>\n      <Word>protected</Word>\n      <Word>private</Word>\n      <Word>internal</Word>\n    </Keywords>\n\n    <Keywords color=\"NamespaceKeywords\">\n      <Word>namespace</Word>\n      <Word>using</Word>\n    </Keywords>\n\n    <Keywords color=\"GetSetAddRemove\">\n      <Word>get</Word>\n      <Word>set</Word>\n      <Word>add</Word>\n      <Word>remove</Word>\n    </Keywords>\n\n    <Keywords color=\"NullOrValueKeywords\">\n      <Word>null</Word>\n      <Word>value</Word>\n    </Keywords>\n\n    <!-- Mark previous rule-->\n    <Rule color=\"MethodCall\">\n      \\b\n      [\\d\\w_]+  # an identifier\n      (?=\\s*\\() # followed by (\n    </Rule>\n\n    <!-- Digits -->\n    <Rule color=\"NumberLiteral\">\n      \\b0[xX][0-9a-fA-F]+  # hex number\n      |\n      (\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n      |\t\\.[0-9]+           #or just starting with floating point\n      )\n      ([eE][+-]?[0-9]+)? # optional exponent\n    </Rule>\n\n    <Rule color=\"Punctuation\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Import ruleSet=\"Gcode/\" />\n\n  </RuleSet>\n\n  <RuleSet name=\"csharp\">\n    <Import ruleSet=\"C#/\" />\n    <Span ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>\\{</Begin>\n      <End>\\}</End>\n    </Span>\n    <Span ruleSet=\"csharp\" multiline=\"true\">\n      <Begin>\\(</Begin>\n      <End>\\)</End>\n    </Span>\n  </RuleSet>\n\n  <RuleSet name=\"gcode\">\n    <Import ruleSet=\"Gcode/\" />\n    <Span ruleSet=\"gcode\" multiline=\"true\">\n      <Begin>\\{</Begin>\n      <End>\\}</End>\n    </Span>\n    <Span ruleSet=\"gcode\" multiline=\"true\">\n      <Begin>\\(</Begin>\n      <End>\\)</End>\n    </Span>\n  </RuleSet>\n  \n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/Gcode.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition\n\txmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\"\n\tname=\"Gcode\"\n\textensions=\".nc\">\n\n  <Color name=\"NColour\" foreground=\"#577be8\" />\n  <Color name=\"GColour\" foreground=\"#44ff33\" />\n  <Color name=\"XColour\" foreground=\"#57e89d\" />\n  <Color name=\"YColour\" foreground=\"#ed32cb\" />\n  <Color name=\"ZColour\" foreground=\"#e8aa57\" />\n  <Color name=\"MColour\" foreground=\"#f77171\" />\n  <Color name=\"SColour\" foreground=\"#d9e857\" />\n  <Color name=\"IColour\" foreground=\"#54ebd4\" />\n  <Color name=\"JColour\" foreground=\"#bf2675\" />\n  <Color name=\"KColour\" foreground=\"#d68c4f\" />\n  <Color name=\"PercColour\" foreground=\"#f1ff77\" />\n  \n\t<RuleSet>\n\n    <Span color=\"NColour\" multiline=\"false\">\n      <Begin color=\"NColour\">N([0-9.-])</Begin>\n      <End color=\"NColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"NColour\">N</Rule>\n\n    <Span color=\"GColour\" multiline=\"false\">\n      <Begin color=\"GColour\">G([0-9.-])</Begin>\n      <End color=\"GColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"GColour\">G</Rule>\n\n    <Span color=\"XColour\" multiline=\"false\">\n      <Begin color=\"XColour\">X([0-9.-])</Begin>\n      <End color=\"XColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"XColour\">X</Rule>\n\n    <Span color=\"YColour\" multiline=\"false\">\n      <Begin color=\"YColour\">Y([0-9.-])</Begin>\n      <End color=\"YColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"YColour\">Y</Rule>\n\n    <Span color=\"ZColour\" multiline=\"false\">\n      <Begin color=\"ZColour\">Z([0-9.-])</Begin>\n      <End color=\"ZColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"ZColour\">Z</Rule>\n\n    <Span color=\"MColour\" multiline=\"false\">\n      <Begin color=\"MColour\">M([0-9.-])</Begin>\n      <End color=\"MColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"MColour\">M</Rule>\n\n    <Span color=\"SColour\" multiline=\"false\">\n      <Begin color=\"SColour\">S([0-9.-])</Begin>\n      <End color=\"SColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"SColour\">S</Rule>\n\n    <Span color=\"IColour\" multiline=\"false\">\n      <Begin color=\"IColour\">I([0-9.-])</Begin>\n      <End color=\"IColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"IColour\">I</Rule>\n\n    <Span color=\"JColour\" multiline=\"false\">\n      <Begin color=\"JColour\">J([0-9.-])</Begin>\n      <End color=\"JColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"JColour\">J</Rule>\n\n    <Span color=\"KColour\" multiline=\"false\">\n      <Begin color=\"KColour\">K([0-9.-])</Begin>\n      <End color=\"KColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"KColour\">K</Rule>\n\n    <Span color=\"PercColour\" multiline=\"false\">\n      <Begin color=\"PercColour\">%([0-9.-])</Begin>\n      <End color=\"PercColour\">(?![0-9.-])</End>\n    </Span>\n\n    <Rule color=\"PercColour\">%</Rule>\n\t\t\n\t</RuleSet>\n  \n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/HLSL.xshd",
    "content": "<SyntaxDefinition name = \"HLSL\" extensions = \".fx\"\n                  xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <!-- Source: http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor?msg=3866004#xx3866004xx -->\n  <!--Colors-->\n  <Color name=\"Digits\" foreground=\"DarkBlue\" fontStyle=\"italic\" />\n  <Color name=\"Comments\"  foreground=\"Green\" />\n  <Color name=\"Punctuation\" foreground=\"DarkGreen\" />\n  <Color name=\"Keywords\"  foreground=\"Blue\" />\n  <Color name=\"DataTypes\" foreground=\"#00A2E8\" />\n  <Color name=\"States\"    foreground=\"Red\" />\n  <Color name=\"Constants\" foreground=\"Violet\" />\n  <Color name=\"Semantics\" foreground=\"#C9BD16\" />\n  <Color name=\"Functions\" foreground=\"#0B136B\" />\n  <Color name=\"MethodCall\" foreground=\"DarkBlue\" />\n\n  <!--Casesensitive-->\n  <RuleSet>\n    <Rule color=\"Punctuation\">\n      [?,.;:()\\[\\]{}+\\-/%*&lt;&gt;^!|]+\n    </Rule>\n    <!--Comments-->\n    <Span color=\"Comments\" begin=\"//\" />\n    <Span color=\"Keywords\" begin=\"#\" />\n    <Span color=\"DataTypes\" begin=\"&lt;\" end=\"&gt;\" />\n    <Span color=\"Comments\" multiline=\"true\"\n       begin=\"/\\*\" end=\"\\*/\" />\n    <!--Keywords-->\n    <Rule color=\"Keywords\">\n      (if\n      |else\n      |break\n      |continue\n      |do\n      |for\n      |switch\n      |while\n      |return\n      |technique\n      |pass\n      |compile\n      |sampler\n      |register\n      |typedef\n      |struct\n      |auto|catch|char|class|const_cast\n      |default|delete|dynamic_cast\n      |enum|explicit|friend|goto\n      |long|mutable|new|operator\n      |private|protected|public\n      |reinterpret_cast|short|sizeof|static_cast\n      |template|this|throw|try|typename|union\n      |using|virtual|void|extern)(\\s|[;{(])\n    </Rule>\n    <!--Scalar data types with vector and matrix-->   \n    <Rule color=\"DataTypes\">\n      (Buffer|bool|int|uint|half|float|double)([1-4]?)(x[1-4])? (?=[(]|\\s|\\r|\\n)\n    </Rule>\n    <!--Other data types-->\n    <Rule color=\"DataTypes\">\n      (Texture) (?=[(]|\\s|\\r|\\n)\n    </Rule>\n    <!--Sampler types-->\n    <Rule color=\"DataTypes\">\n      (sampler1D|sampler2D|sampler3D|samplerCUBE|sampler_state|SamplerState)\n    </Rule>  \n    <!--States-->\n    <Rule color=\"States\">\n      (?i)(?&lt;=\\W)(VertexShader|PixelShader|GeometryShader|\n      AddressU|AddressV|AddressW|BorderColor|Filter|MaxAnisotropy|\n      MaxLOD|MinLOD|MipLODBias|ComparisonFunc|ComparisonFilter|\n      MipFilter|MinFilter|MagFilter|Texture|MaxLOD|MinLOD\n \n      |AlphaBlendEnable|AlphaFunc|AlphaRef|AlphaTestEnable|BlendOp\n      |ColorWriteEnable|DepthBias|DestBlend|DitherEnable|FillMode\n      |LastPixel|ShadeMode|SlopeScaleDepthBias|SrcBlend\n      |StencilEnable|StencilFail|StencilFunc|StencilMask\n      |StencilPass|StencilRef|StencilWriteMask|StencilZFail\n      |TextureFactor|ZEnable|ZFunc\n      |Ambient|AmbientMaterialSource|Clipping|ClipPlaneEnable\n      |ColorVertex|CullMode|DiffuseMaterialSource|EmissiveMaterialSource\n      |FogColor|FogDensity|FogEnable|FogEnd|FogStart|FogTableMode|FogVertexMode\n      |IndexedVertexBlendEnable|Lighting|LocalViewer|MultiSampleAntialias|MultiSampleMask\n      |NormalizeNormals|PatchSegments|PointScale_A|PointScale_B|PointScale_C\n      |PointScaleEnable|PointSize|PointSize_Min|PointSize_Max|PointSpriteEnable\n      |RangeFogEnable|SpecularEnable|SpecularMaterialSource|TweenFactor|VertexBlend)(?=\\s*[=])\n    </Rule>\n    <Rule color=\"States\">\n      (?i)(?&lt;=\\W)(Wrap\\d(\\d)?)\n    </Rule>\n    <!--Constants-->\n    <Rule color=\"Constants\" >\n      (?i)(?&lt;=([=]\\s*))(true|false|wrap|mirror|clamp|border|mirroronce\n      |none|point|linear|anisotropic|pyramidalquad|gaussianquad|convolutionmono\n      |zero|one|srccolor|invsrccolor|srcalpha|invsrcalpha|destalpha|invdestalpha\n      |destcolor|invdestcolor|srcalphasat|bothsrcalpha|bothinvsrcalpha\n      |blendfactor|invblendfactor|srccolor2|invsrccolor2\n      |never|less|equal|lessequal|greater|notequal|greaterequal|always|wireframe|solid\n      |flat|gouraud|phong\n      |keep|replace|incrsat|decrsat|invert|decr|twosided|cw|ccw|exp|exp2|linear\n      |disable|1weights|2weights|3weights|tweening|0weights)(?=\\s|[;{(])\n    </Rule>\n    <Rule color=\"Constants\">\n      (ps|vs)_\\d_\\d(?=\\s|[;{(])\n    </Rule>\n    <!--Semantics: Index-->\n    <Rule color=\"Semantics\">\n      (?&lt;=([:]\\s*))\n      (BINORMAL|BLENDINDICES|BLENDWEIGHT|COLOR|NORMAL|POSITION|\n      PSIZE|TANGENT|TEXCOORD|TESSFACTOR|DEPTH|SV_ClipDistance|\n      SV_CullDistance|SV_Target)\n      (\\d?)\n    </Rule>\n    <!--Semantics: No Index-->\n    <Rule color=\"Semantics\">\n      ([:]\\s*)(POSITIONT\n      |FOG\n      |PSIZE\n      |VFACE\n      |VPOS\n      |SV_Coverage\n      |SV_Depth\n      |SV_DispatchThreadID\n      |SV_GroupID\n      |SV_GroupIndex\n      |SV_GroupThreadID\n      |SV_InsideTessFactor\n      |SV_IsFrontFace\n      |SV_OutputControlPointID\n      |SV_Position\n      |SV_RenderTargetArrayIndex\n      |SV_SampleIndex\n      |SV_TessFactor\n      |SV_ViewportArrayIndex\n      |SV_InstanceID\n      |SV_PrimitiveID\n      |SV_VertexID)\n    </Rule>\n    <!--Functions-->\n    <Rule color=\"Functions\">\n      (abs\n      |acos\n      |all\n      |AllMemoryBarrier\n      |AllMemoryBarrierWithGroupSync\n      |any\n      |asdouble\n      |asfloat\n      |asin\n      |asint\n      |asuint\n      |atan\n      |atan2\n      |ceil\n      |clamp\n      |clip\n      |cos\n      |cosh\n      |countbits\n      |cross\n      |D3DCOLORtoUBYTE4\n      |ddx\n      |ddx_coarse\n      |ddx_fine\n      |ddy\n      |ddy_coarse\n      |ddy_fine\n      |degrees\n      |determinant\n      |DeviceMemoryBarrier\n      |DeviceMemoryBarrierWithGroupSync\n      |distance\n      |dot\n      |dst\n      |EvaluateAttributeAtCentroid\n      |EvaluateAttributeAtSample\n      |EvaluateAttributeSnapped\n      |exp\n      |exp2\n      |f16tof32\n      |f32tof16\n      |facetoforward\n      |firstbithigh\n      |firstbitlow\n      |floor\n      |fmod\n      |frac\n      |frexp\n      |fwidth\n      |GetRenderTargetSampleCount\n      |GetRenderTargetSamplePosition\n      |GroupMamoryBarrier\n      |GroupMamoryBarrierWithGroupSync\n      |InterlockedAdd\n      |InterlockedCompareExchange\n      |InterlockedCompareStore\n      |InterlockedExchange\n      |InterlockedMax\n      |InterlockedMin\n      |InterlockedOr\n      |InterlockedXor\n      |isfinite\n      |isinf\n      |isnan\n      |ldexp\n      |lerp\n      |lit\n      |log\n      |log10\n      |log2\n      |mad\n      |max\n      |min\n      |modf\n      |mul\n      |noise\n      |normalize\n      |pow\n      |Process2DQuadTessFactorsAvg\n      |Process2DQuadTessFactorsMax\n      |Process2DQuadTessFactorsMin\n      |ProcessIsolineTessFactors\n      |ProcessQuadTessFactorsAvg\n      |ProcessQuadTessFactorsMax\n      |ProcessQuadTessFactorsMin\n      |ProcessTriTessFactorsAvg\n      |ProcessTriTessFactorsMax\n      |ProcessTriTessFactorsMin\n      |radians\n      |rcp\n      |reflect\n      |refract\n      |reversebits\n      |round\n      |rsqrt\n      |saturate\n      |sign\n      |sin\n      |sincos\n      |sinh\n      |smoothstep\n      |sqrt\n      |step\n      |tan\n      |tanh\n      |tex1D\n      |tex1Dbias\n      |tex1Dgrad\n      |tex1Dlod\n      |tex1Dproj\n      |tex2D\n      |tex2Dbias\n      |tex2Dgrad\n      |tex2Dlod\n      |tex3D\n      |tex3Dbias\n      |tex3Dgrad\n      |tex3Dlod\n      |tex3Dproj\n      |texCUBE\n      |texCUBEbias\n      |texCUBEgrad\n      |texCUBElod\n      |texCUBEproj\n      |transpose\n      |trunc)(\\s*[(])\n    </Rule>\n    <Rule color=\"MethodCall\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n    <Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n  </RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/HTML-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for HTML 2000 by Mike Krueger -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"HTML\" extensions=\".htm;.html\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"DarkSlateGray\" exampleText=\"&lt;!-- comment --&gt;\" />\n\t<Color name=\"Digits\" foreground=\"DarkBlue\" exampleText=\"&lt;digits&gt;0123456789&lt;/digits&gt;\" />\n\t<Color name=\"ScriptTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;script&gt;alert('Hello World!');&lt;/script&gt;\" />\n\t<Color name=\"JavaScriptTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;script lang=&quot;JavaScript&quot;&gt;alert('Hello World!');&lt;/script&gt;\" />\n\t<Color name=\"JScriptTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;script lang=&quot;JScript&quot;&gt;Response.Write(&quot;Hello World!&quot;);&lt;/script&gt;\" />\n\t<Color name=\"VBScriptTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;script lang=&quot;VBScript&quot;&gt;Response.Write(&quot;Hello World!&quot;)&lt;/script&gt;\" />\n\t<Color name=\"UnknownScriptTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;script la&gt;alert('Hello World!');&lt;/script&gt;\" />\n\t<Color name=\"HtmlTag\" foreground=\"#FF8B008B\" exampleText=\"&lt;html&gt;Hello World!/html&gt;\" />\n\t<Color name=\"Tags\" foreground=\"#FF8B008B\" exampleText=\"&lt;html&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"Attributes\" foreground=\"Red\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"Slash\" foreground=\"DarkMagenta\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"Assignment\" foreground=\"Blue\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"String\" foreground=\"Blue\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"EntityReference\" foreground=\"Blue\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"Entities\" foreground=\"#FF008000\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<Color name=\"UnknownAttribute\" foreground=\"Blue\" exampleText=\"&lt;html foo='bar' background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>&lt;!--</Begin>\n\t\t\t<End>--&gt;</End>\n\t\t</Span>\n\t\t<Span ruleSet=\"JavaScriptSet\" multiline=\"true\">\n\t\t\t<Begin color=\"JavaScriptTag\">&lt;script\\ lang=\"JavaScript\"&gt;</Begin>\n\t\t\t<End color=\"JavaScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span ruleSet=\"JavaScriptSet\" multiline=\"true\">\n\t\t\t<Begin color=\"JavaScriptTag\">&lt;script\\s.*?text/javascript.*?&gt;</Begin>\n\t\t\t<End color=\"JavaScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span multiline=\"true\">\n\t\t\t<Begin color=\"JScriptTag\">&lt;script\\ lang=\"JScript\"&gt;</Begin>\n\t\t\t<End color=\"JScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span multiline=\"true\">\n\t\t\t<Begin color=\"VBScriptTag\">&lt;script\\ lang=\"VBScript\"&gt;</Begin>\n\t\t\t<End color=\"VBScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span ruleSet=\"JavaScriptSet\" multiline=\"true\">\n\t\t\t<Begin color=\"ScriptTag\">&lt;script&gt;</Begin>\n\t\t\t<End color=\"ScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span multiline=\"true\">\n\t\t\t<Begin color=\"UnknownScriptTag\">&lt;script[^\\w\\d_]</Begin>\n\t\t\t<End color=\"UnknownScriptTag\">&lt;/script&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"HtmlTag\" ruleSet=\"HtmlTagSet\" multiline=\"true\">\n\t\t\t<Begin>&lt;</Begin>\n\t\t\t<End>&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"EntityReference\" ruleSet=\"EntityReferenceSet\">\n\t\t\t<Begin>&amp;</Begin>\n\t\t\t<End>;</End>\n\t\t</Span>\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"JavaScriptSet\">\n\t\t<Import ruleSet=\"JavaScript/\" />\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"EntityReferenceSet\" ignoreCase=\"false\">\n\t\t<Keywords color=\"Entities\">\n\t\t\t<Word>aacute</Word>\n\t\t\t<Word>agrave</Word>\n\t\t\t<Word>acirc</Word>\n\t\t\t<Word>amp</Word>\n\t\t\t<Word>atilde</Word>\n\t\t\t<Word>aring</Word>\n\t\t\t<Word>auml</Word>\n\t\t\t<Word>aelig</Word>\n\t\t\t<Word>ccedil</Word>\n\t\t\t<Word>copy</Word>\n\t\t\t<Word>eacute</Word>\n\t\t\t<Word>egrave</Word>\n\t\t\t<Word>ecirc</Word>\n\t\t\t<Word>euml</Word>\n\t\t\t<Word>iacute</Word>\n\t\t\t<Word>igrave</Word>\n\t\t\t<Word>icirc</Word>\n\t\t\t<Word>iuml</Word>\n\t\t\t<Word>eth</Word>\n\t\t\t<Word>gt</Word>\n\t\t\t<Word>lt</Word>\n\t\t\t<Word>nbsp</Word>\n\t\t\t<Word>ntilde</Word>\n\t\t\t<Word>oacute</Word>\n\t\t\t<Word>ograve</Word>\n\t\t\t<Word>ocirc</Word>\n\t\t\t<Word>otilde</Word>\n\t\t\t<Word>ouml</Word>\n\t\t\t<Word>oslash</Word>\n\t\t\t<Word>quot</Word>\n\t\t\t<Word>reg</Word>\n\t\t\t<Word>szlig</Word>\n\t\t\t<Word>uacute</Word>\n\t\t\t<Word>ugrave</Word>\n\t\t\t<Word>ucirc</Word>\n\t\t\t<Word>uuml</Word>\n\t\t\t<Word>yacute</Word>\n\t\t\t<Word>thorn</Word>\n\t\t\t<Word>trade</Word>\n\t\t\t<Word>yuml</Word>\n\t\t</Keywords>\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n\t<RuleSet name=\"HtmlTagSet\" ignoreCase=\"false\">\n\t\t<Keywords color=\"Slash\">\n\t\t\t<Word>/</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Assignment\">\n\t\t\t<Word>=</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Tags\">\n\t\t\t<Word>!DOCTYPE</Word>\n\t\t\t<Word>A</Word>\n\t\t\t<Word>ABBR</Word>\n\t\t\t<Word>ACRONYM</Word>\n\t\t\t<Word>ADDRESS</Word>\n\t\t\t<Word>APPLET</Word>\n\t\t\t<Word>AREA</Word>\n\t\t\t<Word>B</Word>\n\t\t\t<Word>BASE</Word>\n\t\t\t<Word>BASEFONT</Word>\n\t\t\t<Word>BGSOUND</Word>\n\t\t\t<Word>BDO</Word>\n\t\t\t<Word>BIG</Word>\n\t\t\t<Word>BLINK</Word>\n\t\t\t<Word>BLOCKQUOTE</Word>\n\t\t\t<Word>BODY</Word>\n\t\t\t<Word>BR</Word>\n\t\t\t<Word>BUTTON</Word>\n\t\t\t<Word>CAPTION</Word>\n\t\t\t<Word>CENTER</Word>\n\t\t\t<Word>CITE</Word>\n\t\t\t<Word>CODE</Word>\n\t\t\t<Word>COL</Word>\n\t\t\t<Word>COLGROUP</Word>\n\t\t\t<Word>COMMENT</Word>\n\t\t\t<Word>DD</Word>\n\t\t\t<Word>DEL</Word>\n\t\t\t<Word>DFN</Word>\n\t\t\t<Word>DIR</Word>\n\t\t\t<Word>DIV</Word>\n\t\t\t<Word>DL</Word>\n\t\t\t<Word>DT</Word>\n\t\t\t<Word>EM</Word>\n\t\t\t<Word>EMBED</Word>\n\t\t\t<Word>FIELDSET</Word>\n\t\t\t<Word>FONT</Word>\n\t\t\t<Word>FORM</Word>\n\t\t\t<Word>FRAME</Word>\n\t\t\t<Word>FRAMESET</Word>\n\t\t\t<Word>H</Word>\n\t\t\t<Word>H1</Word>\n\t\t\t<Word>H2</Word>\n\t\t\t<Word>H3</Word>\n\t\t\t<Word>H4</Word>\n\t\t\t<Word>H5</Word>\n\t\t\t<Word>H6</Word>\n\t\t\t<Word>HEAD</Word>\n\t\t\t<Word>HR</Word>\n\t\t\t<Word>HTA:APPLICATION</Word>\n\t\t\t<Word>HTML</Word>\n\t\t\t<Word>I</Word>\n\t\t\t<Word>IFRAME</Word>\n\t\t\t<Word>IMG</Word>\n\t\t\t<Word>INPUT</Word>\n\t\t\t<Word>INS</Word>\n\t\t\t<Word>ISINDEX</Word>\n\t\t\t<Word>KBD</Word>\n\t\t\t<Word>LABEL</Word>\n\t\t\t<Word>LEGEnd</Word>\n\t\t\t<Word>LI</Word>\n\t\t\t<Word>LINK</Word>\n\t\t\t<Word>LISTING</Word>\n\t\t\t<Word>MAP</Word>\n\t\t\t<Word>MARQUEE</Word>\n\t\t\t<Word>MENU</Word>\n\t\t\t<Word>META</Word>\n\t\t\t<Word>MULTICOL</Word>\n\t\t\t<Word>NEXTID</Word>\n\t\t\t<Word>NOBR</Word>\n\t\t\t<Word>NOFRAMES</Word>\n\t\t\t<Word>NOSCRIPT</Word>\n\t\t\t<Word>OBJECT</Word>\n\t\t\t<Word>OL</Word>\n\t\t\t<Word>OPTGROUP</Word>\n\t\t\t<Word>OPTION</Word>\n\t\t\t<Word>P</Word>\n\t\t\t<Word>PARAM</Word>\n\t\t\t<Word>PLAINTEXT</Word>\n\t\t\t<Word>PRE</Word>\n\t\t\t<Word>Q</Word>\n\t\t\t<Word>S</Word>\n\t\t\t<Word>SAMP</Word>\n\t\t\t<Word>SCRIPT</Word>\n\t\t\t<Word>SELECT</Word>\n\t\t\t<Word>SERVER</Word>\n\t\t\t<Word>SMALL</Word>\n\t\t\t<Word>SOUND</Word>\n\t\t\t<Word>SPACER</Word>\n\t\t\t<Word>Span</Word>\n\t\t\t<Word>STRONG</Word>\n\t\t\t<Word>STYLE</Word>\n\t\t\t<Word>SUB</Word>\n\t\t\t<Word>SUP</Word>\n\t\t\t<Word>TABLE</Word>\n\t\t\t<Word>TBODY</Word>\n\t\t\t<Word>TD</Word>\n\t\t\t<Word>TEXTAREA</Word>\n\t\t\t<Word>TEXTFLOW</Word>\n\t\t\t<Word>TFOOT</Word>\n\t\t\t<Word>TH</Word>\n\t\t\t<Word>THEAD</Word>\n\t\t\t<Word>TITLE</Word>\n\t\t\t<Word>TR</Word>\n\t\t\t<Word>TT</Word>\n\t\t\t<Word>U</Word>\n\t\t\t<Word>VAR</Word>\n\t\t\t<Word>WBR</Word>\n\t\t\t<Word>XMP</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Attributes\">\n\t\t\t<Word>abbr</Word>\n\t\t\t<Word>accept-charset</Word>\n\t\t\t<Word>accept</Word>\n\t\t\t<Word>accesskey</Word>\n\t\t\t<Word>action</Word>\n\t\t\t<Word>align</Word>\n\t\t\t<Word>alink</Word>\n\t\t\t<Word>alt</Word>\n\t\t\t<Word>applicationname</Word>\n\t\t\t<Word>archive</Word>\n\t\t\t<Word>axis</Word>\n\t\t\t<Word>background</Word>\n\t\t\t<Word>behavior</Word>\n\t\t\t<Word>bgcolor</Word>\n\t\t\t<Word>bgproperties</Word>\n\t\t\t<Word>border</Word>\n\t\t\t<Word>bordercolor</Word>\n\t\t\t<Word>bordercolordark</Word>\n\t\t\t<Word>bordercolorligh</Word>\n\t\t\t<Word>borderstyle</Word>\n\t\t\t<Word>caption</Word>\n\t\t\t<Word>cellpadding</Word>\n\t\t\t<Word>cellspacing</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>charoff</Word>\n\t\t\t<Word>charset</Word>\n\t\t\t<Word>checked</Word>\n\t\t\t<Word>cite</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>classid</Word>\n\t\t\t<Word>clear</Word>\n\t\t\t<Word>code</Word>\n\t\t\t<Word>codetype</Word>\n\t\t\t<Word>color</Word>\n\t\t\t<Word>cols</Word>\n\t\t\t<Word>colspan</Word>\n\t\t\t<Word>compact</Word>\n\t\t\t<Word>content</Word>\n\t\t\t<Word>coords</Word>\n\t\t\t<Word>data</Word>\n\t\t\t<Word>datetime</Word>\n\t\t\t<Word>declare</Word>\n\t\t\t<Word>defer</Word>\n\t\t\t<Word>dir</Word>\n\t\t\t<Word>direction</Word>\n\t\t\t<Word>disabled</Word>\n\t\t\t<Word>dynsrc</Word>\n\t\t\t<Word>enctype</Word>\n\t\t\t<Word>face</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>frame</Word>\n\t\t\t<Word>frameborder</Word>\n\t\t\t<Word>framespacing</Word>\n\t\t\t<Word>gutter</Word>\n\t\t\t<Word>headers</Word>\n\t\t\t<Word>height</Word>\n\t\t\t<Word>href</Word>\n\t\t\t<Word>hreflang</Word>\n\t\t\t<Word>hspace</Word>\n\t\t\t<Word>http-equiv</Word>\n\t\t\t<Word>icon</Word>\n\t\t\t<Word>id</Word>\n\t\t\t<Word>ismap</Word>\n\t\t\t<Word>label</Word>\n\t\t\t<Word>language</Word>\n\t\t\t<Word>leftmargin</Word>\n\t\t\t<Word>link</Word>\n\t\t\t<Word>longdesc</Word>\n\t\t\t<Word>loop</Word>\n\t\t\t<Word>lowsrc</Word>\n\t\t\t<Word>marginheight</Word>\n\t\t\t<Word>marginwidth</Word>\n\t\t\t<Word>maximizebutton</Word>\n\t\t\t<Word>maxlength</Word>\n\t\t\t<Word>media</Word>\n\t\t\t<Word>method</Word>\n\t\t\t<Word>methods</Word>\n\t\t\t<Word>minimizebutton</Word>\n\t\t\t<Word>multiple</Word>\n\t\t\t<Word>name</Word>\n\t\t\t<Word>nohref</Word>\n\t\t\t<Word>noresize</Word>\n\t\t\t<Word>noshade</Word>\n\t\t\t<Word>nowrap</Word>\n\t\t\t<Word>object</Word>\n\t\t\t<Word>onabort</Word>\n\t\t\t<Word>onblur</Word>\n\t\t\t<Word>onchange</Word>\n\t\t\t<Word>onclick</Word>\n\t\t\t<Word>ondblclick</Word>\n\t\t\t<Word>onerror</Word>\n\t\t\t<Word>onfocus</Word>\n\t\t\t<Word>onkeydown</Word>\n\t\t\t<Word>onkeypress</Word>\n\t\t\t<Word>onkeyup</Word>\n\t\t\t<Word>onload</Word>\n\t\t\t<Word>onmousedown</Word>\n\t\t\t<Word>onmousemove</Word>\n\t\t\t<Word>onmouseout</Word>\n\t\t\t<Word>onmouseover</Word>\n\t\t\t<Word>onmouseup</Word>\n\t\t\t<Word>onreset</Word>\n\t\t\t<Word>onselect</Word>\n\t\t\t<Word>onsubmit</Word>\n\t\t\t<Word>onunload</Word>\n\t\t\t<Word>profile</Word>\n\t\t\t<Word>prompt</Word>\n\t\t\t<Word>readonly</Word>\n\t\t\t<Word>rel</Word>\n\t\t\t<Word>rev</Word>\n\t\t\t<Word>rows</Word>\n\t\t\t<Word>rowspan</Word>\n\t\t\t<Word>rules</Word>\n\t\t\t<Word>runat</Word>\n\t\t\t<Word>scheme</Word>\n\t\t\t<Word>scope</Word>\n\t\t\t<Word>scrollamount</Word>\n\t\t\t<Word>scrolldelay</Word>\n\t\t\t<Word>scrolling</Word>\n\t\t\t<Word>selected</Word>\n\t\t\t<Word>shape</Word>\n\t\t\t<Word>showintaskbar</Word>\n\t\t\t<Word>singleinstance</Word>\n\t\t\t<Word>size</Word>\n\t\t\t<Word>span</Word>\n\t\t\t<Word>src</Word>\n\t\t\t<Word>standby</Word>\n\t\t\t<Word>start</Word>\n\t\t\t<Word>style</Word>\n\t\t\t<Word>summary</Word>\n\t\t\t<Word>sysmenu</Word>\n\t\t\t<Word>tabindex</Word>\n\t\t\t<Word>target</Word>\n\t\t\t<Word>text</Word>\n\t\t\t<Word>title</Word>\n\t\t\t<Word>topmargin</Word>\n\t\t\t<Word>type</Word>\n\t\t\t<Word>urn</Word>\n\t\t\t<Word>usemap</Word>\n\t\t\t<Word>valign</Word>\n\t\t\t<Word>value</Word>\n\t\t\t<Word>valuetype</Word>\n\t\t\t<Word>version</Word>\n\t\t\t<Word>vlink</Word>\n\t\t\t<Word>vrml</Word>\n\t\t\t<Word>vspace</Word>\n\t\t\t<Word>width</Word>\n\t\t\t<Word>windowstate</Word>\n\t\t\t<Word>wrap</Word>\n\t\t</Keywords>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t</Span>\n\t\t<Rule color=\"UnknownAttribute\">[\\d\\w_]+(?=(\\s*=))</Rule>\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/INI.xshd",
    "content": "<!--\n  See also: http://en.wikipedia.org/wiki/INI_file\n\n  The INI file format is an informal standard for configuration files for some platforms or software.\n  INI files are simple text files with a basic structure composed of \"sections\" and \"properties\".\n\n  They are a deprecated standard on the Windows operating system. The use of the \"INI file\" has been\n  changed in Windows in favor of the registry, and deprecated in .NET in favor of XML .config files.\n  The name \"INI file\" comes from the filename extension usually used, \".INI\", that stands for \"initialization\".\n  Sometimes a different file extension will be used instead of .ini, such as \".CFG\", \".conf\", or \".TXT\".\n-->\n<SyntaxDefinition name=\"INI\" extensions=\".cfg;.conf;.ini;.iss\"\n     xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"Digits\"       foreground=\"Blue\" fontStyle=\"italic\" fontWeight=\"normal\" />\n  <Color name=\"Comment\"      foreground=\"Green\"/>\n  <Color name=\"Punctuation\"  foreground=\"Red\"/>\n  <Color name=\"String\"       foreground=\"Olive\"/>\n  <Color name=\"String2\"      foreground=\"Red\"/>\n\n  <Color name=\"Section\"      foreground=\"Purple\"/>\n\n  <Color name=\"PropertyName\" foreground=\"Blue\"/>\n\n  <RuleSet ignoreCase=\"true\">\n\n    <Span color=\"String\" multiline=\"false\" >\n      <Begin>'</Begin>\n      <End>'</End>\n    </Span>\n\n    <Span color=\"String2\" multiline=\"false\"  >\n      <Begin>\"</Begin>\n      <End>\"</End>\n    </Span>\n\n    <!-- span for escape sequences -->\n    <Span  color=\"Comment\" multiline=\"false\">\n\t  <Begin>;</Begin>\n\t</Span>\n    <Span  color=\"Comment\" multiline=\"false\">\n\t  <Begin>\\#</Begin>\n\t</Span>\n\n   <Span  color=\"Section\" multiline=\"false\">\n    <Begin>\\[</Begin>\n    <End>\\]</End>\n   </Span>\n\n   <Span  color=\"PropertyName\" multiline=\"false\">\n    <Begin>^[0-9A-Z\\-]+</Begin>\n    <End>=</End>\n   </Span>\n\n    <Rule color=\"Punctuation\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Rule color=\"Digits\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+[0-9]+[ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\\n\n    </Rule>\n\n  </RuleSet>\n\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/Java-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for Java 2001 by Jonathan Pierce & Mike Krueger -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"Java\" extensions=\".java\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <Color name=\"MethodName\" foreground=\"DarkBlue\" />\n  <Color name=\"Digits\" foreground=\"DarkBlue\" fontStyle=\"italic\" />\n  <Color name=\"String\" foreground=\"Magenta\"  />\n  <Color name=\"Character\" foreground=\"Magenta\"  />\n  <Color name=\"Comment\" foreground=\"SlateGray\" />\n  <Color name=\"Punctuation\" foreground=\"DarkGreen\" />\n  <Color name=\"AccessKeywords\" foreground=\"Black\" fontWeight=\"bold\" />\n  <Color name=\"OperatorKeywords\" foreground=\"DarkCyan\" fontWeight=\"bold\" />\n  <Color name=\"SelectionStatements\" foreground=\"Blue\" fontWeight=\"bold\" />\n  <Color name=\"IterationStatements\" foreground=\"Blue\" fontWeight=\"bold\" />\n  <Color name=\"ExceptionHandlingStatements\" foreground=\"Teal\" fontWeight=\"bold\" />\n  <Color name=\"ValueTypes\" foreground=\"Red\" fontWeight=\"bold\" />\n  <Color name=\"ReferenceTypes\" foreground=\"Red\" />\n  <Color name=\"Void\" foreground=\"Red\" />\n  <Color name=\"JumpStatements\" foreground=\"Navy\" />\n  <Color name=\"Modifiers\" foreground=\"Brown\" />\n  <Color name=\"AccessModifiers\" foreground=\"Blue\" fontWeight=\"bold\" />\n  <Color name=\"Package\" foreground=\"Green\" fontWeight=\"bold\" />\n  <Color name=\"Literals\" foreground=\"Black\" fontWeight=\"bold\" />\n  <Color name=\"CommentTags\" foreground=\"Red\" fontWeight=\"bold\" fontStyle=\"italic\" />\n  <Color name=\"JavaDocTags\" foreground=\"DarkGray\" fontWeight=\"bold\" fontStyle=\"italic\" />\n  <RuleSet ignoreCase=\"false\">\n    <Rule color=\"Punctuation\">\n      [?,.()\\[\\]{}+\\-/%*&lt;&gt;^!|]+\n    </Rule>\n    <Keywords color=\"AccessKeywords\">\n      <Word>this</Word>\n      <Word>super</Word>\n    </Keywords>\n    <Keywords color=\"OperatorKeywords\">\n      <Word>new</Word>\n      <Word>instanceof</Word>\n      <Word>true</Word>\n      <Word>false</Word>\n    </Keywords>\n    <Keywords color=\"SelectionStatements\">\n      <Word>else</Word>\n      <Word>if</Word>\n      <Word>switch</Word>\n      <Word>case</Word>\n    </Keywords>\n    <Keywords color=\"IterationStatements\">\n      <Word>do</Word>\n      <Word>for</Word>\n      <Word>while</Word>\n    </Keywords>\n    <Keywords color=\"JumpStatements\">\n      <Word>break</Word>\n      <Word>continue</Word>\n      <Word>default</Word>\n      <Word>goto</Word>\n      <Word>return</Word>\n    </Keywords>\n    <Keywords color=\"ExceptionHandlingStatements\">\n      <Word>try</Word>\n      <Word>throw</Word>\n      <Word>catch</Word>\n      <Word>finally</Word>\n    </Keywords>\n    <Keywords color=\"ValueTypes\">\n      <Word>boolean</Word>\n      <Word>double</Word>\n      <Word>int</Word>\n      <Word>short</Word>\n      <Word>long</Word>\n      <Word>float</Word>\n      <Word>byte</Word>\n      <Word>char</Word>\n    </Keywords>\n    <Keywords color=\"ReferenceTypes\">\n      <Word>class</Word>\n      <Word>interface</Word>\n      <Word>object</Word>\n    </Keywords>\n    <Keywords color=\"Void\">\n      <Word>void</Word>\n    </Keywords>\n    <Keywords color=\"Modifiers\">\n      <Word>abstract</Word>\n      <Word>const</Word>\n      <Word>static</Word>\n      <Word>final</Word>\n      <Word>native</Word>\n      <Word>extends</Word>\n      <Word>implements</Word>\n      <Word>volatile</Word>\n      <Word>transient</Word>\n      <Word>throws</Word>\n      <Word>strictfp</Word>\n      <Word>synchronized</Word>\n    </Keywords>\n    <Keywords color=\"AccessModifiers\">\n      <Word>public</Word>\n      <Word>protected</Word>\n      <Word>private</Word>\n    </Keywords>\n    <Keywords color=\"Package\">\n      <Word>package</Word>\n      <Word>import</Word>\n    </Keywords>\n    <Keywords color=\"Literals\">\n      <Word>null</Word>\n    </Keywords>\n    <Span color=\"Comment\" ruleSet=\"TestSet\">\n      <Begin>//</Begin>\n    </Span>\n    <Span color=\"Comment\" ruleSet=\"TestSet\" multiline=\"true\">\n      <Begin>/\\*</Begin>\n      <End>\\*/</End>\n    </Span>\n    <Span color=\"String\">\n      <Begin>\"</Begin>\n      <End>\"</End>\n      <RuleSet>\n        <Span begin=\"\\\\\" end=\".\" />\n      </RuleSet>\n    </Span>\n    <Span color=\"Character\">\n      <Begin>'</Begin>\n      <End>'</End>\n      <RuleSet>\n        <Span begin=\"\\\\\" end=\".\" />\n      </RuleSet>\n    </Span>\n    <Rule color=\"MethodName\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n    <Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n  </RuleSet>\n  <RuleSet name=\"TestSet\" ignoreCase=\"true\">\n    <Keywords color=\"CommentTags\">\n      <Word>TODO</Word>\n    </Keywords>\n    <Keywords color=\"JavaDocTags\">\n      <Word>@author</Word>\n      <Word>@version</Word>\n      <Word>@param</Word>\n      <Word>@return</Word>\n      <Word>@exception</Word>\n      <Word>@throws</Word>\n      <Word>@see</Word>\n      <Word>@since</Word>\n      <Word>@serial</Word>\n      <Word>@serialField</Word>\n      <Word>@serialData</Word>\n      <Word>@deprecated</Word>\n    </Keywords>\n    <Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n  </RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/JavaScript-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for JavaScript 2.0 by Svante Lidman -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name=\"JavaScript\" extensions=\".js\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Digits\" foreground=\"DarkBlue\" exampleText=\"3.14\" />\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n\t<Color name=\"String\" foreground=\"Sienna\" exampleText=\"var text = &quot;Hello, World!&quot;;\" />\n\t<Color name=\"Character\" foreground=\"Sienna\" exampleText=\"var char = 'a';\" />\n\t<Color name=\"Regex\" foreground=\"Sienna\" exampleText=\"/abc/m\" />\n\t<Color name=\"JavaScriptKeyWords\" foreground=\"Blue\" exampleText=\"return myVariable;\" />\n\t<Color name=\"JavaScriptIntrinsics\" foreground=\"Blue\" exampleText=\"Math.random()\" />\n\t<Color name=\"JavaScriptLiterals\" foreground=\"Blue\" exampleText=\"return false;\" />\n\t<Color name=\"JavaScriptGlobalFunctions\" foreground=\"Blue\" exampleText=\"escape(myString);\" />\n\t<RuleSet ignoreCase=\"false\">\n\t\t<Keywords color=\"JavaScriptKeyWords\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>delete</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>function</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>new</Word>\n\t\t\t<Word>return</Word>\n\t\t\t<Word>this</Word>\n\t\t\t<Word>typeof</Word>\n\t\t\t<Word>var</Word>\n\t\t\t<Word>void</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>with</Word>\n\t\t\t<Word>abstract</Word>\n\t\t\t<Word>boolean</Word>\n\t\t\t<Word>byte</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>catch</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>const</Word>\n\t\t\t<Word>debugger</Word>\n\t\t\t<Word>default</Word>\n\t\t\t<Word>do</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>enum</Word>\n\t\t\t<Word>export</Word>\n\t\t\t<Word>extends</Word>\n\t\t\t<Word>final</Word>\n\t\t\t<Word>finally</Word>\n\t\t\t<Word>float</Word>\n\t\t\t<Word>goto</Word>\n\t\t\t<Word>implements</Word>\n\t\t\t<Word>import</Word>\n\t\t\t<Word>instanceof</Word>\n\t\t\t<Word>int</Word>\n\t\t\t<Word>interface</Word>\n\t\t\t<Word>long</Word>\n\t\t\t<Word>native</Word>\n\t\t\t<Word>package</Word>\n\t\t\t<Word>private</Word>\n\t\t\t<Word>protected</Word>\n\t\t\t<Word>public</Word>\n\t\t\t<Word>short</Word>\n\t\t\t<Word>static</Word>\n\t\t\t<Word>super</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>synchronized</Word>\n\t\t\t<Word>throw</Word>\n\t\t\t<Word>throws</Word>\n\t\t\t<Word>transient</Word>\n\t\t\t<Word>try</Word>\n\t\t\t<Word>volatile</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"JavaScriptIntrinsics\">\n\t\t\t<Word>Array</Word>\n\t\t\t<Word>Boolean</Word>\n\t\t\t<Word>Date</Word>\n\t\t\t<Word>Function</Word>\n\t\t\t<Word>Global</Word>\n\t\t\t<Word>Math</Word>\n\t\t\t<Word>Number</Word>\n\t\t\t<Word>Object</Word>\n\t\t\t<Word>RegExp</Word>\n\t\t\t<Word>String</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"JavaScriptLiterals\">\n\t\t\t<Word>false</Word>\n\t\t\t<Word>null</Word>\n\t\t\t<Word>true</Word>\n\t\t\t<Word>NaN</Word>\n\t\t\t<Word>Infinity</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"JavaScriptGlobalFunctions\">\n\t\t\t<Word>eval</Word>\n\t\t\t<Word>parseInt</Word>\n\t\t\t<Word>parseFloat</Word>\n\t\t\t<Word>escape</Word>\n\t\t\t<Word>unescape</Word>\n\t\t\t<Word>isNaN</Word>\n\t\t\t<Word>isFinite</Word>\n\t\t</Keywords>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t<!--<Rule color=\"Regex\">/.*/</Rule>-->\n\t\t<Span color=\"Regex\">\n\t\t\t<Begin>/</Begin>\n\t\t\t<End>/</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\/\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"Character\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/Log.xshd",
    "content": "<!--\n  There is no such thing like a log file format but there are usually keywords,\n  such as, ERROR, FATAL, DEBUG, or timestamps in squared brackets that could be\n  viewed with a better experience than no highlighting at all.\n  \n  This highlighting pattern is intended to improve the viewing experience for text\n  based (non-xml based) log files.\n-->\n<SyntaxDefinition name=\"LOG\" extensions=\".log\"\n     xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"Digits\"       foreground=\"Blue\" fontStyle=\"italic\" fontWeight=\"normal\" />\n  <Color name=\"Comment\"      foreground=\"Green\"/>\n  <Color name=\"Punctuation\"  foreground=\"Red\"/>\n  <Color name=\"String\"       foreground=\"Olive\"/>\n  <Color name=\"String2\"      foreground=\"Red\"/>\n\n  <Color name=\"Section\"      foreground=\"Blue\"/>\n\n  <Color name=\"AmericanDate\" foreground=\"Green\"/>\n  <Color name=\"TimeStamp\"    foreground=\"Green\"/>\n\n  <Color name=\"ImportantKeywords\" foreground=\"Red\" fontWeight=\"bold\"/>\n  <Color name=\"InfoKeywords\" foreground=\"Green\" fontWeight=\"normal\"/>\n  \n  <RuleSet ignoreCase=\"true\">\n\n    <Keywords color=\"InfoKeywords\">\n      <Word>Info</Word>\n      <Word>Information</Word>\n      <Word>Trace</Word>\n      <Word>Debug</Word>\n    </Keywords>\n\n    <Keywords color=\"ImportantKeywords\">\n      <Word>Error</Word>\n      <Word>Warn</Word>\n      <Word>Warning</Word>\n      <Word>Exception</Word>\n      <Word>Fatal</Word>\n    </Keywords>\n\n    <Span color=\"String\" multiline=\"false\" >\n      <Begin>'</Begin>\n      <End>'</End>\n    </Span>\n\n    <Span color=\"String2\" multiline=\"false\"  >\n      <Begin>\"</Begin>\n      <End>\"</End>\n    </Span>\n\n    <!-- span for escape sequences -->\n    <Span  color=\"Comment\" multiline=\"false\">\n\t  <Begin>;</Begin>\n    </Span>\n      <Span  color=\"Comment\" multiline=\"false\">\n      <Begin>\\#</Begin>\n    </Span>\n\n     <Span  color=\"Section\" multiline=\"false\">\n      <Begin>\\[</Begin>\n      <End>\\]</End>\n     </Span>\n\n    <Rule color=\"Punctuation\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Rule color=\"Digits\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+[0-9]+[ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\\n\n    </Rule>\n\n    <!-- American Date: 2013-01-28 -->\n    <Rule color=\"AmericanDate\">\n      [0-9][0-9][0-9][0-9]\\-[0-9][0-9]\\-[0-9][0-9]\n    </Rule>\n    \n    <!-- Time Stamp with milli seconds: 13:05:35.425 -->\n    <Rule color=\"TimeStamp\">\n      [0-9][0-9]\\:[0-9][0-9]\\:[0-9][0-9]\\.[0-9][0-9][0-9]\n    </Rule>\n\n    <!-- Time Stamp WITHOUT milli seconds: 13:05:35 -->\n    <Rule color=\"TimeStamp\">\n      [0-9][0-9]\\:[0-9][0-9]\\:[0-9][0-9]\n    </Rule>\n\n  </RuleSet>\n\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/MarkDown-Mode.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"MarkDown\" extensions=\".md\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Heading\" foreground=\"Maroon\" exampleText=\"# Title #\" />\n\t<Color name=\"Emphasis\" fontStyle=\"italic\" exampleText=\"*this* is important!\" />\n\t<Color name=\"StrongEmphasis\" fontWeight=\"bold\" exampleText=\"**this** is more important!\" />\n\t<Color name=\"Code\" exampleText=\"this is `int.GetHashCode()`\" />\n\t<Color name=\"BlockQuote\" foreground=\"DarkBlue\" exampleText=\"&gt; This is a\\r\\n&gt; quote.\" />\n\t<Color name=\"Link\" foreground=\"Blue\" exampleText=\"[text](http://example.com)\" />\n\t<Color name=\"Image\" foreground=\"Green\" exampleText=\"[text][http://example.com/test.png]\" />\n\t<Color name=\"LineBreak\" background=\"LightGray\" exampleText=\"end of line      \\r\\n2nd line   \" />\n\t\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Rule color=\"Heading\">\n\t\t\t^\\#.*\n\t\t</Rule>\n\t\t<Rule color=\"StrongEmphasis\">\n\t\t\t\\*\\*.*\\*\\*\n\t\t</Rule>\n\t\t<Rule color=\"StrongEmphasis\">\n\t\t\t__.*__\n\t\t</Rule>\n\t\t<Rule color=\"Emphasis\">\n\t\t\t\\*(?![ ]).*\\*\n\t\t</Rule>\n\t\t<Rule color=\"Emphasis\">\n\t\t\t_.*_\n\t\t</Rule>\n\t\t<Rule color=\"Code\">\n\t\t\t`.*`\n\t\t</Rule>\n\t\t<Span color=\"Code\" ruleSet=\"C#/\" multiline=\"true\">\n\t\t\t<Begin>^\\t</Begin>\n\t\t\t<End>^(?!\\t)</End>\n\t\t</Span>\n\t\t<Span color=\"Code\" ruleSet=\"C#/\" multiline=\"true\">\n\t\t\t<Begin>^[ ]{4}</Begin>\n\t\t\t<End>^(?![ ]{4})</End>\n\t\t</Span>\n\t\t<Span color=\"BlockQuote\" multiline=\"true\">\n\t\t\t<Begin>^&gt;</Begin>\n\t\t\t<End>^(?!&gt;)</End>\n\t\t</Span>\n\t\t<Rule color=\"Image\">\n\t\t\t\\!\\[.*\\]\\[.*\\]\n\t\t</Rule>\n\t\t<Rule color=\"Link\">\n\t\t\t\\[.*\\]\\(.*\\)\n\t\t</Rule>\n\t\t<Rule color=\"Link\">\n\t\t\t\\[.*\\]\\[.*\\]\n\t\t</Rule>\n\t\t<Rule color=\"LineBreak\">\n\t\t\t[ ]{2}$\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/PHP-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for PHP 2001 by Chad Smith & Mike Krueger -->\n<!-- converted to AvalonEdit format by Siegfried Pammer in 2010 -->\n<SyntaxDefinition name =\"PHP\" extensions = \".php\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n\t<Color name=\"String\" foreground=\"Blue\" exampleText=\"$text = &quot;Hello, World!&quot;\" />\n\t<Color name=\"NumberLiteral\" foreground=\"DarkBlue\" exampleText=\"3.1415\" />\n\t<Color name=\"Punctuation\" foreground=\"DarkGreen\" exampleText=\"a(b + c)\" />\n\t<Color name=\"FunctionCall\" foreground=\"MidnightBlue\" fontWeight=\"bold\" exampleText=\"abs(num);\"/>\n\t<Color name=\"AccessKeywords\" foreground=\"Black\" fontWeight=\"bold\" exampleText=\"global $database;\" />\n\t<Color name=\"OperatorKeywords\" foreground=\"DarkCyan\" fontWeight=\"bold\" exampleText=\"if (x === false and y === false) { }\" />\n\t<Color name=\"SelectionStatements\" foreground=\"Blue\" fontWeight=\"bold\" exampleText=\"if (true) { } else { }\" />\n\t<Color name=\"IterationStatements\" foreground=\"Blue\" fontWeight=\"bold\" exampleText=\"while (true) { }\" />\n\t<Color name=\"JumpStatements\" foreground=\"Navy\" fontWeight=\"bold\" exampleText=\"if (x == 5) continue;\" />\n\t<Color name=\"ControlStatements\" foreground=\"Teal\" fontWeight=\"bold\" exampleText=\"include(&quot;test.php&quot;);\" />\n\t<Color name=\"ValueTypes\" foreground=\"Red\" fontWeight=\"bold\" exampleText=\"int test = 5;\" />\n\t<Color name=\"OtherTypes\" foreground=\"Red\" exampleText=\"object test = null;\" />\n\t<Color name=\"AccessModifiers\" foreground=\"Blue\" fontWeight=\"bold\" exampleText=\"public function test() {}\" />\n\t<RuleSet>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>\\#</Begin>\n\t\t</Span>\n\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\n\t\t<!-- Digits -->\n\t\t<Rule color=\"NumberLiteral\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t|\n\t\t\t\\b0[0-9]+ # octal number\n\t\t|\n\t\t\t(\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+           #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[?,.:;()\\[\\]{}+\\-/%*&lt;&gt;&amp;^!|~@]+\n\t\t</Rule>\n\n\t\t<!-- Mark previous rule-->\n\t\t<Rule color=\"FunctionCall\">\n\t\t\\b\n\t\t[\\d\\w_]+  # an identifier\n\t\t(?=\\s*\\() # followed by (\n\t\t</Rule>\n\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<!-- heredoc syntax -->\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>&lt;&lt;&lt;\\\"?[\\d\\w_]+\\\"?$</Begin>\n\t\t \t<End>^[\\d\\w_]+;</End>\n\t\t</Span>\n\n\t\t<!-- nowdoc syntax -->\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>&lt;&lt;&lt;\\'[\\d\\w_]+\\'$</Begin>\n\t\t\t<End>^[\\d\\w_]+;</End>\n\t\t</Span>\n\n\t\t<Keywords color=\"AccessKeywords\">\n\t\t\t<Word>global</Word>\n\t\t\t<Word>my</Word>\n\t\t\t<Word>var</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"OperatorKeywords\">\n\t\t\t<Word>and</Word>\n\t\t\t<Word>or</Word>\n\t\t\t<Word>new</Word>\n\t\t\t<Word>clone</Word>\n\t\t\t<Word>instanceof</Word>\n\t\t\t<Word>xor</Word>\n\t\t\t<Word>true</Word>\n\t\t\t<Word>false</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"SelectionStatements\">\n\t\t\t<Word>else</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>endif</Word>\n\t\t\t<Word>elseif</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"IterationStatements\">\n\t\t\t<Word>do</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>foreach</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>endwhile</Word>\n\t\t\t<Word>exit</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"JumpStatements\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>default</Word>\n\t\t\t<Word>goto</Word>\n\t\t\t<Word>return</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"ControlStatements\">\n\t\t\t<Word>require</Word>\n\t\t\t<Word>include</Word>\n\t\t\t<Word>require</Word>\n\t\t\t<Word>include</Word>\n\t\t\t<Word>function</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"ValueTypes\">\n\t\t\t<Word>int</Word>\n\t\t\t<Word>integer</Word>\n\t\t\t<Word>real</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>float</Word>\n\t\t\t<Word>string</Word>\n\t\t\t<Word>array</Word>\n\t\t\t<Word>object</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"OtherTypes\">\n\t\t\t<Word>class</Word>\n\t\t\t<Word>void</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"AccessModifiers\">\n\t\t\t<Word>public</Word>\n\t\t\t<Word>private</Word>\n\t\t</Keywords>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/PLSQL.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<!-- Source: http://community.sharpdevelop.net/forums/t/12893.aspx -->\n<SyntaxDefinition name =\"PLSQL\" extensions = \".plsql\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <Color name=\"Comment\"       foreground=\"Green\"  exampleText=\"-- comment\" />\n  <Color name=\"String\"        foreground=\"Red\"    exampleText=\"&quot;Hello, World!&quot;\" />\n  <Color name=\"Keywords\"      foreground=\"Blue\"   fontWeight=\"bold\" />\n  <Color name=\"ReservedWords\" foreground=\"Blue\"   fontWeight=\"bold\" />\n  <Color name=\"Functions\"     foreground=\"Purple\" fontWeight=\"bold\" />\n\n  <RuleSet ignoreCase=\"true\">\n    <Span color=\"Comment\">\n      <Begin>--</Begin>\n    </Span>\n\n    <Span color=\"Comment\" multiline=\"true\">\n      <Begin>/\\*</Begin>\n      <End>\\*/</End>\n    </Span>\n\n    <Span color=\"String\" multiline=\"true\">\n      <Begin>'</Begin>\n      <End>'</End>\n      <RuleSet>\n        <!-- span for escape sequences -->\n        <Span begin=\"\\\\\" end=\".\"/>\n      </RuleSet>\n    </Span>\n\n    <Span color=\"String\" multiline=\"true\">\n      <Begin>\"</Begin>\n      <End>\"</End>\n      <RuleSet>\n        <!-- span for escape sequences -->\n        <Span begin=\"\\\\\" end=\".\"/>\n      </RuleSet>\n    </Span>\n\n    <Keywords color=\"ReservedWords\">\n      <Word>all</Word>\n      <Word>alter</Word>\n      <Word>and</Word>\n      <Word>any</Word>\n      <Word>array</Word>\n      <Word>arrow</Word>\n      <Word>as</Word>\n      <Word>asc</Word>\n      <Word>at</Word>\n      <Word>begin</Word>\n      <Word>between</Word>\n      <Word>by</Word>\n      <Word>case</Word>\n      <Word>check</Word>\n      <Word>clusters</Word>\n      <Word>cluster</Word>\n      <Word>colauth</Word>\n      <Word>columns</Word>\n      <Word>compress</Word>\n      <Word>connect</Word>\n      <Word>crash</Word>\n      <Word>create</Word>\n      <Word>current</Word>\n      <Word>decimal</Word>\n      <Word>declare</Word>\n      <Word>default</Word>\n      <Word>delete</Word>\n      <Word>desc</Word>\n      <Word>distinct</Word>\n      <Word>drop</Word>\n      <Word>else</Word>\n      <Word>end</Word>\n      <Word>exception</Word>\n      <Word>exclusive</Word>\n      <Word>exists</Word>\n      <Word>exec</Word>\n      <Word>fetch</Word>\n      <Word>form</Word>\n      <Word>for</Word>\n      <Word>from</Word>\n      <Word>goto</Word>\n      <Word>grant</Word>\n      <Word>group</Word>\n      <Word>having</Word>\n      <Word>identified</Word>\n      <Word>if</Word>\n      <Word>in</Word>\n      <Word>indexes</Word>\n      <Word>index</Word>\n      <Word>insert</Word>\n      <Word>intersect</Word>\n      <Word>into</Word>\n      <Word>is</Word>\n      <Word>like</Word>\n      <Word>lock</Word>\n      <Word>minus</Word>\n      <Word>mode</Word>\n      <Word>nocompress</Word>\n      <Word>not</Word>\n      <Word>nowait</Word>\n      <Word>null</Word>\n      <Word>of</Word>\n      <Word>on</Word>\n      <Word>option</Word>\n      <Word>or</Word>\n      <Word>order</Word>\n      <Word>overlaps</Word>\n      <Word>prior</Word>\n      <Word>procedure</Word>\n      <Word>public</Word>\n      <Word>range</Word>\n      <Word>record</Word>\n      <Word>resource</Word>\n      <Word>revoke</Word>\n      <Word>select</Word>\n      <Word>share</Word>\n      <Word>size</Word>\n      <Word>sql</Word>\n      <Word>start</Word>\n      <Word>subtype</Word>\n      <Word>tabauth</Word>\n      <Word>table</Word>\n      <Word>then</Word>\n      <Word>to</Word>\n      <Word>type</Word>\n      <Word>union</Word>\n      <Word>unique</Word>\n      <Word>update</Word>\n      <Word>use</Word>\n      <Word>values</Word>\n      <Word>view</Word>\n      <Word>views</Word>\n      <Word>when</Word>\n      <Word>where</Word>\n      <Word>with</Word>\n    </Keywords>\n\n    <Keywords color=\"Keywords\">\n      <Word>a</Word>\n      <Word>add</Word>\n      <Word>agent</Word>\n      <Word>aggregate</Word>\n      <Word>array</Word>\n      <Word>attribute</Word>\n      <Word>authid</Word>\n      <Word>avg</Word>\n      <Word>bfile_base</Word>\n      <Word>binary</Word>\n      <Word>blob_base</Word>\n      <Word>block</Word>\n      <Word>body</Word>\n      <Word>both</Word>\n      <Word>bound</Word>\n      <Word>bulk</Word>\n      <Word>byte</Word>\n      <Word>c</Word>\n      <Word>call</Word>\n      <Word>calling</Word>\n      <Word>cascade</Word>\n      <Word>char</Word>\n      <Word>char_base</Word>\n      <Word>character</Word>\n      <Word>charsetform</Word>\n      <Word>charsetid</Word>\n      <Word>charset</Word>\n      <Word>clob_base</Word>\n      <Word>close</Word>\n      <Word>collect</Word>\n      <Word>comment</Word>\n      <Word>commit</Word>\n      <Word>committed</Word>\n      <Word>compiled</Word>\n      <Word>constant</Word>\n      <Word>constructor</Word>\n      <Word>context</Word>\n      <Word>convert</Word>\n      <Word>count</Word>\n      <Word>cursor</Word>\n      <Word>customdatum</Word>\n      <Word>dangling</Word>\n      <Word>data</Word>\n      <Word>date</Word>\n      <Word>date_base</Word>\n      <Word>day</Word>\n      <Word>define</Word>\n      <Word>deterministic</Word>\n      <Word>double</Word>\n      <Word>duration</Word>\n      <Word>element</Word>\n      <Word>elsif</Word>\n      <Word>empty</Word>\n      <Word>escape</Word>\n      <Word>except</Word>\n      <Word>exceptions</Word>\n      <Word>execute</Word>\n      <Word>exit</Word>\n      <Word>external</Word>\n      <Word>final</Word>\n      <Word>fixed</Word>\n      <Word>float</Word>\n      <Word>forall</Word>\n      <Word>force</Word>\n      <Word>function</Word>\n      <Word>general</Word>\n      <Word>hash</Word>\n      <Word>heap</Word>\n      <Word>hidden</Word>\n      <Word>hour</Word>\n      <Word>immediate</Word>\n      <Word>including</Word>\n      <Word>indicator</Word>\n      <Word>indices</Word>\n      <Word>infinite</Word>\n      <Word>instantiable</Word>\n      <Word>int</Word>\n      <Word>interface</Word>\n      <Word>interval</Word>\n      <Word>invalidate</Word>\n      <Word>isolation</Word>\n      <Word>java</Word>\n      <Word>language</Word>\n      <Word>large</Word>\n      <Word>leading</Word>\n      <Word>length</Word>\n      <Word>level</Word>\n      <Word>library</Word>\n      <Word>like2</Word>\n      <Word>like4</Word>\n      <Word>likec</Word>\n      <Word>limit</Word>\n      <Word>limited</Word>\n      <Word>local</Word>\n      <Word>long</Word>\n      <Word>loop</Word>\n      <Word>map</Word>\n      <Word>max</Word>\n      <Word>maxlen</Word>\n      <Word>member</Word>\n      <Word>merge</Word>\n      <Word>min</Word>\n      <Word>minute</Word>\n      <Word>mod</Word>\n      <Word>modify</Word>\n      <Word>month</Word>\n      <Word>multiset</Word>\n      <Word>name</Word>\n      <Word>nan</Word>\n      <Word>national</Word>\n      <Word>native</Word>\n      <Word>nchar</Word>\n      <Word>new</Word>\n      <Word>nocopy</Word>\n      <Word>number_base</Word>\n      <Word>object</Word>\n      <Word>ocicoll</Word>\n      <Word>ocidatetime</Word>\n      <Word>ocidate</Word>\n      <Word>ociduration</Word>\n      <Word>ociinterval</Word>\n      <Word>ociloblocator</Word>\n      <Word>ocinumber</Word>\n      <Word>ociraw</Word>\n      <Word>ocirefcursor</Word>\n      <Word>ociref</Word>\n      <Word>ocirowid</Word>\n      <Word>ocistring</Word>\n      <Word>ocitype</Word>\n      <Word>only</Word>\n      <Word>opaque</Word>\n      <Word>open</Word>\n      <Word>operator</Word>\n      <Word>oracle</Word>\n      <Word>oradata</Word>\n      <Word>organization</Word>\n      <Word>orlany</Word>\n      <Word>orlvary</Word>\n      <Word>others</Word>\n      <Word>out</Word>\n      <Word>overriding</Word>\n      <Word>package</Word>\n      <Word>parallel_enable</Word>\n      <Word>parameter</Word>\n      <Word>parameters</Word>\n      <Word>partition</Word>\n      <Word>pascal</Word>\n      <Word>pipe</Word>\n      <Word>pipelined</Word>\n      <Word>pragma</Word>\n      <Word>precision</Word>\n      <Word>private</Word>\n      <Word>raise</Word>\n      <Word>range</Word>\n      <Word>raw</Word>\n      <Word>read</Word>\n      <Word>record</Word>\n      <Word>ref</Word>\n      <Word>reference</Word>\n      <Word>rem</Word>\n      <Word>remainder</Word>\n      <Word>rename</Word>\n      <Word>result</Word>\n      <Word>return</Word>\n      <Word>returning</Word>\n      <Word>reverse</Word>\n      <Word>rollback</Word>\n      <Word>row</Word>\n      <Word>sample</Word>\n      <Word>save</Word>\n      <Word>savepoint</Word>\n      <Word>sb1</Word>\n      <Word>sb2</Word>\n      <Word>sb4</Word>\n      <Word>second</Word>\n      <Word>segment</Word>\n      <Word>self</Word>\n      <Word>separate</Word>\n      <Word>sequence</Word>\n      <Word>serializable</Word>\n      <Word>set</Word>\n      <Word>short</Word>\n      <Word>size_t</Word>\n      <Word>some</Word>\n      <Word>sparse</Word>\n      <Word>sqlcode</Word>\n      <Word>sqldata</Word>\n      <Word>sqlname</Word>\n      <Word>sqlstate</Word>\n      <Word>standard</Word>\n      <Word>static</Word>\n      <Word>stddev</Word>\n      <Word>stored</Word>\n      <Word>string</Word>\n      <Word>struct</Word>\n      <Word>style</Word>\n      <Word>submultiset</Word>\n      <Word>subpartition</Word>\n      <Word>substitutable</Word>\n      <Word>subtype</Word>\n      <Word>sum</Word>\n      <Word>synonym</Word>\n      <Word>tdo</Word>\n      <Word>the</Word>\n      <Word>time</Word>\n      <Word>timestamp</Word>\n      <Word>timezone_abbr</Word>\n      <Word>timezone_hour</Word>\n      <Word>timezone_minute</Word>\n      <Word>timezone_region</Word>\n      <Word>trailing</Word>\n      <Word>transac</Word>\n      <Word>transactional</Word>\n      <Word>trusted</Word>\n      <Word>type</Word>\n      <Word>ub1</Word>\n      <Word>ub2</Word>\n      <Word>ub4</Word>\n      <Word>under</Word>\n      <Word>unsigned</Word>\n      <Word>untrusted</Word>\n      <Word>use</Word>\n      <Word>using</Word>\n      <Word>valist</Word>\n      <Word>value</Word>\n      <Word>variable</Word>\n      <Word>variance</Word>\n      <Word>varray</Word>\n      <Word>varying</Word>\n      <Word>void</Word>\n      <Word>while</Word>\n      <Word>work</Word>\n      <Word>wrapped</Word>\n      <Word>write</Word>\n      <Word>year</Word>\n      <Word>zone</Word>\n    </Keywords>\n\n    <Keywords color=\"Functions\">\n      <Word>abs</Word>\n      <Word>greatest</Word>\n      <Word>sin</Word>\n      <Word>acos</Word>\n      <Word>group_id</Word>\n      <Word>sinh</Word>\n      <Word>add_months</Word>\n      <Word>hextoraw</Word>\n      <Word>soundex</Word>\n      <Word>ascii</Word>\n      <Word>initcap</Word>\n      <Word>sqlcode</Word>\n      <Word>asciistr</Word>\n      <Word>instr</Word>\n      <Word>sqlerrm</Word>\n      <Word>asin</Word>\n      <Word>lag</Word>\n      <Word>sqrt</Word>\n      <Word>atan</Word>\n      <Word>last_day</Word>\n      <Word>stddev</Word>\n      <Word>atan2</Word>\n      <Word>lead</Word>\n      <Word>substr</Word>\n      <Word>avg</Word>\n      <Word>least</Word>\n      <Word>sum</Word>\n      <Word>bfilename</Word>\n      <Word>length</Word>\n      <Word>sys_context</Word>\n      <Word>bin_to_num</Word>\n      <Word>lnnvl</Word>\n      <Word>sysdate</Word>\n      <Word>bitand</Word>\n      <Word>ln</Word>\n      <Word>systimestamp</Word>\n      <Word>cardinality</Word>\n      <Word>localtimestamp</Word>\n      <Word>tan</Word>\n      <Word>case</Word>\n      <Word>statement</Word>\n      <Word>log</Word>\n      <Word>tanh</Word>\n      <Word>cast</Word>\n      <Word>lower</Word>\n      <Word>to_char</Word>\n      <Word>ceil</Word>\n      <Word>lpad</Word>\n      <Word>to_clob</Word>\n      <Word>chartorowid</Word>\n      <Word>ltrim</Word>\n      <Word>to_date</Word>\n      <Word>chr</Word>\n      <Word>max</Word>\n      <Word>to_dsinterval</Word>\n      <Word>coalesce</Word>\n      <Word>median</Word>\n      <Word>to_lob</Word>\n      <Word>compose</Word>\n      <Word>min</Word>\n      <Word>to_multi_byte</Word>\n      <Word>concat</Word>\n      <Word>mod</Word>\n      <Word>to_nclob</Word>\n      <Word>concat</Word>\n      <Word>with</Word>\n      <Word>months_between</Word>\n      <Word>to_number</Word>\n      <Word>convert</Word>\n      <Word>nanvl</Word>\n      <Word>to_single_byte</Word>\n      <Word>corr</Word>\n      <Word>new_time</Word>\n      <Word>to_timestamp</Word>\n      <Word>cos</Word>\n      <Word>next_day</Word>\n      <Word>to_timestamp_tz</Word>\n      <Word>cosh</Word>\n      <Word>nullif</Word>\n      <Word>to_yminterval</Word>\n      <Word>count</Word>\n      <Word>numtodsinterval</Word>\n      <Word>translate</Word>\n      <Word>covar_pop</Word>\n      <Word>numtoyminterval</Word>\n      <Word>trim</Word>\n      <Word>covar_samp</Word>\n      <Word>nvl</Word>\n      <Word>trunc</Word>\n      <Word>(dates)</Word>\n      <Word>cume_dist</Word>\n      <Word>nvl2</Word>\n      <Word>trunc</Word>\n      <Word>(numbers)</Word>\n      <Word>current_date</Word>\n      <Word>power</Word>\n      <Word>tz_offset</Word>\n      <Word>current_timestamp</Word>\n      <Word>rank</Word>\n      <Word>uid</Word>\n      <Word>dbtimezone</Word>\n      <Word>rawtohex</Word>\n      <Word>upper</Word>\n      <Word>decode</Word>\n      <Word>remainder</Word>\n      <Word>user</Word>\n      <Word>decompose</Word>\n      <Word>replace</Word>\n      <Word>userenv</Word>\n      <Word>dense_rank</Word>\n      <Word>round</Word>\n      <Word>(dates)</Word>\n      <Word>var_pop</Word>\n      <Word>dump</Word>\n      <Word>round</Word>\n      <Word>(numbers)</Word>\n      <Word>var_samp</Word>\n      <Word>exp</Word>\n      <Word>rpad</Word>\n      <Word>variance</Word>\n      <Word>extract</Word>\n      <Word>rtrim</Word>\n      <Word>vsize</Word>\n      <Word>floor</Word>\n      <Word>sessiontimezone</Word>\n      <Word>from_tz</Word>\n      <Word>sign</Word>\n    </Keywords>\n  </RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/Pascal.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- Original Source: http://www.assembla.com/code/PPJCompiler/subversion/nodes/PPJCompiler/bin/Release/Pascal.xshd -->\n<SyntaxDefinition name = \"Pascal\" extensions = \".pas\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n  <Color name=\"Digits\" foreground=\"Red\" exampleText=\"3.1415f\"/>\n\n  <Color name=\"Punctuation\"       foreground=\"#2B877E\" exampleText=\"a(b.c);\" />\n\n  <Color name=\"Comment\"           foreground=\"Green\" exampleText=\"// comment\" />\n\n  <Color name=\"Char\"              foreground=\"Magenta\" exampleText=\"char linefeed = '\\n';\"/>\n  <Color name=\"String\"            foreground=\"Blue\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name =\"DataTypes\"        foreground=\"#3E4F4F\"      fontWeight=\"normal\" fontStyle=\"normal\"/>\n  <Color name =\"Operators\"        foreground=\"#4416A1\"      fontWeight=\"normal\" fontStyle=\"normal\"/>\n  <Color name =\"Statements\"       foreground=\"#0A55A3\"      fontWeight=\"normal\" fontStyle=\"normal\"/>\n  <Color name=\"MethodCall\"        foreground=\"MidnightBlue\" fontWeight=\"bold\" />\n  <Color name =\"FunctionKeywords\" foreground=\"#193D55\"      fontWeight=\"normal\" fontStyle=\"normal\"/>\n\n  <Color name = \"Documenation\"    foreground=\"#FF707070\" fontWeight=\"normal\" fontStyle=\"normal\" />\n\n  <Color name=\"CommentMarkerSetTodo\"       foreground=\"Red\" fontWeight=\"bold\" />\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\"/>\n\n  <RuleSet name=\"CommentMarkerSet\" ignoreCase=\"true\">\n\t\t<Keywords color=\"CommentMarkerSetTodo\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"CommentMarkerSetHackUndone\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n    <Keywords color=\"Documenation\">\n      <Word>@param</Word>\n      <Word>@returns</Word>\n    </Keywords>\n  </RuleSet>\n\t\n\t<!-- This is the main ruleset. -->\n  <RuleSet ignoreCase=\"true\">\n    <Rule color=\"Punctuation\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;\\#]+\n    </Rule>\n\n    <Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n\t\t\t<Begin>{</Begin>\n\t\t\t<End>}</End>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n        <!-- Span begin=\"&quot;\" end=\"&quot;\"/ -->\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Char\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n        <!-- Span begin=\"'\" end=\"'\"/ -->\n\t\t\t</RuleSet>\n\t\t</Span>\n\n    <Keywords color = \"DataTypes\">\n      <Word>integer</Word>\n      <Word>byte</Word>\n      <Word>real</Word>\n      <Word>boolean</Word>\n      <Word>char</Word>\n      <Word>shortint</Word>\n      <Word>word</Word>\n      <Word>longint</Word>\n      <Word>string</Word>\n    </Keywords>\n\n    <Keywords color = \"Operators\">\n      <Word>and</Word>\n      <Word>not</Word>\n      <Word>or</Word>\n      <Word>in</Word>\n      <Word>div</Word>\n      <Word>mod</Word>\n    </Keywords>\n\n    <Keywords color = \"Statements\">\n      <Word>array</Word>\n      <Word>const</Word>\n      <Word>downto</Word>\n      <Word>file</Word>\n      <Word>forward</Word>\n      <Word>label</Word>\n      <Word>main</Word>\n      <Word>nil</Word>\n      <Word>packed</Word>\n      <Word>record</Word>\n      <Word>repeat</Word>\n      <Word>set</Word>\n      <Word>to</Word>\n      <Word>type</Word>\n      <Word>until</Word>\n      <Word>var</Word>\n      <Word>begin</Word>\n      <Word>case</Word>\n      <Word>do</Word>\n      <Word>else</Word>\n      <Word>for</Word>\n      <Word>function</Word>\n      <Word>goto</Word>\n      <Word>if</Word>\n      <Word>procedure</Word>\n      <Word>program</Word>\n      <Word>then</Word>\n      <Word>of</Word>\n      <Word>end</Word>\n      <Word>while</Word>\n      <Word>with</Word>\n    </Keywords>\n\n    <Keywords color = \"FunctionKeywords\">\n      <Word>abs</Word>\n      <Word>arctan</Word>\n      <Word>chr</Word>\n      <Word>cos</Word>\n      <Word>dispose</Word>\n      <Word>eof</Word>\n      <Word>eoln</Word>\n      <Word>exp</Word>\n      <Word>false</Word>\n      <Word>get</Word>\n      <Word>input</Word>\n      <Word>ln</Word>\n      <Word>maxint</Word>\n      <Word>new</Word>\n      <Word>odd</Word>\n      <Word>ord</Word>\n      <Word>output</Word>\n      <Word>page</Word>\n      <Word>pred</Word>\n      <Word>put</Word>\n      <Word>read</Word>\n      <Word>readln</Word>\n      <Word>reset</Word>\n      <Word>rewrite</Word>\n      <Word>round</Word>\n      <Word>sin</Word>\n      <Word>sqr</Word>\n      <Word>sqrt</Word>\n      <Word>succ</Word>\n      <Word>text</Word>\n      <Word>true</Word>\n      <Word>trunc</Word>\n      <Word>write</Word>\n      <Word>writeln</Word>\n    </Keywords>\n\n    <Rule color=\"MethodCall\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n    <Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n  </RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/Patch-Mode.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"Patch\" extensions=\".patch;.diff\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"AddedText\" foreground=\"Navy\" exampleText=\"+added\" />\n\t<Color name=\"RemovedText\" foreground=\"#FF339966\" exampleText=\"-removed\" />\n\t<Color name=\"UnchangedText\" exampleText=\" unchanged\" />\n\t<Color name=\"Position\" foreground=\"Navy\" exampleText=\"@@ -186,6 +186,12 @@\" />\n\t<Color name=\"Header\" foreground=\"DarkRed\" exampleText=\"--- (oldversion)&#10;+++ (newversion)\" />\n\t<Color name=\"FileName\" foreground=\"Green\" fontWeight=\"bold\" exampleText=\"Index: path/to/file\" />\n  <Color name=\"AtAtColor\" foreground=\"Purple\" exampleText=\"@@\" />\n  <RuleSet>\n\t\t<Span color=\"FileName\">\n\t\t\t<Begin>Index:\\s</Begin>\n\t\t</Span>\n\t\t<Span color=\"Header\">\n\t\t\t<Begin>==</Begin>\n\t\t</Span>\n\t\t<Span color=\"Header\">\n\t\t\t<Begin>---</Begin>\n\t\t</Span>\n\t\t<Span color=\"Header\">\n\t\t\t<Begin>\\+\\+\\+</Begin>\n\t\t</Span>\n\t\t<Span color=\"AtAtColor\">\n\t\t\t<Begin>@@</Begin>\n\t\t</Span>\n\t\t<Span color=\"RemovedText\">\n\t\t\t<Begin>-</Begin>\n\t\t</Span>\n\t\t<Span color=\"AddedText\">\n\t\t\t<Begin>\\+</Begin>\n\t\t</Span>\n\t\t<Span color=\"UnchangedText\">\n\t\t\t<Begin>\\s</Begin>\n\t\t</Span>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/PowerShell.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"PowerShell\" extensions=\".ps1;.psm1;.psd1\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n\t<Color name=\"String\" foreground=\"Blue\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\t<Color name=\"Char\" foreground=\"Magenta\" exampleText=\"char linefeed = '\\n';\"/>\n\t<Color name=\"Punctuation\" exampleText=\"a(b.c);\" />\n\t<Color name=\"NumberLiteral\" foreground=\"DarkBlue\" exampleText=\"3.1415f\"/>\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"if (a)\"/>\n\t<Color name=\"Variable\" foreground=\"Maroon\" exampleText=\"$param = 1\" />\n\t<Color name=\"ExceptionKeywords\" fontWeight=\"bold\" foreground=\"Teal\" />\n\t<Color name=\"GotoKeywords\" foreground=\"Navy\" />\n\t<Color name=\"ReferenceTypes\" foreground=\"Red\" />\n\t<Color name=\"Command\" fontWeight=\"bold\" foreground=\"MidnightBlue\" />\n\t<Color name=\"Operators\" foreground=\"#FF8515EA\" exampleText=\"-eq\"/>\n\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>\\#</Begin>\n\t\t</Span>\n\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>&lt;\\#</Begin>\n\t\t\t<End>\\#&gt;</End>\n\t\t</Span>\n\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Span color=\"Char\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin color=\"String\">@\"</Begin>\n\t\t\t<End>\"@</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin='\"\"' end=\"\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>while</Word>\n\t\t\t<Word>param</Word>\n\t\t\t<Word>end</Word>\n\t\t\t<Word>define</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>from</Word>\n\t\t\t<Word>foreach</Word>\n\t\t\t<Word>var</Word>\n\t\t\t<Word>dynamicparam</Word>\n\t\t\t<Word>filter</Word>\n\t\t\t<Word>dp</Word>\n\t\t\t<Word>until</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>exit</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>process</Word>\n\t\t\t<Word>begin</Word>\n\t\t\t<Word>elseif</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>data</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>using</Word>\n\t\t\t<Word>function</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"ExceptionKeywords\">\n\t\t\t<Word>catch</Word>\n\t\t\t<Word>finally</Word>\n\t\t\t<Word>throw</Word>\n\t\t\t<Word>trap</Word>\n\t\t\t<Word>try</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"GotoKeywords\">\n\t\t\t<Word>break</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>return</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"ReferenceTypes\">\n\t\t\t<Word>class</Word>\n\t\t</Keywords>\n\n\t\t<Keywords color=\"Operators\">\n\t\t\t<Word>-not</Word>\n\t\t\t<Word>-band</Word>\n\t\t\t<Word>-bor</Word>\n\t\t\t<Word>-replace</Word>\n\t\t\t<Word>-ireplace</Word>\n\t\t\t<Word>-creplace</Word>\n\t\t\t<Word>-and</Word>\n\t\t\t<Word>-or</Word>\n\t\t\t<Word>-is</Word>\n\t\t\t<Word>-isnot</Word>\n\t\t\t<Word>-as</Word>\n\t\t\t<Word>-lt</Word>\n\t\t\t<Word>-le</Word>\n\t\t\t<Word>-gt</Word>\n\t\t\t<Word>-ge</Word>\n\t\t\t<Word>-eq</Word>\n\t\t\t<Word>-ne</Word>\n\t\t\t<Word>-contains</Word>\n\t\t\t<Word>-notcontains</Word>\n\t\t\t<Word>-like</Word>\n\t\t\t<Word>-notlike</Word>\n\t\t\t<Word>-match</Word>\n\t\t\t<Word>-notmatch</Word>\n\t\t</Keywords>\n\n\t\t<Rule color=\"Variable\">\n\t\t\t\\$[\\d\\w_]+\n\t\t</Rule>\n\n\t\t<Rule color=\"Command\">\n\t\t[\\w]+-[\\w]+\n\t\t</Rule>\n\n\t\t<!-- Digits -->\n\t\t<Rule color=\"NumberLiteral\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t|\n\t\t\t(\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+           #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/Python-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"Python\" extensions=\".py;.pyw\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"# comment\" />\n\t<Color name=\"String\" foreground=\"Gray\" exampleText=\"name = 'abc'\"/>\n\t<Color name=\"MethodCall\" foreground=\"Purple\" exampleText=\"def Hello()\"/>\n\t<Color name=\"NumberLiteral\" foreground=\"DarkBlue\" exampleText=\"3.1415f\"/>\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"if\"/>\n\n\t<Property name=\"DocCommentMarker\" value=\"///\" />\n\n\t<RuleSet name=\"CommentMarkerSet\">\n\t\t<Keywords fontWeight=\"bold\" foreground=\"Red\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords fontWeight=\"bold\" foreground=\"#E0E000\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\n\t<RuleSet>\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>\\#</Begin>\n\t\t</Span>\n\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>'''</Begin>\n\t\t\t<End>'''</End>\n\t\t</Span>\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin>\"\"\"</Begin>\n\t\t\t<End>\"\"\"</End>\n\t\t</Span>\n\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"String\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>and</Word>\n\t\t\t<Word>as</Word>\n\t\t\t<Word>assert</Word>\n\t\t\t<Word>break</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>def</Word>\n\t\t\t<Word>del</Word>\n\t\t\t<Word>elif</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>except</Word>\n\t\t\t<Word>exec</Word>\n\t\t\t<Word>False</Word>\n\t\t\t<Word>finally</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>from</Word>\n\t\t\t<Word>global</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>import</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>is</Word>\n\t\t\t<Word>lambda</Word>\n\t\t\t<Word>None</Word>\n\t\t\t<Word>nonlocal</Word>\n\t\t\t<Word>not</Word>\n\t\t\t<Word>or</Word>\n\t\t\t<Word>pass</Word>\n\t\t\t<Word>print</Word>\n\t\t\t<Word>raise</Word>\n\t\t\t<Word>return</Word>\n\t\t\t<Word>True</Word>\n\t\t\t<Word>try</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>with</Word>\n\t\t\t<Word>yield</Word>\n\t\t\t<Word>async</Word>\n\t\t\t<Word>await</Word>\n\t\t</Keywords>\n\n\t\t<Rule color=\"MethodCall\">\n\t\t\t\\b\n\t\t\t[\\d\\w_]+  # an identifier\n\t\t\t(?=\\s*\\() # followed by (\n\t\t</Rule>\n\t\t<Rule color=\"NumberLiteral\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t\t(\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+           #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/Ruby.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n<!-- Shades of Bright-Blue: #0077dc #008fe4 #8dbbdc #8de8ff -->\n<SyntaxDefinition name=\"Ruby\" extensions=\".rb\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <Color name=\"Digits\" foreground=\"Red\"/>\n\n  <Color name=\"Variable\" foreground=\"Red\" />\n  <Color name=\"Punctuation\" foreground=\"#FFa31515\" />\n\n  <Color name=\"Comment\" foreground=\"Green\" />\n  <Color name=\"DocComment\" foreground=\"Green\" />\n  <Color name=\"NestedComments\"  foreground=\"Teal\" />\n  <Color name=\"MultiLineComment\" foreground=\"Green\" />\n  <Color name=\"LineComment\" foreground=\"Green\" />\n\n  <Color name=\"Char\" foreground=\"Magenta\" />\n  <Color name=\"String\" foreground=\"Blue\" />\n\n  <Color name=\"MethodCall\" foreground=\"MidnightBlue\" fontWeight=\"bold\" />\n  <Color name=\"FunctionDefinition\" fontWeight=\"bold\" foreground=\"Blue\" />\n\n  <Color name=\"BuiltInStatements\" fontWeight=\"bold\" foreground=\"MidnightBlue\" />\n  <Color name=\"ClassStatement\" foreground=\"Blue\" fontWeight=\"bold\" />\n  <Color name=\"ExceptionHandlingStatements\" fontWeight=\"bold\" foreground=\"Teal\" />\n\n  <Color name=\"Imports\" fontWeight=\"bold\" foreground=\"Green\" />\n  <Color name=\"IterationStatements\" fontWeight=\"bold\" foreground=\"Blue\" />\n  <Color name=\"JumpStatements\" foreground=\"Navy\" />\n  <Color name=\"OperatorStatements\" fontWeight=\"bold\" foreground=\"DarkCyan\" />\n  <Color name=\"NullStatement\" foreground=\"Red\" fontWeight=\"bold\" />\n  <Color name=\"SelectionStatements\" fontWeight=\"bold\" foreground=\"Blue\" />\n  <Color name=\"BooleanStatements\" foreground=\"DarkViolet\" />\n  <Color name=\"DefinedStatement\" foreground=\"DarkViolet\" />\n  <Color name=\"ClassSelfStatement\" foreground=\"DarkViolet\" />\n  <Color name=\"ClassInheritanceStatement\" foreground=\"DarkViolet\" />\n\n  <Color name=\"ImportStatement\" foreground=\"#FF008fe4\"/>\n\n  <Color name=\"CommentMarkerSetTodo\"       foreground=\"Red\"     fontWeight=\"bold\"/>\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\"/>\n\n  <RuleSet name=\"CommentMarkerSet\">\n    <Keywords color=\"CommentMarkerSetTodo\">\n      <Word>TODO</Word>\n      <Word>FIXME</Word>\n    </Keywords>\n    <Keywords color=\"CommentMarkerSetHackUndone\">\n      <Word>HACK</Word>\n      <Word>UNDONE</Word>\n    </Keywords>\n  </RuleSet>\n\n  <!-- Main RuleSet -->\n  <RuleSet ignoreCase=\"false\">\n\n    <Rule color=\"Digits\">\\b0[xX][0-9a-fA-F]+|(\\b\\d+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>\n\n    <Rule color=\"Punctuation\"><!-- removed &amp;-->\n      [?,.:;()\\[\\]{}+\\-/%*&lt;&gt;^=~!]+\n    </Rule>\n\n    <Span color=\"Char\" multiline=\"false\">\n      <Begin>'</Begin>\n      <End>'</End>\n      <RuleSet>\n        <!-- escape with backslash -->\n        <Span begin=\"\\\\\" end=\".\" />\n      </RuleSet>\n    </Span>\n    <Span color=\"DocComment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n      <Begin>\"\"\"</Begin>\n      <End>\"\"\"</End>\n    </Span>\n    <Span color=\"MultiLineComment\" ruleSet=\"comments set\" multiline=\"true\">\n      <Begin>\\=begin</Begin>\n      <End>\\=end</End>\n    </Span>\n    <Span color=\"LineComment\" ruleSet=\"CommentMarkerSet\" multiline=\"false\">\n      <Begin>\\#</Begin>\n    </Span>\n    <Span color=\"String\" multiline=\"false\">\n      <Begin>\"</Begin>\n      <End>\"</End>\n      <RuleSet>\n        <!-- escape with backslash -->\n        <Span begin=\"\\\\\" end=\".\" />\n      </RuleSet>\n    </Span>\n\n    <Keywords color=\"BuiltInStatements\">\n      <Word>abort</Word>\n      <Word>Array</Word>\n      <Word>at_exit</Word>\n      <Word>autoload</Word>\n      <Word>binding</Word>\n      <Word>callcc</Word>\n      <Word>caller</Word>\n      <Word>chomp</Word>\n      <Word>chop</Word>\n      <Word>eval</Word>\n      <Word>exec</Word>\n      <Word>exit</Word>\n      <Word>fail</Word>\n      <Word>Float</Word>\n      <Word>fork</Word>\n      <Word>format</Word>\n      <Word>gets</Word>\n      <Word>global_variables</Word>\n      <Word>gsub</Word>\n      <Word>Integer</Word>\n      <Word>lambda</Word>\n      <Word>proc</Word>\n      <Word>load</Word>\n      <Word>local_variables</Word>\n      <Word>loop</Word>\n      <Word>open</Word>\n      <Word>p</Word>\n      <Word>print</Word>\n      <Word>print</Word>\n      <Word>printf</Word>\n      <Word>putc</Word>\n      <Word>puts</Word>\n      <Word>rand</Word>\n      <Word>readline</Word>\n      <Word>scan</Word>\n      <Word>select</Word>\n      <Word>set_trace_func</Word>\n      <Word>sleep</Word>\n      <Word>split</Word>\n      <Word>sprintf</Word>\n      <Word>srand</Word>\n      <Word>String</Word>\n      <Word>syscall</Word>\n      <Word>system</Word>\n      <Word>sub</Word>\n      <Word>test</Word>\n      <Word>throw</Word>\n      <Word>trace_var</Word>\n      <Word>trap</Word>\n      <Word>untrace_var</Word>\n    </Keywords>\n\n    <Keywords color=\"ClassStatement\">\n      <Word>class</Word>\n      <Word>module</Word>\n      <Word>public</Word>\n      <Word>protected</Word>\n      <Word>private</Word>\n    </Keywords>\n\n    <Keywords color=\"ExceptionHandlingStatements\">\n      <Word>begin</Word>\n      <Word>rescue</Word>\n      <Word>ensure</Word>\n      <Word>raise</Word>\n      <Word>catch</Word>\n    </Keywords>\n\n    <Keywords color=\"FunctionDefinition\">\n      <Word>def</Word>\n      <Word>end</Word>\n      <Word>undef</Word>\n    </Keywords>\n\n    <Keywords color=\"IterationStatements\">\n      <Word>for</Word>\n      <Word>do</Word>\n      <Word>in</Word>\n      <Word>while</Word>\n      <Word>until</Word>\n    </Keywords>\n\n    <Keywords color=\"JumpStatements\">\n      <Word>break</Word>\n      <Word>yield</Word>\n      <Word>redo</Word>\n      <Word>return</Word>\n      <Word>retry</Word>\n      <Word>next</Word>\n    </Keywords>\n\n    <Keywords color=\"OperatorStatements\">\n      <Word>and</Word>\n      <Word>not</Word>\n      <Word>or</Word>\n    </Keywords>\n\n    <Keywords color=\"NullStatement\">\n      <Word>nil</Word>\n    </Keywords>\n\n    <Keywords color=\"SelectionStatements\">\n      <Word>elsif</Word>\n      <Word>else</Word>\n      <Word>if</Word>\n      <Word>then</Word>\n      <Word>case</Word>\n      <Word>unless</Word>\n    </Keywords>\n\n    <Keywords color=\"BooleanStatements\">\n      <Word>true</Word>\n      <Word>false</Word>\n    </Keywords>\n\n    <Keywords color=\"DefinedStatement\">\n      <Word>defined</Word>\n    </Keywords>\n\n    <Keywords color=\"ClassSelfStatement\">\n      <Word>self</Word>\n    </Keywords>\n\n    <Keywords color=\"ClassInheritanceStatement\">\n      <Word>super</Word>\n    </Keywords>\n\n    <Keywords color=\"Imports\">\n      <Word>import</Word>\n      <Word>alias</Word>\n    </Keywords>\n\n    <Keywords color=\"ImportStatement\">\n      <Word>include</Word>\n      <Word>require</Word>\n    </Keywords>\n\n    <Rule color=\"MethodCall\">[\\d\\w_]+(?=(\\s*\\())</Rule>\n    <Rule color=\"Variable\">@([\\w]+)</Rule>\n    <Rule color=\"Variable\">&amp;([\\w]+)</Rule>\n  </RuleSet>\n  <!-- End of Main RuleSet-->\n\n  <RuleSet name=\"comments set\">\n    <Keywords color=\"CommentMarkerSetTodo\">\n      <Word>TODO</Word>\n      <Word>FIXME</Word>\n    </Keywords>\n    <Keywords color=\"CommentMarkerSetHackUndone\">\n      <Word>HACK</Word>\n      <Word>UNDONE</Word>\n    </Keywords>\n    <!-- allows nested /**/ comments, coloring them Green/Teal alternately -->\n    <Span color=\"NestedComments\" multiline=\"true\">\n      <Begin>=begin</Begin>\n      <End>=end</End>\n      <RuleSet>\n        <Keywords color=\"CommentMarkerSetTodo\">\n          <Word>TODO</Word>\n          <Word>FIXME</Word>\n        </Keywords>\n        <Keywords color=\"CommentMarkerSetHackUndone\">\n          <Word>HACK</Word>\n          <Word>UNDONE</Word>\n        </Keywords>\n        <Span color=\"Comment\" ruleSet=\"comments set\" multiline=\"true\">\n          <Begin>=begin</Begin>\n          <End>=end</End>\n        </Span>\n      </RuleSet>\n    </Span>\n  </RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/TSQL-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"TSQL\" extensions=\".sql\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"-- comment\" />\n\t<Color name=\"Char\" foreground=\"Red\" exampleText=\"name = 'abc'\"/>\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"SELECT FROM\"/>\n\n\t<Property name=\"DocCommentMarker\" value=\"///\" />\n\n\t<RuleSet name=\"CommentMarkerSet\">\n\t\t<Keywords fontWeight=\"bold\" foreground=\"Red\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords fontWeight=\"bold\" foreground=\"#E0E000\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>--</Begin>\n\t\t</Span>\n\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\n\t\t<Span color=\"Char\">\n\t\t\t<Begin>'</Begin>\n\t\t\t<End>'</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>abs</Word>\n\t\t\t<Word>absolute</Word>\n\t\t\t<Word>access</Word>\n\t\t\t<Word>acos</Word>\n\t\t\t<Word>add</Word>\n\t\t\t<Word>add_months</Word>\n\t\t\t<Word>adddate</Word>\n\t\t\t<Word>admin</Word>\n\t\t\t<Word>after</Word>\n\t\t\t<Word>aggregate</Word>\n\t\t\t<Word>all</Word>\n\t\t\t<Word>allocate</Word>\n\t\t\t<Word>alter</Word>\n\t\t\t<Word>and</Word>\n\t\t\t<Word>any</Word>\n\t\t\t<Word>app_name</Word>\n\t\t\t<Word>are</Word>\n\t\t\t<Word>array</Word>\n\t\t\t<Word>as</Word>\n\t\t\t<Word>asc</Word>\n\t\t\t<Word>ascii</Word>\n\t\t\t<Word>asin</Word>\n\t\t\t<Word>assertion</Word>\n\t\t\t<Word>at</Word>\n\t\t\t<Word>atan</Word>\n\t\t\t<Word>atn2</Word>\n\t\t\t<Word>audit</Word>\n\t\t\t<Word>authid</Word>\n\t\t\t<Word>authorization</Word>\n\t\t\t<Word>autonomous_transaction</Word>\n\t\t\t<Word>avg</Word>\n\t\t\t<Word>before</Word>\n\t\t\t<Word>begin</Word>\n\t\t\t<Word>benchmark</Word>\n\t\t\t<Word>between</Word>\n\t\t\t<Word>bfilename</Word>\n\t\t\t<Word>bigint</Word>\n\t\t\t<Word>bin</Word>\n\t\t\t<Word>binary</Word>\n\t\t\t<Word>binary_checksum</Word>\n\t\t\t<Word>binary_integer</Word>\n\t\t\t<Word>bit</Word>\n\t\t\t<Word>bit_count</Word>\n\t\t\t<Word>bit_and</Word>\n\t\t\t<Word>bit_or</Word>\n\t\t\t<Word>blob</Word>\n\t\t\t<Word>body</Word>\n\t\t\t<Word>boolean</Word>\n\t\t\t<Word>both</Word>\n\t\t\t<Word>breadth</Word>\n\t\t\t<Word>bulk</Word>\n\t\t\t<Word>by</Word>\n\t\t\t<Word>call</Word>\n\t\t\t<Word>cascade</Word>\n\t\t\t<Word>cascaded</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>cast</Word>\n\t\t\t<Word>catalog</Word>\n\t\t\t<Word>ceil</Word>\n\t\t\t<Word>ceiling</Word>\n\t\t\t<Word>char</Word>\n\t\t\t<Word>char_base</Word>\n\t\t\t<Word>character</Word>\n\t\t\t<Word>charindex</Word>\n\t\t\t<Word>chartorowid</Word>\n\t\t\t<Word>check</Word>\n\t\t\t<Word>checksum</Word>\n\t\t\t<Word>checksum_agg</Word>\n\t\t\t<Word>chr</Word>\n\t\t\t<Word>class</Word>\n\t\t\t<Word>clob</Word>\n\t\t\t<Word>close</Word>\n\t\t\t<Word>cluster</Word>\n\t\t\t<Word>coalesce</Word>\n\t\t\t<Word>col_length</Word>\n\t\t\t<Word>col_name</Word>\n\t\t\t<Word>collate</Word>\n\t\t\t<Word>collation</Word>\n\t\t\t<Word>collect</Word>\n\t\t\t<Word>column</Word>\n\t\t\t<Word>comment</Word>\n\t\t\t<Word>commit</Word>\n\t\t\t<Word>completion</Word>\n\t\t\t<Word>compress</Word>\n\t\t\t<Word>concat</Word>\n\t\t\t<Word>concat_ws</Word>\n\t\t\t<Word>connect</Word>\n\t\t\t<Word>connection</Word>\n\t\t\t<Word>constant</Word>\n\t\t\t<Word>constraint</Word>\n\t\t\t<Word>constraints</Word>\n\t\t\t<Word>constructorcreate</Word>\n\t\t\t<Word>contains</Word>\n\t\t\t<Word>containsable</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>conv</Word>\n\t\t\t<Word>convert</Word>\n\t\t\t<Word>corr</Word>\n\t\t\t<Word>corresponding</Word>\n\t\t\t<Word>cos</Word>\n\t\t\t<Word>cot</Word>\n\t\t\t<Word>count</Word>\n\t\t\t<Word>count_big</Word>\n\t\t\t<Word>covar_pop</Word>\n\t\t\t<Word>covar_samp</Word>\n\t\t\t<Word>create</Word>\n\t\t\t<Word>cross</Word>\n\t\t\t<Word>cube</Word>\n\t\t\t<Word>cume_dist</Word>\n\t\t\t<Word>current</Word>\n\t\t\t<Word>current_date</Word>\n\t\t\t<Word>current_path</Word>\n\t\t\t<Word>current_role</Word>\n\t\t\t<Word>current_time</Word>\n\t\t\t<Word>current_timestamp</Word>\n\t\t\t<Word>current_user</Word>\n\t\t\t<Word>currval</Word>\n\t\t\t<Word>cursor</Word>\n\t\t\t<Word>cycle</Word>\n\t\t\t<Word>data</Word>\n\t\t\t<Word>datalength</Word>\n\t\t\t<Word>databasepropertyex</Word>\n\t\t\t<Word>date</Word>\n\t\t\t<Word>date_add</Word>\n\t\t\t<Word>date_format</Word>\n\t\t\t<Word>date_sub</Word>\n\t\t\t<Word>dateadd</Word>\n\t\t\t<Word>datediff</Word>\n\t\t\t<Word>datename</Word>\n\t\t\t<Word>datepart</Word>\n\t\t\t<Word>datetime</Word>\n\t\t\t<Word>day</Word>\n\t\t\t<Word>db_id</Word>\n\t\t\t<Word>db_name</Word>\n\t\t\t<Word>deallocate</Word>\n\t\t\t<Word>dec</Word>\n\t\t\t<Word>declare</Word>\n\t\t\t<Word>decimal</Word>\n\t\t\t<Word>decode</Word>\n\t\t\t<Word>default</Word>\n\t\t\t<Word>deferrable</Word>\n\t\t\t<Word>deferred</Word>\n\t\t\t<Word>degrees</Word>\n\t\t\t<Word>delete</Word>\n\t\t\t<Word>dense_rank</Word>\n\t\t\t<Word>depth</Word>\n\t\t\t<Word>deref</Word>\n\t\t\t<Word>desc</Word>\n\t\t\t<Word>describe</Word>\n\t\t\t<Word>descriptor</Word>\n\t\t\t<Word>destroy</Word>\n\t\t\t<Word>destructor</Word>\n\t\t\t<Word>deterministic</Word>\n\t\t\t<Word>diagnostics</Word>\n\t\t\t<Word>dictionary</Word>\n\t\t\t<Word>disconnect</Word>\n\t\t\t<Word>difference</Word>\n\t\t\t<Word>distinct</Word>\n\t\t\t<Word>do</Word>\n\t\t\t<Word>domain</Word>\n\t\t\t<Word>double</Word>\n\t\t\t<Word>drop</Word>\n\t\t\t<Word>dump</Word>\n\t\t\t<Word>dynamic</Word>\n\t\t\t<Word>each</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>elsif</Word>\n\t\t\t<Word>empth</Word>\n\t\t\t<Word>encode</Word>\n\t\t\t<Word>encrypt</Word>\n\t\t\t<Word>end</Word>\n\t\t\t<Word>end-exec</Word>\n\t\t\t<Word>equals</Word>\n\t\t\t<Word>escape</Word>\n\t\t\t<Word>every</Word>\n\t\t\t<Word>except</Word>\n\t\t\t<Word>exception</Word>\n\t\t\t<Word>exclusive</Word>\n\t\t\t<Word>exec</Word>\n\t\t\t<Word>execute</Word>\n\t\t\t<Word>exists</Word>\n\t\t\t<Word>exit</Word>\n\t\t\t<Word>exp</Word>\n\t\t\t<Word>export_set</Word>\n\t\t\t<Word>extends</Word>\n\t\t\t<Word>external</Word>\n\t\t\t<Word>extract</Word>\n\t\t\t<Word>false</Word>\n\t\t\t<Word>fetch</Word>\n\t\t\t<Word>first</Word>\n\t\t\t<Word>first_value</Word>\n\t\t\t<Word>file</Word>\n\t\t\t<Word>float</Word>\n\t\t\t<Word>floor</Word>\n\t\t\t<Word>file_id</Word>\n\t\t\t<Word>file_name</Word>\n\t\t\t<Word>filegroup_id</Word>\n\t\t\t<Word>filegroup_name</Word>\n\t\t\t<Word>filegroupproperty</Word>\n\t\t\t<Word>fileproperty</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>forall</Word>\n\t\t\t<Word>foreign</Word>\n\t\t\t<Word>format</Word>\n\t\t\t<Word>formatmessage</Word>\n\t\t\t<Word>found</Word>\n\t\t\t<Word>freetexttable</Word>\n\t\t\t<Word>from</Word>\n\t\t\t<Word>from_days</Word>\n\t\t\t<Word>fulltextcatalog</Word>\n\t\t\t<Word>fulltextservice</Word>\n\t\t\t<Word>function</Word>\n\t\t\t<Word>general</Word>\n\t\t\t<Word>get</Word>\n\t\t\t<Word>get_lock</Word>\n\t\t\t<Word>getdate</Word>\n\t\t\t<Word>getansinull</Word>\n\t\t\t<Word>getutcdate</Word>\n\t\t\t<Word>global</Word>\n\t\t\t<Word>go</Word>\n\t\t\t<Word>goto</Word>\n\t\t\t<Word>grant</Word>\n\t\t\t<Word>greatest</Word>\n\t\t\t<Word>group</Word>\n\t\t\t<Word>grouping</Word>\n\t\t\t<Word>having</Word>\n\t\t\t<Word>heap</Word>\n\t\t\t<Word>hex</Word>\n\t\t\t<Word>hextoraw</Word>\n\t\t\t<Word>host</Word>\n\t\t\t<Word>host_id</Word>\n\t\t\t<Word>host_name</Word>\n\t\t\t<Word>hour</Word>\n\t\t\t<Word>ident_incr</Word>\n\t\t\t<Word>ident_seed</Word>\n\t\t\t<Word>ident_current</Word>\n\t\t\t<Word>identified</Word>\n\t\t\t<Word>identity</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>ifnull</Word>\n\t\t\t<Word>ignore</Word>\n\t\t\t<Word>immediate</Word>\n\t\t\t<Word>in</Word>\n\t\t\t<Word>increment</Word>\n\t\t\t<Word>index</Word>\n\t\t\t<Word>index_col</Word>\n\t\t\t<Word>indexproperty</Word>\n\t\t\t<Word>indicator</Word>\n\t\t\t<Word>initcap</Word>\n\t\t\t<Word>initial</Word>\n\t\t\t<Word>initialize</Word>\n\t\t\t<Word>initially</Word>\n\t\t\t<Word>inner</Word>\n\t\t\t<Word>inout</Word>\n\t\t\t<Word>input</Word>\n\t\t\t<Word>insert</Word>\n\t\t\t<Word>instr</Word>\n\t\t\t<Word>instrb</Word>\n\t\t\t<Word>int</Word>\n\t\t\t<Word>integer</Word>\n\t\t\t<Word>interface</Word>\n\t\t\t<Word>intersect</Word>\n\t\t\t<Word>interval</Word>\n\t\t\t<Word>into</Word>\n\t\t\t<Word>is</Word>\n\t\t\t<Word>is_member</Word>\n\t\t\t<Word>is_srvrolemember</Word>\n\t\t\t<Word>is_null</Word>\n\t\t\t<Word>is_numeric</Word>\n\t\t\t<Word>isdate</Word>\n\t\t\t<Word>isnull</Word>\n\t\t\t<Word>isolation</Word>\n\t\t\t<Word>iterate</Word>\n\t\t\t<Word>java</Word>\n\t\t\t<Word>join</Word>\n\t\t\t<Word>key</Word>\n\t\t\t<Word>lag</Word>\n\t\t\t<Word>language</Word>\n\t\t\t<Word>large</Word>\n\t\t\t<Word>last</Word>\n\t\t\t<Word>last_day</Word>\n\t\t\t<Word>last_value</Word>\n\t\t\t<Word>lateral</Word>\n\t\t\t<Word>lcase</Word>\n\t\t\t<Word>lead</Word>\n\t\t\t<Word>leading</Word>\n\t\t\t<Word>least</Word>\n\t\t\t<Word>left</Word>\n\t\t\t<Word>len</Word>\n\t\t\t<Word>length</Word>\n\t\t\t<Word>lengthb</Word>\n\t\t\t<Word>less</Word>\n\t\t\t<Word>level</Word>\n\t\t\t<Word>like</Word>\n\t\t\t<Word>limit</Word>\n\t\t\t<Word>limited</Word>\n\t\t\t<Word>ln</Word>\n\t\t\t<Word>lpad</Word>\n\t\t\t<Word>local</Word>\n\t\t\t<Word>localtime</Word>\n\t\t\t<Word>localtimestamp</Word>\n\t\t\t<Word>locator</Word>\n\t\t\t<Word>lock</Word>\n\t\t\t<Word>log</Word>\n\t\t\t<Word>log10</Word>\n\t\t\t<Word>long</Word>\n\t\t\t<Word>loop</Word>\n\t\t\t<Word>lower</Word>\n\t\t\t<Word>ltrim</Word>\n\t\t\t<Word>make_ref</Word>\n\t\t\t<Word>map</Word>\n\t\t\t<Word>match</Word>\n\t\t\t<Word>max</Word>\n\t\t\t<Word>maxextents</Word>\n\t\t\t<Word>mid</Word>\n\t\t\t<Word>min</Word>\n\t\t\t<Word>minus</Word>\n\t\t\t<Word>minute</Word>\n\t\t\t<Word>mlslabel</Word>\n\t\t\t<Word>mod</Word>\n\t\t\t<Word>mode</Word>\n\t\t\t<Word>modifies</Word>\n\t\t\t<Word>modify</Word>\n\t\t\t<Word>module</Word>\n\t\t\t<Word>month</Word>\n\t\t\t<Word>months_between</Word>\n\t\t\t<Word>names</Word>\n\t\t\t<Word>national</Word>\n\t\t\t<Word>natural</Word>\n\t\t\t<Word>naturaln</Word>\n\t\t\t<Word>nchar</Word>\n\t\t\t<Word>nclob</Word>\n\t\t\t<Word>new</Word>\n\t\t\t<Word>new_time</Word>\n\t\t\t<Word>newid</Word>\n\t\t\t<Word>next</Word>\n\t\t\t<Word>next_day</Word>\n\t\t\t<Word>nextval</Word>\n\t\t\t<Word>no</Word>\n\t\t\t<Word>noaudit</Word>\n\t\t\t<Word>nocompress</Word>\n\t\t\t<Word>nocopy</Word>\n\t\t\t<Word>nolock</Word>\n\t\t\t<Word>none</Word>\n\t\t\t<Word>not</Word>\n\t\t\t<Word>nowait</Word>\n\t\t\t<Word>null</Word>\n\t\t\t<Word>nullif</Word>\n\t\t\t<Word>number</Word>\n\t\t\t<Word>number_base</Word>\n\t\t\t<Word>numeric</Word>\n\t\t\t<Word>nvl</Word>\n\t\t\t<Word>nvl2</Word>\n\t\t\t<Word>object</Word>\n\t\t\t<Word>object_id</Word>\n\t\t\t<Word>object_name</Word>\n\t\t\t<Word>object_property</Word>\n\t\t\t<Word>ocirowid</Word>\n\t\t\t<Word>oct</Word>\n\t\t\t<Word>of</Word>\n\t\t\t<Word>off</Word>\n\t\t\t<Word>offline</Word>\n\t\t\t<Word>old</Word>\n\t\t\t<Word>on</Word>\n\t\t\t<Word>online</Word>\n\t\t\t<Word>only</Word>\n\t\t\t<Word>opaque</Word>\n\t\t\t<Word>open</Word>\n\t\t\t<Word>operator</Word>\n\t\t\t<Word>operation</Word>\n\t\t\t<Word>option</Word>\n\t\t\t<Word>or</Word>\n\t\t\t<Word>ord</Word>\n\t\t\t<Word>order</Word>\n\t\t\t<Word>ordinalityorganization</Word>\n\t\t\t<Word>others</Word>\n\t\t\t<Word>out</Word>\n\t\t\t<Word>outer</Word>\n\t\t\t<Word>output</Word>\n\t\t\t<Word>package</Word>\n\t\t\t<Word>pad</Word>\n\t\t\t<Word>parameter</Word>\n\t\t\t<Word>parameters</Word>\n\t\t\t<Word>partial</Word>\n\t\t\t<Word>partition</Word>\n\t\t\t<Word>path</Word>\n\t\t\t<Word>pctfree</Word>\n\t\t\t<Word>percent_rank</Word>\n\t\t\t<Word>pi</Word>\n\t\t\t<Word>pls_integer</Word>\n\t\t\t<Word>positive</Word>\n\t\t\t<Word>positiven</Word>\n\t\t\t<Word>postfix</Word>\n\t\t\t<Word>pow</Word>\n\t\t\t<Word>power</Word>\n\t\t\t<Word>pragma</Word>\n\t\t\t<Word>precision</Word>\n\t\t\t<Word>prefix</Word>\n\t\t\t<Word>preorder</Word>\n\t\t\t<Word>prepare</Word>\n\t\t\t<Word>preserve</Word>\n\t\t\t<Word>primary</Word>\n\t\t\t<Word>prior</Word>\n\t\t\t<Word>private</Word>\n\t\t\t<Word>privileges</Word>\n\t\t\t<Word>procedure</Word>\n\t\t\t<Word>public</Word>\n\t\t\t<Word>radians</Word>\n\t\t\t<Word>raise</Word>\n\t\t\t<Word>rand</Word>\n\t\t\t<Word>range</Word>\n\t\t\t<Word>rank</Word>\n\t\t\t<Word>ratio_to_export</Word>\n\t\t\t<Word>raw</Word>\n\t\t\t<Word>rawtohex</Word>\n\t\t\t<Word>read</Word>\n\t\t\t<Word>reads</Word>\n\t\t\t<Word>real</Word>\n\t\t\t<Word>record</Word>\n\t\t\t<Word>recursive</Word>\n\t\t\t<Word>ref</Word>\n\t\t\t<Word>references</Word>\n\t\t\t<Word>referencing</Word>\n\t\t\t<Word>reftohex</Word>\n\t\t\t<Word>relative</Word>\n\t\t\t<Word>release</Word>\n\t\t\t<Word>release_lock</Word>\n\t\t\t<Word>rename</Word>\n\t\t\t<Word>repeat</Word>\n\t\t\t<Word>replace</Word>\n\t\t\t<Word>resource</Word>\n\t\t\t<Word>restrict</Word>\n\t\t\t<Word>result</Word>\n\t\t\t<Word>return</Word>\n\t\t\t<Word>returns</Word>\n\t\t\t<Word>reverse</Word>\n\t\t\t<Word>revoke</Word>\n\t\t\t<Word>right</Word>\n\t\t\t<Word>rollback</Word>\n\t\t\t<Word>rollup</Word>\n\t\t\t<Word>round</Word>\n\t\t\t<Word>routine</Word>\n\t\t\t<Word>row</Word>\n\t\t\t<Word>row_number</Word>\n\t\t\t<Word>rowid</Word>\n\t\t\t<Word>rowidtochar</Word>\n\t\t\t<Word>rowlabel</Word>\n\t\t\t<Word>rowlock</Word>\n\t\t\t<Word>rownum</Word>\n\t\t\t<Word>rows</Word>\n\t\t\t<Word>rowtype</Word>\n\t\t\t<Word>rpad</Word>\n\t\t\t<Word>rtrim</Word>\n\t\t\t<Word>savepoint</Word>\n\t\t\t<Word>schema</Word>\n\t\t\t<Word>scroll</Word>\n\t\t\t<Word>scope</Word>\n\t\t\t<Word>search</Word>\n\t\t\t<Word>second</Word>\n\t\t\t<Word>section</Word>\n\t\t\t<Word>seddev_samp</Word>\n\t\t\t<Word>select</Word>\n\t\t\t<Word>separate</Word>\n\t\t\t<Word>sequence</Word>\n\t\t\t<Word>session</Word>\n\t\t\t<Word>session_user</Word>\n\t\t\t<Word>set</Word>\n\t\t\t<Word>sets</Word>\n\t\t\t<Word>share</Word>\n\t\t\t<Word>sign</Word>\n\t\t\t<Word>sin</Word>\n\t\t\t<Word>sinh</Word>\n\t\t\t<Word>size</Word>\n\t\t\t<Word>smallint</Word>\n\t\t\t<Word>some</Word>\n\t\t\t<Word>soundex</Word>\n\t\t\t<Word>space</Word>\n\t\t\t<Word>specific</Word>\n\t\t\t<Word>specifictype</Word>\n\t\t\t<Word>sql</Word>\n\t\t\t<Word>sqlcode</Word>\n\t\t\t<Word>sqlerrm</Word>\n\t\t\t<Word>sqlexception</Word>\n\t\t\t<Word>sqlstate</Word>\n\t\t\t<Word>sqlwarning</Word>\n\t\t\t<Word>sqrt</Word>\n\t\t\t<Word>start</Word>\n\t\t\t<Word>state</Word>\n\t\t\t<Word>statement</Word>\n\t\t\t<Word>static</Word>\n\t\t\t<Word>std</Word>\n\t\t\t<Word>stddev</Word>\n\t\t\t<Word>stdev_pop</Word>\n\t\t\t<Word>strcmp</Word>\n\t\t\t<Word>structure</Word>\n\t\t\t<Word>subdate</Word>\n\t\t\t<Word>substr</Word>\n\t\t\t<Word>substrb</Word>\n\t\t\t<Word>substring</Word>\n\t\t\t<Word>substring_index</Word>\n\t\t\t<Word>subtype</Word>\n\t\t\t<Word>successful</Word>\n\t\t\t<Word>sum</Word>\n\t\t\t<Word>synonym</Word>\n\t\t\t<Word>sys_context</Word>\n\t\t\t<Word>sys_guid</Word>\n\t\t\t<Word>sysdate</Word>\n\t\t\t<Word>system_user</Word>\n\t\t\t<Word>table</Word>\n\t\t\t<Word>tan</Word>\n\t\t\t<Word>tanh</Word>\n\t\t\t<Word>temporary</Word>\n\t\t\t<Word>terminate</Word>\n\t\t\t<Word>than</Word>\n\t\t\t<Word>then</Word>\n\t\t\t<Word>time</Word>\n\t\t\t<Word>timestamp</Word>\n\t\t\t<Word>timezone_abbr</Word>\n\t\t\t<Word>timezone_minute</Word>\n\t\t\t<Word>timezone_hour</Word>\n\t\t\t<Word>timezone_region</Word>\n\t\t\t<Word>tinyint</Word>\n\t\t\t<Word>to</Word>\n\t\t\t<Word>top</Word>\n\t\t\t<Word>to_char</Word>\n\t\t\t<Word>to_date</Word>\n\t\t\t<Word>to_days</Word>\n\t\t\t<Word>to_number</Word>\n\t\t\t<Word>to_single_byte</Word>\n\t\t\t<Word>trailing</Word>\n\t\t\t<Word>transaction</Word>\n\t\t\t<Word>translate</Word>\n\t\t\t<Word>translation</Word>\n\t\t\t<Word>treat</Word>\n\t\t\t<Word>trigger</Word>\n\t\t\t<Word>trim</Word>\n\t\t\t<Word>true</Word>\n\t\t\t<Word>trunc</Word>\n\t\t\t<Word>truncate</Word>\n\t\t\t<Word>type</Word>\n\t\t\t<Word>ucase</Word>\n\t\t\t<Word>uid</Word>\n\t\t\t<Word>under</Word>\n\t\t\t<Word>union</Word>\n\t\t\t<Word>unique</Word>\n\t\t\t<Word>unknown</Word>\n\t\t\t<Word>unnest</Word>\n\t\t\t<Word>update</Word>\n\t\t\t<Word>upper</Word>\n\t\t\t<Word>usage</Word>\n\t\t\t<Word>use</Word>\n\t\t\t<Word>user</Word>\n\t\t\t<Word>userenv</Word>\n\t\t\t<Word>using</Word>\n\t\t\t<Word>validate</Word>\n\t\t\t<Word>value</Word>\n\t\t\t<Word>values</Word>\n\t\t\t<Word>var_pop</Word>\n\t\t\t<Word>var_samp</Word>\n\t\t\t<Word>varbinary</Word>\n\t\t\t<Word>varchar</Word>\n\t\t\t<Word>varchar2</Word>\n\t\t\t<Word>variable</Word>\n\t\t\t<Word>variance</Word>\n\t\t\t<Word>varying</Word>\n\t\t\t<Word>view</Word>\n\t\t\t<Word>vsize</Word>\n\t\t\t<Word>when</Word>\n\t\t\t<Word>whenever</Word>\n\t\t\t<Word>where</Word>\n\t\t\t<Word>with</Word>\n\t\t\t<Word>without</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>work</Word>\n\t\t\t<Word>write</Word>\n\t\t\t<Word>year</Word>\n\t\t\t<Word>zone</Word>\n\t\t</Keywords>\n\t</RuleSet>\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/TXT.xshd",
    "content": "﻿<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"TXT\" extensions=\".txt\"\n                  xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"Digits\" fontStyle=\"italic\" fontWeight=\"normal\" foreground=\"Blue\" />\n  <Color name=\"String\" foreground=\"Olive\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"String2\" foreground=\"#993\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Comment\" foreground=\"Green\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"BulletNumbers\" foreground=\"#0000ff\" fontWeight=\"normal\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Heading1\" foreground=\"#0000ff\" fontWeight=\"bold\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Heading2\" foreground=\"#0000ff\" fontWeight=\"bold\" fontStyle=\"italic\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Heading3\" foreground=\"#6666ff\" fontWeight=\"normal\" fontStyle=\"italic\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Heading4\" foreground=\"#6666ff\" fontWeight=\"normal\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Important\" foreground=\"#ff0000\" fontWeight=\"normal\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Punctuation\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"BoldFormat\" fontWeight=\"bold\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"ItalicFormat\" fontStyle=\"italic\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Problem\" fontWeight=\"bold\" foreground=\"Blue\" exampleText=\"string text = &quot;TODO&quot;\" />\n  <Color name=\"Complete\" fontWeight=\"bold\" foreground=\"Green\" exampleText=\"string text = &quot;DONE&quot;\" />\n\n  <Color name=\"HighlightTime\" fontStyle=\"italic\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <RuleSet ignoreCase=\"true\">\n    <!--\n    Highlight Time information at begining of line:\n2:04:45 PM xxx\n12:04:45 AM xxx\n12:04:45 AM: xxx\n12:04:45 PM: xxx\n\n    Highlights everything except for xxx in above sample lines -->\n    <Span  color=\"HighlightTime\" begin=\"^[0-9]?[0-9]:[0-9][0-9]:[0-9][0-9][ ]((AM)|(PM))\" end=\" \" />\n\n    <Span  color=\"BoldFormat\" begin=\"\\*\" end=\"\\*\"/>\n    <Span  color=\"ItalicFormat\" begin=\"~\" end=\"~\"/>\n\n    <Span  color=\"BulletNumbers\" begin=\"^[0-9]+\\. \" end=\"\\n\"/>\n\n    <!-- Match Start of line [Any Number of digits] with space and something else as Heading1-->\n    <Span  color=\"Heading1\" begin=\"^[0-9]+ \" end=\"\\n\"/>\n\n    <Span  color=\"Heading2\" begin=\"^[0-9]+.[0-9]+ \" end=\"\\n\"/>\n    <Span  color=\"Heading3\" begin=\"^[0-9]+.[0-9]+.[0-9]+ \" end=\"\\n\"/>\n    <Span  color=\"Heading4\" begin=\"^[0-9]+.[0-9]+.[0-9]+.[0-9]+ \" end=\"\\n\"/>\n\n    <Span  color=\"Important\" begin=\"^§ [0-9]+.[0-9]+.[0-9]+\" end=\" \"/>\n\n    <!-- Span color=\"String\" multiline=\"true\">\n      <Begin>\"</Begin>\n      <End>\"</End>\n    </Span -->\n\n    <!-- Span color=\"String\" multiline=\"true\">\n      <Begin>\\(</Begin>\n      <End>\\)</End>\n    </Span -->\n\n    <!-- Span color=\"String2\" multiline=\"false\">\n      <Begin>'</Begin>\n      <End>'</End>\n    </Span -->\n\n    <!-- span for escape sequences -->\n    <Span  color=\"Comment\" begin=\"--\" end=\"\\n\"/>\n    <Span color=\"Comment\"  multiline=\"true\">\n      <Begin>/\\*</Begin>\n      <End>\\*/</End>\n    </Span>\n\n    <Keywords color=\"Problem\">\n      <Word>BUG FIX</Word>\n      <Word>BUG</Word>\n      <Word>BUGS</Word>\n      <Word>HACK</Word>\n      <Word>TODO</Word>\n      <Word>TODOS</Word>\n    </Keywords>\n\n    <Keywords color=\"Complete\">\n      <Word>DONE</Word>\n      <Word>TICK</Word>\n    </Keywords>\n\n    <Rule color=\"Punctuation\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Rule color=\"Digits\">\n      [ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+[0-9]+[ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\\n\n    </Rule>\n\n  </RuleSet>\n\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/Tex-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- syntaxdefinition for TeX document 2001 by Mike Krueger (gleaned from Jedit) -->\n\n<SyntaxDefinition name = \"TeX\" extensions = \".tex\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"Digits\"        foreground=\"#FF9f4545\" fontWeight=\"normal\"   exampleText=\"100\" />\n  <Color name=\"LineComment\"   foreground=\"Green\" exampleText=\"// comment\" />\n\n  <Color name=\"Keywords\"      foreground=\"Blue\"      fontWeight=\"normal\"    exampleText=\"\\author\"/>\n  <Color name=\"ShortKeywords\" foreground=\"#FF60604F\" background=\"#30AAAAAA\" fontWeight=\"normal\" exampleText=\"\\\\\"/>\n\n  <Color name=\"Todo\" foreground=\"Red\"  fontWeight=\"bold\" exampleText=\"Todo\"/>\n  <Color name=\"HACK\" foreground=\"Blue\" fontWeight=\"bold\" exampleText=\"?,.;{}\"/>\n\n  <Color name=\"CurlyBrackets\"             foreground=\"Red\" fontWeight=\"normal\"    exampleText=\"{comment}\"/>\n\n  <Color name=\"SquareBrackets\"            foreground=\"#FF333333\"                        exampleText=\"[comment]\"/>\n  <Color name=\"ParameterInSquareBrackets\" foreground=\"#FF333333\" background=\"#33808080\" exampleText=\"comment\" />\n\n  <Color name=\"MathMode\" foreground=\"Green\" />\n  <Color name=\"MathMode1\" fontWeight=\"bold\" background=\"#33AAAAAA\" />\n\n  <RuleSet name=\"CommentMarkerSet\">\n    <Keywords color=\"Todo\">\n      <Word>TODO</Word>\n      <Word>FIXME</Word>\n    </Keywords>\n    <Keywords color=\"HACK\">\n      <Word>HACK</Word>\n      <Word>UNDONE</Word>\n      <Word>Bug</Word>\n      <Word>Problem</Word>\n    </Keywords>\n  </RuleSet>\n\n  <!-- This is the main ruleset. -->\n  <RuleSet>\n    <Rule color=\"Digits\">\\d</Rule>\n\n    <!-- MathMode $ ... $ -->\n    <Span color=\"MathMode1\" ruleSet=\"MathMode\">\n      <Begin>\\$</Begin>\n      <End>\\$</End>\n    </Span>\n\n    <!-- MathMode \\( ... \\) -->\n    <Span color=\"MathMode1\" ruleSet=\"MathMode\">\n      <Begin>\\\\\\(</Begin>\n      <End>\\\\\\)</End>\n    </Span>\n\n    <!-- MathMode \\[ ... \\] -->\n    <Span color=\"MathMode1\" ruleSet=\"MathMode\">\n      <Begin>\\\\\\[</Begin>\n      <End>\\\\\\]</End>\n    </Span>\n\n    <!-- MathMode [ ... ] -->\n    <Span color=\"SquareBrackets\" multiline=\"false\">\n      <Begin>\\[</Begin>\n      <End>\\]</End>\n      <RuleSet>\n        <Rule color=\"ParameterInSquareBrackets\">[^\\\\]</Rule>\n      </RuleSet>\n    </Span>\n\n    <!-- Mark '&','\\\\ ','\\\\', '\\@', '\\$', '\\&', '\\%', '\\#', '\\{', '\\}', and '\\/' etc as keyword -->\n    <Rule color=\"ShortKeywords\">(&amp;)|(\\\\\\ )|(\\\\\\\\)|(\\\\@)|(\\\\\\$)|(\\\\&amp;)|(\\\\%)|(\\\\\\#)|(\\\\{)|(\\\\})|(\\\\/)</Rule>\n\n    <Rule color=\"Keywords\">(\\\\[\\w]+)</Rule>\n\n    <Rule color=\"CurlyBrackets\">({[\\w]+.*})</Rule>\n\n    <Rule color=\"LineComment\">(%)$</Rule>\n\n    <!-- This overwrites the rule for \\% but it is still better than having '% \\document' not being marked as comment\n         What is missing is a span rule that says something like match this only if it does not start with '\\%' ???\n     -->\n    <Span color=\"LineComment\" ruleSet=\"CommentMarkerSet\">\n      <Begin>%</Begin>\n    </Span>\n\n    <Rule color=\"CurlyBrackets\">({)|(})</Rule>\n\n    <!-- Rule foreground=\"Red\">\\\\\\%</Rule -->\n  </RuleSet>\n  \n  <RuleSet name = \"MathMode\" ignoreCase=\"false\">\n    <!--Delimiters>&amp;~!@%^*()-+=|\\#/{}[]:;\"'&lt;&gt; , .?</Delimiters-->\n\n\n    <Span color = \"LineComment\" ><!--stopateol = \"true\"-->\n      <Begin>%</Begin>\n    </Span>\n\n    <!-- \\... commands -->\n    <!--MarkFollowing markmarker =\"true\" bold = \"true\" italic = \"false\" color = \"MidnightBlue\">\\</MarkFollowing-->\n\n    <Keywords color=\"Keywords\">\n      <Word>)</Word>\n      <Word>)</Word>\n      <Word>{</Word>\n      <Word>}</Word>\n      <Word>[</Word>\n      <Word>]</Word>\n      <Word>=</Word>\n      <Word>!</Word>\n      <Word>+</Word>\n      <Word>-</Word>\n      <Word>/</Word>\n      <Word>*</Word>\n      <Word>&gt;</Word>\n      <Word>&lt;</Word>\n      <Word>&amp;</Word>\n      <Word>|</Word>\n      <Word>^</Word>\n      <Word>~</Word>\n      <Word>.</Word>\n      <Word>,</Word>\n      <Word>;</Word>\n      <Word>?</Word>\n      <Word>:</Word>\n      <Word>'</Word>\n      <!--\t\t\t    <Key word = \"\"\" />-->\n      <Word>`</Word>\n    </Keywords>\n  </RuleSet>\n\n  <!-- Command Overview: http://www.math.sunysb.edu/~sorin/online-docs/latexhelp/ -->\n\n</SyntaxDefinition>\n\n"
  },
  {
    "path": "src/HL/Resources/Light/VB-Mode.xshd",
    "content": "<?xml version=\"1.0\"?>\n\n<!-- Syntaxdefinition for VB.NET, v0.1 Rev 1 by Christian Holm -->\n<!-- Updated 2005 by Daniel Grunwald for VB.NET 2.0 -->\n<!-- Converted to AvalonEdit format by Daniel Grunwald in 2010 -->\n<!-- Updated 2010 by Siegfried Oleg Pammer for VB.NET 9 and 10 -->\n<!-- Updated 2011 by Siegfried Oleg Pammer for VB 11 CTP -->\n<SyntaxDefinition name=\"VB\" extensions=\".vb\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"' comment\" />\n\t<Color name=\"String\" exampleText=\"text = &quot;Hello, World!&quot;\" />\n\n\t<Color name=\"DateLiteral\" foreground=\"Blue\" exampleText=\"endOfWorld = #2012-12-21#\" />\n\t<Color name=\"Preprocessor\" foreground=\"Maroon\" exampleText=\"#Region &quot;Title&quot;\" />\n\t<Color name=\"DataTypes\" foreground=\"#FF6F002F\" exampleText=\"Dim b As Boolean = True\" />\n\t<Color name=\"Operators\" foreground=\"#FF8515EA\" exampleText=\"If a OrElse b Then\"/>\n\t<Color name=\"Constants\" foreground=\"Blue\" exampleText=\"b = False\" />\n\t<Color name=\"Keywords\" foreground=\"Blue\" exampleText=\"If a OrElse b Then\" />\n\t<Color name=\"FunctionKeywords\" foreground=\"Blue\" exampleText=\"CInt(a)\" />\n\t<Color name=\"ContextKeywords\" foreground=\"Blue\" exampleText=\"Declare Unicode Sub SomeMethod\" />\n\n\t<Property name=\"DocCommentMarker\" value=\"'''\" />\n\n\t<RuleSet ignoreCase=\"true\">\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span begin=\"&quot;&quot;\" end=\"\" />\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Span color=\"Preprocessor\" ruleSet=\"PreprocessorSet\">\n\t\t\t<Begin>(?&lt;=(^\\s*))\\#</Begin>\n\t\t</Span>\n\t\t<Span color=\"DateLiteral\">\n\t\t\t<Begin>(?&lt;!(^\\s*))\\#</Begin>\n\t\t\t<End>\\#</End>\n\t\t</Span>\n\t\t<Span color=\"Comment\" ruleSet=\"XmlDoc/DocCommentSet\">\n\t\t\t<Begin color=\"XmlDoc/DocComment\">'''</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>'</Begin>\n\t\t</Span>\n\t\t<Span color=\"Comment\">\n\t\t\t<Begin>\\bREM\\b</Begin>\n\t\t</Span>\n\t\t<Keywords color=\"DataTypes\">\n\t\t\t<Word>Boolean</Word>\n\t\t\t<Word>Byte</Word>\n\t\t\t<Word>Char</Word>\n\t\t\t<Word>Date</Word>\n\t\t\t<Word>Decimal</Word>\n\t\t\t<Word>Double</Word>\n\t\t\t<Word>Integer</Word>\n\t\t\t<Word>Long</Word>\n\t\t\t<Word>Object</Word>\n\t\t\t<Word>SByte</Word>\n\t\t\t<Word>Short</Word>\n\t\t\t<Word>Single</Word>\n\t\t\t<Word>String</Word>\n\t\t\t<Word>UInteger</Word>\n\t\t\t<Word>ULong</Word>\n\t\t\t<Word>UShort</Word>\n\t\t\t<Word>Variant</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Operators\">\n\t\t\t<Word>AddressOf</Word>\n\t\t\t<Word>And</Word>\n\t\t\t<Word>AndAlso</Word>\n\t\t\t<Word>Await</Word>\n\t\t\t<Word>Is</Word>\n\t\t\t<Word>IsNot</Word>\n\t\t\t<Word>Like</Word>\n\t\t\t<Word>Mod</Word>\n\t\t\t<Word>New</Word>\n\t\t\t<Word>Not</Word>\n\t\t\t<Word>Or</Word>\n\t\t\t<Word>OrElse</Word>\n\t\t\t<Word>Xor</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Constants\">\n\t\t\t<Word>False</Word>\n\t\t\t<Word>Me</Word>\n\t\t\t<Word>MyBase</Word>\n\t\t\t<Word>MyClass</Word>\n\t\t\t<Word>Nothing</Word>\n\t\t\t<Word>True</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"FunctionKeywords\">\n\t\t\t<Word>CBool</Word>\n\t\t\t<Word>CByte</Word>\n\t\t\t<Word>CChar</Word>\n\t\t\t<Word>CDate</Word>\n\t\t\t<Word>CDbl</Word>\n\t\t\t<Word>CDec</Word>\n\t\t\t<Word>CInt</Word>\n\t\t\t<Word>CLng</Word>\n\t\t\t<Word>CObj</Word>\n\t\t\t<Word>CSByte</Word>\n\t\t\t<Word>CShort</Word>\n\t\t\t<Word>CSng</Word>\n\t\t\t<Word>CStr</Word>\n\t\t\t<Word>CType</Word>\n\t\t\t<Word>CUInt</Word>\n\t\t\t<Word>CULng</Word>\n\t\t\t<Word>CUShort</Word>\n\t\t\t<Word>DirectCast</Word>\n\t\t\t<Word>GetType</Word>\n\t\t\t<Word>GetXmlNamespace</Word>\n\t\t\t<Word>IIf</Word>\n\t\t\t<Word>TryCast</Word>\n\t\t\t<Word>TypeOf</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>AddHandler</Word>\n\t\t\t<Word>Alias</Word>\n\t\t\t<Word>As</Word>\n\t\t\t<Word>ByRef</Word>\n\t\t\t<Word>ByVal</Word>\n\t\t\t<Word>Call</Word>\n\t\t\t<Word>Case</Word>\n\t\t\t<Word>Catch</Word>\n\t\t\t<Word>Class</Word>\n\t\t\t<Word>Const</Word>\n\t\t\t<Word>Continue</Word>\n\t\t\t<Word>Declare</Word>\n\t\t\t<Word>Default</Word>\n\t\t\t<Word>Delegate</Word>\n\t\t\t<Word>Dim</Word>\n\t\t\t<Word>Do</Word>\n\t\t\t<Word>Each</Word>\n\t\t\t<Word>Else</Word>\n\t\t\t<Word>ElseIf</Word>\n\t\t\t<Word>End</Word>\n\t\t\t<Word>EndIf</Word>\n\t\t\t<Word>Enum</Word>\n\t\t\t<Word>Erase</Word>\n\t\t\t<Word>Error</Word>\n\t\t\t<Word>Event</Word>\n\t\t\t<Word>Exit</Word>\n\t\t\t<Word>Finally</Word>\n\t\t\t<Word>For</Word>\n\t\t\t<Word>Friend</Word>\n\t\t\t<Word>Function</Word>\n\t\t\t<Word>Get</Word>\n\t\t\t<Word>Global</Word>\n\t\t\t<Word>GoSub</Word>\n\t\t\t<Word>GoTo</Word>\n\t\t\t<Word>Handles</Word>\n\t\t\t<Word>If</Word>\n\t\t\t<Word>Implements</Word>\n\t\t\t<Word>Imports</Word>\n\t\t\t<Word>In</Word>\n\t\t\t<Word>Inherits</Word>\n\t\t\t<Word>Interface</Word>\n\t\t\t<Word>Let</Word>\n\t\t\t<Word>Lib</Word>\n\t\t\t<Word>Loop</Word>\n\t\t\t<Word>Module</Word>\n\t\t\t<Word>MustInherit</Word>\n\t\t\t<Word>MustOverride</Word>\n\t\t\t<Word>Namespace</Word>\n\t\t\t<Word>Narrowing</Word>\n\t\t\t<Word>New</Word>\n\t\t\t<Word>Next</Word>\n\t\t\t<Word>NotInheritable</Word>\n\t\t\t<Word>NotOverridable</Word>\n\t\t\t<Word>Of</Word>\n\t\t\t<Word>On</Word>\n\t\t\t<Word>Operator</Word>\n\t\t\t<Word>Option</Word>\n\t\t\t<Word>Optional</Word>\n\t\t\t<Word>Overloads</Word>\n\t\t\t<Word>Overridable</Word>\n\t\t\t<Word>Overrides</Word>\n\t\t\t<Word>ParamArray</Word>\n\t\t\t<Word>Partial</Word>\n\t\t\t<Word>Private</Word>\n\t\t\t<Word>Property</Word>\n\t\t\t<Word>Protected</Word>\n\t\t\t<Word>Public</Word>\n\t\t\t<Word>RaiseEvent</Word>\n\t\t\t<Word>ReadOnly</Word>\n\t\t\t<Word>ReDim</Word>\n\t\t\t<Word>RemoveHandler</Word>\n\t\t\t<Word>Resume</Word>\n\t\t\t<Word>Return</Word>\n\t\t\t<Word>Select</Word>\n\t\t\t<Word>Set</Word>\n\t\t\t<Word>Shadows</Word>\n\t\t\t<Word>Shared</Word>\n\t\t\t<Word>Static</Word>\n\t\t\t<Word>Step</Word>\n\t\t\t<Word>Stop</Word>\n\t\t\t<Word>Structure</Word>\n\t\t\t<Word>Sub</Word>\n\t\t\t<Word>SyncLock</Word>\n\t\t\t<Word>Then</Word>\n\t\t\t<Word>Throw</Word>\n\t\t\t<Word>To</Word>\n\t\t\t<Word>Try</Word>\n\t\t\t<Word>Using</Word>\n\t\t\t<Word>Wend</Word>\n\t\t\t<Word>When</Word>\n\t\t\t<Word>While</Word>\n\t\t\t<Word>Widening</Word>\n\t\t\t<Word>With</Word>\n\t\t\t<Word>WithEvents</Word>\n\t\t\t<Word>WriteOnly</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"ContextKeywords\">\n\t\t\t<Word>Aggregate</Word>\n\t\t\t<Word>Ansi</Word>\n\t\t\t<Word>Ascending</Word>\n\t\t\t<Word>Async</Word>\n\t\t\t<Word>Auto</Word>\n\t\t\t<Word>Binary</Word>\n\t\t\t<Word>By</Word>\n\t\t\t<Word>Compare</Word>\n\t\t\t<Word>Custom</Word>\n\t\t\t<Word>Descending</Word>\n\t\t\t<Word>Distinct</Word>\n\t\t\t<Word>Equals</Word>\n\t\t\t<Word>Explicit</Word>\n\t\t\t<Word>From</Word>\n\t\t\t<Word>Group</Word>\n\t\t\t<Word>Infer</Word>\n\t\t\t<Word>Into</Word>\n\t\t\t<Word>Iterator</Word>\n\t\t\t<Word>Join</Word>\n\t\t\t<Word>Key</Word>\n\t\t\t<Word>Off</Word>\n\t\t\t<Word>Preserve</Word>\n\t\t\t<Word>Skip</Word>\n\t\t\t<Word>Strict</Word>\n\t\t\t<Word>Take</Word>\n\t\t\t<Word>Text</Word>\n\t\t\t<Word>Unicode</Word>\n\t\t\t<Word>Until</Word>\n\t\t\t<Word>Where</Word>\n\t\t\t<Word>Yield</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\t<RuleSet name=\"PreprocessorSet\" ignoreCase=\"true\">\n\t\t<Keywords fontWeight=\"bold\">\n\t\t\t<Word>Const</Word>\n\t\t\t<Word>Else</Word>\n\t\t\t<Word>ElseIf</Word>\n\t\t\t<Word>End</Word>\n\t\t\t<Word>ExternalChecksum</Word>\n\t\t\t<Word>ExternalSource</Word>\n\t\t\t<Word>If</Word>\n\t\t\t<Word>Region</Word>\n\t\t</Keywords>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/XML-Mode.xshd",
    "content": "<SyntaxDefinition name=\"XML\" extensions=\".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color foreground=\"Green\" name=\"Comment\" exampleText=\"&lt;!-- comment --&gt;\" />\n\t<Color foreground=\"Blue\" name=\"CData\" exampleText=\"&lt;![CDATA[data]]&gt;\" />\n\t<Color foreground=\"Blue\" name=\"DocType\" exampleText=\"&lt;!DOCTYPE rootElement&gt;\" />\n\t<Color foreground=\"Blue\" name=\"XmlDeclaration\" exampleText='&lt;?xml version=\"1.0\"?&gt;' />\n\t<Color foreground=\"DarkMagenta\" name=\"XmlTag\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n\t<Color foreground=\"Red\" name=\"AttributeName\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n\t<Color foreground=\"Blue\" name=\"AttributeValue\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n\t<Color foreground=\"Teal\" name=\"Entity\" exampleText=\"index.aspx?a=1&amp;amp;b=2\" />\n\t<Color foreground=\"Olive\" name=\"BrokenEntity\" exampleText=\"index.aspx?a=1&amp;b=2\" />\n\t\n\t<RuleSet>\n\t\t<Span color=\"Comment\" multiline=\"true\">\n\t\t\t<Begin>&lt;!--</Begin>\n\t\t\t<End>--&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"CData\" multiline=\"true\">\n\t\t\t<Begin>&lt;!\\[CDATA\\[</Begin>\n\t\t\t<End>]]&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"DocType\" multiline=\"true\">\n\t\t\t<Begin>&lt;!DOCTYPE</Begin>\n\t\t\t<End>&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"XmlDeclaration\" multiline=\"true\">\n\t\t\t<Begin>&lt;\\?</Begin>\n\t\t\t<End>\\?&gt;</End>\n\t\t</Span>\n\t\t<Span color=\"XmlTag\" multiline=\"true\">\n\t\t\t<Begin>&lt;</Begin>\n\t\t\t<End>&gt;</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- Treat the position before '<' as end, as that's not a valid character\n\t\t\t\t     in attribute names and indicates the user forgot a closing quote. -->\n\t\t\t\t<Span color=\"AttributeValue\" multiline=\"true\" ruleSet=\"EntitySet\">\n\t\t\t\t\t<Begin>\"</Begin>\n\t\t\t\t\t<End>\"|(?=&lt;)</End>\n\t\t\t\t</Span>\n\t\t\t\t<Span color=\"AttributeValue\" multiline=\"true\" ruleSet=\"EntitySet\">\n\t\t\t\t\t<Begin>'</Begin>\n\t\t\t\t\t<End>'|(?=&lt;)</End>\n\t\t\t\t</Span>\n\t\t\t\t<Rule color=\"AttributeName\">[\\d\\w_\\-\\.]+(?=(\\s*=))</Rule>\n\t\t\t\t<Rule color=\"AttributeValue\">=</Rule>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t<Import ruleSet=\"EntitySet\"/>\n\t</RuleSet>\n\t\n\t<RuleSet name=\"EntitySet\">\n\t\t<Rule color=\"Entity\">\n\t\t\t&amp;\n\t\t\t[\\w\\d\\#]+\n\t\t\t;\n\t\t</Rule>\n\n\t\t<Rule color=\"BrokenEntity\">\n\t\t\t&amp;\n\t\t\t[\\w\\d\\#]*\n\t\t\t#missing ;\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/XmlDoc.xshd",
    "content": "<?xml version=\"1.0\"?>\n<SyntaxDefinition name=\"XmlDoc\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\t<Color name=\"XmlString\" foreground=\"Silver\" fontWeight=\"bold\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n\t<Color name=\"DocComment\" foreground=\"Gray\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n\t<Color name=\"XmlPunctuation\" fontWeight=\"bold\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n\t<Color name=\"KnownDocTags\" fontWeight=\"bold\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n\n\t<RuleSet name=\"DocCommentSet\">\n\t\t<Span color=\"DocComment\">\n\t\t\t<Begin>&lt;</Begin>\n\t\t\t<End>&gt;</End>\n\t\t\t<RuleSet>\n\t\t\t\t<Span color=\"XmlString\">\n\t\t\t\t\t<Begin>\"</Begin>\n\t\t\t\t\t<End>\"</End>\n\t\t\t\t</Span>\n\t\t\t\t<Keywords color=\"XmlPunctuation\">\n\t\t\t\t\t<Word>/</Word>\n\t\t\t\t\t<Word>|</Word>\n\t\t\t\t\t<Word>=</Word>\n\t\t\t\t</Keywords>\n\t\t\t\t<Keywords color=\"KnownDocTags\">\n\t\t\t\t\t<Word>c</Word>\n\t\t\t\t\t<Word>code</Word>\n\t\t\t\t\t<Word>example</Word>\n\t\t\t\t\t<Word>exception</Word>\n\t\t\t\t\t<Word>list</Word>\n\t\t\t\t\t<Word>para</Word>\n\t\t\t\t\t<Word>param</Word>\n\t\t\t\t\t<Word>paramref</Word>\n\t\t\t\t\t<Word>permission</Word>\n\t\t\t\t\t<Word>remarks</Word>\n\t\t\t\t\t<Word>returns</Word>\n\t\t\t\t\t<Word>see</Word>\n\t\t\t\t\t<Word>seealso</Word>\n\t\t\t\t\t<Word>summary</Word>\n\t\t\t\t\t<Word>value</Word>\n\n\t\t\t\t\t<Word>type</Word>\n\t\t\t\t\t<Word>name</Word>\n\t\t\t\t\t<Word>cref</Word>\n\t\t\t\t\t<Word>item</Word>\n\t\t\t\t\t<Word>term</Word>\n\t\t\t\t\t<Word>description</Word>\n\t\t\t\t\t<Word>listheader</Word>\n\t\t\t\t\t<Word>typeparam</Word>\n\t\t\t\t\t<Word>typeparamref</Word>\n\t\t\t\t</Keywords>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t</RuleSet>\n\n\t<!-- root ruleset = DocCommentSet -->\n\t<RuleSet>\n\t\t<Import ruleSet=\"DocCommentSet\" />\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/scheme.xshd",
    "content": "<!-- http://stackoverflow.com/questions/7278940/lisp-syntax-highlighting-for-icsharpcode-texteditor -->\n<SyntaxDefinition name=\"Scheme\" extensions=\".sls;.sps;.ss;.scm\" \n     xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  \n  <!-- Lisp syntax definition -->\n  <Color name=\"Digits\"              foreground=\"DarkBlue\"    exampleText=\"3.1415f\"/>\n  <Color name=\"Comment\"             foreground=\"Green\"       />\n  <Color name=\"Punctuation\"         foreground=\"Red\"         exampleText=\"a(b.c);\" />\n\n  <Color name=\"Syntax\"              foreground=\"Blue\"        />\n  <Color name=\"Library Syntax\"      foreground=\"Blue\"        />\n  <Color name=\"Auxilliary Syntax\"   foreground=\"Blue\"        />\n  <Color name=\"MethodCall\"          foreground=\"DarkMagenta\" />\n  <Color name=\"NullOrValueKeywords\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n\n  <RuleSet>\n    <Import ruleSet=\"Expression\"/>\n  </RuleSet>\n\n    <RuleSet name=\"Expression\">\n      <Span color=\"Comment\" multiline=\"false\">\n        <Begin>;</Begin>\n      </Span>\n    <Span color=\"Comment\" multiline=\"true\" >\n      <Begin>\\#\\|</Begin>\n      <End>\\|\\#</End>\n    </Span>\n      <!-- Span ruleSet=\"Expression\" multiline=\"true\" color=\"Expression\" >\n      <Begin fontWeight=\"bold\">\\(</Begin>\n      <End fontWeight=\"bold\">\\)</End>\n    </Span>\n    <Span  ruleSet=\"Expression\" multiline=\"true\">\n      <Begin fontWeight=\"bold\">\\#\\(</Begin>\n      <End fontWeight=\"bold\">\\)</End>\n    </Span -->\n\n    <Keywords color=\"Library Syntax\">\n      <Word>import</Word>\n      <Word>export</Word>\n      <Word>library</Word>\n    </Keywords>\n\n    <Keywords color=\"Syntax\">\n      <Word>define</Word>\n      <Word>set!</Word>\n      <Word>lambda</Word>\n      <Word>begin</Word>\n      <Word>if</Word>\n      <Word>cond</Word>\n      <Word>let</Word>\n      <Word>letrec</Word>\n    </Keywords>\n\n    <Keywords color=\"Auxilliary Syntax\">\n      <Word>else</Word>\n    </Keywords>\n\n    <Keywords color=\"MethodCall\">\n      <Word>map</Word>\n      <Word>cons</Word>\n      <Word>car</Word>\n    </Keywords>\n\n      <Keywords color=\"NullOrValueKeywords\">\n        <Word>null</Word>\n        <Word>value</Word>\n      </Keywords>\n\n      <!-- Digits -->\n      <Rule color=\"Digits\">\n        \\b0[xX][0-9a-fA-F]+  # hex number\n        |\n        (\t\\b\\d+(\\.[0-9]+)?   #number with optional floating point\n        |\t\\.[0-9]+           #or just starting with floating point\n        )\n        ([eE][+-]?[0-9]+)? # optional exponent\n      </Rule>\n\n      <Rule color=\"Punctuation\">\n        [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n      </Rule>\n    </RuleSet>\n\n</SyntaxDefinition>\n"
  },
  {
    "path": "src/HL/Resources/Light/squirrel.xshd",
    "content": "<?xml version=\"1.0\"?>\n<!-- Source: http://geogen.googlecode.com/svn/trunk/config/squirrel.xshd -->\n<SyntaxDefinition name=\"Squirrel\" extensions=\".nut\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n  <!-- Reference: http://www.squirrel-lang.org/\n       Reference Manual: http://www.squirrel-lang.org/doc/squirrel2.html -->\n\t<Color name=\"Comment\" foreground=\"Green\" exampleText=\"// comment\" />\n\t<Color name=\"String\" foreground=\"DarkRed\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\t<Color name=\"Punctuation\" foreground=\"DarkGreen\" exampleText=\"a(b.c);\" />\n\t<Color name=\"MethodCall\" foreground=\"MidnightBlue\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n\t<Color name=\"Digits\" foreground=\"DarkBlue\" exampleText=\"3.1415f\"/>\n\t<Color name=\"GGenObject\" foreground=\"Teal\" exampleText=\"local base = GGen_Data_2D(200, 200, 0)\"/>\n\t<Color name=\"Keywords\" fontWeight=\"bold\" foreground=\"Black\" exampleText=\"if (a) {} else {}\"/>\n\n  <Color name=\"CommentMarkerSetTodo\"       foreground=\"Red\"     fontWeight=\"bold\" />\n  <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\" />\n\n  <Color name=\"PreprocessorLine\"           foreground=\"#FF6666FF\" fontWeight=\"bold\" />\n\n  <RuleSet name=\"CommentMarkerSet\">\n\t\t<Keywords color=\"CommentMarkerSetTodo\">\n\t\t\t<Word>TODO</Word>\n\t\t\t<Word>FIXME</Word>\n\t\t</Keywords>\n\t\t<Keywords color=\"CommentMarkerSetHackUndone\">\n\t\t\t<Word>HACK</Word>\n\t\t\t<Word>UNDONE</Word>\n\t\t</Keywords>\n\t</RuleSet>\n\t\n\t<RuleSet>\n\n    <Span  color=\"PreprocessorLine\" multiline=\"false\">\n      <Begin>\\#</Begin>\n    </Span>\n\n    <Span color=\"Comment\">\n\t\t\t<Begin color=\"XmlDoc/DocComment\">///</Begin>\n\t\t\t<RuleSet>\n\t\t\t\t<Import ruleSet=\"XmlDoc/DocCommentSet\"/>\n\t\t\t\t<Import ruleSet=\"CommentMarkerSet\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\">\n\t\t\t<Begin>//</Begin>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"Comment\" ruleSet=\"CommentMarkerSet\" multiline=\"true\">\n\t\t\t<Begin>/\\*</Begin>\n\t\t\t<End>\\*/</End>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\">\n\t\t\t<Begin>\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin=\"\\\\\" end=\".\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Span color=\"String\" multiline=\"true\">\n\t\t\t<Begin color=\"String\">@\"</Begin>\n\t\t\t<End>\"</End>\n\t\t\t<RuleSet>\n\t\t\t\t<!-- span for escape sequences -->\n\t\t\t\t<Span begin='\"\"' end=\"\"/>\n\t\t\t</RuleSet>\n\t\t</Span>\n\t\t\n\t\t<Rule color=\"Punctuation\">\n\t\t\t[?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n\t\t</Rule>\n\t\t\n\t\t<Keywords color=\"GGenObject\">\n\t\t\t<Word>GGen_Point</Word>\n\t\t\t<Word>GGen_Path</Word>\n\t\t\t<Word>GGen_Amplitudes</Word>\n\t\t\t<Word>GGen_Data_2D</Word>\n\t\t\t<Word>GGen_Data_1D</Word>\n\t\t</Keywords>\n\t\t\n\t\t<Keywords color=\"Keywords\">\n\t\t\t<Word>else</Word>\n\t\t\t<Word>if</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>case</Word>\n\t\t\t<Word>default</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>while</Word>\n\t\t\t<Word>break</Word>\n\t\t\t<Word>local</Word>\n\t\t\t<Word>catch</Word>\n\t\t\t<Word>clone</Word>\n\t\t\t<Word>continue</Word>\n\t\t\t<Word>const</Word>\n\t\t\t<Word>delegate</Word>\n\t\t\t<Word>delete</Word>\n\t\t\t<Word>else</Word>\n\t\t\t<Word>enum</Word>\n\t\t\t<Word>extends</Word>\n\t\t\t<Word>for</Word>\n\t\t\t<Word>function</Word>\n\t\t\t<Word>null</Word>\n\t\t\t<Word>resume</Word>\n\t\t\t<Word>return</Word>\n\t\t\t<Word>switch</Word>\n\t\t\t<Word>this</Word>\n\t\t\t<Word>throw</Word>\n\t\t\t<Word>typeof</Word>\n\t\t\t<Word>parent</Word>\n\t\t\t<Word>yield</Word>\n\t\t\t<Word>constructor</Word>\n\t\t\t<Word>vargc</Word>\n\t\t\t<Word>vargv</Word>\n\t\t\t<Word>instanceof</Word>\n\t\t\t<Word>true</Word>\n\t\t\t<Word>false</Word>\n\t\t\t<Word>static</Word>\n\t\t</Keywords>\n\t\t\n\t\t<!-- Mark previous rule-->\n\t\t<Rule color=\"MethodCall\">\n\t\t\\b\n\t\t[\\d\\w_]+  # an identifier\n\t\t(?=\\s*\\() # followed by (\n\t\t</Rule>\n\t\t\n\t\t<!-- Digits -->\n\t\t<Rule color=\"Digits\">\n\t\t\t\\b0[xX][0-9a-fA-F]+  # hex number\n\t\t|\t\\b\n\t\t\t(\t\\d+(\\.[0-9]+)?   #number with optional floating point\n\t\t\t|\t\\.[0-9]+         #or just starting with floating point\n\t\t\t)\n\t\t\t([eE][+-]?[0-9]+)? # optional exponent\n\t\t</Rule>\n\t</RuleSet>\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Light/vtl.xshd",
    "content": "<!--\n  Syntax Highlighting Definitions for the Velocity Template Language (VTL).\n  See also: http://velocity.apache.org/engine/releases/velocity-1.7/vtl-reference-guide.html\n-->\n<SyntaxDefinition name=\"VTL\" extensions=\".vtl;.vm\"\n     xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n\n  <Color name=\"Digits\" fontStyle=\"italic\" fontWeight=\"normal\" foreground=\"Blue\" />\n  <Color name=\"String\" foreground=\"Olive\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"String2\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Comment\"  foreground=\"Green\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n  <Color name=\"Keywords\" foreground=\"Blue\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"Punctuation\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n  <Color name=\"ObjectReference\" foreground=\"#FF006060\" exampleText=\"$Customer.Name\" />\n\n  <RuleSet ignoreCase=\"true\">\n\n    <Span color=\"String\" multiline=\"false\" >\n      <Begin>'</Begin>\n      <End>'</End>\n    </Span>\n\n    <Span color=\"String2\" multiline=\"false\"  >\n      <Begin>\"</Begin>\n      <End>\"</End>\n    </Span>\n\n    <Span  color=\"Comment\" multiline=\"false\">\n\t    <Begin>\\#\\#</Begin>\n\t  </Span>\n\n    <Span color=\"Comment\"  multiline=\"true\">\n      <Begin>\\#\\*</Begin>\n      <End>\\*\\#</End>\n    </Span>\n\n    <Span  color=\"Keywords\" multiline=\"false\">\n\t  <Begin>\\#</Begin>\n\t  <End>[\\w\\d]+</End>\n\t</Span>\n\n    <Rule color=\"ObjectReference\">\\$([\\d\\w]+)([.])([\\d\\w]+)</Rule> <!-- $Variable.Property -->\n\n    <Rule color=\"ObjectReference\">\\$([\\d\\w]+)([.])([\\d\\w]+)</Rule> <!-- $Variable.Property -->\n\n    <Rule color=\"ObjectReference\">([.])([\\d\\w]+)</Rule> <!-- .Property -->\n\n    <Rule color=\"ObjectReference\">\\$([\\d\\w]+)</Rule><!-- $Variable -->\n\n    <Rule color=\"Punctuation\"><!-- Removed . -->\n      [?,;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\n    </Rule>\n\n    <Rule color=\"Digits\">\n      [?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+[0-9]+[ ?,.;()\\[\\]{}+\\-/%*&lt;&gt;^+~!|&amp;]+\\n\n    </Rule>\n\n  </RuleSet>\n\n</SyntaxDefinition>"
  },
  {
    "path": "src/HL/Resources/Themes/Dark.xshtd",
    "content": "﻿<?xml version=\"1.0\"?>\n<ThemeSyntaxDefinition name=\"Dark\" xmlns=\"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\">\n\n  <SyntaxDefinition name=\"ActionScript3\" extensions=\".as\">\n    <Color name=\"Comment\"    foreground=\"#FF55FF00\" exampleText=\"// comment\"/>\n    <Color name=\"String\"     foreground=\"#FFFFFF00\" exampleText=\"'str'\"/>\n    <Color name=\"MethodCall\" foreground=\"#FF0080FF\" exampleText=\"o.ToString();\"/>\n    <Color name=\"Digits\"     foreground=\"#FFFFCF00\" exampleText=\"3.1415\"/>\n\n    <Color name=\"Keyword\"    foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keyword1\"   foreground=\"#FF00A0FF\"/>\n\n    <Color name=\"CommentMarkerSet\"           foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"ASP/XHTML\" extensions=\".asp;.aspx;.asax;.asmx;.ascx;.master\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n    <Color name=\"ASPSectionStartEndTags\" foreground=\"Black\" background=\"Yellow\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n    <Color name=\"ASPSection\" foreground=\"Black\" background=\"#FFF7F2E3\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Boo\" extensions=\".boo\">\n    <Color name=\"Comment\"                    foreground=\"#FF55FF00\"/>\n    <Color name=\"Comment1\"                   foreground=\"#FF55FF00\"/>\n    <Color name=\"Comment2\"                   foreground=\"#FF99FF00\"/>\n    <Color name=\"NestedComments\"             foreground=\"#FFC5FF00\"/>\n    <Color name=\"String\"                     foreground=\"#FFFFFF00\"/>\n    <Color name=\"CodeInsideString\"           foreground=\"#FFA9DCD9\"/>\n    <Color name=\"Keywords\"                   foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords1\"                  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords2\"                  foreground=\"#FF0080FF\"/>\n    <Color name=\"Keywords3\"                  foreground=\"#FF0060FF\"/>\n    <Color name=\"Keywords4\"                  foreground=\"#FF0040FF\"/>\n    <Color name=\"Keywords5\"                  foreground=\"#FF00C0FF\"/>\n    <Color name=\"Keywords6\"                  foreground=\"#FF00E0FF\"/>\n    <Color name=\"Keywords7\"                  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords8\"                  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords9\"                  foreground=\"#FF00E0FF\"/>\n    <Color name=\"Keywords10\"                 foreground=\"#FF0080FF\"/>\n    <Color name=\"Keywords11\"                 foreground=\"#FF0060FF\"/>\n    <Color name=\"Keywords12\"                 foreground=\"#FF0040FF\"/>\n    <Color name=\"Keywords13\"                 foreground=\"#FF00C0FF\"/>\n    <Color name=\"Keywords14\"                 foreground=\"#FF00E0FF\"/>\n    <Color name=\"Keywords15\"                 foreground=\"#FF0080FF\"/>\n    <Color name=\"Keywords16\"                 foreground=\"#FF0060FF\"/>\n    <Color name=\"Keywords17\"                 foreground=\"#FF0040FF\"/>\n    <Color name=\"Keywords18\"                 foreground=\"#FF00C0FF\"/>\n    <Color name=\"Keywords19\"                 foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords20\"                 foreground=\"#FF00A0FF\"/>\n    <Color name=\"Regex\"                      foreground=\"#FF79AC79\"/>\n    <Color name=\"CommentMarkerSet\"           foreground=\"Red\"     fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#E0E000\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Coco\" extensions=\".atg\">\n    <Color name=\"Comment\"       foreground=\"#FFA0FF00\" fontStyle=\"italic\" />\n    <Color name=\"Punctuation\"   foreground=\"#FFFFCF00\" fontWeight=\"bold\" />\n    <Color name=\"String\"        foreground=\"#FFFFFF00\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FF00A0FF\" />\n    <Color name=\"COMPILER\"      foreground=\"#FF0080FF\" />\n\n    <Color name=\"Lt_Gt_Color\"   foreground=\"#FF0060FF\" />\n    <Color name=\"Bracket_Color\" foreground=\"#FF0040FF\" />\n    <Color name=\"CSharp_Color\"  foreground=\"#FF00C0FF\" />\n\n    <Color name=\"CSharp1_Color\" foreground=\"#FF00E0FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C++\" extensions=\".c;.h;.cc;.cpp;.hpp\">\n    <Color name=\"Comment\"           foreground=\"#FF55FF00\" />\n    <Color name=\"Character\"         foreground=\"#FFFFFF00\" />\n    <Color name=\"String\"            foreground=\"#FFFFEF00\" />\n    <Color name=\"Preprocessor\"      foreground=\"#FFFF8080\" />\n    <Color name=\"Punctuation\"       foreground=\"#FFFFCF00\" />\n    <Color name=\"MethodName\"        foreground=\"#FF00A0FF\" />\n    <Color name=\"Digits\"            foreground=\"#FFFFCF00\" />\n    <Color name=\"CompoundKeywords\"  foreground=\"#FF00A0FF\" />\n    <Color name=\"This\"              foreground=\"#FF0080FF\" />\n    <Color name=\"Operators\"         foreground=\"#FF0060FF\" />\n    <Color name=\"Namespace\"         foreground=\"#FF0040FF\" />\n    <Color name=\"Friend\"            foreground=\"#FF00C0FF\" />\n    <Color name=\"Modifiers\"         foreground=\"#FF00E0FF\" />\n    <Color name=\"TypeKeywords\"      foreground=\"#FF00A0FF\" />\n    <Color name=\"BooleanConstants\"  foreground=\"#FF00A0FF\" />\n    <Color name=\"Keywords\"          foreground=\"#FF00E0FF\" />\n    <Color name=\"LoopKeywords\"      foreground=\"#FF0080FF\" />\n    <Color name=\"JumpKeywords\"      foreground=\"#FF0060FF\" />\n    <Color name=\"ExceptionHandling\" foreground=\"#FF0040FF\" />\n    <Color name=\"ControlFlow\"       foreground=\"#FF00C0FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C#\" extensions=\".cs\">\n    <!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->\n    <Color name=\"Comment\"             foreground=\"#FF55FF00\" />\n    <Color name=\"String\"              foreground=\"#FFFFFF00\" />\n    <Color name=\"StringInterpolation\" foreground=\"White\" exampleText=\"string text = $&quot;Hello, {name}!&quot;\"/>\n    <Color name=\"Char\"                foreground=\"#FFFFEF00\" />\n    <Color name=\"Preprocessor\"        foreground=\"#FFFF8080\" />\n    <Color name=\"Punctuation\"         foreground=\"#FFFFCF00\" />\n\n    <Color name=\"ValueTypeKeywords\"     foreground=\"#FF00A0FF\" fontWeight=\"normal\" exampleText=\"bool b = true;\" />\n\n    <Color name=\"ReferenceTypeKeywords\" foreground=\"#FF00A0FF\" fontWeight=\"normal\" exampleText=\"object o;\" />\n    <Color name=\"MethodCall\"            foreground=\"#FF00A0FF\" fontWeight=\"normal\" />\n    <Color name=\"NumberLiteral\"         foreground=\"#FFFFCF00\" />\n    <Color name=\"ThisOrBaseReference\"   foreground=\"#FF00A0FF\" fontWeight=\"normal\" />\n    <Color name=\"NullOrValueKeywords\"   foreground=\"#FF0080FF\" fontWeight=\"normal\" />\n    <Color name=\"Keywords\"              foreground=\"#FF00E0FF\" fontWeight=\"normal\" />\n    <Color name=\"GotoKeywords\"          foreground=\"#FF00E0FF\" fontWeight=\"normal\" />\n    <Color name=\"ContextKeywords\"       foreground=\"#FF0080FF\" fontWeight=\"normal\" />\n    <Color name=\"ExceptionKeywords\"     foreground=\"#FF0060FF\" fontWeight=\"normal\" />\n    <Color name=\"CheckedKeyword\"        foreground=\"#FF0040FF\" fontWeight=\"normal\" />\n    <Color name=\"UnsafeKeywords\"        foreground=\"#FF00C0FF\" fontWeight=\"normal\" />\n    <Color name=\"OperatorKeywords\"      foreground=\"#FF00E0FF\" fontWeight=\"normal\" />\n    <Color name=\"ParameterModifiers\"    foreground=\"#FF0080FF\" fontWeight=\"normal\" />\n    <Color name=\"Modifiers\"             foreground=\"#FF0060FF\" fontWeight=\"normal\" />\n    <Color name=\"Visibility\"            foreground=\"#FF0060FF\" fontWeight=\"normal\" />\n    <Color name=\"NamespaceKeywords\"     foreground=\"#FF0040FF\" fontWeight=\"normal\" />\n    <Color name=\"GetSetAddRemove\"       foreground=\"#FF00C0FF\" fontWeight=\"normal\" />\n    <Color name=\"TrueFalse\"             foreground=\"#FF0040FF\" fontWeight=\"normal\" />\n    <Color name=\"TypeKeywords\"          foreground=\"#FF00C0FF\" fontWeight=\"normal\" />\n    <Color name=\"SemanticKeywords\"      foreground=\"DarkCyan\" fontWeight=\"bold\" exampleText=\"if (args == null) throw new ArgumentNullException(nameof(args));\" />\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF8080\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"CSS\" extensions=\".css\">\n    <Color name=\"Comment\"     foreground=\"#FF55FF00\" exampleText=\"/* comment */\" />\n    <Color name=\"String\"      foreground=\"#FFFFFF00\" exampleText=\"body { background: url(&quot;image.png&quot;) }\" />\n    <Color name=\"Selector\"    foreground=\"#FF00A0FF\" fontWeight=\"normal\" exampleText=\"div p\" />\n    <Color name=\"Class\"       foreground=\"#FF00A0FF\" fontWeight=\"normal\" exampleText=\"#para\" />\n    <Color name=\"Property\"    foreground=\"#FF0080FF\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"Value\"       foreground=\"#FF0060FF\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"CurlyBraces\" foreground=\"#FFFFCF00\" exampleText=\"{ }\" />\n    <Color name=\"Colon\"       foreground=\"#FFFF8080\" exampleText=\":\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"BAT\" extensions=\".bat;.dos\">\n    <Color name=\"String\"      foreground=\"#FFFFFF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"String2\"     foreground=\"#FFFFEF00\" background=\"#22DDDDDD\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Comment\"     foreground=\"#FF55FF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"Digits\"      foreground=\"#FFFFCF00\" fontStyle=\"italic\"/>\n    <Color name=\"Punctuation\" foreground=\"#FFFFCF00\"  exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"PARAMETER\"   foreground=\"#FF99CC99\" exampleText=\"%1\"/>\n    <Color name=\"VARIABLE\"    foreground=\"#FFFF8080\" exampleText=\"%MYVAR%\"/>\n\n    <Color name=\"GOTO\"        foreground=\"#FF00A0FF\" background=\"#40AAAAAA\"/>\n    <Color name=\"GOTO_TARGET\" foreground=\"#FF00A0FF\" background=\"#80AAAAAA\"/>\n\n    <Color name=\"AtCommand\" foreground=\"#FF0080FF\" fontWeight=\"normal\" />\n\n    <Color name=\"Command\"  foreground=\"#FF0060FF\" fontWeight=\"normal\" />\n    <Color name=\"Command1\" foreground=\"#FF0040FF\" fontWeight=\"normal\" />\n    <Color name=\"Command2\" foreground=\"#FF00C0FF\" fontWeight=\"normal\" />\n    <Color name=\"Command3\" foreground=\"#FF00E0FF\" fontWeight=\"normal\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"F#\" extensions=\".fs\">\n    <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n    <Color name=\"Digits\"        foreground=\"#FFFFCF00\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"       foreground=\"#FF55FF00\" exampleText=\"// comment\"/>\n    <Color name=\"Punctuation\"   foreground=\"#FFFFCF00\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"String\"        foreground=\"#FFFFFF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"          foreground=\"#FFFFEF00\" exampleText=\"char linefeed = '\\n';\"/>\n\n    <Color name=\"Preprocessor\"         foreground=\"#FFFF8080\" exampleText=\"#region Title\"/>\n    <Color name=\"ReferenceTypes\"       foreground=\"#FF00A0FF\" exampleText=\"object o;\"/>\n    <Color name=\"MethodCall\"           foreground=\"#FF0080FF\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n    <Color name=\"NullOrValueKeywords\"  foreground=\"#FF0060FF\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n    <Color name=\"Modifiers\"            foreground=\"#FF0040FF\" exampleText=\"static readonly int a;\"/>\n    <Color name=\"Visibility\"           foreground=\"#FF00C0FF\" fontWeight=\"bold\" exampleText=\"public override void ToString();\"/>\n    <Color name=\"NamespaceKeywords\"    foreground=\"#FF00E0FF\" fontWeight=\"bold\" exampleText=\"namespace A.B { using System; }\"/>\n    <Color name=\"GetSetAddRemove\"      foreground=\"#FF00A0FF\" exampleText=\"int Prop { get; set; }\"/>\n    <Color name=\"ReservedKeywords\"     foreground=\"#FF00A0FF\" fontWeight=\"normal\" fontStyle=\"italic\"/>\n    <Color name=\"CurrentKeywords\"      foreground=\"#FF00E0FF\" fontWeight=\"normal\" fontStyle=\"italic\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"HLSL\" extensions = \".fx\">\n    <!-- Source: http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor?msg=3866004#xx3866004xx -->\n    <!--Colors-->\n    <Color name=\"Digits\"      foreground=\"#FFFFCF00\" fontStyle=\"italic\"/>\n    <Color name=\"Comments\"    foreground=\"#FF55FF00\" />\n    <Color name=\"Punctuation\" foreground=\"#FFFFCF00\" />\n    <Color name=\"Keywords\"    foreground=\"#FF00A0FF\" />\n    <Color name=\"DataTypes\"   foreground=\"#FF00A0FF\" />\n    <Color name=\"States\"      foreground=\"#FF0080FF\" fontStyle=\"italic\"/>\n    <Color name=\"Constants\"   foreground=\"#FF0060FF\" />\n    <Color name=\"Semantics\"   foreground=\"#FF0040FF\" />\n    <Color name=\"Functions\"   foreground=\"#FF00C0FF\" />\n    <Color name=\"MethodCall\"  foreground=\"#FF00A0FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"HTML\" extensions=\".htm;.html\">\n    <Color name=\"Comment\"          foreground=\"#FF55FF00\" background=\"#33AAAAAA\" fontStyle=\"italic\" exampleText=\"&lt;!-- comment --&gt;\" />\n    <Color name=\"Digits\"           foreground=\"#FF00FF00\" exampleText=\"&lt;digits&gt;0123456789&lt;/digits&gt;\" />\n    <Color name=\"ScriptTag\"        foreground=\"#FFFF6060\" exampleText=\"&lt;script&gt;alert('Hello World!');&lt;/script&gt;\" />\n    <Color name=\"JavaScriptTag\"    foreground=\"#FFFF6060\" exampleText=\"&lt;script lang=&quot;JavaScript&quot;&gt;alert('Hello World!');&lt;/script&gt;\" />\n    <Color name=\"JScriptTag\"       foreground=\"#FFFF6060\" exampleText=\"&lt;script lang=&quot;JScript&quot;&gt;Response.Write(&quot;Hello World!&quot;);&lt;/script&gt;\" />\n    <Color name=\"VBScriptTag\"      foreground=\"#FFFF6060\" exampleText=\"&lt;script lang=&quot;VBScript&quot;&gt;Response.Write(&quot;Hello World!&quot;)&lt;/script&gt;\" />\n    <Color name=\"UnknownScriptTag\" foreground=\"#FFFF6060\" exampleText=\"&lt;script la&gt;alert('Hello World!');&lt;/script&gt;\" />\n    <Color name=\"HtmlTag\"          foreground=\"#FFFF6600\" exampleText=\"&lt;html&gt;Hello World!/html&gt;\" />\n    <Color name=\"Tags\"             foreground=\"#FFFF8080\" exampleText=\"&lt;html&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"Attributes\"       foreground=\"#FF99CC99\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"Slash\"            foreground=\"#FFFF6600\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"Assignment\"       foreground=\"#FFA9DCD9\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"String\"           foreground=\"#FFFFFF00\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"EntityReference\"  foreground=\"#FF0080FF\" fontStyle=\"italic\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"Entities\"         foreground=\"#FF00C0FF\" fontStyle=\"italic\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n    <Color name=\"UnknownAttribute\" foreground=\"#FFFF8080\" fontStyle=\"normal\" exampleText=\"&lt;html foo='bar' background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"INI\" extensions=\".cfg;.conf;.ini;.iss\">\n    <Color name=\"Digits\"       foreground=\"#FFFFCF00\" fontStyle=\"italic\"/>\n    <Color name=\"Comment\"      foreground=\"#FF55FF00\" />\n    <Color name=\"Punctuation\"  foreground=\"#FF00C0FF\" />\n    <Color name=\"String\"       foreground=\"#FFFFFF00\" />\n    <Color name=\"String2\"      foreground=\"#FFFFEF00\" />\n\n    <Color name=\"Section\"      foreground=\"#FF00A0FF\" />\n\n    <Color name=\"PropertyName\" foreground=\"#FF99CC99\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Java\" extensions=\".java\">\n    <Color name=\"MethodName\"                  foreground=\"#FF0060FF\" />\n    <Color name=\"Digits\"                      foreground=\"#FFFFCF00\" fontStyle=\"italic\" />\n    <Color name=\"String\"                      foreground=\"#FFFFEF00\"  />\n    <Color name=\"Character\"                   foreground=\"#FFFFFF00\"  />\n    <Color name=\"Comment\"                     foreground=\"#FF55FF00\" />\n    <Color name=\"Punctuation\"                 foreground=\"#FF00C0FF\" />\n    <Color name=\"AccessKeywords\"              foreground=\"#FF00A0FF\" fontWeight=\"bold\" />\n    <Color name=\"OperatorKeywords\"            foreground=\"#FF00A0FF\" fontWeight=\"bold\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FF0080FF\" fontWeight=\"bold\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FF0060FF\" fontWeight=\"bold\" />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FF0040FF\" fontWeight=\"bold\" />\n    <Color name=\"ValueTypes\"                  foreground=\"#FF00C0FF\" fontWeight=\"bold\" />\n    <Color name=\"ReferenceTypes\"              foreground=\"#FF00E0FF\" />\n    <Color name=\"Void\"                        foreground=\"#FF00A0FF\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FF00A0FF\" />\n    <Color name=\"Modifiers\"                   foreground=\"#FF00E0FF\" />\n    <Color name=\"AccessModifiers\"             foreground=\"#FF0080FF\" fontWeight=\"bold\" />\n    <Color name=\"Package\"                     foreground=\"#FF0040FF\" fontWeight=\"bold\" />\n    <Color name=\"Literals\"                    foreground=\"#FF00C0FF\" fontWeight=\"bold\" />\n    <Color name=\"CommentTags\"                 foreground=\"Red\" fontWeight=\"bold\" fontStyle=\"italic\" />\n    <Color name=\"JavaDocTags\"                 foreground=\"#FF99FF00\" fontWeight=\"bold\" fontStyle=\"italic\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"JavaScript\" extensions=\".js\">\n    <Color name=\"Digits\"                    foreground=\"#FF00C0FF\" exampleText=\"3.14\" />\n    <Color name=\"Comment\"                   foreground=\"#FF55FF00\" exampleText=\"// comment\" />\n    <Color name=\"String\"                    foreground=\"#FFFFEF00\" exampleText=\"var text = &quot;Hello, World!&quot;;\" />\n    <Color name=\"Character\"                 foreground=\"#FFFFFF00\" exampleText=\"var char = 'a';\" />\n    <Color name=\"Regex\"                     foreground=\"#FF00A0FF\" exampleText=\"/abc/m\" />\n    <Color name=\"JavaScriptKeyWords\"        foreground=\"#FF00A0FF\" exampleText=\"return myVariable;\" />\n    <Color name=\"JavaScriptIntrinsics\"      foreground=\"#FF0080FF\" exampleText=\"Math.random()\" />\n    <Color name=\"JavaScriptLiterals\"        foreground=\"#FFFFCF00\" exampleText=\"return false;\" />\n    <Color name=\"JavaScriptGlobalFunctions\" foreground=\"#FF0060FF\" exampleText=\"escape(myString);\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"LOG\" extensions=\".log\">\n    <Color name=\"Digits\"       foreground=\"#FFFFCF00\" fontStyle=\"italic\" fontWeight=\"normal\" />\n    <Color name=\"Comment\"      foreground=\"#FF55FF00\" />\n    <Color name=\"Punctuation\"  foreground=\"#FF00C0FF\" />\n    <Color name=\"String\"       foreground=\"#FFFFEF00\" />\n    <Color name=\"String2\"      foreground=\"#FFFFEF00\" />\n\n    <Color name=\"Section\"      foreground=\"#FF00A0FF\"  />\n\n    <Color name=\"AmericanDate\" foreground=\"#FF00A0FF\" />\n    <Color name=\"TimeStamp\"    foreground=\"#FF0080FF\" />\n\n    <Color name=\"ImportantKeywords\" foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"InfoKeywords\"      foreground=\"#FFFF6060\" fontWeight=\"normal\"/>\n  </SyntaxDefinition> \n\n  <SyntaxDefinition name=\"MarkDown\" extensions=\".md\">\n\t  <Color name=\"Heading\"        foreground=\"#FF00C0FF\" exampleText=\"# Title #\" />\n\t  <Color name=\"Emphasis\"       fontStyle=\"italic\" exampleText=\"*this* is important!\" />\n\t  <Color name=\"StrongEmphasis\" fontWeight=\"bold\" exampleText=\"**this** is more important!\" />\n\t  <Color name=\"Code\"           exampleText=\"this is `int.GetHashCode()`\" />\n\t  <Color name=\"BlockQuote\"     foreground=\"#FF55FF00\" exampleText=\"&gt; This is a\\r\\n&gt; quote.\" />\n\t  <Color name=\"Link\"           foreground=\"#FF4080FF\" exampleText=\"[text](http://example.com)\" />\n\t  <Color name=\"Image\"          foreground=\"#FF4080FF\" exampleText=\"[text][http://example.com/test.png]\" />\n\t  <Color name=\"LineBreak\"      background=\"#FF222222\" exampleText=\"end of line      \\r\\n2nd line   \" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"Pascal\" extensions = \".pas\">\n    <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n    <Color name=\"Digits\"            foreground=\"#FFFFCF00\" exampleText=\"3.1415f\"/>\n\n    <Color name=\"Punctuation\"       foreground=\"#FF00C0FF\" exampleText=\"a(b.c);\" />\n\n    <Color name=\"Comment\"           foreground=\"#FF55FF00\" exampleText=\"// comment\" />\n    <Color name=\"Documenation\"      foreground=\"#FF99FF00\" />\n\n    <Color name=\"Char\"              foreground=\"#FFFFFF00\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"String\"            foreground=\"#FFFFEF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name =\"DataTypes\"        foreground=\"#FF00A0FF\"  fontWeight=\"normal\"/>\n    <Color name =\"Operators\"        foreground=\"#FF00A0FF\"  fontWeight=\"normal\"/>\n    <Color name =\"Statements\"       foreground=\"#FF0080FF\"  fontWeight=\"normal\"/>\n    <Color name=\"MethodCall\"        foreground=\"#FF0060FF\"  fontWeight=\"bold\" />\n    <Color name =\"FunctionKeywords\" foreground=\"#FF0040FF\"  fontWeight=\"normal\" fontStyle=\"normal\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF8080\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Patch\" extensions=\".patch;.diff\">\n    <Color name=\"AddedText\"     foreground=\"#FFFFFF00\" exampleText=\"+added\"/>\n    <Color name=\"RemovedText\"   foreground=\"#FFFF6060\" exampleText=\"-removed\"/>\n    <Color name=\"UnchangedText\"                        exampleText=\" unchanged\"/>\n    <Color name=\"Position\"      foreground=\"#FF00C0FF\" exampleText=\"@@ -186,6 +186,12 @@\"/>\n    <Color name=\"Header\"        foreground=\"#FF55FF00\" exampleText=\"--- (oldversion)&#10;+++ (newversion)\"/>\n    <Color name=\"FileName\"      foreground=\"#FF00FF00\" fontWeight=\"bold\" exampleText=\"Index: path/to/file\"/>\n    <Color name=\"AtAtColor\"     foreground=\"#FFFF8080\" exampleText=\"@@\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PHP\" extensions = \".php\">\n    <Color name=\"Comment\"             foreground=\"#FF55FF00\" exampleText=\"// comment\"/>\n    <Color name=\"String\"              foreground=\"#FFFFEF00\" exampleText=\"$text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"NumberLiteral\"       foreground=\"#FFFFCF00\" exampleText=\"3.1415\"/>\n    <Color name=\"Punctuation\"         foreground=\"#FF00C0FF\" exampleText=\"a(b + c)\" />\n    <Color name=\"FunctionCall\"        foreground=\"#FF00A0FF\" fontWeight=\"bold\" exampleText=\"abs(num);\"/>\n    <Color name=\"AccessKeywords\"      foreground=\"#FF0080FF\" fontWeight=\"bold\" exampleText=\"global $database;\" />\n    <Color name=\"OperatorKeywords\"    foreground=\"#FF0060FF\" fontWeight=\"bold\" exampleText=\"if (x === false and y === false) { }\" />\n    <Color name=\"SelectionStatements\" foreground=\"#FF0040FF\" fontWeight=\"bold\" exampleText=\"if (true) { } else { }\" />\n    <Color name=\"IterationStatements\" foreground=\"#FF00C0FF\" fontWeight=\"bold\" exampleText=\"while (true) { }\" />\n    <Color name=\"JumpStatements\"      foreground=\"#FF00E0FF\" fontWeight=\"bold\" exampleText=\"if (x == 5) continue;\" />\n    <Color name=\"ControlStatements\"   foreground=\"#FF00A0FF\" fontWeight=\"bold\" exampleText=\"include(&quot;test.php&quot;);\" />\n    <Color name=\"ValueTypes\"          foreground=\"#FF00C0FF\" fontWeight=\"bold\" exampleText=\"int test = 5;\" />\n    <Color name=\"OtherTypes\"          foreground=\"#FF1550FF\" exampleText=\"object test = null;\" />\n    <Color name=\"AccessModifiers\"     foreground=\"#FF1570FF\" fontWeight=\"bold\" exampleText=\"public function test() {}\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PLSQL\" extensions = \".plsql\">\n    <Color name=\"Comment\"       foreground=\"#FF55FF00\" exampleText=\"-- comment\" />\n    <Color name=\"String\"        foreground=\"#FFFFEF00\" exampleText=\"&quot;Hello, World!&quot;\" />\n    <Color name=\"Keywords\"      foreground=\"#FF0060FF\" fontWeight=\"bold\" />\n    <Color name=\"ReservedWords\" foreground=\"#FF0040FF\" fontWeight=\"bold\" />\n    <Color name=\"Functions\"     foreground=\"#FF00C0FF\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"PowerShell\" extensions=\".ps1;.psm1;.psd1\">\n    <Color name=\"Comment\"           foreground=\"#FF55FF00\" exampleText=\"// comment\" />\n    <Color name=\"String\"            foreground=\"#FFFFEF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"              foreground=\"#FFFFFF00\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"Punctuation\"       foreground=\"#FF00C0FF\" exampleText=\"a(b.c);\" />\n    <Color name=\"NumberLiteral\"     foreground=\"#FFFFCF00\" exampleText=\"3.1415f\"/>\n    <Color name=\"Keywords\"          foreground=\"#FF0060FF\" fontWeight=\"bold\"  exampleText=\"if (a)\"/>\n    <Color name=\"Variable\"          foreground=\"#FFFF8080\" exampleText=\"$param = 1\" />\n    <Color name=\"ExceptionKeywords\" foreground=\"#FF0040FF\" fontWeight=\"bold\" />\n    <Color name=\"GotoKeywords\"      foreground=\"#FF00C0FF\" />\n    <Color name=\"ReferenceTypes\"    foreground=\"#FF00E0FF\" />\n    <Color name=\"Command\"           foreground=\"#FF0080FF\" fontWeight=\"bold\"/>\n    <Color name=\"Operators\"         foreground=\"#FF00A0FF\" exampleText=\"-eq\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Python\" extensions=\".py;.pyw\">\n    <Color name=\"Comment\"       foreground=\"#FF55FF00\" exampleText=\"# comment\" />\n    <Color name=\"String\"        foreground=\"#FFFFEF00\" exampleText=\"name = 'abc'\"/>\n    <Color name=\"MethodCall\"    foreground=\"#FFFF6600\" exampleText=\"def Hello()\"/>\n    <Color name=\"NumberLiteral\" foreground=\"#FFFFCF00\" exampleText=\"3.1415f\"/>\n    <Color name=\"Keywords\"      fontWeight=\"bold\" foreground=\"#FF0080FF\" exampleText=\"if\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Ruby\" extensions=\".rb\">\n    <Color name=\"Digits\"                      foreground=\"#FFFFCF00\"/>\n\n    <Color name=\"Variable\"                    foreground=\"#FFFF8080\" />\n    <Color name=\"Punctuation\"                 foreground=\"#FF00C0FF\" />\n\n    <Color name=\"Comment\"                     foreground=\"#FF55FF00\" />\n    <Color name=\"LineComment\"                 foreground=\"#FF00FF00\" />\n    <Color name=\"DocComment\"                  foreground=\"#FFA9DCD9\" />\n    <Color name=\"NestedComments\"              foreground=\"#FF00FF00\" />\n    <Color name=\"MultiLineComment\"            foreground=\"#FF55FF00\" />\n\n    <Color name=\"Char\"                        foreground=\"#FFFFFF00\" />\n    <Color name=\"String\"                      foreground=\"#FFFFEF00\" />\n\n    <Color name=\"MethodCall\"                  foreground=\"#FFFF8600\" fontWeight=\"bold\" />\n    <Color name=\"FunctionDefinition\"          foreground=\"#FFFF6600\" fontWeight=\"bold\"        />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FF0040FF\" fontWeight=\"bold\"        />\n\n    <Color name=\"Imports\"                     foreground=\"#FF008fe4\" fontWeight=\"bold\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FF00C0FF\" fontWeight=\"bold\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FF00E0FF\" />\n    <Color name=\"OperatorStatements\"          foreground=\"#FF00A0FF\" fontWeight=\"bold\" />\n    <Color name=\"NullStatement\"               foreground=\"#FF00C0FF\" fontWeight=\"bold\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FF1550FF\" fontWeight=\"bold\" />\n    <Color name=\"BooleanStatements\"           foreground=\"#FF1570FF\" />\n    <Color name=\"DefinedStatement\"            foreground=\"#FF1590FF\" />\n    <Color name=\"ClassSelfStatement\"          foreground=\"DarkViolet\" />\n    <Color name=\"ClassInheritanceStatement\"   foreground=\"DarkViolet\" />\n\n    <Color name=\"ImportStatement\"             foreground=\"#FF008fe4\" />\n    <Color name=\"BuiltInStatements\"           foreground=\"#FF0080FF\" fontWeight=\"bold\" />\n    <Color name=\"ClassStatement\"              foreground=\"#FF0060FF\" fontWeight=\"bold\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Scheme\" extensions=\".sls;.sps;.ss;.scm\">\n    <!-- Lisp syntax definition -->\n    <Color name=\"Digits\"              foreground=\"#FFFFCF00\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"             foreground=\"#FF55FF00\" />\n    <Color name=\"Punctuation\"         foreground=\"#FF00C0FF\" exampleText=\"a(b.c);\" />\n\n    <Color name=\"Syntax\"              foreground=\"#FF0080FF\" />\n    <Color name=\"Library Syntax\"      foreground=\"#FF0060FF\" />\n    <Color name=\"Auxilliary Syntax\"   foreground=\"#FF0040FF\" />\n    <Color name=\"MethodCall\"          foreground=\"#FF0080FF\" />\n    <Color name=\"NullOrValueKeywords\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Squirrel\" extensions=\".nut\">\n    <!-- Reference: http://www.squirrel-lang.org/\n         Reference Manual: http://www.squirrel-lang.org/doc/squirrel2.html -->\n    <Color name=\"Comment\"                     foreground=\"#FF55FF00\" />\n    <Color name=\"Digits\"                      foreground=\"#FFFFCF00\" />\n    <Color name=\"Punctuation\"                 foreground=\"#FF00C0FF\" />\n    <Color name=\"String\"                      foreground=\"#FFFFFF00\" />\n    <Color name=\"MethodCall\"                  foreground=\"#FF0080FF\" />\n    <Color name=\"GGenObject\"                  foreground=\"#FF00C0FF\" />\n    <Color name=\"Keywords\"                    foreground=\"#FF99CC99\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FF8080\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF6060\" fontWeight=\"bold\" />\n\n    <Color name=\"PreprocessorLine\"            foreground=\"#FFFF8080\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"TeX\" extensions = \".tex\">\n    <Color name=\"Digits\"        foreground=\"#FF00C0FF\" fontStyle=\"italic\" />\n    <Color name=\"LineComment\"   foreground=\"#FF55FF00\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FFFF8080\" />\n    <Color name=\"ShortKeywords\" foreground=\"#FFFF6060\" background=\"#30AAAAAA\" fontWeight=\"normal\" />\n\n    <Color name=\"Todo\" foreground=\"#FFFF8080\"  fontWeight=\"bold\" />\n    <Color name=\"HACK\" foreground=\"#FFFF6060\" fontWeight=\"bold\" />\n\n    <Color name=\"CurlyBrackets\"             foreground=\"#FFA9DCD9\" fontWeight=\"normal\" />\n\n    <Color name=\"SquareBrackets\"            foreground=\"#FF99CC99\"                        />\n    <Color name=\"ParameterInSquareBrackets\" foreground=\"#FF79AC79\" background=\"#33808080\" />\n\n    <Color name=\"MathMode\"  foreground=\"#FFFFEF00\" />\n    <Color name=\"MathMode1\" foreground=\"#FFFFCF00\" background=\"#33AAAAAA\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TSQL\" extensions=\".sql\">\n    <Color name=\"Comment\"     foreground=\"#FF55FF00\" exampleText=\"-- comment\" />\n    <Color name=\"Char\"        foreground=\"#FFFFEF00\" exampleText=\"name = 'abc'\"/>\n    <Color name=\"Keywords\"    fontWeight=\"bold\" foreground=\"#FF0080FF\" exampleText=\"SELECT FROM\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF8080\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TXT\" extensions=\".txt\">\n    <Color name=\"Comment\" foreground=\"#FF55FF00\" />\n    <Color name=\"Digits\"  foreground=\"#FF00FF00\" fontStyle=\"italic\" fontWeight=\"normal\" />\n    <Color name=\"String\"  foreground=\"#FFFFFFAF\" />\n    <Color name=\"String2\" foreground=\"#FFFFFFAF\" />\n\n    <Color name=\"BulletNumbers\" foreground=\"#FFA0F0FF\" fontWeight=\"normal\"/>\n\n    <Color name=\"Heading1\" foreground=\"#FF00C0FF\" />\n    <Color name=\"Heading2\" foreground=\"#FF00C0FF\" fontStyle=\"italic\"   />\n    <Color name=\"Heading3\" foreground=\"#FFFF8080\" fontWeight=\"normal\" fontStyle=\"italic\" />\n    <Color name=\"Heading4\" foreground=\"#FFFF8080\" fontWeight=\"normal\" />\n\n    <Color name=\"Important\"    foreground=\"#ffFF0000\" fontWeight=\"normal\" />\n    <Color name=\"Punctuation\"  foreground=\"#FFFF6060\" />\n    <Color name=\"BoldFormat\"   fontWeight=\"bold\" />\n    <Color name=\"ItalicFormat\" fontStyle=\"italic\" />\n\n    <Color name=\"Problem\"  foreground=\"#FFFF4040\" />\n    <Color name=\"Complete\" foreground=\"#FF40FF40\" />\n\n    <!-- Highlight Time information at begining of line: eg.: \"2:04:45 PM\" or \"12:04:45 AM\" -->\n    <Color name=\"HighlightTime\" fontStyle=\"italic\" foreground=\"#FF00C0FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VB\" extensions=\".vb\">\n    <Color name=\"Comment\" foreground=\"#FF55FF00\" exampleText=\"' comment\" />\n    <Color name=\"String\" foreground=\"#FFFFFF00\" exampleText=\"text = &quot;Hello, World!&quot;\" />\n\n    <Color name=\"DateLiteral\" foreground=\"#FF00FF00\" exampleText=\"endOfWorld = #2012-12-21#\" />\n    <Color name=\"Preprocessor\" foreground=\"#FFFF8080\" exampleText=\"#Region &quot;Title&quot;\" />\n    <Color name=\"DataTypes\" foreground=\"#FF0080FF\" exampleText=\"Dim b As Boolean = True\" />\n    <Color name=\"Operators\" foreground=\"#FFFF8080\" exampleText=\"If a OrElse b Then\"/>\n    <Color name=\"Constants\" foreground=\"#FF0060FF\" exampleText=\"b = False\" />\n    <Color name=\"Keywords\" foreground=\"#FFFF6600\" exampleText=\"If a OrElse b Then\" />\n    <Color name=\"FunctionKeywords\" foreground=\"#FFA9DCD9\" exampleText=\"CInt(a)\" />\n    <Color name=\"ContextKeywords\" foreground=\"#FF99CC99\" exampleText=\"Declare Unicode Sub SomeMethod\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VTL\" extensions=\".vtl;.vm\">\n\n    <Color name=\"Digits\" fontStyle=\"italic\" fontWeight=\"normal\" foreground=\"Blue\" />\n    <Color name=\"String\" foreground=\"Olive\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"String2\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"Comment\"  foreground=\"Green\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Keywords\" foreground=\"Blue\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"Punctuation\" foreground=\"Red\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"ObjectReference\" foreground=\"#FF80D0D0\" exampleText=\"$Customer.Name\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XML\" extensions=\".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec\">\n    <Color foreground=\"#FF55FF00\" background=\"#33AAAAAA\" name=\"Comment\" exampleText=\"&lt;!-- comment --&gt;\" />\n    <Color foreground=\"#FF00C0FF\" background=\"#33AAAAAA\" name=\"CData\" exampleText=\"&lt;![CDATA[data]]&gt;\" />\n    <Color foreground=\"#FF0060FF\" name=\"DocType\" exampleText=\"&lt;!DOCTYPE rootElement&gt;\" />\n    <Color foreground=\"#FF0060FF\" name=\"XmlDeclaration\" exampleText='&lt;?xml version=\"1.0\"?&gt;' />\n    <Color foreground=\"#FFFF8080\" name=\"XmlTag\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n    <Color foreground=\"#FF99CC99\" name=\"AttributeName\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n    <Color foreground=\"#FFFFFF00\" name=\"AttributeValue\" exampleText='&lt;tag attribute=\"value\" /&gt;' />\n    <Color foreground=\"#FF00C0FF\" name=\"Entity\" exampleText=\"index.aspx?a=1&amp;amp;b=2\" />\n    <Color foreground=\"#FFFF4040\" name=\"BrokenEntity\" exampleText=\"index.aspx?a=1&amp;b=2\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XmlDoc\">\n    <Color name=\"XmlString\" foreground=\"#FFFFFF00\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n    <Color name=\"DocComment\" foreground=\"#FFAAAAAA\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n    <Color name=\"XmlPunctuation\" foreground=\"#FFAAAAAA\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n    <Color name=\"KnownDocTags\" fontWeight=\"bold\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\" />\n  </SyntaxDefinition>\n</ThemeSyntaxDefinition>\n<!--\n- XSD Generation from XML\n  http://xmlgrid.net/xml2xsd.html\n\n- XML XSD Validation\n  http://www.utilities-online.info/xsdvalidation/\n-->\n"
  },
  {
    "path": "src/HL/Resources/Themes/TrueBlue.xshtd",
    "content": "﻿<?xml version=\"1.0\"?>\n<ThemeSyntaxDefinition name=\"TrueBlue\" xmlns=\"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\">\n\n  <SyntaxDefinition name=\"ActionScript3\" extensions=\".as\">\n    <Color name=\"Comment\"    foreground=\"#FF00FF00\" exampleText=\"// comment\"/>\n    <Color name=\"String\"     foreground=\"#FFFF9800\" exampleText=\"'str'\"/>\n    <Color name=\"MethodCall\" foreground=\"#FFDFDF00\" exampleText=\"o.ToString();\"/>\n    <Color name=\"Digits\"     foreground=\"#FF00BFFF\" exampleText=\"3.1415\"/>\n\n    <Color name=\"Keyword\"  foreground=\"#FFFFFF00\"/>\n    <Color name=\"Keyword1\" foreground=\"#FFCFCF00\"/>\n\n    <Color name=\"CommentMarkerSet\"           foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"ASP/XHTML\" extensions=\".asp;.aspx;.asax;.asmx;.ascx;.master\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n    <Color name=\"ASPSectionStartEndTags\" foreground=\"Black\" background=\"Yellow\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n    <Color name=\"ASPSection\" foreground=\"Black\" background=\"#FFF7F2E3\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Boo\" extensions=\".boo\">\n    <Color name=\"Comment\"          foreground=\"#FF00FF00\"/>\n    <Color name=\"Comment1\"         foreground=\"#FF009F00\"/>\n    <Color name=\"Comment2\"         foreground=\"#FF007F00\"/>\n    <Color name=\"NestedComments\"   foreground=\"#FF005F00\"/>\n    <Color name=\"String\"           foreground=\"#FFFF9800\"/>\n    <Color name=\"CodeInsideString\" foreground=\"#FFFF5840\"/>\n    <Color name=\"Keywords\"   foreground=\"#FFFFFF00\"/>\n    <Color name=\"Keywords1\"  foreground=\"#FFDFDF00\"/>\n    <Color name=\"Keywords2\"  foreground=\"#FFCFCF00\"/>\n    <Color name=\"Keywords3\"  foreground=\"#FFAFAF00\"/>\n    <Color name=\"Keywords4\"  foreground=\"#FF8F8F00\"/>\n    <Color name=\"Keywords5\"  foreground=\"#FF6F6F00\"/>\n    <Color name=\"Keywords6\"  foreground=\"#FFFFFF00\"/>\n    <Color name=\"Keywords7\"  foreground=\"#FFDFDF00\"/>\n    <Color name=\"Keywords8\"  foreground=\"#FFFFFF40\"/>\n    <Color name=\"Keywords9\"  foreground=\"#FFDFDF40\"/>\n    <Color name=\"Keywords10\" foreground=\"#FFCFCF40\"/>\n    <Color name=\"Keywords11\" foreground=\"#FFAFAF40\"/>\n    <Color name=\"Keywords12\" foreground=\"#FF8F8F40\"/>\n    <Color name=\"Keywords13\" foreground=\"#FF6F6F40\"/>\n    <Color name=\"Keywords14\" foreground=\"#FF4F4F40\"/>\n    <Color name=\"Keywords15\" foreground=\"#FF2F2F40\"/>\n    <Color name=\"Keywords16\" foreground=\"#FFFFFF8D\"/>\n    <Color name=\"Keywords17\" foreground=\"#FFFFFFAD\"/>\n    <Color name=\"Keywords18\" foreground=\"#FFFFFF6D\"/>\n    <Color name=\"Keywords19\" foreground=\"#FFFFFF00\"/>\n    <Color name=\"Keywords20\" foreground=\"#FFDFDF00\"/>\n    <Color name=\"Regex\"      foreground=\"#FFC0C0C0\"/>\n    <Color name=\"CommentMarkerSet\"           foreground=\"#FFFF0000\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Coco\" extensions=\".atg\">\n    <Color name=\"Comment\"       foreground=\"#FF00FF00\" fontStyle=\"italic\" />\n    <Color name=\"Punctuation\"   foreground=\"#FFA0A0F0\" fontWeight=\"bold\" />\n    <Color name=\"String\"        foreground=\"#FFFF9800\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FFFFFF00\" />\n    <Color name=\"COMPILER\"      foreground=\"#FFDFDF00\" />\n\n    <Color name=\"Lt_Gt_Color\"   foreground=\"#FFCFCF00\" />\n    <Color name=\"Bracket_Color\" foreground=\"#FFAFAF00\" />\n    <Color name=\"CSharp_Color\"  foreground=\"#FF8F8F00\" />\n\n    <Color name=\"CSharp1_Color\" foreground=\"#FF6F6F00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C++\" extensions=\".c;.h;.cc;.cpp;.hpp\">\n    <Color name=\"Comment\"           foreground=\"#FF00FF00\" />\n    <Color name=\"Character\"         foreground=\"#FFFF5840\" />\n    <Color name=\"String\"            foreground=\"#FFFF9800\" />\n    <Color name=\"Preprocessor\"      foreground=\"#FF8080FF\" />\n    <Color name=\"Punctuation\"       foreground=\"#FFA0A0F0\" />\n    <Color name=\"MethodName\"        foreground=\"#FFFFFF00\" />\n    <Color name=\"Digits\"            foreground=\"#FF00BFFF\" />\n    <Color name=\"CompoundKeywords\"  foreground=\"#FFDFDF00\" />\n    <Color name=\"This\"              foreground=\"#FFCFCF00\" />\n    <Color name=\"Operators\"         foreground=\"#FFAFAF00\" />\n    <Color name=\"Namespace\"         foreground=\"#FF8F8F00\" />\n    <Color name=\"Friend\"            foreground=\"#FF6F6F00\" />\n    <Color name=\"Modifiers\"         foreground=\"#FFFFFF00\" />\n    <Color name=\"TypeKeywords\"      foreground=\"#FFDFDF00\" />\n    <Color name=\"BooleanConstants\"  foreground=\"#FFFFFF40\" />\n    <Color name=\"Keywords\"          foreground=\"#FFDFDF40\" />\n    <Color name=\"LoopKeywords\"      foreground=\"#FFCFCF40\" />\n    <Color name=\"JumpKeywords\"      foreground=\"#FFAFAF40\" />\n    <Color name=\"ExceptionHandling\" foreground=\"#FF8F8F40\" />\n    <Color name=\"ControlFlow\"       foreground=\"#FF6F6F40\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C#\" extensions=\".cs\">\n    <!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->\n    <Color name=\"Comment\"             foreground=\"#FF55FF00\"/>\n    <Color name=\"String\"              foreground=\"#FFFFFF00\"/>\n    <Color name=\"StringInterpolation\" foreground=\"White\" exampleText=\"string text = $&quot;Hello, {name}!&quot;\"/>\n    <Color name=\"Char\"                foreground=\"#FFFFEF00\"/>\n    <Color name=\"Preprocessor\"        foreground=\"#FFFF8080\"/>\n    <Color name=\"Punctuation\"         foreground=\"#FFFFCF00\"/>\n\n    <Color name=\"ValueTypeKeywords\"     foreground=\"#FF00A0FF\" exampleText=\"bool b = true;\"/>\n\n    <Color name=\"ReferenceTypeKeywords\" foreground=\"#FFFFA000\" exampleText=\"object o;\"/>\n    <Color name=\"MethodCall\"            foreground=\"#FFFFA000\"/>\n    <Color name=\"NumberLiteral\"         foreground=\"#FFFFCF00\"/>\n    <Color name=\"ThisOrBaseReference\"   foreground=\"#FFFFA000\"/>\n    <Color name=\"NullOrValueKeywords\"   foreground=\"#FFFF8000\"/>\n    <Color name=\"Keywords\"              foreground=\"#FFFFE000\"/>\n    <Color name=\"GotoKeywords\"          foreground=\"#FFFFE000\"/>\n    <Color name=\"ContextKeywords\"       foreground=\"#FFFF8000\"/>\n    <Color name=\"ExceptionKeywords\"     foreground=\"#FFFF6000\"/>\n    <Color name=\"CheckedKeyword\"        foreground=\"#FFFF4000\"/>\n    <Color name=\"UnsafeKeywords\"        foreground=\"#FFFFC000\"/>\n    <Color name=\"OperatorKeywords\"      foreground=\"#FFFFE000\"/>\n    <Color name=\"ParameterModifiers\"    foreground=\"#FFFF8000\"/>\n    <Color name=\"Modifiers\"             foreground=\"#FFFF6000\"/>\n    <Color name=\"Visibility\"            foreground=\"#FFFF6000\"/>\n    <Color name=\"NamespaceKeywords\"     foreground=\"#FFFF4000\"/>\n    <Color name=\"GetSetAddRemove\"       foreground=\"#FFFFC000\"/>\n    <Color name=\"TrueFalse\"             foreground=\"#FFFF4000\"/>\n    <Color name=\"TypeKeywords\"          foreground=\"#FFFFC000\"/>\n    <Color name=\"SemanticKeywords\"      foreground=\"#FFFF5AB3\" fontWeight=\"bold\" exampleText=\"if (args == null) throw new ArgumentNullException(nameof(args));\" />\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"CSS\" extensions=\".css\">\n    <Color name=\"Comment\"     foreground=\"#FF00FF00\" exampleText=\"/* comment */\" />\n    <Color name=\"String\"      foreground=\"#FFFF9800\" exampleText=\"body { background: url(&quot;image.png&quot;) }\" />\n    <Color name=\"Selector\"    foreground=\"#FFFFFF00\" fontWeight=\"normal\" exampleText=\"div p\" />\n    <Color name=\"Class\"       foreground=\"#FFDFDF00\" fontWeight=\"normal\" exampleText=\"#para\" />\n    <Color name=\"Property\"    foreground=\"#FFCFCF00\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"Value\"       foreground=\"#FFAFAF00\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"CurlyBraces\" foreground=\"#FFFFFF00\" exampleText=\"{ }\" />\n    <Color name=\"Colon\"       foreground=\"#FF6F6F00\" exampleText=\":\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"BAT\" extensions=\".bat;.dos\">\n    <Color name=\"String\"  foreground=\"#FFFF9800\" exampleText=\"string text = &quot;Hello, World!&quot;\" />\n    <Color name=\"String2\" foreground=\"#FFFF5840\" background=\"#22DDDDDD\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Comment\"     foreground=\"#FF00FF00\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"Digits\"      foreground=\"#FF00BFFF\" fontStyle=\"italic\"/>\n    <Color name=\"Punctuation\" foreground=\"#FFA0A0F0\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"PARAMETER\" foreground=\"#FFC0C0C0\" exampleText=\"%1\"/>\n    <Color name=\"VARIABLE\"  foreground=\"#FFC0C0C0\" exampleText=\"%MYVAR%\"/>\n\n    <Color name=\"GOTO\"        foreground=\"#FFFFFF00\" background=\"#40AAAAAA\"/>\n    <Color name=\"GOTO_TARGET\" foreground=\"#FFDFDF00\" background=\"#80AAAAAA\"/>\n\n    <Color name=\"AtCommand\"   foreground=\"#FFCFCF00\" />\n\n    <Color name=\"Command\"     foreground=\"#FFAFAF00\" />\n    <Color name=\"Command1\"    foreground=\"#FF8F8F00\" />\n    <Color name=\"Command2\"    foreground=\"#FF6F6F00\" />\n    <Color name=\"Command3\"    foreground=\"#FFFFFF00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"F#\" extensions=\".fs\">\n    <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n    <Color name=\"Digits\"      foreground=\"#FF00BFFF\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"     foreground=\"#FF00FF00\" exampleText=\"// comment\"/>\n    <Color name=\"Punctuation\" foreground=\"#FFA0A0F0\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"String\"      foreground=\"#FFFF9800\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"        foreground=\"#FFFF5840\" exampleText=\"char linefeed = '\\n';\"/>\n\n    <Color name=\"Preprocessor\"         foreground=\"#FF8080FF\" exampleText=\"#region Title\"/>\n    <Color name=\"ReferenceTypes\"       foreground=\"#FFFFFF00\" exampleText=\"object o;\"/>\n    <Color name=\"MethodCall\"           foreground=\"#FFDFDF00\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n    <Color name=\"NullOrValueKeywords\"  foreground=\"#FFCFCF00\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n    <Color name=\"Modifiers\"            foreground=\"#FFAFAF00\" exampleText=\"static readonly int a;\"/>\n    <Color name=\"Visibility\"           foreground=\"#FF8F8F00\" fontWeight=\"bold\" exampleText=\"public override void ToString();\"/>\n    <Color name=\"NamespaceKeywords\"    foreground=\"#FF6F6F00\" fontWeight=\"bold\" exampleText=\"namespace A.B { using System; }\"/>\n    <Color name=\"GetSetAddRemove\"      foreground=\"#FFFFFF00\" exampleText=\"int Prop { get; set; }\"/>\n    <Color name=\"ReservedKeywords\"     foreground=\"#FFFFFF40\" fontStyle=\"italic\"/>\n    <Color name=\"CurrentKeywords\"      foreground=\"#FFDFDF40\" fontStyle=\"italic\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"HLSL\" extensions = \".fx\">\n    <Color name=\"Digits\"      foreground=\"#FF00BFFF\" fontStyle=\"italic\"/>\n    <Color name=\"Comments\"    foreground=\"#FF00FF00\" />\n    <Color name=\"Punctuation\" foreground=\"#FFA0A0F0\" />\n    <Color name=\"Keywords\"    foreground=\"#FFFFFF00\" />\n    <Color name=\"DataTypes\"   foreground=\"#FFE0E000\" />\n    <Color name=\"States\"      foreground=\"#FFCFCF00\" fontStyle=\"italic\"/>\n    <Color name=\"Constants\"   foreground=\"#FFAFAF00\" />\n    <Color name=\"Semantics\"   foreground=\"#FF8F8F00\" />\n    <Color name=\"Functions\"   foreground=\"#FFDFDF00\" />\n    <Color name=\"MethodCall\"  foreground=\"#FFDFDF00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"HTML\" extensions=\".htm;.html\">\n    <Color name=\"Comment\"          foreground=\"#FF00FF00\" background=\"#22AAAAAA\" fontStyle=\"italic\" exampleText=\"&lt;!-- comment --&gt;\"/>\n    <Color name=\"Digits\"           foreground=\"#FF00BFFF\" exampleText=\"&lt;digits&gt;0123456789&lt;/digits&gt;\"/>\n    <Color name=\"ScriptTag\"        foreground=\"#FFC0B180\" exampleText=\"&lt;script&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"JavaScriptTag\"    foreground=\"#FFA09160\" exampleText=\"&lt;script lang=&quot;JavaScript&quot;&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"JScriptTag\"       foreground=\"#FFC0B180\" exampleText=\"&lt;script lang=&quot;JScript&quot;&gt;Response.Write(&quot;Hello World!&quot;);&lt;/script&gt;\"/>\n    <Color name=\"VBScriptTag\"      foreground=\"#FFA09160\" exampleText=\"&lt;script lang=&quot;VBScript&quot;&gt;Response.Write(&quot;Hello World!&quot;)&lt;/script&gt;\"/>\n    <Color name=\"UnknownScriptTag\" foreground=\"#FFC0B180\" exampleText=\"&lt;script la&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"HtmlTag\"          foreground=\"#FFFFFF00\" exampleText=\"&lt;html&gt;Hello World!/html&gt;\"/>\n    <Color name=\"Tags\"             foreground=\"#FFDFDF00\" exampleText=\"&lt;html&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Attributes\"       foreground=\"#FFFFCF00\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Slash\"            foreground=\"#FFCFCF00\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Assignment\"       foreground=\"#FFFFFF40\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"String\"           foreground=\"#FFFF9800\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"EntityReference\"  foreground=\"#FFC0C0FF\" fontStyle=\"italic\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Entities\"         foreground=\"#FFA0A0F0\" fontStyle=\"italic\" exampleText=\"&lt;html foo='bar' background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"UnknownAttribute\" foreground=\"#FFFF5800\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"INI\" extensions=\".cfg;.conf;.ini;.iss\">\n    <Color name=\"Digits\"       foreground=\"#FF00BFFF\" fontStyle=\"italic\"/>\n    <Color name=\"Comment\"      foreground=\"#FF00FF00\"/>\n    <Color name=\"Punctuation\"  foreground=\"#FFA0A0F0\"/>\n    <Color name=\"String\"       foreground=\"#FFFF9800\"/>\n    <Color name=\"String2\"      foreground=\"#FFFF5840\"/>\n\n    <Color name=\"Section\"      foreground=\"#FFffcf00\"/>\n\n    <Color name=\"PropertyName\" foreground=\"#FFff9800\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Java\" extensions=\".java\">\n    <Color name=\"MethodName\"                  foreground=\"#FFDFDF00\" />\n    <Color name=\"Digits\"                      foreground=\"#FF00BFFF\" fontStyle=\"italic\"/>\n    <Color name=\"String\"                      foreground=\"#FFFF9800\" />\n    <Color name=\"Character\"                   foreground=\"#FFFF5840\" />\n    <Color name=\"Comment\"                     foreground=\"#FF00FF00\" />\n    <Color name=\"Punctuation\"                 foreground=\"#FFA0A0F0\" />\n    <Color name=\"AccessKeywords\"              foreground=\"#FFCFCF00\" fontWeight=\"bold\" />\n    <Color name=\"OperatorKeywords\"            foreground=\"#FFAFAF00\" fontWeight=\"bold\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FFFFFF00\" fontWeight=\"bold\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FFAFAF00\" fontWeight=\"bold\" />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FF8F8F00\" fontWeight=\"bold\" />\n    <Color name=\"ValueTypes\"                  foreground=\"#FF6F6F00\" fontWeight=\"bold\" />\n    <Color name=\"ReferenceTypes\"              foreground=\"#FFFFFF00\" />\n    <Color name=\"Void\"                        foreground=\"#FFcfcf40\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FFafaf40\" />\n    <Color name=\"Modifiers\"                   foreground=\"#FFAFAF00\" />\n    <Color name=\"AccessModifiers\"             foreground=\"#FFFFFF8D\" fontWeight=\"bold\" />\n    <Color name=\"Package\"                     foreground=\"#FF6F6F00\" fontWeight=\"bold\" />\n    <Color name=\"Literals\"                    foreground=\"#FFff7860\" fontWeight=\"bold\" />\n    <Color name=\"CommentTags\"                 foreground=\"Red\" fontWeight=\"bold\" fontStyle=\"italic\" />\n    <Color name=\"JavaDocTags\"                 foreground=\"#FFAAAAAA\" fontWeight=\"bold\" fontStyle=\"italic\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"JavaScript\" extensions=\".js\">\n    <Color name=\"Digits\"                    foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\" exampleText=\"3.14\"/>\n    <Color name=\"Comment\"                   foreground=\"#FF00FF00\" exampleText=\"// comment\"/>\n    <Color name=\"String\"                    foreground=\"#FFFF9800\" exampleText=\"var text = &quot;Hello, World!&quot;;\" />\n    <Color name=\"Character\"                 foreground=\"#FFFF5840\" exampleText=\"var char = 'a';\"/>\n    <Color name=\"Regex\"                     foreground=\"#FFFFFF00\" exampleText=\"/abc/m\"/>\n    <Color name=\"JavaScriptKeyWords\"        foreground=\"#FFFFFF8D\" exampleText=\"return myVariable;\"/>\n    <Color name=\"JavaScriptIntrinsics\"      foreground=\"#FFAFAF00\" exampleText=\"Math.random()\"/>\n    <Color name=\"JavaScriptLiterals\"        foreground=\"#FFff7860\" exampleText=\"return false;\"/>\n    <Color name=\"JavaScriptGlobalFunctions\" foreground=\"#FFCFCF00\" exampleText=\"escape(myString);\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"LOG\" extensions=\".log\">\n    <Color name=\"Digits\"       foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"Comment\"      foreground=\"#FF00FF00\"/>\n    <Color name=\"Punctuation\"  foreground=\"#FFA0A0F0\"/>\n    <Color name=\"String\"       foreground=\"#FFFF9800\"/>\n    <Color name=\"String2\"      foreground=\"#FFFF5840\"/>\n\n    <Color name=\"Section\"      foreground=\"#FFffcf00\"/>\n\n    <Color name=\"AmericanDate\" foreground=\"#FFFFFF00\"/>\n    <Color name=\"TimeStamp\"    foreground=\"#FFFFFF8D\"/>\n\n    <Color name=\"ImportantKeywords\" foreground=\"#FFFF0000\" fontWeight=\"bold\" />\n    <Color name=\"InfoKeywords\"      foreground=\"#FF8B008B\" fontWeight=\"bold\" />\n  </SyntaxDefinition> \n\n  <SyntaxDefinition name=\"MarkDown\" extensions=\".md\">\n    <Color name=\"Heading\"        foreground=\"#FFFFFF00\"  exampleText=\"# Title #\"/>\n    <Color name=\"Emphasis\"       fontStyle=\"italic\" exampleText=\"*this* is important!\"/>\n    <Color name=\"StrongEmphasis\" fontWeight=\"bold\" exampleText=\"**this** is more important!\"/>\n    <Color name=\"Code\"           exampleText=\"this is `int.GetHashCode()`\"/>\n    <Color name=\"BlockQuote\"     foreground=\"#FF00FF00\" exampleText=\"&gt; This is a\\r\\n&gt; quote.\" />\n    <Color name=\"Link\"           foreground=\"#FF40BFFF\" exampleText=\"[text](http://example.com)\"/>\n    <Color name=\"Image\"          foreground=\"#FF40BFFF\" exampleText=\"[text][http://example.com/test.png]\"/>\n    <Color name=\"LineBreak\"      foreground=\"#FF222222\" exampleText=\"end of line      \\r\\n2nd line   \"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"Pascal\" extensions = \".pas\">\n    <Color name=\"Digits\"            foreground=\"#FF00BFFF\" fontStyle=\"normal\" exampleText=\"3.1415f\"/>\n\n    <Color name=\"Punctuation\"       foreground=\"#FFA0A0F0\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"Comment\"           foreground=\"#FF00FF00\" exampleText=\"// comment\"/>\n    <Color name=\"Documenation\"      foreground=\"#FF20FF20\" />\n\n    <Color name=\"Char\"              foreground=\"#FFFF5840\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"String\"            foreground=\"#FFFF9800\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"DataTypes\"        foreground=\"#FFFFFF00\" />\n    <Color name=\"Operators\"        foreground=\"#FFFFFF8D\" />\n    <Color name=\"Statements\"       foreground=\"#FFAFAF00\" />\n    <Color name=\"MethodCall\"       foreground=\"#FFDFDF00\" fontWeight=\"bold\"/>\n    <Color name=\"FunctionKeywords\" foreground=\"#FFCFCF00\" />\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Patch\" extensions=\".patch;.diff\">\n    <Color name=\"AddedText\"     foreground=\"#FFFFFF00\" exampleText=\"+added\"/>\n    <Color name=\"RemovedText\"   foreground=\"#FFFF6060\" exampleText=\"-removed\"/>\n    <Color name=\"UnchangedText\"                        exampleText=\" unchanged\"/>\n    <Color name=\"Position\"      foreground=\"#FF00C0FF\" exampleText=\"@@ -186,6 +186,12 @@\"/>\n    <Color name=\"Header\"        foreground=\"#FF00FF00\" exampleText=\"--- (oldversion)&#10;+++ (newversion)\"/>\n    <Color name=\"FileName\"      foreground=\"#FF00DF00\" fontWeight=\"bold\" exampleText=\"Index: path/to/file\"/>\n    <Color name=\"AtAtColor\"     foreground=\"#FFFF8080\" exampleText=\"@@\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PHP\" extensions = \".php\">\n    <Color name=\"Comment\"             foreground=\"#FF00FF00\" exampleText=\"// comment\"/>\n    <Color name=\"String\"              foreground=\"#FFFF9800\" exampleText=\"$text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"NumberLiteral\"       foreground=\"#FF00BFFF\" exampleText=\"3.1415\"/>\n    <Color name=\"Punctuation\"         foreground=\"#FFA0A0F0\" exampleText=\"a(b + c)\" />\n    <Color name=\"FunctionCall\"        foreground=\"#FFDFDF00\" fontWeight=\"bold\" exampleText=\"abs(num);\"/>\n    <Color name=\"AccessKeywords\"      foreground=\"#FFFFFF8D\" fontWeight=\"bold\" exampleText=\"global $database;\" />\n    <Color name=\"OperatorKeywords\"    foreground=\"#FF4F4F40\" fontWeight=\"bold\" exampleText=\"if (x === false and y === false) { }\" />\n    <Color name=\"SelectionStatements\" foreground=\"#FFFFFF40\" fontWeight=\"bold\" exampleText=\"if (true) { } else { }\" />\n    <Color name=\"IterationStatements\" foreground=\"#FFDFDF40\" fontWeight=\"bold\" exampleText=\"while (true) { }\" />\n    <Color name=\"JumpStatements\"      foreground=\"#FFDFDF40\" fontWeight=\"bold\" exampleText=\"if (x == 5) continue;\" />\n    <Color name=\"ControlStatements\"   foreground=\"#FFCFCF40\" fontWeight=\"bold\" exampleText=\"include(&quot;test.php&quot;);\" />\n    <Color name=\"ValueTypes\"          foreground=\"#FFCFCF00\" fontWeight=\"bold\" exampleText=\"int test = 5;\" />\n    <Color name=\"OtherTypes\"          foreground=\"#FFAFAF40\" exampleText=\"object test = null;\" />\n    <Color name=\"AccessModifiers\"     foreground=\"#FFAFAF00\" fontWeight=\"bold\" exampleText=\"public function test() {}\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PLSQL\" extensions = \".plsql\">\n    <Color name=\"Comment\"       foreground=\"#FF00FF00\" exampleText=\"-- comment\"/>\n    <Color name=\"String\"        foreground=\"#FFFF9800\" exampleText=\"&quot;Hello, World!&quot;\"/>\n    <Color name=\"Keywords\"      foreground=\"#FFFFFF00\" fontWeight=\"bold\"/>\n    <Color name=\"ReservedWords\" foreground=\"#FFAFAF00\" fontWeight=\"bold\"/>\n    <Color name=\"Functions\"     foreground=\"#FFDFDF00\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"PowerShell\" extensions=\".ps1;.psm1;.psd1\">\n    <Color name=\"Comment\"           foreground=\"#FF00FF00\" exampleText=\"// comment\" />\n    <Color name=\"String\"            foreground=\"#FFFF9800\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"              foreground=\"#FFFF5840\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"Punctuation\"       foreground=\"#FFA0A0F0\" exampleText=\"a(b.c);\" />\n    <Color name=\"NumberLiteral\"     foreground=\"#FF00BFFF\" exampleText=\"3.1415f\"/>\n    <Color name=\"Keywords\"          foreground=\"#FFFFFF00\" fontWeight=\"bold\" exampleText=\"if (a)\"/>\n    <Color name=\"Variable\"          foreground=\"#FFC0C0C0\" exampleText=\"$param = 1\"/>\n    <Color name=\"ExceptionKeywords\" foreground=\"#FFAFAF40\" fontWeight=\"bold\"/>\n    <Color name=\"GotoKeywords\"      foreground=\"#FFDFDF40\" />\n    <Color name=\"ReferenceTypes\"    foreground=\"#FFFFFF00\" />\n    <Color name=\"Command\"           foreground=\"#FFA09160\" fontWeight=\"bold\"/>\n    <Color name=\"Operators\"         foreground=\"#FF4F4F40\" exampleText=\"-eq\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Python\" extensions=\".py;.pyw\">\n    <Color name=\"Comment\"       foreground=\"#FF00FF00\" />\n    <Color name=\"String\"        foreground=\"#FFFF9800\" />\n    <Color name=\"MethodCall\"    foreground=\"#FFCFCF00\" fontWeight=\"bold\"/>\n    <Color name=\"NumberLiteral\" foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"Keywords\"      foreground=\"#FFFFFF00\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Ruby\" extensions=\".rb\">\n    <Color name=\"Digits\"           foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n\n    <Color name=\"Variable\"         foreground=\"#FFC0C0C0\" />\n    <Color name=\"Punctuation\"      foreground=\"#FFA0A0F0\" />\n\n    <Color name=\"Comment\"          foreground=\"#FF00FF00\" />\n    <Color name=\"LineComment\"      foreground=\"#FF00A000\" />\n    <Color name=\"DocComment\"       foreground=\"#FF00A000\" />\n    <Color name=\"NestedComments\"   foreground=\"#FF00C000\" />\n    <Color name=\"MultiLineComment\" foreground=\"#FF00FF00\" />\n\n    <Color name=\"Char\"   foreground=\"#FFFF5840\" />\n    <Color name=\"String\" foreground=\"#FFFF9800\" />\n\n    <Color name=\"MethodCall\"                  foreground=\"#FFDFDF00\" fontWeight=\"bold\" />\n    <Color name=\"FunctionDefinition\"          foreground=\"#FFCFCF00\" fontWeight=\"bold\" />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FFCFCF00\" />\n\n    <Color name=\"Imports\"                     foreground=\"#FF8FAF00\" fontWeight=\"bold\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FFAFAF00\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FF8F8F00\" />\n    <Color name=\"OperatorStatements\"          foreground=\"#FF6F6F00\" />\n    <Color name=\"NullStatement\"               foreground=\"#FFFFFF00\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FFDFDF00\" />\n    <Color name=\"BooleanStatements\"           foreground=\"#FFE0D1A0\" />\n    <Color name=\"DefinedStatement\"            foreground=\"#FFC0B180\" />\n    <Color name=\"ClassSelfStatement\"          foreground=\"#FFA09160\" />\n    <Color name=\"ClassInheritanceStatement\"   foreground=\"#FF807140\" />\n\n    <Color name=\"ImportStatement\"             foreground=\"#FF8F8F00\"/>\n    <Color name=\"BuiltInStatements\"           foreground=\"#FFFFFF00\" />\n    <Color name=\"ClassStatement\"              foreground=\"#FFDFDF00\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Scheme\" extensions=\".sls;.sps;.ss;.scm\">\n    <!-- Lisp syntax definition -->\n    <Color name=\"Digits\"              foreground=\"#FF00BFFF\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"             foreground=\"#FF00FF00\" />\n    <Color name=\"Punctuation\"         foreground=\"#FFA0A0F0\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"Syntax\"              foreground=\"#FFFFFF00\"/>\n    <Color name=\"Library Syntax\"      foreground=\"#FFAFAF40\"/>\n    <Color name=\"Auxilliary Syntax\"   foreground=\"#FFDFDF40\"/>\n    <Color name=\"MethodCall\"          foreground=\"#FFDFDF00\" fontWeight=\"bold\" />\n    <Color name=\"NullOrValueKeywords\" foreground=\"#FFCFCF00\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Squirrel\" extensions=\".nut\">\n    <!-- Reference: http://www.squirrel-lang.org/\n         Reference Manual: http://www.squirrel-lang.org/doc/squirrel2.html -->\n    <Color name=\"Comment\"      foreground=\"#FF00FF00\" />\n    <Color name=\"Digits\"       foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"Punctuation\"  foreground=\"#FFA0A0F0\" />\n    <Color name=\"String\"       foreground=\"#FFFF9800\" />\n    <Color name=\"MethodCall\"   foreground=\"#FFDFDF00\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"GGenObject\"   foreground=\"#FFCFCF00\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"Keywords\"     foreground=\"#FFFFFF00\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n\n    <Color name=\"PreprocessorLine\"            foreground=\"#FF8080FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"TeX\" extensions = \".tex\">\n    <Color name=\"Digits\"        foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"LineComment\"   foreground=\"#FF00FF00\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FFFFFF00\" />\n    <Color name=\"ShortKeywords\" foreground=\"#FFDFDF00\" background=\"#30AAAAAA\" fontWeight=\"normal\" />\n\n    <Color name=\"Todo\" foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"HACK\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n\n    <Color name=\"CurlyBrackets\"             foreground=\"#FFE0D1A0\" fontWeight=\"normal\" />\n\n    <Color name=\"SquareBrackets\"            foreground=\"#FFC0B180\"                        />\n    <Color name=\"ParameterInSquareBrackets\" foreground=\"#FFA09160\" background=\"#11808080\" />\n\n    <Color name=\"MathMode\"  foreground=\"#FF00AFDF\" />\n    <Color name=\"MathMode1\" foreground=\"#FF00CFFF\" background=\"#33AAAAAA\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TSQL\" extensions=\".sql\">\n    <Color name=\"Comment\"     foreground=\"#FF00FF00\" />\n    <Color name=\"Char\"        foreground=\"#FFFF5840\" />\n    <Color name=\"Keywords\"    foreground=\"#FFFFFF00\" exampleText=\"SELECT FROM\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FFE0E000\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TXT\" extensions=\".txt\">\n    <Color name=\"Comment\" foreground=\"#FF00FF00\" />\n    <Color name=\"Digits\"  foreground=\"#FF4B0082\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"String\"  foreground=\"#FFFF9800\" />\n    <Color name=\"String2\" foreground=\"#FFFF5840\" />\n\n    <Color name=\"BulletNumbers\" foreground=\"#FF00AFDF\" fontWeight=\"normal\"/>\n\n    <Color name=\"Heading1\" foreground=\"#FFFFFF00\" />\n    <Color name=\"Heading2\" foreground=\"#FFDFDF00\" fontStyle=\"italic\"   />\n    <Color name=\"Heading3\" foreground=\"#FFCFCF00\" fontWeight=\"normal\" fontStyle=\"italic\" />\n    <Color name=\"Heading4\" foreground=\"#FFAFAF00\" fontWeight=\"normal\" />\n\n    <Color name=\"Important\"    foreground=\"#FFF25D20\" fontWeight=\"bold\" />\n    <Color name=\"Punctuation\"  foreground=\"#FFA0A0F0\" />\n    <Color name=\"BoldFormat\"   fontWeight=\"bold\"   />\n    <Color name=\"ItalicFormat\" fontStyle=\"italic\" />\n\n    <Color name=\"Problem\"  foreground=\"#FFFF0000\" />\n    <Color name=\"Complete\" foreground=\"#FF00FF00\" />\n\n    <!-- Highlight Time information at begining of line: eg.: \"2:04:45 PM\" or \"12:04:45 AM\" -->\n    <Color name=\"HighlightTime\" fontStyle=\"italic\" foreground=\"#FFFFFF00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VB\" extensions=\".vb\">\n    <Color name=\"Comment\"          foreground=\"#FF00FF00\" exampleText=\"' comment\" />\n    <Color name=\"String\"           foreground=\"#FFFF9800\" exampleText=\"text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"DateLiteral\"      foreground=\"#FFff7860\" exampleText=\"endOfWorld = #2012-12-21#\"/>\n    <Color name=\"Preprocessor\"     foreground=\"#FF8080FF\" exampleText=\"#Region &quot;Title&quot;\"/>\n    <Color name=\"DataTypes\"        foreground=\"#FFFFFF00\" exampleText=\"Dim b As Boolean = True\"/>\n    <Color name=\"Operators\"        foreground=\"#FFDFDF00\" exampleText=\"If a OrElse b Then\"/>\n    <Color name=\"Constants\"        foreground=\"#FFCFCF00\" exampleText=\"b = False\"/>\n    <Color name=\"Keywords\"         foreground=\"#FFAFAF00\" exampleText=\"If a OrElse b Then\"/>\n    <Color name=\"FunctionKeywords\" foreground=\"#FF8F8F00\" exampleText=\"CInt(a)\"/>\n    <Color name=\"ContextKeywords\"  foreground=\"#FF6F6F00\" exampleText=\"Declare Unicode Sub SomeMethod\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VTL\" extensions=\".vtl;.vm\">\n    <Color name=\"Digits\"          foreground=\"#FF00BFFF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"String\"          foreground=\"#FFFF9800\" exampleText=\"string text = &quot;Hello, World!&quot;\" />\n    <Color name=\"String2\"         foreground=\"#FFFF5840\" />\n\n    <Color name=\"Comment\"         foreground=\"#FF00FF00\" />\n    <Color name=\"Keywords\"        foreground=\"#FFFFFF00\" />\n\n    <Color name=\"Punctuation\"     foreground=\"#FFA0A0F0\" />\n\n    <Color name=\"ObjectReference\" foreground=\"#FFDFDF00\" exampleText=\"$Customer.Name\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XML\" extensions=\".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec\">\n    <Color name=\"Comment\"        foreground=\"#FF00ff00\" exampleText=\"&lt;!-- comment --&gt;\"/>\n    <Color name=\"CData\"          foreground=\"#FFc0b180\" exampleText=\"&lt;![CDATA[data]]&gt;\"/>\n    <Color name=\"DocType\"        foreground=\"#FFdfdf00\" exampleText=\"&lt;!DOCTYPE rootElement&gt;\"/>\n    <Color name=\"XmlDeclaration\" foreground=\"#FFdfdf20\" exampleText='&lt;?xml version=\"1.0\"?&gt;'/>\n    <Color name=\"XmlTag\"         foreground=\"#FFffff00\" exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"AttributeName\"  foreground=\"#FFffcf00\" exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"AttributeValue\" foreground=\"#FFff9800\" exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"Entity\"         foreground=\"#FFa0a0f0\" exampleText=\"index.aspx?a=1&amp;amp;b=2\"/>\n    <Color name=\"BrokenEntity\"   foreground=\"#FFff5800\" exampleText=\"index.aspx?a=1&amp;b=2\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XmlDoc\">\n    <Color name=\"XmlString\"      foreground=\"#FF666666\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"DocComment\"     foreground=\"#FFAAAAAA\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"XmlPunctuation\" foreground=\"#FF999999\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"KnownDocTags\"   foreground=\"#FF7979B9\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n  </SyntaxDefinition>\n\n  <GlobalStyles>\n    <!-- Background and foreground color of the default text (without highlighting) in the text editor -->\n    <DefaultStyle foreground=\"#FFFFFFFF\" background=\"#FF000080\" />\n\n    <!-- Background color of the currently highlighted line -->\n    <CurrentLineBackground background=\"#7F4A11AE\" bordercolor=\"#7F4A11AE\"/>\n\n    <!-- Foreground color of the line number display in the editor -->\n    <LineNumbersForeground foreground=\"#FFC0C0FF\"/>\n\n    <!-- background, border, and Foreground color of a text selection (eg.: CTRL+A or \"Select All\") -->\n    <Selection background=\"#3FFFFFFF\" bordercolor=\"#9FFFFFFF\" foreground=\"Yellow\" />\n\n    <!-- Foreground and background color of a hyperlink in the text -->\n    <Hyperlink background=\"#08FFFFFF\" foreground=\"#FF00BFFF\"/>\n\n    <!-- Foreground color of a non-printable character (enter, tab, or space)\n         in the text if their display is explicitely enabled -->\n    <NonPrintableCharacter foreground=\"#5FFF8080\"/>\n  </GlobalStyles>\n</ThemeSyntaxDefinition>\n<!--\n- XSD Generation from XML\n  http://xmlgrid.net/xml2xsd.html\n\n- XML XSD Validation\n  http://www.utilities-online.info/xsdvalidation/\n-->\n"
  },
  {
    "path": "src/HL/Resources/Themes/VS2019_Dark.xshtd",
    "content": "﻿<?xml version=\"1.0\"?>\n<ThemeSyntaxDefinition name=\"VS2019_Dark\" xmlns=\"http://icsharpcode.net/sharpdevelop/themesyntaxdefinition/2019\">\n\n  <SyntaxDefinition name=\"ActionScript3\" extensions=\".as\">\n    <Color name=\"Comment\"    foreground=\"#FF57A64A\" exampleText=\"// comment\"/>\n    <Color name=\"String\"     foreground=\"#FFD69D85\" exampleText=\"'str'\"/>\n    <Color name=\"MethodCall\" foreground=\"#FFdcdcaa\" exampleText=\"o.ToString();\"/>\n    <Color name=\"Digits\"     foreground=\"#FFb5cea8\" exampleText=\"3.1415\"/>\n\n    <Color name=\"Keyword\"  foreground=\"#FF559CD6\"/>\n    <Color name=\"Keyword1\" foreground=\"#FFd8a0df\"/>\n\n    <Color name=\"CommentMarkerSet\"           foreground=\"#FFFF8080\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FFFF6060\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"ASP/XHTML\" extensions=\".asp;.aspx;.asax;.asmx;.ascx;.master\" xmlns=\"http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008\">\n    <Color name=\"ASPSectionStartEndTags\" foreground=\"Black\" background=\"Yellow\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n    <Color name=\"ASPSection\" foreground=\"Black\" background=\"#FFF7F2E3\" exampleText=\"&lt;% System.Console.WriteLine(&quot;Hello World!&quot;); %&gt;\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Boo\" extensions=\".boo\">\n    <Color name=\"Comment\"          foreground=\"#FF57A64A\"/>\n    <Color name=\"Comment1\"         foreground=\"#FF57A64A\"/>\n    <Color name=\"Comment2\"         foreground=\"#FF57A64A\"/>\n    <Color name=\"NestedComments\"   foreground=\"#FF57A64A\"/>\n    <Color name=\"String\"           foreground=\"#FFD69D85\"/>\n    <Color name=\"CodeInsideString\" foreground=\"#FFffd68f\"/>\n    <Color name=\"Keywords\"   foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords1\"  foreground=\"#FFdcdcaa\"/>\n    <Color name=\"Keywords2\"  foreground=\"#FFd8a0df\"/>\n    <Color name=\"Keywords3\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords4\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords5\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords6\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords7\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords8\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords9\"  foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords10\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords11\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords12\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords13\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords14\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords15\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords16\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords17\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords18\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords19\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Keywords20\" foreground=\"#FF00A0FF\"/>\n    <Color name=\"Regex\"      foreground=\"#FFdcdcaa\"/>\n    <Color name=\"CommentMarkerSet\"           foreground=\"#FFFF0000\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Coco\" extensions=\".atg\">\n    <Color name=\"Comment\"       foreground=\"#FF00FF00\" fontStyle=\"italic\" />\n    <Color name=\"Punctuation\"   foreground=\"#FFA0A0F0\" fontWeight=\"bold\" />\n    <Color name=\"String\"        foreground=\"#FFFF9800\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FFFFFF00\" />\n    <Color name=\"COMPILER\"      foreground=\"#FFDFDF00\" />\n\n    <Color name=\"Lt_Gt_Color\"   foreground=\"#FFCFCF00\" />\n    <Color name=\"Bracket_Color\" foreground=\"#FFAFAF00\" />\n    <Color name=\"CSharp_Color\"  foreground=\"#FF8F8F00\" />\n\n    <Color name=\"CSharp1_Color\" foreground=\"#FF6F6F00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C++\" extensions=\".c;.h;.cc;.cpp;.hpp\">\n    <Color name=\"Comment\"           foreground=\"#FF00FF00\" />\n    <Color name=\"Character\"         foreground=\"#FFFF5840\" />\n    <Color name=\"String\"            foreground=\"#FFFF9800\" />\n    <Color name=\"Preprocessor\"      foreground=\"#FF8080FF\" />\n    <Color name=\"Punctuation\"       foreground=\"#FFA0A0F0\" />\n    <Color name=\"MethodName\"        foreground=\"#FFFFFF00\" />\n    <Color name=\"Digits\"            foreground=\"#FF00BFFF\" />\n    <Color name=\"CompoundKeywords\"  foreground=\"#FFDFDF00\" />\n    <Color name=\"This\"              foreground=\"#FFCFCF00\" />\n    <Color name=\"Operators\"         foreground=\"#FFAFAF00\" />\n    <Color name=\"Namespace\"         foreground=\"#FF8F8F00\" />\n    <Color name=\"Friend\"            foreground=\"#FF6F6F00\" />\n    <Color name=\"Modifiers\"         foreground=\"#FFFFFF00\" />\n    <Color name=\"TypeKeywords\"      foreground=\"#FFDFDF00\" />\n    <Color name=\"BooleanConstants\"  foreground=\"#FFFFFF40\" />\n    <Color name=\"Keywords\"          foreground=\"#FFDFDF40\" />\n    <Color name=\"LoopKeywords\"      foreground=\"#FFCFCF40\" />\n    <Color name=\"JumpKeywords\"      foreground=\"#FFAFAF40\" />\n    <Color name=\"ExceptionHandling\" foreground=\"#FF8F8F40\" />\n    <Color name=\"ControlFlow\"       foreground=\"#FF6F6F40\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"C#\" extensions=\".cs\">\n    <!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->\n    <Color name=\"Comment\"             foreground=\"#FF57A64A\" exampleText=\"// comment\" />\n    <Color name=\"String\"              foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"StringInterpolation\" foreground=\"#FFffd68f\" exampleText=\"string text = $&quot;Hello, {name}!&quot;\"/>\n    <Color name=\"Char\"                foreground=\"#FFD69D85\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"Preprocessor\"        foreground=\"#FF9B9B9B\" exampleText=\"#region Title\"/>\n    <Color name=\"Punctuation\"         foreground=\"White\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"ValueTypeKeywords\"     foreground=\"#FF00A0FF\" exampleText=\"bool b = true;\"/>\n\n    <Color name=\"ReferenceTypeKeywords\" foreground=\"#FF559CD6\" exampleText=\"object o;\"/>\n    <Color name=\"MethodCall\"            foreground=\"#FFdcdcaa\" exampleText=\"o.ToString();\"/>\n    <Color name=\"NumberLiteral\"         foreground=\"#FFb5cea8\" exampleText=\"3.1415f\"/>\n    <Color name=\"ThisOrBaseReference\"   foreground=\"#FF3a6a9b\" exampleText=\"this.Do(); base.Do();\"/>\n    <Color name=\"NullOrValueKeywords\"   foreground=\"#FF559CD6\" exampleText=\"if (value == null)\"/>   \n    <Color name=\"Keywords\"              foreground=\"#FFd8a0df\" exampleText=\"if (a) {} else {}\"/>\n    <Color name=\"GotoKeywords\"          foreground=\"#FFd8a0df\" exampleText=\"continue; return null;\"/>\n    <Color name=\"ContextKeywords\"       foreground=\"#FFd8a0df\" exampleText=\"var a = from x in y select z;\"/>\n    <Color name=\"ExceptionKeywords\"     foreground=\"#FFd8a0df\" exampleText=\"try {} catch {} finally {}\"/>\n    <Color name=\"CheckedKeyword\"        foreground=\"#FF559CD6\" exampleText=\"checked {}\"/>\n    <Color name=\"UnsafeKeywords\"        foreground=\"#FF559CD6\" exampleText=\"unsafe { fixed (..) {} }\"/>\n    <Color name=\"OperatorKeywords\"      foreground=\"#FFD69D85\" exampleText=\"public static implicit operator...\"/>\n    <Color name=\"ParameterModifiers\"    foreground=\"#FF559CD6\" exampleText=\"(ref int a, params int[] b)\"/>\n    <Color name=\"Modifiers\"             foreground=\"#FF559CD6\" exampleText=\"static readonly int a;\"/>\n    <Color name=\"Visibility\"            foreground=\"#FF559CD6\" exampleText=\"public override void ToString();\"/>\n    <Color name=\"NamespaceKeywords\"     foreground=\"#FF559CD6\" exampleText=\"namespace A.B { using System; }\"/>\n    <Color name=\"GetSetAddRemove\"       foreground=\"#FF559CD6\" exampleText=\"int Prop { get; set; }\"/>\n    <Color name=\"TrueFalse\"             foreground=\"#FF00A0FF\" exampleText=\"b = false; a = true;\"/>\n    <Color name=\"TypeKeywords\"          foreground=\"#FF559CD6\" exampleText=\"if (x is int) { a = x as int; type = typeof(int); size = sizeof(int); c = new object(); }\"/>\n    <Color name=\"SemanticKeywords\"      foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"if (args == null) throw new ArgumentNullException(nameof(args));\" />\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\" />\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"CSS\" extensions=\".css\">\n    <Color name=\"Comment\"     foreground=\"#FF57A64A\" exampleText=\"/* comment */\" />\n    <Color name=\"String\"      foreground=\"#FFD69D85\" exampleText=\"body { background: url(&quot;image.png&quot;) }\" />\n    <Color name=\"Selector\"    foreground=\"#FFd8a0df\" fontWeight=\"normal\" exampleText=\"div p\" />\n    <Color name=\"Class\"       foreground=\"#FF3a6a9b\" fontWeight=\"normal\" exampleText=\"#para\" />\n    <Color name=\"Property\"    foreground=\"#FFCFCF00\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"Value\"       foreground=\"#FF00A0FF\" fontWeight=\"normal\" exampleText=\"p { color: red; }\" />\n    <Color name=\"CurlyBraces\" foreground=\"White\" exampleText=\"{ }\" />\n    <Color name=\"Colon\"       foreground=\"White\" exampleText=\":\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"BAT\" extensions=\".bat;.dos\">\n    <Color name=\"String\"  foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\" />\n    <Color name=\"String2\" foreground=\"#FFD69D85\" background=\"#22DDDDDD\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Comment\"     foreground=\"#FF57A64A\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"Digits\"      foreground=\"#FFb5cea8\" fontStyle=\"italic\"/>\n    <Color name=\"Punctuation\" foreground=\"White\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"PARAMETER\" foreground=\"#FF00A0FF\" exampleText=\"%1\"/>\n    <Color name=\"VARIABLE\"  foreground=\"#FF00A0FF\" exampleText=\"%MYVAR%\"/>\n\n    <Color name=\"GOTO\"        foreground=\"#FFd8a0df\" background=\"#40AAAAAA\"/>\n    <Color name=\"GOTO_TARGET\" foreground=\"#FFd8a0df\" background=\"#80AAAAAA\"/>\n\n    <Color name=\"AtCommand\"   foreground=\"#FF00A0FF\" />\n\n    <Color name=\"Command\"     foreground=\"#FF00A0FF\" />\n    <Color name=\"Command1\"    foreground=\"#FF00A0FF\" />\n    <Color name=\"Command2\"    foreground=\"#FF00A0FF\" />\n    <Color name=\"Command3\"    foreground=\"#FF00A0FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"F#\" extensions=\".fs\">\n    <!-- Shades of Red-Brown: #a31515, #cf4315, #ffb96e, #ffdc95 -->\n    <Color name=\"Digits\"      foreground=\"#FFb5cea8\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"     foreground=\"#FF57A64A\" exampleText=\"// comment\"/>\n    <Color name=\"Punctuation\" foreground=\"White\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"String\"      foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"        foreground=\"#FFD69D85\" exampleText=\"char linefeed = '\\n';\"/>\n\n    <Color name=\"Preprocessor\"         foreground=\"#FF9B9B9B\" exampleText=\"#region Title\"/>\n    <Color name=\"ReferenceTypes\"       foreground=\"#FF559CD6\" exampleText=\"object o;\"/>\n    <Color name=\"MethodCall\"           foreground=\"#FFdcdcaa\" fontWeight=\"bold\" exampleText=\"o.ToString();\"/>\n    <Color name=\"NullOrValueKeywords\"  foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n    <Color name=\"Modifiers\"            foreground=\"#FF559CD6\" exampleText=\"static readonly int a;\"/>\n    <Color name=\"Visibility\"           foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"public override void ToString();\"/>\n    <Color name=\"NamespaceKeywords\"    foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"namespace A.B { using System; }\"/>\n    <Color name=\"GetSetAddRemove\"      foreground=\"#FF559CD6\" exampleText=\"int Prop { get; set; }\"/>\n    <Color name=\"ReservedKeywords\"     foreground=\"#FF559CD6\" fontStyle=\"italic\"/>\n    <Color name=\"CurrentKeywords\"      foreground=\"#FF559CD6\" fontStyle=\"italic\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"HLSL\" extensions = \".fx\">\n    <Color name=\"Digits\"      foreground=\"#FFb5cea8\" fontStyle=\"italic\"/>\n    <Color name=\"Comments\"    foreground=\"#FF57A64A\" />\n    <Color name=\"Punctuation\" foreground=\"White\" />\n    <Color name=\"Keywords\"    foreground=\"#FF00A0FF\" />\n    <Color name=\"DataTypes\"   foreground=\"#FF559CD6\" />\n    <Color name=\"States\"      foreground=\"#FF559CD6\" fontStyle=\"italic\"/>\n    <Color name=\"Constants\"   foreground=\"#FFd8a0df\" />\n    <Color name=\"Semantics\"   foreground=\"#FFd8a0df\" />\n    <Color name=\"Functions\"   foreground=\"#FFdcdcaa\" />\n    <Color name=\"MethodCall\"  foreground=\"#FFdcdcaa\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"HTML\" extensions=\".htm;.html\">\n    <Color name=\"Comment\"          foreground=\"#FF57A64A\" background=\"#22AAAAAA\" fontStyle=\"italic\" exampleText=\"&lt;!-- comment --&gt;\"/>\n    <Color name=\"Digits\"           foreground=\"#FFb5cea8\" exampleText=\"&lt;digits&gt;0123456789&lt;/digits&gt;\"/>\n    <Color name=\"ScriptTag\"        foreground=\"#FF00A0FF\" exampleText=\"&lt;script&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"JavaScriptTag\"    foreground=\"#FF00A0FF\" exampleText=\"&lt;script lang=&quot;JavaScript&quot;&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"JScriptTag\"       foreground=\"#FF00A0FF\" exampleText=\"&lt;script lang=&quot;JScript&quot;&gt;Response.Write(&quot;Hello World!&quot;);&lt;/script&gt;\"/>\n    <Color name=\"VBScriptTag\"      foreground=\"#FF00A0FF\" exampleText=\"&lt;script lang=&quot;VBScript&quot;&gt;Response.Write(&quot;Hello World!&quot;)&lt;/script&gt;\"/>\n    <Color name=\"UnknownScriptTag\" foreground=\"White\"     exampleText=\"&lt;script la&gt;alert('Hello World!');&lt;/script&gt;\"/>\n    <Color name=\"HtmlTag\"          foreground=\"#FF00A0FF\" exampleText=\"&lt;html&gt;Hello World!/html&gt;\"/>\n    <Color name=\"Tags\"             foreground=\"#FF00A0FF\" exampleText=\"&lt;html&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Attributes\"       foreground=\"#FF92caf4\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Slash\"            foreground=\"White\"     exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Assignment\"       foreground=\"White\"     exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"String\"           foreground=\"#FFD69D85\" exampleText=\"&lt;html background='green'&gt;Hello World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"EntityReference\"  foreground=\"#FF92caf4\" fontStyle=\"italic\" exampleText=\"&lt;html background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"Entities\"         foreground=\"#FF92caf4\" fontStyle=\"italic\" exampleText=\"&lt;html foo='bar' background='green'&gt;Hello&amp;nbsp;World! &lt;test /&gt;&lt;/html&gt;\"/>\n    <Color name=\"UnknownAttribute\" foreground=\"#FF92caf4\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"INI\" extensions=\".cfg;.conf;.ini;.iss\">\n    <Color name=\"Digits\"       foreground=\"#FFb5cea8\" fontStyle=\"italic\"/>\n    <Color name=\"Comment\"      foreground=\"#FF57A64A\"/>\n    <Color name=\"Punctuation\"  foreground=\"White\"/>\n    <Color name=\"String\"       foreground=\"#FFD69D85\"/>\n    <Color name=\"String2\"      foreground=\"#FFD69D85\"/>\n\n    <Color name=\"Section\"      foreground=\"#FF00A0FF\"/>\n\n    <Color name=\"PropertyName\" foreground=\"#FF559CD6\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Java\" extensions=\".java\">\n    <Color name=\"MethodName\"                  foreground=\"#FFdcdcaa\" />\n    <Color name=\"Digits\"                      foreground=\"#FFb5cea8\" />\n    <Color name=\"String\"                      foreground=\"#FFD69D85\" />\n    <Color name=\"Character\"                   foreground=\"#FFD69D85\" />\n    <Color name=\"Comment\"                     foreground=\"#FF57A64A\" />\n    <Color name=\"Punctuation\"                 foreground=\"White\" />\n    <Color name=\"AccessKeywords\"              foreground=\"#FF559CD6\" />\n    <Color name=\"OperatorKeywords\"            foreground=\"#FFD69D85\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FFd8a0df\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FFd8a0df\" />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FFd8a0df\" />\n    <Color name=\"ValueTypes\"                  foreground=\"#FF00A0FF\" />\n    <Color name=\"ReferenceTypes\"              foreground=\"#FF559CD6\" />\n    <Color name=\"Void\"                        foreground=\"#FF559CD6\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FFd8a0df\" />\n    <Color name=\"Modifiers\"                   foreground=\"#FF559CD6\" />\n    <Color name=\"AccessModifiers\"             foreground=\"#FF559CD6\" />\n    <Color name=\"Package\"                     foreground=\"#FF559CD6\" />\n    <Color name=\"Literals\"                    foreground=\"#FF559CD6\" />\n    <Color name=\"CommentTags\"                 foreground=\"#FF90c088\" />\n    <Color name=\"JavaDocTags\"                 foreground=\"#FF90c088\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"JavaScript\" extensions=\".js\">\n    <Color name=\"Digits\"                    foreground=\"#FFb5cea8\" fontStyle=\"normal\" fontWeight=\"normal\" exampleText=\"3.14\"/>\n    <Color name=\"Comment\"                   foreground=\"#FF57A64A\" exampleText=\"// comment\"/>\n    <Color name=\"String\"                    foreground=\"#FFD69D85\" exampleText=\"var text = &quot;Hello, World!&quot;;\" />\n    <Color name=\"Character\"                 foreground=\"#FFD69D85\" exampleText=\"var char = 'a';\"/>\n    <Color name=\"Regex\"                     foreground=\"#FF3a6a9b\" exampleText=\"/abc/m\"/>\n    <Color name=\"JavaScriptKeyWords\"        foreground=\"#FFd8a0df\" exampleText=\"return myVariable;\"/>\n    <Color name=\"JavaScriptIntrinsics\"      foreground=\"#FFAFAF00\" exampleText=\"Math.random()\"/>\n    <Color name=\"JavaScriptLiterals\"        foreground=\"#FFd8a0df\" exampleText=\"return false;\"/>\n    <Color name=\"JavaScriptGlobalFunctions\" foreground=\"#FFdcdcaa\" exampleText=\"escape(myString);\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"LOG\" extensions=\".log\">\n    <Color name=\"Digits\"       foreground=\"#FFb5cea8\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"Comment\"      foreground=\"#FF57A64A\"/>\n    <Color name=\"Punctuation\"  foreground=\"White\"/>\n    <Color name=\"String\"       foreground=\"#FFD69D85\"/>\n    <Color name=\"String2\"      foreground=\"#FFD69D85\"/>\n\n    <Color name=\"Section\"      foreground=\"#FFdcdcaa\"/>\n\n    <Color name=\"AmericanDate\" foreground=\"#FFd8a0df\"/>\n    <Color name=\"TimeStamp\"    foreground=\"#FFd8a0df\"/>\n\n    <Color name=\"ImportantKeywords\" foreground=\"#FFd8a0df\" fontWeight=\"bold\" />\n    <Color name=\"InfoKeywords\"      foreground=\"#FF559CD6\" fontWeight=\"bold\" />\n  </SyntaxDefinition> \n\n  <SyntaxDefinition name=\"MarkDown\" extensions=\".md\">\n    <Color name=\"Heading\"        foreground=\"#FF92caf4\"  exampleText=\"# Title #\"/>\n    <Color name=\"Emphasis\"       fontStyle=\"italic\" exampleText=\"*this* is important!\"/>\n    <Color name=\"StrongEmphasis\" fontWeight=\"bold\" exampleText=\"**this** is more important!\"/>\n    <Color name=\"Code\"           foreground=\"#FFffd68f\" exampleText=\"this is `int.GetHashCode()`\"/>\n    <Color name=\"BlockQuote\"     foreground=\"#FFD69D85\" exampleText=\"&gt; This is a\\r\\n&gt; quote.\" />\n    <Color name=\"Link\"           foreground=\"#FF92caf4\" exampleText=\"[text](http://example.com)\"/>\n    <Color name=\"Image\"          foreground=\"#FF92caf4\" exampleText=\"[text][http://example.com/test.png]\"/>\n    <Color name=\"LineBreak\"      foreground=\"#FF9B9B9B\" exampleText=\"end of line      \\r\\n2nd line   \"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"Pascal\" extensions = \".pas\">\n    <Color name=\"Digits\"            foreground=\"#FFb5cea8\" fontStyle=\"normal\" exampleText=\"3.1415f\"/>\n\n    <Color name=\"Punctuation\"       foreground=\"White\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"Comment\"           foreground=\"#FF57A64A\" exampleText=\"// comment\"/>\n    <Color name=\"Documenation\"      foreground=\"#FF57A64A\" />\n\n    <Color name=\"Char\"              foreground=\"#FFD69D85\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"String\"            foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"DataTypes\"        foreground=\"#FFd8a0df\" />\n    <Color name=\"Operators\"        foreground=\"#FFD69D85\" />\n    <Color name=\"Statements\"       foreground=\"#FF00A0FF\" />\n    <Color name=\"MethodCall\"       foreground=\"#FFdcdcaa\" fontWeight=\"bold\"/>\n    <Color name=\"FunctionKeywords\" foreground=\"#FFdcdcaa\" />\n\n    <Color name=\"CommentMarkerSetTodo\"       foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Patch\" extensions=\".patch;.diff\">\n    <Color name=\"AddedText\"     foreground=\"#FFFFFF00\" exampleText=\"+added\"/>\n    <Color name=\"RemovedText\"   foreground=\"#FFFF6060\" exampleText=\"-removed\"/>\n    <Color name=\"UnchangedText\"                        exampleText=\" unchanged\"/>\n    <Color name=\"Position\"      foreground=\"#FF00A0FF\" exampleText=\"@@ -186,6 +186,12 @@\"/>\n    <Color name=\"Header\"        foreground=\"#FFd8a0df\" exampleText=\"--- (oldversion)&#10;+++ (newversion)\"/>\n    <Color name=\"FileName\"      foreground=\"#FF00DF00\" fontWeight=\"bold\" exampleText=\"Index: path/to/file\"/>\n    <Color name=\"AtAtColor\"     foreground=\"#FFD69D85\" exampleText=\"@@\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PHP\" extensions = \".php\">\n    <Color name=\"Comment\"             foreground=\"#FF57A64A\" exampleText=\"// comment\"/>\n    <Color name=\"String\"              foreground=\"#FFD69D85\" exampleText=\"$text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"NumberLiteral\"       foreground=\"#FFb5cea8\" exampleText=\"3.1415\"/>\n    <Color name=\"Punctuation\"         foreground=\"White\"     exampleText=\"a(b + c)\" />\n    <Color name=\"FunctionCall\"        foreground=\"#FFdcdcaa\" fontWeight=\"bold\" exampleText=\"abs(num);\"/>\n    <Color name=\"AccessKeywords\"      foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"global $database;\" />\n    <Color name=\"OperatorKeywords\"    foreground=\"#FFD69D85\" fontWeight=\"bold\" exampleText=\"if (x === false and y === false) { }\" />\n    <Color name=\"SelectionStatements\" foreground=\"#FFd8a0df\" fontWeight=\"bold\" exampleText=\"if (true) { } else { }\" />\n    <Color name=\"IterationStatements\" foreground=\"#FFd8a0df\" fontWeight=\"bold\" exampleText=\"while (true) { }\" />\n    <Color name=\"JumpStatements\"      foreground=\"#FFd8a0df\" fontWeight=\"bold\" exampleText=\"if (x == 5) continue;\" />\n    <Color name=\"ControlStatements\"   foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"include(&quot;test.php&quot;);\" />\n    <Color name=\"ValueTypes\"          foreground=\"#FF00A0FF\" fontWeight=\"bold\" exampleText=\"int test = 5;\" />\n    <Color name=\"OtherTypes\"          foreground=\"#FF00A0FF\" exampleText=\"object test = null;\" />\n    <Color name=\"AccessModifiers\"     foreground=\"#FF00A0FF\" fontWeight=\"bold\" exampleText=\"public function test() {}\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name =\"PLSQL\" extensions = \".plsql\">\n    <Color name=\"Comment\"       foreground=\"#FF57A64A\" exampleText=\"-- comment\"/>\n    <Color name=\"String\"        foreground=\"#FFD69D85\" exampleText=\"&quot;Hello, World!&quot;\"/>\n    <Color name=\"Keywords\"      foreground=\"#FF00A0FF\" />\n    <Color name=\"ReservedWords\" foreground=\"#FFd8a0df\" />\n    <Color name=\"Functions\"     foreground=\"#FFdcdcaa\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"PowerShell\" extensions=\".ps1;.psm1;.psd1\">\n    <Color name=\"Comment\"           foreground=\"#FF57A64A\" exampleText=\"// comment\" />\n    <Color name=\"String\"            foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\"/>\n    <Color name=\"Char\"              foreground=\"#FFD69D85\" exampleText=\"char linefeed = '\\n';\"/>\n    <Color name=\"Punctuation\"       foreground=\"White\" exampleText=\"a(b.c);\" />\n    <Color name=\"NumberLiteral\"     foreground=\"#FFb5cea8\" exampleText=\"3.1415f\"/>\n    <Color name=\"Keywords\"          foreground=\"#FF00A0FF\" exampleText=\"if (a)\"/>\n    <Color name=\"Variable\"          foreground=\"#FFd8a0df\" exampleText=\"$param = 1\"/>\n    <Color name=\"ExceptionKeywords\" foreground=\"#FFd8a0df\" />\n    <Color name=\"GotoKeywords\"      foreground=\"#FFd8a0df\" />\n    <Color name=\"ReferenceTypes\"    foreground=\"#FF559CD6\" />\n    <Color name=\"Command\"           foreground=\"#FF559CD6\" />\n    <Color name=\"Operators\"         foreground=\"#FF559CD6\" exampleText=\"-eq\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Python\" extensions=\".py;.pyw\">\n    <Color name=\"Comment\"       foreground=\"#FF57A64A\" />\n    <Color name=\"String\"        foreground=\"#FFD69D85\" />\n    <Color name=\"MethodCall\"    foreground=\"#FFdcdcaa\" />\n    <Color name=\"NumberLiteral\" foreground=\"#FFb5cea8\" />\n    <Color name=\"Keywords\"      foreground=\"#FF00A0FF\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Ruby\" extensions=\".rb\">\n    <Color name=\"Digits\"                      foreground=\"#FFb5cea8\" />\n\n    <Color name=\"Variable\"                    foreground=\"#FF92caf4\" />\n    <Color name=\"Punctuation\"                 foreground=\"#FFA0A0F0\" />\n\n    <Color name=\"Comment\"                     foreground=\"#FF57A64A\" />\n    <Color name=\"LineComment\"                 foreground=\"#FF57A64A\" />\n    <Color name=\"DocComment\"                  foreground=\"#FF57A64A\" />\n    <Color name=\"NestedComments\"              foreground=\"#FF57A64A\" />\n    <Color name=\"MultiLineComment\"            foreground=\"#FF57A64A\" />\n\n    <Color name=\"Char\"                        foreground=\"#FFD69D85\" />\n    <Color name=\"String\"                      foreground=\"#FFD69D85\" />\n\n    <Color name=\"MethodCall\"                  foreground=\"#FFdcdcaa\" fontWeight=\"bold\" />\n    <Color name=\"FunctionDefinition\"          foreground=\"#FFdcdcaa\" fontWeight=\"bold\" />\n    <Color name=\"ExceptionHandlingStatements\" foreground=\"#FFd8a0df\" />\n\n    <Color name=\"Imports\"                     foreground=\"#FF00A0FF\" fontWeight=\"bold\" />\n    <Color name=\"IterationStatements\"         foreground=\"#FFd8a0df\" />\n    <Color name=\"JumpStatements\"              foreground=\"#FFd8a0df\" />\n    <Color name=\"OperatorStatements\"          foreground=\"#FFD69D85\" />\n    <Color name=\"NullStatement\"               foreground=\"#FF00A0FF\" />\n    <Color name=\"SelectionStatements\"         foreground=\"#FF00A0FF\" />\n    <Color name=\"BooleanStatements\"           foreground=\"#FF00A0FF\" />\n    <Color name=\"DefinedStatement\"            foreground=\"#FF00A0FF\" />\n    <Color name=\"ClassSelfStatement\"          foreground=\"#FF00A0FF\" />\n    <Color name=\"ClassInheritanceStatement\"   foreground=\"#FF00A0FF\" />\n\n    <Color name=\"ImportStatement\"             foreground=\"#FF00A0FF\"/>\n    <Color name=\"BuiltInStatements\"           foreground=\"#FF00A0FF\" />\n    <Color name=\"ClassStatement\"              foreground=\"#FF00A0FF\" />\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Scheme\" extensions=\".sls;.sps;.ss;.scm\">\n    <!-- Lisp syntax definition -->\n    <Color name=\"Digits\"              foreground=\"#FFb5cea8\" exampleText=\"3.1415f\"/>\n    <Color name=\"Comment\"             foreground=\"#FF57A64A\" />\n    <Color name=\"Punctuation\"         foreground=\"White\" exampleText=\"a(b.c);\"/>\n\n    <Color name=\"Syntax\"              foreground=\"#FF00A0FF\"/>\n    <Color name=\"Library Syntax\"      foreground=\"#FF00A0FF\"/>\n    <Color name=\"Auxilliary Syntax\"   foreground=\"#FFd8a0df\"/>\n    <Color name=\"MethodCall\"          foreground=\"#FFdcdcaa\" fontWeight=\"bold\" />\n    <Color name=\"NullOrValueKeywords\" foreground=\"#FF559CD6\" fontWeight=\"bold\" exampleText=\"if (value == null)\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"Squirrel\" extensions=\".nut\">\n    <!-- Reference: http://www.squirrel-lang.org/\n         Reference Manual: http://www.squirrel-lang.org/doc/squirrel2.html -->\n    <Color name=\"Comment\"      foreground=\"#FF57A64A\" />\n    <Color name=\"Digits\"       foreground=\"#FFb5cea8\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"Punctuation\"  foreground=\"White\" />\n    <Color name=\"String\"       foreground=\"#FFD69D85\" />\n    <Color name=\"MethodCall\"   foreground=\"#FFdcdcaa\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"GGenObject\"   foreground=\"#FFd8a0df\" fontStyle=\"normal\" fontWeight=\"normal\" />\n    <Color name=\"Keywords\"     foreground=\"#FF00A0FF\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n\n    <Color name=\"PreprocessorLine\"            foreground=\"#FF8080FF\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name = \"TeX\" extensions = \".tex\">\n    <Color name=\"Digits\"        foreground=\"#FFb5cea8\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"LineComment\"   foreground=\"#FF57A64A\" />\n\n    <Color name=\"Keywords\"      foreground=\"#FF00A0FF\" />\n    <Color name=\"ShortKeywords\" foreground=\"#FFd8a0df\" background=\"#10AAAAAA\" fontWeight=\"normal\" />\n\n    <Color name=\"Todo\" foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"HACK\" foreground=\"#FF8B008B\" fontWeight=\"bold\"/>\n\n    <Color name=\"CurlyBrackets\"             foreground=\"White\" fontWeight=\"normal\" />\n\n    <Color name=\"SquareBrackets\"            foreground=\"#FFffd68f\"                        />\n    <Color name=\"ParameterInSquareBrackets\" foreground=\"#FFD69D85\" background=\"#11404040\" />\n\n    <Color name=\"MathMode\"  foreground=\"#FF3a6a9b\" />\n    <Color name=\"MathMode1\" foreground=\"#FF5a8abb\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TSQL\" extensions=\".sql\">\n    <Color name=\"Comment\"     foreground=\"#FF57a64a\" />\n    <Color name=\"Char\"        foreground=\"#FFD69D85\" />\n    <Color name=\"Keywords\"    foreground=\"#FF00A0FF\" exampleText=\"SELECT FROM\"/>\n\n    <Color name=\"CommentMarkerSetTodo\"        foreground=\"#FFFF0000\" fontWeight=\"bold\"/>\n    <Color name=\"CommentMarkerSetHackUndone\"  foreground=\"#FFE0E000\" fontWeight=\"bold\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"TXT\" extensions=\".txt\">\n    <Color name=\"Comment\" foreground=\"#FF57A64A\" />\n    <Color name=\"Digits\"  foreground=\"#FFb5cea8\" />\n    <Color name=\"String\"  foreground=\"#FFD69D85\" />\n    <Color name=\"String2\" foreground=\"#FFD69D85\" />\n\n    <Color name=\"BulletNumbers\" foreground=\"#FF92caf4\"/>\n\n    <Color name=\"Heading1\" foreground=\"#FFd8a0df\" />\n    <Color name=\"Heading2\" foreground=\"#FFd8a0df\" fontStyle=\"italic\"   />\n    <Color name=\"Heading3\" foreground=\"#FFd8a0df\" fontStyle=\"italic\" />\n    <Color name=\"Heading4\" foreground=\"#FFd8a0df\" />\n\n    <Color name=\"Important\"    foreground=\"#FFF25D20\" fontWeight=\"bold\" />\n    <Color name=\"Punctuation\"  foreground=\"White\" />\n    <Color name=\"BoldFormat\"   fontWeight=\"bold\"   />\n    <Color name=\"ItalicFormat\" fontStyle=\"italic\" />\n\n    <Color name=\"Problem\"  foreground=\"#FFFF0000\" />\n    <Color name=\"Complete\" foreground=\"#FF559CD6\" />\n\n    <!-- Highlight Time information at begining of line: eg.: \"2:04:45 PM\" or \"12:04:45 AM\" -->\n    <Color name=\"HighlightTime\" fontStyle=\"italic\" foreground=\"#FFFFFF00\" />\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VB\" extensions=\".vb\">\n    <Color name=\"Comment\"          foreground=\"#FF57a64a\" exampleText=\"' comment\" />\n    <Color name=\"String\"           foreground=\"#FFD69D85\" exampleText=\"text = &quot;Hello, World!&quot;\"/>\n\n    <Color name=\"DateLiteral\"      foreground=\"#FFb5cea8\" exampleText=\"endOfWorld = #2012-12-21#\"/>\n    <Color name=\"Preprocessor\"     foreground=\"#FF9B9B9B\" exampleText=\"#Region &quot;Title&quot;\"/>\n    <Color name=\"DataTypes\"        foreground=\"#FF00A0FF\" exampleText=\"Dim b As Boolean = True\"/>\n    <Color name=\"Operators\"        foreground=\"#FF00A0FF\" exampleText=\"If a OrElse b Then\"/>\n    <Color name=\"Constants\"        foreground=\"#FF00A0FF\" exampleText=\"b = False\"/>\n    <Color name=\"Keywords\"         foreground=\"#FF00A0FF\" exampleText=\"If a OrElse b Then\"/>\n    <Color name=\"FunctionKeywords\" foreground=\"#FFdcdcaa\" exampleText=\"CInt(a)\"/>\n    <Color name=\"ContextKeywords\"  foreground=\"#FFd8a0df\" exampleText=\"Declare Unicode Sub SomeMethod\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"VTL\" extensions=\".vtl;.vm\">\n    <Color name=\"Digits\"          foreground=\"#FFb5cea8\" fontStyle=\"normal\" fontWeight=\"normal\"/>\n    <Color name=\"String\"          foreground=\"#FFD69D85\" exampleText=\"string text = &quot;Hello, World!&quot;\" />\n    <Color name=\"String2\"         foreground=\"#FFD69D85\" />\n\n    <Color name=\"Comment\"         foreground=\"#FF57a64a\" />\n    <Color name=\"Keywords\"        foreground=\"#FF00A0FF\" />\n\n    <Color name=\"Punctuation\"     foreground=\"White\" />\n\n    <Color name=\"ObjectReference\" foreground=\"#FF559CD6\" exampleText=\"$Customer.Name\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XML\" extensions=\".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec\">\n    <Color name=\"Comment\"        foreground=\"#FF57a64a\" exampleText=\"&lt;!-- comment --&gt;\"/>\n    <Color name=\"CData\"          foreground=\"#FFe9d585\" exampleText=\"&lt;![CDATA[data]]&gt;\"/>\n    <Color name=\"DocType\"        foreground=\"#FF00A0FF\" exampleText=\"&lt;!DOCTYPE rootElement&gt;\"/>\n    <Color name=\"XmlDeclaration\" foreground=\"#FF00A0FF\" exampleText='&lt;?xml version=\"1.0\"?&gt;'/>\n    <Color name=\"XmlTag\"         foreground=\"#FF00A0FF\" exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"AttributeName\"  foreground=\"#FF92caf4\" exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"AttributeValue\" foreground=\"White\"     exampleText='&lt;tag attribute=\"value\" /&gt;'/>\n    <Color name=\"Entity\"         foreground=\"#FF92caf4\" exampleText=\"index.aspx?a=1&amp;b=2\"/>\n    <Color name=\"BrokenEntity\"   foreground=\"White\" exampleText=\"index.aspx?a=1&amp;amp;b=2\"/>\n  </SyntaxDefinition>\n\n  <SyntaxDefinition name=\"XmlDoc\">\n    <Color name=\"XmlString\"      foreground=\"White\"     fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"DocComment\"     foreground=\"#FF57A64A\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"XmlPunctuation\" foreground=\"#FF57A64A\" fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n    <Color name=\"KnownDocTags\"   foreground=\"#FF90c088\"     fontWeight=\"normal\" exampleText=\"${DocCommentMarker} &lt;exception cref=&quot;System.Exception&quot; /&gt;\"/>\n  </SyntaxDefinition>\n\n  <GlobalStyles>\n    <!-- Background and foreground color of the default text (without highlighting) in the text editor -->\n    <DefaultStyle foreground=\"#FFF1F2F3\" background=\"#FF1E1E1E\" />\n\n    <!-- Background color of the currently highlighted line -->\n    <CurrentLineBackground background=\"#7F0F0F0F\" bordercolor=\"#7F0F0F0F\"/>\n\n    <!-- Foreground color of the line number display in the editor -->\n    <LineNumbersForeground foreground=\"#FF2B91AF\"/>\n\n    <!-- background, border, and Foreground color of a text selection (eg.: CTRL+A or \"Select All\") -->\n    <Selection background=\"#BF264F78\" bordercolor=\"#8F264F78\" foreground=\"#FFDCDCDC\" />\n\n    <!-- Foreground and background color of a hyperlink in the text -->\n    <Hyperlink background=\"#FF1E1E1E\" foreground=\"#FF569cd6\"/>\n\n    <!-- Foreground color of a non-printable character (enter, tab, or space)\n         in the text if their display is explicitely enabled -->\n    <NonPrintableCharacter foreground=\"#FF808080\"/>\n  </GlobalStyles>\n</ThemeSyntaxDefinition>\n<!--\n- XSD Generation from XML\n  http://xmlgrid.net/xml2xsd.html\n\n- XML XSD Validation\n  http://www.utilities-online.info/xsdvalidation/\n-->\n"
  },
  {
    "path": "src/HL/Xshtd/IXshtdVisitor.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd\n{\n\t/// <summary>\n\t/// Implements an interface for usage in a Visitor pattern based implementation.\n\t/// This visitor pattern can be used to visit the elements of an XSHTD element tree.\n\t/// \n\t/// A visitor pattern can be used in many ways, here its used for syntax checks and\n\t/// object conversion (from POCO XML object to non-xml .net object).\n\t/// </summary>\n\tpublic interface IXshtdVisitor\n\t{\n\t\t/// <summary>\n\t\t/// Implements the visitor for a named color (<see cref=\"XshtdColor\"/> object)\n\t\t/// that is contained in a <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t/// </summary>\n\t\t/// <param name=\"syntax\"></param>\n\t\t/// <param name=\"color\"></param>\n\t\t/// <returns></returns>\n\t\tobject VisitColor(XshtdSyntaxDefinition syntax, XshtdColor color);\n\n\t\t/// <summary>\n\t\t/// Implements the visitor for the <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t/// </summary>\n\t\t/// <param name=\"syntax\">the element to be visited.</param>\n\t\t/// <returns></returns>\n\t\tobject VisitSyntaxDefinition(XshtdSyntaxDefinition syntax);\n\n\t\t/// <summary>\n\t\t/// Implements the visitor for the <see cref=\"XshtdGlobalStyles\"/> object.\n\t\t/// </summary>\n\t\t/// <param name=\"globStyles\">the element to be visited.</param>\n\t\t/// <returns></returns>\n\t\tobject VisitGlobalStyles(XshtdGlobalStyles globStyles);\n\n\t\t/// <summary>\n\t\t/// Implements the visitor for the <see cref=\"XshtdGlobalStyle\"/> object\n\t\t/// contained in a <see cref=\"XshtdGlobalStyles\"/> object.\n\t\t/// </summary>\n\t\t/// <param name=\"globStyles\"></param>\n\t\t/// <param name=\"style\"></param>\n\t\t/// <returns></returns>\n\t\tobject VisitGlobalStyle(XshtdGlobalStyles globStyles, XshtdGlobalStyle style);\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XhstdThemeDefinition.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing ICSharpCode.AvalonEdit.Utils;\n\n\t/// <summary>\n\t/// An Xml highlighting theme element.\n\t/// \n\t/// <see cref=\"XmlHighlightingThemeDefinition\"/> for equivalent run-time object.\n\t/// </summary>\n\t[Serializable]\n\tpublic class XhstdThemeDefinition : XshtdElement\n\t{\n\t\t/// <summary>\n\t\t/// Creates a new XhstdThemeDefinition object.\n\t\t/// </summary>\n\t\tpublic XhstdThemeDefinition()\n\t\t{\n\t\t\tthis.Elements = new NullSafeCollection<XshtdElement>();\n\t\t\tthis.GlobalStyleElements = new XshtdGlobalStyles();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets/sets the highlighting theme definition name (eg. 'Dark', 'TrueBlue')\n\t\t/// as stated in the Name attribute of the xshtd (xs highlighting theme definition) file.\n\t\t/// </summary>\n\t\tpublic string Name { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets the collection of elements.\n\t\t/// </summary>\n\t\tpublic IList<XshtdElement> Elements { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Gets the collection of elements.\n\t\t/// </summary>\n\t\tpublic XshtdGlobalStyles GlobalStyleElements { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to all elements.\n\t\t/// </summary>\n\t\tpublic override object AcceptVisitor(IXshtdVisitor visitor)\n\t\t{\n\t\t\tforeach (XshtdElement element in Elements)\n\t\t\t{\n\t\t\t\telement.AcceptVisitor(visitor);\n\t\t\t}\n\n\t\t\t// Visit Global Styles\n\t\t\tforeach (XshtdElement element in GlobalStyleElements.Elements)\n\t\t\t{\n\t\t\t\telement.AcceptVisitor(visitor);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XmlHighlightingThemeDefinition.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Xshtd\n{\n\tusing HL.HighlightingTheme;\n\tusing HL.Xshtd.interfaces;\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System.Collections.Generic;\n\tusing System.Diagnostics;\n\n\t/// <summary>\n\t/// Implements a highlighting theme definition object that provides all run-time\n\t/// relevant properties and methods to work with themes in the context of highlightings.\n\t/// \n\t/// <see cref=\"XhstdThemeDefinition\"/> for equivalent Xml persistance layer object.\n\t/// </summary>\n\tinternal class XmlHighlightingThemeDefinition : IHighlightingThemeDefinition\n\t{\n\t\t#region fields\n\t\tprivate Dictionary<string, SyntaxDefinition> syntaxDefDict;\n\t\tprivate Dictionary<string, GlobalStyle> _GlobalStyles;\n\t\tprivate readonly XhstdThemeDefinition _xshtd;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tpublic XmlHighlightingThemeDefinition(XhstdThemeDefinition xshtd,\n\t\t\t\t\t\t\t\t\t\t\t  IHighlightingThemeDefinitionReferenceResolver resolver)\n\t\t\t: this()\n\t\t{\n\t\t\t// Create HighlightingRuleSet instances\n\t\t\txshtd.AcceptVisitor(new RegisterNamedElementsVisitor(this));\n\n\t\t\t// Translate elements within the rulesets (resolving references and processing imports)\n\t\t\txshtd.AcceptVisitor(new TranslateElementVisitor(this, resolver));\n\n\t\t\t_xshtd = xshtd;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tprotected XmlHighlightingThemeDefinition()\n\t\t{\n\t\t\tsyntaxDefDict = new Dictionary<string, SyntaxDefinition>();\n\t\t\t_GlobalStyles = new Dictionary<string, GlobalStyle>();\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets/sets the highlighting theme definition name (eg. 'Dark', 'TrueBlue')\n\t\t/// as stated in the Name attribute of the xshtd (xs highlighting theme definition) file.\n\t\t/// </summary>\n\t\tpublic string Name { get { return _xshtd.Name; } }\n\n\t\t/// <summary>\n\t\t/// Gets all global stayles in the collection of global styles.\n\t\t/// </summary>\n\t\tpublic IEnumerable<GlobalStyle> GlobalStyles\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _GlobalStyles.Values;\n\t\t\t}\n\t\t}\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Gets the syntaxdefinition colors that should be applied for a certain highlighting (eg 'C#')\n\t\t/// within this theme (eg TrueBlue).\n\t\t/// </summary>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <returns></returns>\n\t\tpublic SyntaxDefinition GetNamedSyntaxDefinition(string name)\n\t\t{\n\t\t\tSyntaxDefinition item = null;\n\t\t\tsyntaxDefDict.TryGetValue(name, out item);\n\n\t\t\treturn item;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting color based on the name of the syntax definition\n\t\t/// and the name of the color that should be contained in it.\n\t\t/// </summary>\n\t\t/// <param name=\"synDefName\"></param>\n\t\t/// <param name=\"colorName\"></param>\n\t\t/// <returns></returns>\n\t\tpublic HighlightingColor GetNamedColor(string synDefName, string colorName)\n\t\t{\n\t\t\tvar synDef = GetNamedSyntaxDefinition(synDefName);\n\t\t\tif (synDef == null)\n\t\t\t\treturn null;\n\n\t\t\treturn synDef.ColorGet(colorName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an enumeration of all highlighting colors that are defined\n\t\t/// for this highlighting pattern (eg. C#) as part of a highlighting theme (eg 'True Blue').\n\t\t/// </summary>\n\t\tpublic IEnumerable<HighlightingColor> NamedHighlightingColors(string synDefName)\n\t\t{\n\t\t\tvar synDef = GetNamedSyntaxDefinition(synDefName);\n\t\t\tif (synDef == null)\n\t\t\t\treturn new List<HighlightingColor>();\n\n\t\t\treturn synDef.NamedHighlightingColors;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Helper method to generate a <see cref=\"HighlightingDefinitionInvalidException\"/>\n\t\t/// containing more insights (line number, coloumn) to verify the actual problem.\n\t\t/// </summary>\n\t\t/// <param name=\"element\"></param>\n\t\t/// <param name=\"message\"></param>\n\t\t/// <returns></returns>\n\t\tprivate static System.Exception Error(XshtdElement element, string message)\n\t\t{\n\t\t\tif (element.LineNumber > 0)\n\t\t\t\treturn new HighlightingDefinitionInvalidException(\n\t\t\t\t\t\"Error at line \" + element.LineNumber + \":\\n\" + message);\n\t\t\telse\n\t\t\t\treturn new HighlightingDefinitionInvalidException(message);\n\t\t}\n\t\t#endregion methods\n\n\t\t#region private classes\n\t\t/// <summary>\n\t\t/// Implements the visitor pattern based on the <see cref=\"IXshtdVisitor\"/> interface\n\t\t/// to register all elements of a given XML element tree and check whether their syntax\n\t\t/// is as expected or not.\n\t\t/// </summary>\n\t\tsealed class RegisterNamedElementsVisitor : IXshtdVisitor\n\t\t{\n\t\t\t#region fields\n\t\t\tprivate readonly XmlHighlightingThemeDefinition def;\n\t\t\t#endregion fields\n\n\t\t\t#region ctors\n\t\t\t/// <summary>\n\t\t\t/// Class constructor\n\t\t\t/// </summary>\n\t\t\tpublic RegisterNamedElementsVisitor(XmlHighlightingThemeDefinition def)\n\t\t\t\t: this()\n\t\t\t{\n\t\t\t\tthis.def = def;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Class constructor\n\t\t\t/// </summary>\n\t\t\tprivate RegisterNamedElementsVisitor()\n\t\t\t{\n\t\t\t}\n\t\t\t#endregion ctors\n\n\t\t\t#region methods\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for the <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"syntax\"></param>\n\t\t\t/// <returns></returns>\n\t\t\tpublic object VisitSyntaxDefinition(XshtdSyntaxDefinition syntax)\n\t\t\t{\n\t\t\t\tif (syntax.Name != null)\n\t\t\t\t{\n\t\t\t\t\tif (syntax.Name.Length == 0)\n\t\t\t\t\t\tthrow Error(syntax, \"Name must not be the empty string\");\n\n\t\t\t\t\tif (def.syntaxDefDict.ContainsKey(syntax.Name))\n\t\t\t\t\t\tthrow Error(syntax, \"Duplicate syntax definition name '\" + syntax.Name + \"'.\");\n\n\t\t\t\t\tdef.syntaxDefDict.Add(syntax.Name, new SyntaxDefinition());\n\t\t\t\t}\n\n\t\t\t\tsyntax.AcceptElements(this);\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for a named color (<see cref=\"XshtdColor\"/> object)\n\t\t\t/// that is contained in a <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t\t/// \n\t\t\t/// Method checks if given color name is unique and adds the color into the internal\n\t\t\t/// collection of inique colors if it is.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"syntax\"></param>\n\t\t\t/// <param name=\"color\"></param>\n\t\t\t/// <returns>Always returns null. Throws a <see cref=\"HighlightingDefinitionInvalidException\"/>\n\t\t\t/// if color name is a duplicate.</returns>\n\t\t\tpublic object VisitColor(XshtdSyntaxDefinition syntax, XshtdColor color)\n\t\t\t{\n\t\t\t\tif (color.Name != null)\n\t\t\t\t{\n\t\t\t\t\tif (color.Name.Length == 0)\n\t\t\t\t\t\tthrow Error(color, \"Name must not be the empty string\");\n\n\t\t\t\t\tif (syntax == null)\n\t\t\t\t\t\tthrow Error(syntax, \"Syntax Definition for theme must not be null\");\n\n\t\t\t\t\tSyntaxDefinition synDef;\n\t\t\t\t\tif (def.syntaxDefDict.TryGetValue(syntax.Name, out synDef) == false)\n\t\t\t\t\t\tthrow Error(syntax, \"Themed Syntax Definition does not exist '\" + syntax.Name + \"'.\");\n\n\t\t\t\t\tif (synDef.ColorGet(color.Name) == null)\n\t\t\t\t\t\tsynDef.ColorAdd(new HighlightingColor() { Name = color.Name });\n\t\t\t\t\telse\n\t\t\t\t\t\tthrow Error(color, \"Duplicate color name '\" + color.Name + \"'.\");\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for the <see cref=\"XshtdGlobalStyles\"/> object.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"globStyles\">the element to be visited.</param>\n\t\t\t/// <returns></returns>\n\t\t\tpublic object VisitGlobalStyles(XshtdGlobalStyles globStyles)\n\t\t\t{\n\t\t\t\tglobStyles.AcceptElements(this);\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tpublic object VisitGlobalStyle(XshtdGlobalStyles globStyles, XshtdGlobalStyle style)\n\t\t\t{\n\t\t\t\tif (style.TypeName != null)\n\t\t\t\t{\n\t\t\t\t\tif (style.TypeName.Length == 0)\n\t\t\t\t\t\tthrow Error(style, \"Name must not be the empty string\");\n\n\t\t\t\t\tif (globStyles == null)\n\t\t\t\t\t\tthrow Error(globStyles, \"GlobalStyles parameter must not be null\");\n\n\t\t\t\t\tGlobalStyle globDef;\n\t\t\t\t\tif (def._GlobalStyles.TryGetValue(style.TypeName, out globDef) == true)\n\t\t\t\t\t\tthrow Error(style, \"GlobalStyle definition '\" + style.TypeName + \"' has duplicates.\");\n\n\t\t\t\t\tglobDef = new GlobalStyle(style.TypeName);\n\t\t\t\t\tglobDef.backgroundcolor = style.background;\n\t\t\t\t\tglobDef.foregroundcolor = style.foreground;\n\t\t\t\t\tglobDef.bordercolor = style.bordercolor;\n\n\t\t\t\t\tglobDef.Freeze();\n\n\t\t\t\t\tdef._GlobalStyles.Add(style.TypeName, new GlobalStyle(style.TypeName));\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t#endregion methods\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Implements the visitor pattern based on the <see cref=\"IXshtdVisitor\"/> interface\n\t\t/// to convert the content of a <see cref=\"XshtdSyntaxDefinition\"/> object into a\n\t\t/// <see cref=\"XmlHighlightingThemeDefinition\"/> object.\n\t\t/// </summary>\n\t\tsealed class TranslateElementVisitor : IXshtdVisitor\n\t\t{\n\t\t\t#region fields\n\t\t\treadonly XmlHighlightingThemeDefinition def;\n\t\t\t#endregion fields\n\n\t\t\t#region ctors\n\t\t\t/// <summary>\n\t\t\t/// Class constructor.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"def\"></param>\n\t\t\t/// <param name=\"resolver\"></param>\n\t\t\tpublic TranslateElementVisitor(XmlHighlightingThemeDefinition def,\n\t\t\t\t\t\t\t\t\t\t   IHighlightingThemeDefinitionReferenceResolver resolver)\n\t\t\t{\n\t\t\t\tDebug.Assert(def != null);\n\t\t\t\tDebug.Assert(resolver != null);\n\t\t\t\tthis.def = def;\n\t\t\t}\n\t\t\t#endregion ctors\n\n\t\t\t#region methods\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for the <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"syntax\"></param>\n\t\t\t/// <returns></returns>\n\t\t\tpublic object VisitSyntaxDefinition(XshtdSyntaxDefinition syntax)\n\t\t\t{\n\t\t\t\tSyntaxDefinition c;\n\t\t\t\tif (syntax.Name != null)\n\t\t\t\t\tc = def.syntaxDefDict[syntax.Name];\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (syntax.Extensions == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\telse\n\t\t\t\t\t\tc = new SyntaxDefinition(syntax.Name);\n\t\t\t\t}\n\n\t\t\t\t// Copy extensions to highlighting theme object\n\t\t\t\tforeach (var item in syntax.Extensions)\n\t\t\t\t\tc.Extensions.Add(item);\n\n\t\t\t\tsyntax.AcceptElements(this);\n\n\t\t\t\treturn c;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for a named color (<see cref=\"XshtdColor\"/> object)\n\t\t\t/// that is contained in a <see cref=\"XshtdSyntaxDefinition\"/> object.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"syntax\"></param>\n\t\t\t/// <param name=\"color\"></param>\n\t\t\t/// <returns></returns>\n\t\t\tpublic object VisitColor(XshtdSyntaxDefinition syntax, XshtdColor color)\n\t\t\t{\n\t\t\t\tif (color.Name == null)\n\t\t\t\t\tthrow Error(color, \"Name must not be null\");\n\n\t\t\t\tif (color.Name.Length == 0)\n\t\t\t\t\tthrow Error(color, \"Name must not be the empty string\");\n\n\t\t\t\tif (syntax == null)\n\t\t\t\t\tthrow Error(syntax, \"Syntax Definition for theme must not be null\");\n\n\t\t\t\tSyntaxDefinition synDef;\n\t\t\t\tHighlightingColor highColor;\n\t\t\t\tif (def.syntaxDefDict.TryGetValue(syntax.Name, out synDef) == false)\n\t\t\t\t\tthrow Error(syntax, \"Themed Syntax Definition does not exist '\" + syntax.Name + \"'.\");\n\n\t\t\t\thighColor = synDef.ColorGet(color.Name);\n\t\t\t\tif (highColor == null)\n\t\t\t\t{\n\t\t\t\t\thighColor = new HighlightingColor() { Name = color.Name };\n\t\t\t\t\tsynDef.ColorAdd(highColor);\n\t\t\t\t}\n\n\t\t\t\thighColor.Foreground = color.Foreground;\n\t\t\t\thighColor.Background = color.Background;\n\t\t\t\thighColor.Underline = color.Underline;\n\t\t\t\thighColor.FontStyle = color.FontStyle;\n\t\t\t\thighColor.FontWeight = color.FontWeight;\n\n\t\t\t\treturn highColor;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Implements the visitor for the <see cref=\"XshtdGlobalStyles\"/> object.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"globStyles\">the element to be visited.</param>\n\t\t\t/// <returns></returns>\n\t\t\tpublic object VisitGlobalStyles(XshtdGlobalStyles globStyles)\n\t\t\t{\n\t\t\t\tglobStyles.AcceptElements(this);\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tpublic object VisitGlobalStyle(XshtdGlobalStyles globStyles, XshtdGlobalStyle style)\n\t\t\t{\n\t\t\t\tif (style.TypeName == null)\n\t\t\t\t\tthrow Error(style, \"Name must not be null\");\n\n\t\t\t\tif (style.TypeName.Length == 0)\n\t\t\t\t\tthrow Error(style, \"Name must not be the empty string\");\n\n\t\t\t\tif (globStyles == null)\n\t\t\t\t\tthrow Error(globStyles, \"GlobalStyles parameter must not be null\");\n\n\t\t\t\tGlobalStyle globDef;\n\t\t\t\tif (def._GlobalStyles.TryGetValue(style.TypeName, out globDef) == false)\n\t\t\t\t\tthrow Error(style, \"Style definition '\" + style.TypeName + \"' does not exist in collection of GlobalStyles.\");\n\n\t\t\t\tglobDef.backgroundcolor = style.background;\n\t\t\t\tglobDef.foregroundcolor = style.foreground;\n\t\t\t\tglobDef.bordercolor = style.bordercolor;\n\t\t\t\tglobDef.Freeze();\n\n\t\t\t\treturn globDef;\n\t\t\t}\n\t\t\t#endregion methods\n\t\t}\n\t\t#endregion private classes\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XshtdColor.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd\n{\n\tusing ICSharpCode.AvalonEdit.Highlighting;\n\tusing System;\n\tusing System.Runtime.Serialization;\n\tusing System.Security.Permissions;\n\tusing System.Windows;\n\n\t/// <summary>\n\t/// A color in an Xshd file.\n\t/// </summary>\n\t[Serializable]\n\tpublic class XshtdColor : XshtdElement, ISerializable\n\t{\n\t\t#region fields\n\t\tprivate readonly XshtdSyntaxDefinition _syntax;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Creates a new XshdColor instance that is part of a <see cref=\"XshtdSyntaxDefinition\"/>.\n\t\t/// </summary>\n\t\tpublic XshtdColor(XshtdSyntaxDefinition syntax)\n\t\t{\n\t\t\t_syntax = syntax;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Deserializes an XshdColor.\n\t\t/// </summary>\n\t\tprotected XshtdColor(SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tif (info == null)\n\t\t\t\tthrow new ArgumentNullException(\"info\");\n\n\t\t\tthis.Name = info.GetString(\"Name\");\n\t\t\tthis.Foreground = (HighlightingBrush)info.GetValue(\"Foreground\", typeof(HighlightingBrush));\n\t\t\tthis.Background = (HighlightingBrush)info.GetValue(\"Background\", typeof(HighlightingBrush));\n\n\t\t\tif (info.GetBoolean(\"HasWeight\"))\n\t\t\t\tthis.FontWeight = System.Windows.FontWeight.FromOpenTypeWeight(info.GetInt32(\"Weight\"));\n\n\t\t\tif (info.GetBoolean(\"HasStyle\"))\n\t\t\t\tthis.FontStyle = (FontStyle?)new FontStyleConverter().ConvertFromInvariantString(info.GetString(\"Style\"));\n\n\t\t\tthis.ExampleText = info.GetString(\"ExampleText\");\n\n\t\t\tif (info.GetBoolean(\"HasUnderline\"))\n\t\t\t\tthis.Underline = info.GetBoolean(\"Underline\");\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Gets/sets the name.\n\t\t/// </summary>\n\t\tpublic string Name { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the foreground brush.\n\t\t/// </summary>\n\t\tpublic HighlightingBrush Foreground { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the background brush.\n\t\t/// </summary>\n\t\tpublic HighlightingBrush Background { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the font weight.\n\t\t/// </summary>\n\t\tpublic FontWeight? FontWeight { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the underline flag\n\t\t/// </summary>\n\t\tpublic bool? Underline { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the font style.\n\t\t/// </summary>\n\t\tpublic FontStyle? FontStyle { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/Sets the example text that demonstrates where the color is used.\n\t\t/// </summary>\n\t\tpublic string ExampleText { get; set; }\n\t\t#endregion properties\n\n\t\t/// <summary>\n\t\t/// Serializes this XshdColor instance.\n\t\t/// </summary>\n#if DOTNET4\n\t\t[System.Security.SecurityCritical]\n#else\n\t\t[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]\n#endif\n\t\tpublic virtual void GetObjectData(SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tif (info == null)\n\t\t\t\tthrow new ArgumentNullException(\"info\");\n\n\t\t\tinfo.AddValue(\"Name\", this.Name);\n\t\t\tinfo.AddValue(\"Foreground\", this.Foreground);\n\t\t\tinfo.AddValue(\"Background\", this.Background);\n\t\t\tinfo.AddValue(\"HasUnderline\", this.Underline.HasValue);\n\n\t\t\tif (this.Underline.HasValue)\n\t\t\t\tinfo.AddValue(\"Underline\", this.Underline.Value);\n\n\t\t\tinfo.AddValue(\"HasWeight\", this.FontWeight.HasValue);\n\n\t\t\tif (this.FontWeight.HasValue)\n\t\t\t\tinfo.AddValue(\"Weight\", this.FontWeight.Value.ToOpenTypeWeight());\n\n\t\t\tinfo.AddValue(\"HasStyle\", this.FontStyle.HasValue);\n\n\t\t\tif (this.FontStyle.HasValue)\n\t\t\t\tinfo.AddValue(\"Style\", this.FontStyle.Value.ToString());\n\n\t\t\tinfo.AddValue(\"ExampleText\", this.ExampleText);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to this element.\n\t\t/// </summary>\n\t\t/// <param name=\"visitor\"></param>\n\t\t/// <returns></returns>\n\t\tpublic override object AcceptVisitor(IXshtdVisitor visitor)\n\t\t{\n\t\t\treturn visitor.VisitColor(_syntax, this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XshtdElement.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd\n{\n\tusing System;\n\n\t/// <summary>\n\t/// An element in a XSHD rule set.\n\t/// </summary>\n\t[Serializable]\n\tpublic abstract class XshtdElement\n\t{\n\t\t/// <summary>\n\t\t/// Gets the line number in the .xshd file.\n\t\t/// </summary>\n\t\tpublic int LineNumber { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets the column number in the .xshd file.\n\t\t/// </summary>\n\t\tpublic int ColumnNumber { get; set; }\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to this element.\n\t\t/// </summary>\n\t\tpublic abstract object AcceptVisitor(IXshtdVisitor visitor);\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XshtdGlobalStyle.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Xshtd\n{\n\tusing System;\n\tusing System.Windows.Media;\n\n\t/// <summary>\n\t/// An element contained in a &lt;GlobalStyles&gt; element.\n\t/// </summary>\n\t[Serializable]\n\tpublic class XshtdGlobalStyle : XshtdElement\n\t{\n\t\t#region fields\n\t\tprivate readonly XshtdGlobalStyles _styles;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Creates a new XshtdSyntaxDefinition object.\n\t\t/// </summary>\n\t\t/// <param name=\"styles\">Parent collection of styles in which this style occurs.</param>\n\t\tpublic XshtdGlobalStyle(XshtdGlobalStyles styles)\n\t\t\t: this()\n\t\t{\n\t\t\t_styles = styles;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Hidden class constructor\n\t\t/// </summary>\n\t\tprotected XshtdGlobalStyle()\n\t\t{\n\t\t}\n\t\t#endregion ctors\n\n\t\t/// <summary>\n\t\t/// Gets/sets the style definition name\n\t\t/// </summary>\n\t\tpublic string TypeName { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the style definition name\n\t\t/// </summary>\n\t\tpublic Color? foreground { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the style definition name\n\t\t/// </summary>\n\t\tpublic Color? background { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets/sets the style definition name\n\t\t/// </summary>\n\t\tpublic Color? bordercolor { get; set; }\n\n\t\t#region methods\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to this element.\n\t\t/// </summary>\n\t\t/// <param name=\"visitor\"></param>\n\t\t/// <returns></returns>\n\t\tpublic override object AcceptVisitor(IXshtdVisitor visitor)\n\t\t{\n\t\t\treturn visitor.VisitGlobalStyle(_styles, this);\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XshtdGlobalStyles.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Xshtd\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing ICSharpCode.AvalonEdit.Utils;\n\n\t/// <summary>\n\t/// A &lt;GlobalStyles&gt; element.\n\t/// </summary>\n\t[Serializable]\n\tpublic class XshtdGlobalStyles : XshtdElement\n\t{\n\t\t/// <summary>\n\t\t/// Creates a new XshtdSyntaxDefinition object.\n\t\t/// </summary>\n\t\tpublic XshtdGlobalStyles()\n\t\t{\n\t\t\tthis.Elements = new NullSafeCollection<XshtdElement>();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the collection of elements.\n\t\t/// </summary>\n\t\tpublic IList<XshtdElement> Elements { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to all elements.\n\t\t/// </summary>\n\t\tpublic void AcceptElements(IXshtdVisitor visitor)\n\t\t{\n\t\t\tforeach (XshtdElement element in Elements)\n\t\t\t{\n\t\t\t\telement.AcceptVisitor(visitor);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to this element.\n\t\t/// </summary>\n\t\t/// <param name=\"visitor\"></param>\n\t\t/// <returns></returns>\n\t\tpublic override object AcceptVisitor(IXshtdVisitor visitor)\n\t\t{\n\t\t\treturn visitor.VisitGlobalStyles(this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/XshtdSyntaxDefinition.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing ICSharpCode.AvalonEdit.Utils;\n\n\t/// <summary>\n\t/// A &lt;SyntaxDefinition&gt; Xml element.\n\t/// </summary>\n\t[Serializable]\n\tpublic class XshtdSyntaxDefinition : XshtdElement\n\t{\n\t\t/// <summary>\n\t\t/// Creates a new XshtdSyntaxDefinition object.\n\t\t/// </summary>\n\t\tpublic XshtdSyntaxDefinition()\n\t\t{\n\t\t\tthis.Elements = new NullSafeCollection<XshtdElement>();\n\t\t\tthis.Extensions = new NullSafeCollection<string>();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets/sets the definition name\n\t\t/// </summary>\n\t\tpublic string Name { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets the associated extensions.\n\t\t/// </summary>\n\t\tpublic IList<string> Extensions { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Gets the collection of elements.\n\t\t/// </summary>\n\t\tpublic IList<XshtdElement> Elements { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to all elements.\n\t\t/// </summary>\n\t\tpublic void AcceptElements(IXshtdVisitor visitor)\n\t\t{\n\t\t\tforeach (XshtdElement element in Elements)\n\t\t\t{\n\t\t\t\telement.AcceptVisitor(visitor);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Applies the visitor to this element.\n\t\t/// </summary>\n\t\t/// <param name=\"visitor\"></param>\n\t\t/// <returns></returns>\n\t\tpublic override object AcceptVisitor(IXshtdVisitor visitor)\n\t\t{\n\t\t\treturn visitor.VisitSyntaxDefinition(this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/interfaces/IFreezable.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\n// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n// to whom the Software is furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n// DEALINGS IN THE SOFTWARE.\nnamespace HL.Xshtd.interfaces\n{\n\tusing System;\n\tusing System.Collections.Generic;\n\tusing System.Collections.ObjectModel;\n\tusing System.Linq;\n\n\t/// <summary>\n\t/// Defines a freezable base for all objects that should be freezable.\n\t/// Frozen instances are immutable and thus thread-safe.\n\t/// </summary>\n\tinterface IFreezable\n\t{\n\t\t/// <summary>\n\t\t/// Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe.\n\t\t/// </summary>\n\t\tbool IsFrozen { get; }\n\n\t\t/// <summary>\n\t\t/// Freezes this instance.\n\t\t/// </summary>\n\t\tvoid Freeze();\n\t}\n\n\tstatic class FreezableHelper\n\t{\n\t\tpublic static void ThrowIfFrozen(IFreezable freezable)\n\t\t{\n\t\t\tif (freezable.IsFrozen)\n\t\t\t\tthrow new InvalidOperationException(\"Cannot mutate frozen \" + freezable.GetType().Name);\n\t\t}\n\n\t\tpublic static IList<T> FreezeListAndElements<T>(IList<T> list)\n\t\t{\n\t\t\tif (list != null)\n\t\t\t{\n\t\t\t\tforeach (T item in list)\n\t\t\t\t\tFreeze(item);\n\t\t\t}\n\n\t\t\treturn FreezeList(list);\n\t\t}\n\n\t\tpublic static IList<T> FreezeList<T>(IList<T> list)\n\t\t{\n\t\t\tif (list == null || list.Count == 0)\n\t\t\t\treturn new T[0];\n\n\t\t\tif (list.IsReadOnly)\n\t\t\t{\n\t\t\t\t// If the list is already read-only, return it directly.\n\t\t\t\t// This is important, otherwise we might undo the effects of interning.\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn new ReadOnlyCollection<T>(list.ToArray());\n\t\t\t}\n\t\t}\n\n\t\tpublic static void Freeze(object item)\n\t\t{\n\t\t\tIFreezable f = item as IFreezable;\n\n\t\t\tif (f != null)\n\t\t\t\tf.Freeze();\n\t\t}\n\n\t\tpublic static T FreezeAndReturn<T>(T item) where T : IFreezable\n\t\t{\n\t\t\titem.Freeze();\n\n\t\t\treturn item;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If the item is not frozen, this method creates and returns a frozen clone.\n\t\t/// If the item is already frozen, it is returned without creating a clone.\n\t\t/// </summary>\n\t\tpublic static T GetFrozenClone<T>(T item) where T : IFreezable, ICloneable\n\t\t{\n\t\t\tif (!item.IsFrozen)\n\t\t\t{\n\t\t\t\titem = (T)item.Clone();\n\t\t\t\titem.Freeze();\n\t\t\t}\n\n\t\t\treturn item;\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// Implements a freezable base for all objects that should be freezable.\n\t/// Frozen instances are immutable and thus thread-safe.\n\t/// </summary>\n\t[Serializable]\n\tpublic abstract class AbstractFreezable : IFreezable\n\t{\n\t\tprivate bool isFrozen;\n\n\t\t/// <summary>\n\t\t/// Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe.\n\t\t/// </summary>\n\t\tpublic bool IsFrozen\n\t\t{\n\t\t\tget { return isFrozen; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Freezes this instance.\n\t\t/// </summary>\n\t\tpublic void Freeze()\n\t\t{\n\t\t\tif (!isFrozen)\n\t\t\t{\n\t\t\t\tFreezeInternal();\n\t\t\t\tisFrozen = true;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Provides a way of freezing additional elements defined in inheriting\n\t\t/// classes through the invocation of the <see cref=\"Freeze\"/> method.\n\t\t/// </summary>\n\t\tprotected virtual void FreezeInternal()\n\t\t{\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/HL/Xshtd/interfaces/IHighlightingDefinitionReferenceResolver.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Xshtd.interfaces\n{\n\tusing HL.HighlightingTheme;\n\n\t/// <summary>\n\t/// Defines a resolver interface that can find highlighting theme definitions\n\t/// based on a highlighting name (searches within the current highlighting theme)\n\t/// or based on a highlighting name and name of highlighting theme that should\n\t/// contain the highlighting definition.\n\t/// </summary>\n\tpublic interface IHighlightingThemeDefinitionReferenceResolver\n\t{\n\t\t/// <summary>\n\t\t/// Gets a highlighting definition within the current highlighting theme\n\t\t/// by name, or null.\n\t\t/// </summary>\n\t\t/// <param name=\"highlightingName\"></param>\n\t\t/// <returns></returns>\n\t\tSyntaxDefinition GetThemeDefinition(string highlightingName);\n\n\t\t/// <summary>\n\t\t/// Gets a highlighting theme definition by name from a given highlighting\n\t\t/// theme obtained via <paramref name=\"hlThemeName\"/> or null.\n\t\t/// </summary>\n\t\t/// <param name=\"hlThemeName\"></param>\n\t\t/// <param name=\"highlightingName\"></param>\n\t\tSyntaxDefinition GetThemeDefinition(string hlThemeName,\n\t\t\t\t\t\t\t\t\t\t\tstring highlightingName);\n\t}\n}\n"
  },
  {
    "path": "src/HL/Xshtd/interfaces/IHighlightingThemeDefinition.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace HL.Xshtd.interfaces\n{\n\tusing HL.HighlightingTheme;\n\tusing System.Collections.Generic;\n\n\t/// <summary>\n\t/// A highlighting definition.\n\t/// </summary>\n\tpublic interface IHighlightingThemeDefinition\n\t{\n\t\t/// <summary>\n\t\t/// Gets the name of the highlighting theme definition.\n\t\t/// </summary>\n\t\tstring Name { get; }\n\n\t\t/// <summary>\n\t\t/// Gets a named highlighting color.\n\t\t/// </summary>\n\t\t/// <returns>The highlighting color, or null if it is not found.</returns>\n\t\t////HighlightingColor GetNamedColor(string name);\n\t\tSyntaxDefinition GetNamedSyntaxDefinition(string name);\n\n\t\t/// <summary>\n\t\t/// Gets all global stayles in the collection of global styles.\n\t\t/// </summary>\n\t\tIEnumerable<GlobalStyle> GlobalStyles { get; }\n\t}\n}\n"
  },
  {
    "path": "src/StartMenuManager.Builder/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "src/StartMenuManager.Builder/Program.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.IO;\nusing IWshRuntimeLibrary;\nusing Newtonsoft.Json;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\n\nnamespace StartMenuManager.Builder\n{\n    public class Program\n    {\n        private static string jsonFilePath;\n        private static SettingsConfig settings;\n\n        public static void Main(string[] args)\n        {\n            string settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @\"..\\settings.json\");\n            if (System.IO.File.Exists(settingsPath))\n            {\n                StreamReader reader = new StreamReader(settingsPath);\n                string contents = reader.ReadToEnd();\n                reader.Close();\n                settings = JsonConvert.DeserializeObject<SettingsConfig>(contents);\n            }\n            else\n            {\n                settings = SettingsConfig.GetDefaultSettings();\n            }\n\n            if (!GetJsonFilePath(args))\n            {\n                if (!CouldFindJsonFileInDirectory())\n                {\n                    Console.WriteLine(\"Error: Could not find 'shortcuts.json'\");\n                    Console.WriteLine(\"Please provide path to 'shortcuts.json' as command line argument.\");\n                    return;\n                }\n            }\n\n            string fileContents = GetFileContents();\n            Config config = Serializer.DeserializeConfig(fileContents);\n            if (config == null)\n            {\n                Console.WriteLine(\"Error: Not valid JSON!\");\n                return;\n            }\n\n            ValidationError err = config.IsValid();\n            if (err != null)\n            {\n                Console.WriteLine(\"Error: One or more shortcuts within JSON file are not valid!\");\n                Console.WriteLine(\"More Details:\");\n                Console.WriteLine($\"Shortcut \\\"{err.Shortcut.Name}\\\":{err.Error}\");\n                return;\n            }\n\n            if (!Directory.Exists(settings.StartMenuFolder))\n            {\n                Console.WriteLine(\"Error: Could not find Start Menu Folder\");\n                return;\n            }\n\n            if (!Directory.Exists(settings.GetShortcutsFilePath()))\n            {\n                Directory.CreateDirectory(settings.GetShortcutsFilePath());\n            }\n            else\n            {\n                ClearDirectoryExceptShortcutsJson(settings.GetShortcutsFilePath());\n            }\n\n            foreach (Shortcut shortcut in config.Shortcuts)\n            {\n                BuildShortcutFile(shortcut);\n            }\n\n            Console.WriteLine(\"All done!\");\n        }\n\n        public static void BuildShortcutFile(Shortcut shortcut)\n        {\n            // Build text file\n            string shortcutJson = Serializer.SerializeShortcut(shortcut);\n            string shortcutTextFilePath = settings.GetShortcutsFilePath($\"{shortcut.Name}.txt\");\n            StreamWriter writer = new StreamWriter(shortcutTextFilePath, false);\n            writer.Write(shortcutJson);\n            writer.Close();\n\n            // Copy icon\n            string iconFilePath = settings.GetShortcutsFilePath($\"{shortcut.Name}.ico\");\n            bool gotIcon = CopyIcon(shortcut.IconPath, iconFilePath);\n\n            // Create shortcut\n            string runnerPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @\"..\\Runner\\StartMenuManager.Runner.exe\");\n            string shortcutFilePath = settings.GetShortcutsFilePath($\"{shortcut.Name}.lnk\");\n            WshShell shell = new WshShell();\n            IWshShortcut wshShortcut = (IWshShortcut)shell.CreateShortcut(shortcutFilePath);\n            if (gotIcon)\n            {\n                wshShortcut.IconLocation = iconFilePath;\n            }\n\n            wshShortcut.TargetPath = $\"{runnerPath}\";\n            wshShortcut.Arguments = $\"\\\"{shortcutTextFilePath}\\\"\";\n            wshShortcut.Save();\n        }\n\n        public static bool CopyIcon(string iconPath, string newIconPath)\n        {\n            if (string.IsNullOrEmpty(iconPath))\n            {\n                return false;\n            }\n\n            if (Path.GetExtension(iconPath) != \".ico\")\n            {\n                return false;\n            }\n\n            if (!System.IO.File.Exists(iconPath))\n            {\n                return false;\n            }\n\n            System.IO.File.Copy(iconPath, newIconPath);\n            return true;\n        }\n\n        public static bool GetJsonFilePath(string[] args)\n        {\n            if (args != null)\n            {\n                if (args.Length > 0)\n                {\n                    string possiblePath = args[0];\n                    if (System.IO.File.Exists(possiblePath))\n                    {\n                        jsonFilePath = possiblePath;\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        public static bool CouldFindJsonFileInDirectory()\n        {\n            string possiblePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"shortcuts.json\");\n            if (System.IO.File.Exists(possiblePath))\n            {\n                jsonFilePath = possiblePath;\n                return true;\n            }\n\n            return false;\n        }\n\n        public static string GetFileContents()\n        {\n            StreamReader reader = new StreamReader(jsonFilePath);\n            string contents = reader.ReadToEnd();\n            reader.Close();\n            return contents;\n        }\n\n        public static void ClearDirectoryExceptShortcutsJson(string path)\n        {\n            System.IO.DirectoryInfo di = new DirectoryInfo(path);\n\n            foreach (FileInfo file in di.GetFiles())\n            {\n                if (file.Name == \"shortcuts.json\")\n                {\n                    continue;\n                }\n\n                file.Delete();\n            }\n\n            foreach (DirectoryInfo dir in di.GetDirectories())\n            {\n                dir.Delete(true);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Builder/Properties/AssemblyInfo.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"StartMenuManager.Builder\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"StartMenuManager.Builder\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"72692f58-2690-4677-a87b-a686bcaa6ff2\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/StartMenuManager.Builder/StartMenuManager.Builder.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{72692F58-2690-4677-A87B-A686BCAA6FF2}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>StartMenuManager.Builder</RootNamespace>\n    <AssemblyName>StartMenuManager.Builder</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>icon-256.ico</ApplicationIcon>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.6\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4.6 %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\StartMenuManager.Core\\StartMenuManager.Core.csproj\">\n      <Project>{f027fcb2-cc37-4d24-a2ab-072e19b87a18}</Project>\n      <Name>StartMenuManager.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <COMReference Include=\"IWshRuntimeLibrary\">\n      <Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>\n      <VersionMajor>1</VersionMajor>\n      <VersionMinor>0</VersionMinor>\n      <Lcid>0</Lcid>\n      <WrapperTool>tlbimp</WrapperTool>\n      <Isolated>False</Isolated>\n      <EmbedInteropTypes>True</EmbedInteropTypes>\n    </COMReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"icon-256.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>12.0.3</Version>\n    </PackageReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Action.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing JsonSubTypes;\nusing Newtonsoft.Json;\nusing StartMenuManager.Core.DataStructures.Actions;\n\nnamespace StartMenuManager.Core.DataStructures\n{\n    /// <summary>\n    /// An Action for use within a Shortcut.\n    /// </summary>\n    [JsonConverter(typeof(JsonSubtypes), \"Type\")]\n    [JsonSubtypes.KnownSubType(typeof(CommandAction), \"command\")]\n    [JsonSubtypes.KnownSubType(typeof(FileAction), \"file\")]\n    [JsonSubtypes.KnownSubType(typeof(FolderAction), \"folder\")]\n    [JsonSubtypes.KnownSubType(typeof(SoftwareAction), \"software\")]\n    [JsonSubtypes.KnownSubType(typeof(WebsiteAction), \"website\")]\n    public class Action\n    {\n        public string Type { get; set; }\n\n        public virtual ValidationError IsValid()\n        {\n            return null;\n        }\n\n        public virtual Action Duplicate()\n        {\n            throw new NotImplementedException(\"Action base class cannot be duplicated.\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Actions/CommandAction.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nnamespace StartMenuManager.Core.DataStructures.Actions\n{\n    /// <summary>\n    /// Action which executes a command using Command Prompt.\n    /// </summary>\n    public class CommandAction : Action\n    {\n        public CommandAction(string command, bool keepOpen)\n        {\n            Type = \"command\";\n            Command = command;\n            KeepOpen = keepOpen;\n        }\n\n        public CommandAction()\n        {\n            Type = \"command\";\n            Command = string.Empty;\n            KeepOpen = true;\n        }\n\n        public string Command { get; set; }\n\n        public bool KeepOpen { get; set; }\n\n        public override ValidationError IsValid()\n        {\n            if (string.IsNullOrEmpty(Command))\n            {\n                return new ValidationError(\"Command cannot be empty!\", this);\n            }\n\n            return null;\n        }\n\n        public override Action Duplicate()\n        {\n            return new CommandAction(Command, KeepOpen);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Actions/FileAction.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\n\nnamespace StartMenuManager.Core.DataStructures.Actions\n{\n    /// <summary>\n    /// Action which opens a file with the default software for that file type.\n    /// </summary>\n    public class FileAction : Action\n    {\n        public FileAction(string path)\n        {\n            Type = \"file\";\n            Path = path;\n        }\n\n        public FileAction()\n        {\n            Type = \"file\";\n            Path = string.Empty;\n        }\n\n        public string Path { get; set; }\n\n        public override ValidationError IsValid()\n        {\n            if (string.IsNullOrEmpty(Path))\n            {\n                return new ValidationError(\"File Path cannot be empty!\", this);\n            }\n\n            if (IsFolder(Path))\n            {\n                return new ValidationError(\"Need File path, not folder path!\", this);\n            }\n\n            if (!File.Exists(Path))\n            {\n                return new ValidationError(\"File Path does not exist!\", this);\n            }\n\n            return null;\n        }\n\n        private static bool IsFolder(string path)\n        {\n            try\n            {\n                FileAttributes attr = File.GetAttributes(path);\n                if ((attr & FileAttributes.Directory) == FileAttributes.Directory)\n                {\n                    return true;\n                }\n            }\n            catch\n            {\n                return false;\n            }\n\n            return false;\n        }\n\n        public override Action Duplicate()\n        {\n            return new FileAction(Path);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Actions/FolderAction.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\n\nnamespace StartMenuManager.Core.DataStructures.Actions\n{\n    /// <summary>\n    /// Action which opens a file with the default software for that file type.\n    /// </summary>\n    public class FolderAction : Action\n    {\n        public FolderAction(string path)\n        {\n            Type = \"folder\";\n            Path = path;\n        }\n\n        public FolderAction()\n        {\n            Type = \"folder\";\n            Path = string.Empty;\n        }\n\n        public string Path { get; set; }\n\n        public override ValidationError IsValid()\n        {\n            if (string.IsNullOrEmpty(Path))\n            {\n                return new ValidationError(\"Folder Path cannot be empty!\", this);\n            }\n\n            if (IsFile(Path))\n            {\n                return new ValidationError(\"Need Folder path, not file path!\", this);\n            }\n\n            if (!Directory.Exists(Path))\n            {\n                return new ValidationError(\"Folder does not exist!\", this);\n            }\n\n            return null;\n        }\n\n        private static bool IsFile(string path)\n        {\n            if (System.IO.Path.HasExtension(path))\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public override Action Duplicate()\n        {\n            return new FolderAction(Path);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Actions/SoftwareAction.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\n\nnamespace StartMenuManager.Core.DataStructures.Actions\n{\n    /// <summary>\n    /// Action which opens software, usually a .exe file.\n    /// </summary>\n    public class SoftwareAction : Action\n    {\n        public SoftwareAction(string path)\n        {\n            Type = \"software\";\n            Path = path;\n        }\n\n        public SoftwareAction()\n        {\n            Type = \"software\";\n            Path = string.Empty;\n        }\n\n        public string Path { get; set; }\n\n        public override ValidationError IsValid()\n        {\n            if (string.IsNullOrEmpty(Path))\n            {\n                return new ValidationError(\"Software Path cannot be empty!\", this);\n            }\n\n            if (!File.Exists(Path))\n            {\n                return new ValidationError(\"Software Start File does not exist!\", this);\n            }\n\n            return null;\n        }\n\n        public override Action Duplicate()\n        {\n            return new SoftwareAction(Path);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Actions/WebsiteAction.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\n\nnamespace StartMenuManager.Core.DataStructures.Actions\n{\n    /// <summary>\n    /// Action which opens a URL within a specified web browser.\n    /// </summary>\n    public class WebsiteAction : Action\n    {\n        public WebsiteAction(string url)\n        {\n            Type = \"website\";\n            Url = url;\n        }\n\n        public WebsiteAction()\n        {\n            Type = \"website\";\n            Url = \"https://google.com\";\n        }\n\n        public string Url { get; set; }\n\n        public override ValidationError IsValid()\n        {\n            Uri uriResult;\n            if (!Uri.TryCreate(Url, UriKind.Absolute, out uriResult))\n            {\n                return new ValidationError(\"Url not valid!\", this);\n            }\n\n            if (uriResult.Scheme != Uri.UriSchemeHttp && uriResult.Scheme != Uri.UriSchemeHttps)\n            {\n                return new ValidationError(\"Url should start with 'http'!\", this);\n            }\n\n            return null;\n        }\n\n        public override Action Duplicate()\n        {\n            return new WebsiteAction(Url);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Config.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace StartMenuManager.Core.DataStructures\n{\n    /// <summary>\n    /// A full shortcut configuration (equivalent to the JSON file)\n    /// </summary>\n    public class Config\n    {\n        public Config(List<Shortcut> shortcuts)\n        {\n            Shortcuts = shortcuts;\n        }\n\n        public Config()\n        {\n            Shortcuts = new List<Shortcut>();\n        }\n\n        public List<Shortcut> Shortcuts { get; set; }\n\n        public ValidationError IsValid()\n        {\n            List<string> names = new List<string>();\n            foreach (Shortcut shortcut in Shortcuts)\n            {\n                ValidationError shortcutErr = shortcut.IsValid();\n                if (shortcutErr != null)\n                {\n                    return shortcutErr;\n                }\n\n                if (names.Contains(shortcut.Name))\n                {\n                    return new ValidationError(\"Duplicate Shortcut Name Found!\", shortcut);\n                }\n\n                names.Add(shortcut.Name);\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/SettingsConfig.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\n\nnamespace StartMenuManager.Core.DataStructures\n{\n    public class SettingsConfig\n    {\n        public string StartMenuFolder { get; set; }\n\n        public string SmmShortcutsFolder { get; set; }\n\n        public bool DisplayWelcomeBox { get; set; }\n\n        public string Theme { get; set; }\n\n        public bool JsonLineNumbers { get; set; }\n\n        public bool YesNoDialogsEnabled { get; set; }\n\n        public int NumberOfUsesUntilMessage { get; set; }\n\n        public string GetShortcutsFilePath(string fileName)\n        {\n            return Path.Combine(StartMenuFolder, SmmShortcutsFolder, fileName);\n        }\n\n        public string GetShortcutsFilePath()\n        {\n            return Path.Combine(StartMenuFolder, SmmShortcutsFolder);\n        }\n\n        public static SettingsConfig GetDefaultSettings()\n        {\n            SettingsConfig settings = new SettingsConfig();\n            settings.StartMenuFolder = @\"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\";\n            settings.SmmShortcutsFolder = \"SmmShortcuts\";\n            settings.DisplayWelcomeBox = true;\n            settings.Theme = \"default\";\n            settings.JsonLineNumbers = false;\n            settings.YesNoDialogsEnabled = true;\n            settings.NumberOfUsesUntilMessage = 4;\n            return settings;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/Shortcut.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing StartMenuManager.Core.DataStructures.Actions;\n\nnamespace StartMenuManager.Core.DataStructures\n{\n    /// <summary>\n    /// A Shortcut for use within a Config\n    /// </summary>\n    public class Shortcut\n    {\n        public Shortcut(string name, string iconPath, List<Action> actions)\n        {\n            Name = name;\n            IconPath = iconPath;\n            Actions = actions;\n        }\n\n        public Shortcut(string name, string iconPath)\n        {\n            Name = name;\n            IconPath = iconPath;\n            Actions = new List<Action>();\n        }\n\n        public Shortcut()\n        {\n            Actions = new List<Action>();\n        }\n\n        public string IconPath { get; set; }\n\n        public string Name { get; set; }\n\n        public List<Action> Actions { get; set; }\n\n        public ValidationError IsValid()\n        {\n            if (string.IsNullOrEmpty(Name))\n            {\n                return new ValidationError(\"Shortcut Name Cannot be Empty.\", this);\n            }\n\n            foreach (Action action in Actions)\n            {\n                switch (action.Type)\n                {\n                    case \"command\":\n                        CommandAction a1 = action as CommandAction;\n                        ValidationError a1Err = a1.IsValid();\n                        if (a1Err != null)\n                        {\n                            a1Err.Shortcut = this;\n                            return a1Err;\n                        }\n\n                        break;\n                    case \"file\":\n                        FileAction a2 = action as FileAction;\n                        ValidationError a2Err = a2.IsValid();\n                        if (a2Err != null)\n                        {\n                            a2Err.Shortcut = this;\n                            return a2Err;\n                        }\n\n                        break;\n                    case \"folder\":\n                        FolderAction a3 = action as FolderAction;\n                        ValidationError a3Err = a3.IsValid();\n                        if (a3Err != null)\n                        {\n                            a3Err.Shortcut = this;\n                            return a3Err;\n                        }\n\n                        break;\n                    case \"software\":\n                        SoftwareAction a4 = action as SoftwareAction;\n                        ValidationError a4Err = a4.IsValid();\n                        if (a4Err != null)\n                        {\n                            a4Err.Shortcut = this;\n                            return a4Err;\n                        }\n\n                        break;\n                    case \"website\":\n                        WebsiteAction a5 = action as WebsiteAction;\n                        ValidationError a5Err = a5.IsValid();\n                        if (a5Err != null)\n                        {\n                            a5Err.Shortcut = this;\n                            return a5Err;\n                        }\n\n                        break;\n                }\n            }\n\n            return null;\n        }\n\n        public Shortcut Duplicate()\n        {\n            List<Action> duplicateActions = new List<Action>();\n            foreach (Action action in Actions)\n            {\n                duplicateActions.Add(action.Duplicate());\n            }\n\n            return new Shortcut(Name, IconPath, duplicateActions);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/DataStructures/ValidationError.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nnamespace StartMenuManager.Core.DataStructures\n{\n    public class ValidationError\n    {\n        public ValidationError(string error, Action action)\n        {\n            Error = error;\n            Action = action;\n        }\n\n        public ValidationError(string error, Shortcut shortcut)\n        {\n            Error = error;\n            Shortcut = shortcut;\n        }\n\n        public Action Action { get; set; }\n\n        public Shortcut Shortcut { get; set; }\n\n        public string Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/Serialization/Serializer.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\nusing StartMenuManager.Core.DataStructures;\n\nnamespace StartMenuManager.Core.Serialization\n{\n    /// <summary>\n    /// Serialization methods for Configs\n    /// </summary>\n    public static class Serializer\n    {\n        public static string SerializeConfig(Config config)\n        {\n            return JsonConvert.SerializeObject(config, Formatting.Indented);\n        }\n\n        public static Config DeserializeConfig(string configText)\n        {\n            return JsonConvert.DeserializeObject<Config>(configText);\n        }\n\n        public static string SerializeShortcut(Shortcut shorcut)\n        {\n            return JsonConvert.SerializeObject(shorcut, Formatting.Indented);\n        }\n\n        public static Shortcut DeserializeShortcut(string shortcutText)\n        {\n            return JsonConvert.DeserializeObject<Shortcut>(shortcutText);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Core/StartMenuManager.Core.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"JsonSubTypes\" Version=\"1.7.0\" />\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"12.0.3\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Update=\"Microsoft.SourceLink.GitHub\" Version=\"1.0.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/App.xaml",
    "content": "﻿<Application x:Class=\"StartMenuManager.GUI.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:StartMenuManager.GUI\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceDictionary Source=\"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml\" />\n                <ResourceDictionary Source=\"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml\" />\n                <ResourceDictionary Source=\"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml\" />\n                <ResourceDictionary Source=\"pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml\" />\n                <ResourceDictionary Source=\"pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml\" />\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/App.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\n\nnamespace StartMenuManager.GUI\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Builder.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\nusing StartMenuManager.GUI.Dialogs;\nusing StartMenuManager.GUI.Serialization;\n\nnamespace StartMenuManager.GUI\n{\n    public static class Builder\n    {\n        public static void Run(Config config)\n        {\n            WindowRef.Wind.Settings.NumberOfUsesUntilMessage--;\n            if (WindowRef.Wind.Settings.NumberOfUsesUntilMessage == 0)\n            {\n                WindowRef.Wind.Settings.NumberOfUsesUntilMessage = 4;\n\n                YesNoDialog.SetMessage(\"Please Consider Donating.\", \"It took a lot of time to make this software available for free. If you like it, please consider making a donation to show your appreciation.\", \"Donate\", \"Ignore\", (b) => ContinueRun(config, b));\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n                Serialization.JsonSerializer.SaveSettings(WindowRef.Wind.Settings);\n                return;\n            }\n\n            Serialization.JsonSerializer.SaveSettings(WindowRef.Wind.Settings);\n            ContinueRun(config, false);\n        }\n\n        private static void ContinueRun(Config config, bool donate)\n        {\n            if (donate)\n            {\n                System.Diagnostics.Process.Start(@\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MLD56V6HQWCKU&source=url\");\n            }\n\n            string configJson = Serializer.SerializeConfig(config);\n            JsonSerializer.SaveLastShortcutsJson(configJson);\n            string builderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Builder\", \"StartMenuManager.Builder.exe\");\n            string shortcutsJsonPath = WindowRef.Wind.Settings.GetShortcutsFilePath(\"shortcuts.json\");\n            ExecuteAsAdmin(builderPath, shortcutsJsonPath);\n\n            // Remove old website icons\n            IconManager.ClearUnusedIcons(config);\n        }\n\n        private static void ExecuteAsAdmin(string fileName, string arguments)\n        {\n            Process proc = new Process();\n            proc.StartInfo.FileName = fileName;\n            proc.StartInfo.UseShellExecute = true;\n            proc.StartInfo.Arguments = $\"\\\"{arguments}\\\"\";\n            proc.StartInfo.Verb = \"runas\";\n            proc.Start();\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Dialogs/MessageDialog.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI.Dialogs\n{\n    public static class MessageDialog\n    {\n        public static void InitEvents()\n        {\n            Wind.MessageDialog_CloseButton.Click += (sender, args) => CloseDialog(sender, args);\n        }\n\n        public static void SetMessage(string title, string message)\n        {\n            Wind.MessageDialog_Message.Text = message;\n            Wind.MessageDialog_Title.Text = title;\n        }\n\n        public static void CloseDialog(object sender, RoutedEventArgs args)\n        {\n            if (DialogManager.OpenDialogSession != null)\n            {\n                DialogManager.OpenDialogSession.Close();\n                DialogManager.OpenDialogSession = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Dialogs/SettingsDialog.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI.Dialogs\n{\n    public static class SettingsDialog\n    {\n        private static bool eventBlock = false;\n\n        public static void InitEvents()\n        {\n            Wind.SettingsDialog_CloseButton.Click += (sender, args) => CloseDialog(sender, args);\n            Wind.SettingsDialog_OpenFolderButton.Click += (sender, args) => OpenStartMenuFolder(sender, args);\n            Wind.SettingsDialog_GitHubButton.Click += (sender, args) => OpenGitHubPage(sender, args);\n            Wind.SettingsDialog_LineNumbersCheckbox.Checked += (sender, args) => LineNumbersChanged(true);\n            Wind.SettingsDialog_LineNumbersCheckbox.Unchecked += (sender, args) => LineNumbersChanged(false);\n            Wind.SettingsDialog_YesNoCheckbox.Checked += (sender, args) => ShowConfirmationDialogsChanged(true);\n            Wind.SettingsDialog_YesNoCheckbox.Unchecked += (sender, args) => ShowConfirmationDialogsChanged(false);\n\n            Wind.SettingsDialog_ThemeComboBox.SelectionChanged += (sender, args) => ThemeChanged(sender, args);\n        }\n\n        public static void InitDialog()\n        {\n            if (!Directory.Exists(WindowRef.Wind.Settings.GetShortcutsFilePath()))\n            {\n                Wind.SettingsDialog_NumOfShortcuts.Text = \"0\";\n            }\n            else\n            {\n                string[] files = Directory.GetFiles(WindowRef.Wind.Settings.GetShortcutsFilePath(), \"*.lnk\");\n                Wind.SettingsDialog_NumOfShortcuts.Text = files.Length.ToString();\n            }\n\n            if (Wind.Settings.Theme == \"dark\" && Wind.SettingsDialog_ThemeComboBox.SelectedIndex != 0)\n            {\n                eventBlock = true;\n                Wind.SettingsDialog_ThemeComboBox.SelectedIndex = 0;\n            }\n\n            if (Wind.Settings.Theme == \"light\" && Wind.SettingsDialog_ThemeComboBox.SelectedIndex != 1)\n            {\n                eventBlock = true;\n                Wind.SettingsDialog_ThemeComboBox.SelectedIndex = 1;\n            }\n\n            if (Wind.Settings.Theme == \"default\" && Wind.SettingsDialog_ThemeComboBox.SelectedIndex != 2)\n            {\n                eventBlock = true;\n                Wind.SettingsDialog_ThemeComboBox.SelectedIndex = 2;\n            }\n\n            if (Wind.Settings.YesNoDialogsEnabled != Wind.SettingsDialog_YesNoCheckbox.IsChecked)\n            {\n                eventBlock = true;\n                Wind.SettingsDialog_YesNoCheckbox.IsChecked = Wind.Settings.YesNoDialogsEnabled;\n            }\n\n            if (Wind.Settings.JsonLineNumbers != Wind.SettingsDialog_LineNumbersCheckbox.IsChecked)\n            {\n                eventBlock = true;\n                Wind.SettingsDialog_LineNumbersCheckbox.IsChecked = Wind.Settings.JsonLineNumbers;\n            }\n        }\n\n        public static void CloseDialog(object sender, RoutedEventArgs args)\n        {\n            if (DialogManager.OpenDialogSession != null)\n            {\n                DialogManager.OpenDialogSession.Close();\n                DialogManager.OpenDialogSession = null;\n            }\n        }\n\n        public static void OpenStartMenuFolder(object sender, RoutedEventArgs args)\n        {\n            if (Directory.Exists(WindowRef.Wind.Settings.GetShortcutsFilePath()))\n            {\n                Process.Start(WindowRef.Wind.Settings.GetShortcutsFilePath());\n                return;\n            }\n\n            if (Directory.Exists(WindowRef.Wind.Settings.StartMenuFolder))\n            {\n                Process.Start(WindowRef.Wind.Settings.StartMenuFolder);\n            }\n        }\n\n        public static void OpenGitHubPage(object sender, RoutedEventArgs args)\n        {\n            Process.Start(\"https://github.com/James231/Start-Menu-Manager\");\n        }\n\n        public static void ThemeChanged(object sender, RoutedEventArgs args)\n        {\n            if (eventBlock)\n            {\n                eventBlock = false;\n                return;\n            }\n\n            switch (Wind.SettingsDialog_ThemeComboBox.SelectedIndex)\n            {\n                case 0:\n                    ThemeManager.SetDarkTheme();\n                    Wind.Settings.Theme = \"dark\";\n                    break;\n                case 1:\n                    ThemeManager.SetLightTheme();\n                    Wind.Settings.Theme = \"light\";\n                    break;\n                case 2:\n                    ThemeManager.SetSystemTheme();\n                    Wind.Settings.Theme = \"default\";\n                    break;\n            }\n\n            Serialization.JsonSerializer.SaveSettings(Wind.Settings);\n        }\n\n        public static void LineNumbersChanged(bool show)\n        {\n            if (eventBlock)\n            {\n                eventBlock = false;\n                return;\n            }\n\n            JsonViewManager.ShowLineNumbers(show);\n            Wind.Settings.JsonLineNumbers = show;\n            Serialization.JsonSerializer.SaveSettings(Wind.Settings);\n        }\n\n        public static void ShowConfirmationDialogsChanged(bool show)\n        {\n            if (eventBlock)\n            {\n                eventBlock = false;\n                return;\n            }\n\n            Wind.Settings.YesNoDialogsEnabled = show;\n            Serialization.JsonSerializer.SaveSettings(Wind.Settings);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Dialogs/YesNoDialog.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI.Dialogs\n{\n    public static class YesNoDialog\n    {\n        private static Callback response;\n\n        public delegate void Callback(bool isYes);\n\n        public static void InitEvents()\n        {\n            Wind.YesNoDialog_YesButton.Click += (sender, args) => YesButtonPressed(sender, args);\n            Wind.YesNoDialog_NoButton.Click += (sender, args) => NoButtonPressed(sender, args);\n        }\n\n        public static void SetMessage(string title, string message, string yesText, string noText, Callback isYes)\n        {\n            Wind.YesNoDialog_YesButton.Content = yesText;\n            Wind.YesNoDialog_NoButton.Content = noText;\n            Wind.YesNoDialog_Message.Text = message;\n            Wind.YesNoDialog_Title.Text = title;\n            response = isYes;\n        }\n\n        public static void YesButtonPressed(object sender, RoutedEventArgs args)\n        {\n            CloseDialog();\n            response.Invoke(true);\n        }\n\n        public static void NoButtonPressed(object sender, RoutedEventArgs args)\n        {\n            CloseDialog();\n            response.Invoke(false);\n        }\n\n        private static void CloseDialog()\n        {\n            if (DialogManager.OpenDialogSession != null)\n            {\n                DialogManager.OpenDialogSession.Close();\n                DialogManager.OpenDialogSession = null;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/StartMenuManager.GUI/Extensions/ActionExtensions.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.DataStructures.Actions;\nusing StartMenuManager.GUI.Structures;\n\nnamespace StartMenuManager.GUI.Extensions\n{\n    public static class ActionExtensions\n    {\n        public static ShortcutType ToShortcutType(this Action action)\n        {\n            if (action is FileAction)\n            {\n                return ShortcutType.File;\n            }\n\n            if (action is FolderAction)\n            {\n                return ShortcutType.Folder;\n            }\n\n            if (action is SoftwareAction)\n            {\n                return ShortcutType.Software;\n            }\n\n            if (action is CommandAction)\n            {\n                return ShortcutType.Command;\n            }\n\n            return ShortcutType.Web;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/IconExtractorWindow.xaml",
    "content": "﻿<Window x:Class=\"StartMenuManager.GUI.IconExtractorWindow\"\n        xmlns:materialDesign=\"http://materialdesigninxaml.net/winfx/xaml/themes\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:StartMenuManager.GUI\"\n        xmlns:fa=\"http://schemas.fontawesome.io/icons/\"\n        mc:Ignorable=\"d\" WindowStyle=\"None\" Background=\"{DynamicResource MaterialDesignPaper}\"\n        FontFamily=\"{DynamicResource MaterialDesignFont}\"\n        Title=\"Select Icon From Website\" Height=\"400\" Width=\"600\" MinWidth=\"300\" MinHeight=\"300\"\n        TextOptions.TextFormattingMode=\"Ideal\" \n        TextOptions.TextRenderingMode=\"Auto\"\n        TextElement.FontWeight=\"Regular\"\n        TextElement.Foreground=\"{DynamicResource MaterialDesignBody}\"\n        TextElement.FontSize=\"13\"\n        UseLayoutRounding=\"True\">\n    <WindowChrome.WindowChrome>\n        <WindowChrome CaptionHeight=\"0\" ResizeBorderThickness=\"5\"/>\n    </WindowChrome.WindowChrome>\n    <Border Name=\"main\" BorderThickness=\"1\" BorderBrush=\"Black\" Margin=\"0\">\n        <DockPanel>\n            <!-- Title Bar Area -->\n            <Border Name=\"border\" DockPanel.Dock=\"Top\" Height=\"32\">\n                <Grid Background=\"Black\">\n                    <Image Margin=\"4\" HorizontalAlignment=\"Left\" Source=\"icon-256.ico\"></Image>\n\n                    <Label Name=\"TitleBarArea\" FontSize=\"16.5\" VerticalContentAlignment=\"Center\" Margin=\"32,0,105,0\" Foreground=\"White\">\n                        <TextBlock Text=\"{Binding Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}\"/>\n                    </Label>\n\n                    <!-- System Button Area -->\n                    <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Right\" Background=\"White\">\n\n                        <StackPanel.Resources>\n                            <Style TargetType=\"{x:Type Button}\" x:Key=\"systemButton\">\n                                <Setter Property=\"Padding\" Value=\"0\"/>\n                                <Setter Property=\"Width\" Value=\"45\"/>\n                                <Setter Property=\"Height\" Value=\"32\"/>\n                                <Setter Property=\"HorizontalAlignment\" Value=\"Right\"/>\n                                <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\n                                <Setter Property=\"Background\" Value=\"black\"/>\n                                <Setter Property=\"Template\">\n                                    <Setter.Value>\n                                        <ControlTemplate TargetType=\"{x:Type Button}\">\n                                            <Border Background=\"{TemplateBinding Background}\"  BorderThickness=\"0\">\n                                                <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                                            </Border>\n                                        </ControlTemplate>\n                                    </Setter.Value>\n                                </Setter>\n                                <Style.Triggers>\n                                    <Trigger Property=\"Button.IsMouseOver\" Value=\"True\">\n                                        <Setter Property=\"Button.Background\" Value=\"#414142\" />\n                                    </Trigger>\n                                </Style.Triggers>\n                            </Style>\n                        </StackPanel.Resources>\n\n                        <Button x:Name=\"TitleBar_MaximizeButton\" Style=\"{StaticResource systemButton}\">\n                            <Grid>\n                                <Rectangle Name=\"rectMax\" Width=\"10\" Height=\"10\"\n                                       Stroke=\"white\"\n                                       StrokeThickness=\"1\"/>\n                                <Canvas Name=\"rectMin\"  Visibility=\"Hidden\" RenderOptions.EdgeMode=\"Aliased\">\n                                    <Polyline Points=\"2.375,2 2.375,0.375 10.625,0.375 10.625,8.625 9,8.625\"\n                                              StrokeThickness=\"0.75\" Stroke=\"white\" RenderOptions.EdgeMode=\"Aliased\" RenderOptions.BitmapScalingMode=\"HighQuality\"/>\n                                    <Rectangle Width=\"9\" Height=\"9\"\n                                       Stroke=\"white\"\n                                       StrokeThickness=\"1\" Margin=\"0,2,2,0\" SnapsToDevicePixels=\"True\" RenderOptions.EdgeMode=\"Aliased\" RenderOptions.BitmapScalingMode=\"HighQuality\" />\n                                </Canvas>\n                            </Grid>\n                        </Button>\n\n                        <Button Name=\"TitleBar_CloseButton\">\n                            <Button.Style>\n                                <Style TargetType=\"Button\" BasedOn=\"{StaticResource systemButton}\">\n                                    <Style.Triggers>\n                                        <Trigger Property=\"Button.IsMouseOver\" Value=\"True\">\n                                            <Setter Property=\"Button.Background\" Value=\"#E81123\" />\n                                        </Trigger>\n                                    </Style.Triggers>\n                                    <Setter Property=\"Button.Background\" Value=\"black\" />\n                                </Style>\n                            </Button.Style>\n                            <Canvas Height=\"25\" Width=\"35\">\n                                <Line    \n                                    X1=\"12\" Y1=\"8\" \n                                    X2=\"22\" Y2=\"18\"    \n                                    Stroke=\"white\" StrokeThickness=\"1\"/>\n                                <Line    \n                                    X1=\"12\" Y1=\"18\"    \n                                    X2=\"22\" Y2=\"8\"  \n                                    Stroke=\"white\" StrokeThickness=\"1\"/>\n                            </Canvas>\n                        </Button>\n\n                    </StackPanel>\n                </Grid>\n            </Border>\n\n            <!-- Content Area -->\n            <Grid>\n                <DockPanel>\n                    <DockPanel DockPanel.Dock=\"Top\">\n                        <Button DockPanel.Dock=\"Right\" Click=\"SearchButtonPressed\">\n                            <materialDesign:PackIcon DockPanel.Dock=\"Left\" Margin=\"-5 0 -5 0\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Search\" Width=\"25\" Height=\"25\"/>\n                        </Button>\n                        <TextBox x:Name=\"UrlInput\" Background=\"{DynamicResource MaterialDesignCardBackground}\" TextAlignment=\"Center\" FontSize=\"18\">https://...</TextBox>\n                    </DockPanel>\n                    <Grid>\n                        <ScrollViewer>\n                            <StackPanel>\n                                <TextBlock x:Name=\"ErrorText\" Visibility=\"Collapsed\" Margin=\"10\" FontSize=\"18\" Foreground=\"Red\">Not a valid website Uri. Should start with 'http://' or 'https://'.</TextBlock>\n\n                                <ListBox x:Name=\"ImageParent\" \n                                     HorizontalContentAlignment=\"Stretch\" \n                                     BorderThickness=\"0\" \n                                     ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\" \n                                     Padding=\"0\"  \n                                     Background=\"Transparent\" \n                                     Margin=\"0\"\n                                     Grid.IsSharedSizeScope=\"True\"\n                                     >\n                                    <ListBox.ItemsPanel>\n                                        <ItemsPanelTemplate >\n                                            <WrapPanel />\n                                        </ItemsPanelTemplate>\n                                    </ListBox.ItemsPanel>\n                                </ListBox>\n\n                                <StackPanel HorizontalAlignment=\"Center\" Visibility=\"Collapsed\" x:Name=\"LoadingSpinner\" Margin=\"10\" Orientation=\"Horizontal\">\n                                    <fa:ImageAwesome Icon=\"Spinner\" Width=\"30\" Height=\"30\" Spin=\"True\" SpinDuration=\"2\" Foreground=\"{DynamicResource MaterialDesignBody}\" />\n                                    <TextBlock Margin=\"10 0 0 0\" FontSize=\"18\" VerticalAlignment=\"Center\">Loading ...</TextBlock>\n                                </StackPanel>\n                            </StackPanel>\n                        </ScrollViewer>\n                    </Grid>\n                </DockPanel>\n            </Grid>\n        </DockPanel>\n    </Border>\n</Window>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/IconExtractorWindow.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nusing System;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Threading;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media.Imaging;\nusing ImageMagick;\nusing WebImageExtractor;\n\nnamespace StartMenuManager.GUI\n{\n    /// <summary>\n    /// Interaction logic for IconExtractorWindow.xaml\n    /// </summary>\n    public partial class IconExtractorWindow : Window\n    {\n        private int numRunning = 0;\n        private MainWindow window;\n        private ShortcutControl shortcutControl;\n\n        public IconExtractorWindow(MainWindow mainWindow, ShortcutControl control)\n        {\n            window = mainWindow;\n            shortcutControl = control;\n\n            InitializeComponent();\n\n            IconExtractorWindow_TitleBarControl.InitEvents(this);\n\n            Loaded += (s, e) =>\n            {\n                Closing += OnWindowClose;\n            };\n        }\n\n        private static IconExtractorWindow CurrentWindow { get; set; }\n\n        private static CancellationTokenSource cancellationTokenSource;\n\n        public static void CreateOrFocusInstance(MainWindow window, ShortcutControl control)\n        {\n            if (CurrentWindow != null)\n            {\n                if (ContainsWindow(Application.Current.Windows, CurrentWindow))\n                {\n                    CurrentWindow.Focus();\n                    return;\n                }\n            }\n\n            CurrentWindow = new IconExtractorWindow(window, control);\n            CurrentWindow.Show();\n        }\n\n        public static bool FocusInstance()\n        {\n            if (CurrentWindow != null)\n            {\n                if (ContainsWindow(Application.Current.Windows, CurrentWindow))\n                {\n                    CurrentWindow.Focus();\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        private static bool ContainsWindow(WindowCollection windows, Window myWindow)\n        {\n            foreach (Window w in windows)\n            {\n                if (w == myWindow)\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        private void OnWindowClose(object sender, CancelEventArgs e)\n        {\n            if (cancellationTokenSource != null)\n            {\n                cancellationTokenSource.Cancel();\n            }\n        }\n\n        private async void SearchButtonPressed(object sender, RoutedEventArgs e)\n        {\n            if (!UrlInput.Text.StartsWith(\"http://\") && !UrlInput.Text.StartsWith(\"https://\"))\n            {\n                ErrorText.Visibility = Visibility.Visible;\n                LoadingSpinner.Visibility = Visibility.Collapsed;\n                return;\n            }\n\n            ErrorText.Visibility = Visibility.Collapsed;\n            LoadingSpinner.Visibility = Visibility.Visible;\n\n            ExtractionSettings settings = new ExtractionSettings()\n            {\n                SvgOnly = false,\n                RecurseUri = true,\n                RecurseHyperlinks = true,\n                HyperlinkRecursionDepth = 3,\n                LazyDownload = true,\n                GetMetaTagImages = true,\n                GetLinkTagImages = true,\n                GetInlineBackgroundImages = true,\n                UseCorsAnywhere = false,\n                DisableValidityCheck = false,\n            };\n\n            settings.OnFoundImage += async (WebImage image) =>\n            {\n                try\n                {\n                    MagickImage img = await image.GetImageAsync();\n\n                    if (img.Format != MagickFormat.Svg)\n                    {\n                        if (img.Width < 64 || img.Height < 64 || img.Width > 512 || img.Height > 512)\n                        {\n                            return;\n                        }\n\n                        var size = new MagickGeometry(256, 256);\n                        size.IgnoreAspectRatio = false;\n                        img.Resize(size);\n                        MagickColor mc = new MagickColor(0, 0, 0, 0);\n                        img.Transparent(mc);\n                        img.Format = MagickFormat.Bmp;\n                    }\n                    else\n                    {\n                        Density de = new Density(256, 256);\n                        MagickColor mc = new MagickColor(0, 0, 0, 0);\n                        img.Transparent(mc);\n                        img.Density = de;\n                        img.Settings.TextAntiAlias = true;\n                        img.Format = MagickFormat.Bmp;\n                    }\n\n                    byte[] bytes = img.ToByteArray();\n                    BitmapImage bitmapImage = LoadImage(bytes);\n\n                    ListBoxItem boxItem = new ListBoxItem();\n                    Image imageControl = new Image();\n                    imageControl.Width = 96;\n                    imageControl.Height = 96;\n                    imageControl.Source = bitmapImage;\n                    boxItem.Content = imageControl;\n                    boxItem.Selected += (s, args) =>\n                    {\n                        window.SelectedWebsiteImage(img, shortcutControl);\n                        Close();\n                    };\n                    ImageParent.Items.Add(boxItem);\n                }\n                catch (Exception)\n                {\n                }\n            };\n\n            ImageParent.Items.Clear();\n\n            if (cancellationTokenSource != null)\n            {\n                cancellationTokenSource.Cancel();\n            }\n\n            numRunning++;\n            cancellationTokenSource = new CancellationTokenSource();\n            try\n            {\n                await Extractor.GetAllImages(UrlInput.Text.Trim(), settings, cancellationTokenSource.Token);\n            } catch (Exception)\n            {\n            }\n\n            numRunning--;\n            if (numRunning == 0)\n            {\n                LoadingSpinner.Visibility = Visibility.Collapsed;\n            }\n        }\n\n        private static BitmapImage LoadImage(byte[] imageData)\n        {\n            if (imageData == null || imageData.Length == 0)\n            {\n                return null;\n            }\n\n            var image = new BitmapImage();\n            using (var mem = new MemoryStream(imageData))\n            {\n                mem.Position = 0;\n                image.BeginInit();\n                image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;\n                image.CacheOption = BitmapCacheOption.OnLoad;\n                image.UriSource = null;\n                image.StreamSource = mem;\n                image.EndInit();\n            }\n\n            image.Freeze();\n            return image;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/JsonViewManager.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class JsonViewManager\n    {\n        private static string oldJson;\n\n        public static void InitEvents()\n        {\n            Wind.JsonView_ResetJsonButton.Click += (sender, args) => ResetJsonButtonPressed(sender, args);\n        }\n\n        public static void Init()\n        {\n            InitEvents();\n\n            ShowLineNumbers(Wind.Settings.JsonLineNumbers);\n        }\n\n        public static void ShowLineNumbers(bool enabled)\n        {\n            Wind.textEditor.ShowLineNumbers = enabled;\n        }\n\n        public static void SetJson(string text)\n        {\n            oldJson = text;\n            Wind.textEditor.Text = text;\n        }\n\n        public static void ResetJsonButtonPressed(object sender, RoutedEventArgs args)\n        {\n            Wind.textEditor.Text = oldJson;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/LowerMenuBar.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\nusing StartMenuManager.GUI.Dialogs;\nusing StartMenuManager.GUI.Serialization;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class LowerMenuBar\n    {\n        public static void InitEvents()\n        {\n            Wind.LowerMenu_ResetButton.Click += (sender, args) => ResetButtonPressed(sender, args);\n            Wind.LowerMenu_RemoveButton.Click += (sender, args) => RemoveAllButtonPressed(sender, args);\n            Wind.LowerMenu_GenerateButton.Click += (sender, args) => GenerateShortcutsButtonPressed(sender, args);\n        }\n\n        public static void ResetButtonPressed(object sender, RoutedEventArgs args)\n        {\n            if (Wind.Settings.YesNoDialogsEnabled)\n            {\n                YesNoDialog.SetMessage(\"Are you sure?\", \"You will loose any changes.\", \"Yes\", \"No\", ResetJson);\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n            }\n            else\n            {\n                ResetJson(true);\n            }\n        }\n\n        public static void RemoveAllButtonPressed(object sender, RoutedEventArgs args)\n        {\n            if (Wind.Settings.YesNoDialogsEnabled)\n            {\n                Dialogs.YesNoDialog.SetMessage(\"Are you sure?\", \"This will remove all Shortcuts you have entered?\", \"Yes\", \"No\", RemoveAllConfirmation);\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n            }\n            else\n            {\n                RemoveAllConfirmation(true);\n            }\n        }\n\n        private static void RemoveAllConfirmation(bool isYes)\n        {\n            if (isYes)\n            {\n                ShortcutListArea.RemoveAllShortcuts();\n                Wind.ValiationError.Visibility = Visibility.Collapsed;\n            }\n        }\n\n        public static void GenerateShortcutsButtonPressed(object sender, RoutedEventArgs args)\n        {\n            Config config = ShortcutListArea.GetConfig();\n            ValidationError err = config.IsValid();\n\n            if (err != null)\n            {\n                Wind.ValiationError.Visibility = Visibility.Visible;\n                Wind.ValidationErrorText.Text = $\"Error: \\\"{err.Shortcut.Name}\\\" {err.Error}\";\n                return;\n            }\n            else\n            {\n                Wind.ValiationError.Visibility = Visibility.Collapsed;\n            }\n\n            Builder.Run(config);\n        }\n\n        private static void ResetJson(bool shouldReset)\n        {\n            if (shouldReset)\n            {\n                string getJson = JsonSerializer.GetLastShortcutsJson();\n                Config shortcutsConfig = null;\n\n                try\n                {\n                    shortcutsConfig = Serializer.DeserializeConfig(getJson);\n                }\n                catch\n                {\n                    shortcutsConfig = new Config();\n                    getJson = Serializer.SerializeConfig(shortcutsConfig);\n                    JsonSerializer.SaveLastShortcutsJson(getJson);\n                }\n\n                JsonViewManager.SetJson(getJson);\n                ShortcutListArea.LoadShortcuts(shortcutsConfig.Shortcuts);\n                Wind.ValiationError.Visibility = Visibility.Collapsed;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"StartMenuManager.GUI.MainWindow\"\n        xmlns:materialDesign=\"http://materialdesigninxaml.net/winfx/xaml/themes\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:avEditEx=\"clr-namespace:TextEditLib;assembly=TextEditLib\"\n        xmlns:local=\"clr-namespace:StartMenuManager.GUI\"\n        mc:Ignorable=\"d\" WindowStyle=\"None\" Background=\"{DynamicResource MaterialDesignPaper}\"\n        FontFamily=\"{DynamicResource MaterialDesignFont}\"\n        Title=\"Start Menu Manager\" Height=\"600\" Width=\"800\" MinWidth=\"300\" MinHeight=\"300\"\n        TextOptions.TextFormattingMode=\"Ideal\" \n        TextOptions.TextRenderingMode=\"Auto\"\n        TextElement.FontWeight=\"Regular\"\n        TextElement.Foreground=\"{DynamicResource MaterialDesignBody}\"\n        TextElement.FontSize=\"13\"\n        UseLayoutRounding=\"True\"\n        PreviewMouseDown=\"Window_PreviewMouseDown\"\n        PreviewMouseMove=\"Window_PreviewMouseMove\"\n         >\n    <WindowChrome.WindowChrome>\n        <WindowChrome CaptionHeight=\"0\" ResizeBorderThickness=\"5\"/>\n    </WindowChrome.WindowChrome>\n    <Border Name=\"main\" BorderThickness=\"0\" BorderBrush=\"black\" Margin=\"0\">\n        <DockPanel>\n            <!-- Title Bar Area -->\n            <Border Name=\"border\" DockPanel.Dock=\"Top\" Height=\"32\">\n\n                <Grid Background=\"Black\">\n                    <Image Margin=\"4\" HorizontalAlignment=\"Left\" Source=\"icon-256.ico\"></Image>\n\n                    <Label Name=\"TitleBarArea\" FontSize=\"16.5\" VerticalContentAlignment=\"Center\" Margin=\"32,0,105,0\" Foreground=\"White\">\n                        <TextBlock Text=\"{Binding Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}\"/>\n                    </Label>\n\n                    <!-- System Button Area -->\n                    <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Right\" Background=\"White\">\n\n                        <StackPanel.Resources>\n                            <Style TargetType=\"{x:Type Button}\" x:Key=\"systemButton\">\n                                <Setter Property=\"Padding\" Value=\"0\"/>\n                                <Setter Property=\"Width\" Value=\"45\"/>\n                                <Setter Property=\"Height\" Value=\"32\"/>\n                                <Setter Property=\"HorizontalAlignment\" Value=\"Right\"/>\n                                <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\n                                <Setter Property=\"Background\" Value=\"black\"/>\n                                <Setter Property=\"Template\">\n                                    <Setter.Value>\n                                        <ControlTemplate TargetType=\"{x:Type Button}\">\n                                            <Border Background=\"{TemplateBinding Background}\"  BorderThickness=\"0\">\n                                                <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                                            </Border>\n                                        </ControlTemplate>\n                                    </Setter.Value>\n                                </Setter>\n                                <Style.Triggers>\n                                    <Trigger Property=\"Button.IsMouseOver\" Value=\"True\">\n                                        <Setter Property=\"Button.Background\" Value=\"#414142\" />\n                                    </Trigger>\n                                </Style.Triggers>\n                            </Style>\n                        </StackPanel.Resources>\n\n                        <Button x:Name=\"TitleBar_JsonButton\" Style=\"{StaticResource systemButton}\" Foreground=\"White\">\n                            JSON\n                        </Button>\n\n                        <Button x:Name=\"TitleBar_SettingsButton\" Style=\"{StaticResource systemButton}\">\n                            <materialDesign:PackIcon Kind=\"Settings\" Foreground=\"White\" Width=\"25\" Height=\"25\"/>\n                        </Button>\n\n                        <Button x:Name=\"TitleBar_MinimizeButton\" Style=\"{StaticResource systemButton}\">\n                            <Rectangle Width=\"11\"\n                                       Stroke=\"white\"\n                                       StrokeThickness=\"1\"/>\n                        </Button>\n\n                        <Button x:Name=\"TitleBar_MaximizeButton\" Style=\"{StaticResource systemButton}\">\n                            <Grid>\n                                <Rectangle Name=\"rectMax\" Width=\"10\" Height=\"10\"\n                                       Stroke=\"white\"\n                                       StrokeThickness=\"1\"/>\n                                <Canvas Name=\"rectMin\"  Visibility=\"Hidden\" RenderOptions.EdgeMode=\"Aliased\">\n                                    <Polyline Points=\"2.375,2 2.375,0.375 10.625,0.375 10.625,8.625 9,8.625\"\n                                              StrokeThickness=\"0.75\" Stroke=\"white\" RenderOptions.EdgeMode=\"Aliased\" RenderOptions.BitmapScalingMode=\"HighQuality\"/>\n                                    <Rectangle Width=\"9\" Height=\"9\"\n                                       Stroke=\"white\"\n                                       StrokeThickness=\"1\" Margin=\"0,2,2,0\" SnapsToDevicePixels=\"True\" RenderOptions.EdgeMode=\"Aliased\" RenderOptions.BitmapScalingMode=\"HighQuality\" />\n                                </Canvas>\n                            </Grid>\n                        </Button>\n\n                        <Button Name=\"TitleBar_CloseButton\">\n                            <Button.Style>\n                                <Style TargetType=\"Button\" BasedOn=\"{StaticResource systemButton}\">\n                                    <Style.Triggers>\n                                        <Trigger Property=\"Button.IsMouseOver\" Value=\"True\">\n                                            <Setter Property=\"Button.Background\" Value=\"#E81123\" />\n                                        </Trigger>\n                                    </Style.Triggers>\n                                    <Setter Property=\"Button.Background\" Value=\"black\" />\n                                </Style>\n                            </Button.Style>\n                            <Canvas Height=\"25\" Width=\"35\">\n                                <Line    \n                                    X1=\"12\" Y1=\"8\" \n                                    X2=\"22\" Y2=\"18\"    \n                                    Stroke=\"white\" StrokeThickness=\"1\"/>\n                                <Line    \n                                    X1=\"12\" Y1=\"18\"    \n                                    X2=\"22\" Y2=\"8\"  \n                                    Stroke=\"white\" StrokeThickness=\"1\"/>\n                            </Canvas>\n                        </Button>\n\n                    </StackPanel>\n                </Grid>\n            </Border>\n\n            <!-- Content Area -->\n            <Grid DockPanel.Dock=\"Bottom\">\n                <materialDesign:DialogHost Name=\"dialogHost\">\n                    <materialDesign:DialogHost.DialogContent>\n                        <Grid Name=\"DialogContent\">\n                            <Grid Name=\"SettingsDialog\" Visibility=\"Collapsed\" MinWidth=\"300\" MaxWidth=\"500\" MinHeight=\"100\">\n                                <Grid Margin=\"15\">\n                                    <StackPanel Margin=\"8\">\n                                        <TextBlock Margin=\"0 0 0 10\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignHeadline6TextBlock}\">\n                                        Settings\n                                        </TextBlock>\n\n                                        <DockPanel Margin=\"0 0 0 10\">\n                                            <TextBlock TextWrapping=\"Wrap\">Number of currently active shortcuts:</TextBlock>\n                                            <TextBlock Name=\"SettingsDialog_NumOfShortcuts\" DockPanel.Dock=\"Right\" TextWrapping=\"Wrap\" HorizontalAlignment=\"Right\" FontWeight=\"ExtraBold\">50</TextBlock>\n                                        </DockPanel>\n\n                                        <DockPanel Margin=\"0 10 0 10\">\n                                            <TextBlock VerticalAlignment=\"Center\" Margin=\"0 0 10 0\" DockPanel.Dock=\"Left\">Theme:</TextBlock>\n                                            <ComboBox Name=\"SettingsDialog_ThemeComboBox\">\n                                                <ComboBoxItem>Dark</ComboBoxItem>\n                                                <ComboBoxItem>Light</ComboBoxItem>\n                                                <ComboBoxItem IsSelected=\"True\">System Default</ComboBoxItem>\n                                            </ComboBox>\n                                        </DockPanel>\n\n                                        <DockPanel Margin=\"0 5 0 5\">\n                                            <TextBlock VerticalAlignment=\"Center\" Margin=\"0 0 10 0\" DockPanel.Dock=\"Left\">Json Line Numbers:</TextBlock>\n                                            <CheckBox Name=\"SettingsDialog_LineNumbersCheckbox\" IsChecked=\"False\"></CheckBox>\n                                        </DockPanel>\n\n                                        <DockPanel Margin=\"0 5 0 10\">\n                                            <TextBlock VerticalAlignment=\"Center\" Margin=\"0 0 10 0\" DockPanel.Dock=\"Left\">Confirmation Dialogs Enabled:</TextBlock>\n                                            <CheckBox Name=\"SettingsDialog_YesNoCheckbox\" IsChecked=\"True\"></CheckBox>\n                                        </DockPanel>\n\n                                        <TextBlock TextWrapping=\"Wrap\" Margin=\"0 10 0 3\">All start menu shortcuts are saved here:</TextBlock>\n                                        <Button Margin=\"0 10 0 10\" x:Name=\"SettingsDialog_OpenFolderButton\" MaxWidth=\"200\" Style=\"{DynamicResource MaterialDesignFlatLightBgButton}\">Open Start Menu Folder</Button>\n\n                                        <TextBlock TextWrapping=\"Wrap\" Margin=\"0 10 0 3\">You can find updates and documentation on the GitHub page:</TextBlock>\n                                        <Button Margin=\"0 10 0 10\" x:Name=\"SettingsDialog_GitHubButton\" MaxWidth=\"200\" Style=\"{DynamicResource MaterialDesignFlatLightBgButton}\">Go To GitHub</Button>\n\n                                        <Button x:Name=\"SettingsDialog_CloseButton\">Close</Button>\n                                    </StackPanel>\n                                </Grid>\n                            </Grid>\n                            <Grid Name=\"MessageDialog\" Visibility=\"Collapsed\" MinWidth=\"300\" MaxWidth=\"500\" MinHeight=\"100\">\n                                <Grid Margin=\"15\">\n                                    <StackPanel Margin=\"8\">\n                                        <TextBlock x:Name=\"MessageDialog_Title\" Margin=\"0 0 0 10\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignHeadline6TextBlock}\">\n                                        Settings\n                                        </TextBlock>\n\n                                        <TextBlock x:Name=\"MessageDialog_Message\" Margin=\"0 0 0 10\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                        Settings\n                                        </TextBlock>\n\n                                        <Button x:Name=\"MessageDialog_CloseButton\">OK</Button>\n                                    </StackPanel>\n                                </Grid>\n                            </Grid>\n                            <Grid Name=\"YesNoDialog\" Visibility=\"Collapsed\" MinWidth=\"300\" MaxWidth=\"500\" MinHeight=\"100\">\n                                <Grid Margin=\"15\">\n                                    <StackPanel Margin=\"8\">\n                                        <TextBlock x:Name=\"YesNoDialog_Title\" Margin=\"0 0 0 10\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignHeadline6TextBlock}\">\n                                        Settings\n                                        </TextBlock>\n\n                                        <TextBlock x:Name=\"YesNoDialog_Message\" Margin=\"0 0 0 10\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                        Settings\n                                        </TextBlock>\n\n                                        <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                                            <Button x:Name=\"YesNoDialog_NoButton\" Margin=\"10 0 10 0\">No</Button>\n                                            <Button x:Name=\"YesNoDialog_YesButton\" Margin=\"10 0 10 0\">Yes</Button>\n                                        </StackPanel>\n                                    </StackPanel>\n                                </Grid>\n                            </Grid>\n                        </Grid>\n                    </materialDesign:DialogHost.DialogContent>\n                    <Grid>\n                        <Grid x:Name=\"NonJsonView\">\n                            <DockPanel>\n                                <DockPanel DockPanel.Dock=\"Bottom\" Background=\"{DynamicResource MaterialDesignChipBackground}\">\n                                    <Button DockPanel.Dock=\"Left\" x:Name=\"LowerMenu_ResetButton\" Style=\"{DynamicResource MaterialDesignRaisedAccentButton}\" Margin=\"8 8 4 8\" Height=\"30\" VerticalAlignment=\"Bottom\" Padding=\"10 0 10 0\">Reset</Button>\n                                    <Button DockPanel.Dock=\"Left\" x:Name=\"LowerMenu_RemoveButton\" Style=\"{DynamicResource MaterialDesignRaisedAccentButton}\" Margin=\"8\" Height=\"30\" VerticalAlignment=\"Bottom\" Padding=\"10 0 10 0\">Remove All Shortcuts</Button>\n                                    <Button x:Name=\"LowerMenu_GenerateButton\" Style=\"{DynamicResource MaterialDesignRaisedAccentButton}\" Margin=\"8\" DockPanel.Dock=\"Right\" Height=\"30\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Padding=\"10 0 10 0\">Generate Shortcuts</Button>\n                                    <Grid x:Name=\"ValiationError\" Visibility=\"Collapsed\" HorizontalAlignment=\"Stretch\">\n                                        <Grid Background=\"red\" Opacity=\"0.2\"></Grid>\n                                        <TextBlock x:Name=\"ValidationErrorText\" Margin=\"4\" HorizontalAlignment=\"Center\" FontWeight=\"Bold\" VerticalAlignment=\"Center\" Foreground=\"Red\">Error: Some Message</TextBlock>\n                                    </Grid>\n                                </DockPanel>\n                                <Grid>\n                                    <ScrollViewer>\n                                        <StackPanel>\n                                            <materialDesign:Card Name=\"welcomeCard\" Margin=\"16\">\n                                                <DockPanel>\n                                                    <Button Name=\"welcomeCard_CloseButton\" DockPanel.Dock=\"Right\" FontWeight=\"Regular\" Style=\"{DynamicResource MaterialDesignFlatButton}\" Foreground=\"#FF3AB7B7\" Height=\"Auto\">CLOSE</Button>\n                                                    <StackPanel Margin=\"20 20 4 20\">\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignHeadline6TextBlock}\">\n                                                    Welcome to Start Menu Manager!\n                                                        </TextBlock>\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Margin=\"0 5 0 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                                    You can create and edit shortcuts to websites/software/files/folders below and press the generate button to add them to the Start Menu. You can pull icons from websites or use your own.\n                                                        </TextBlock>\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Margin=\"0 5 0 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                                    Use the Settings icon on the title bar to edit application settings including the theme.\n                                                        </TextBlock>\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Margin=\"0 5 0 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                                    After generating shortcuts, icons might not be displayed correctly in the Start Menu. This is a Windows bug. Temporarily changing the display scaling in Windows settings will fix this. See the documentation on GitHub for more information.\n                                                        </TextBlock>\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Margin=\"0 5 0 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                                    Use the JSON View to obtain your shortcuts as JSON code. Use this to copy your shortcuts onto different devices.\n                                                        </TextBlock>\n                                                        <TextBlock TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Margin=\"0 5 0 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">\n                                                    Please star the GitHub repository. Use it to report Issues, and check for updates. Thank you!\n                                                        </TextBlock>\n                                                    </StackPanel>\n                                                </DockPanel>\n                                            </materialDesign:Card>\n\n                                            <TextBlock Margin=\"16 15 5 0\" Style=\"{DynamicResource MaterialDesignHeadline6TextBlock}\">Shortcuts:</TextBlock>\n\n                                            <StackPanel x:Name=\"ShortcutListArea_ShortcutsParent\"></StackPanel>\n\n                                            <materialDesign:Card Margin=\"16 7 16 70\" Width=\"165\" HorizontalAlignment=\"Left\">\n                                                <Button x:Name=\"ShortcutListArea_AddButton\" Style=\"{DynamicResource MaterialDesignFlatButton}\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\">\n                                                    <DockPanel>\n                                                        <materialDesign:PackIcon DockPanel.Dock=\"Left\" Margin=\"-10 0 5 0\" Kind=\"Add\" Width=\"25\" Height=\"25\"/>\n                                                        <TextBlock VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Add Shortcut</TextBlock>\n                                                    </DockPanel>\n                                                </Button>\n                                            </materialDesign:Card>\n\n                                        </StackPanel>\n                                    </ScrollViewer>\n                                </Grid>\n                            </DockPanel>\n                        </Grid>\n\n                        <Grid x:Name=\"JsonView\" Visibility=\"Collapsed\">\n                            <avEditEx:TextEdit\n                                Name=\"textEditor\"\n                                SyntaxHighlighting=\"{Binding HighlightingDefinition, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                FontFamily=\"Consolas\"\n                                FontSize=\"18\"\n                                Background=\"#FF1E1E1E\"\n                                Foreground=\"White\"\n                                LineNumbersForeground=\"#999\"\n                                EditorCurrentLineBackground=\"#222\"/>\n                            <Button x:Name=\"JsonView_ResetJsonButton\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Top\" Margin=\"20 5 20 20\">Reset Json</Button>\n                        </Grid>\n                    </Grid>\n                </materialDesign:DialogHost>\n            </Grid>\n        </DockPanel>\n    </Border>\n</Window>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/MainWindow.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\nusing System.Windows;\nusing ImageMagick;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\nusing StartMenuManager.GUI.Serialization;\n\nnamespace StartMenuManager.GUI\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n            WindowRef.Wind = this;\n\n            Settings = JsonSerializer.GetSettings();\n            if (!Settings.DisplayWelcomeBox)\n            {\n                WelcomeCard.CloseCard();\n            }\n\n            if (!CheckSettingsValid())\n            {\n                Close();\n                return;\n            }\n\n            InitEvents();\n            ThemeManager.InitTheme();\n            InitJson();\n        }\n\n        public SettingsConfig Settings { get; set; }\n\n        private void InitEvents()\n        {\n            TitleBarControl.InitEvents();\n            TitleBarButtons.InitEvents();\n            WelcomeCard.InitEvents();\n            LowerMenuBar.InitEvents();\n            ShortcutListArea.InitEvents();\n            JsonViewManager.Init();\n            Dialogs.SettingsDialog.InitEvents();\n            Dialogs.MessageDialog.InitEvents();\n            Dialogs.YesNoDialog.InitEvents();\n        }\n\n        private void InitJson()\n        {\n            string getJson = JsonSerializer.GetLastShortcutsJson();\n            Config shortcutsConfig = null;\n\n            try\n            {\n                shortcutsConfig = Serializer.DeserializeConfig(getJson);\n            }\n            catch\n            {\n                shortcutsConfig = new Config();\n                getJson = Serializer.SerializeConfig(shortcutsConfig);\n                JsonSerializer.SaveLastShortcutsJson(getJson);\n            }\n\n            JsonViewManager.SetJson(getJson);\n            ShortcutListArea.LoadShortcuts(shortcutsConfig.Shortcuts);\n        }\n\n        private void Window_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)\n        {\n            e.Handled = IconExtractorWindow.FocusInstance();\n        }\n\n        private void Window_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)\n        {\n            e.Handled = IconExtractorWindow.FocusInstance();\n        }\n\n        public void SelectedWebsiteImage(MagickImage image, ShortcutControl control)\n        {\n            image.Format = MagickFormat.Ico;\n            string filePath = IconManager.SaveIcon(image, control.Shortcut.Name);\n            control.IconSelectedEvent(filePath);\n        }\n\n        private bool CheckSettingsValid()\n        {\n            if (!Directory.Exists(Settings.StartMenuFolder))\n            {\n                MessageBox.Show(\"Start Menu Folder not found. Please check the path in settings.json in the application install directory.\");\n                return false;\n            }\n\n            if (!Directory.Exists(Settings.GetShortcutsFilePath()))\n            {\n                Directory.CreateDirectory(Settings.GetShortcutsFilePath());\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Properties/AssemblyInfo.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"StartMenuManager.GUI\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"StartMenuManager.GUI\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// In order to begin building localizable applications, set\n// <UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n// inside a <PropertyGroup>.  For example, if you are using US english\n// in your source files, set the <UICulture> to en-US.  Then uncomment\n// the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n// the line below to match the UICulture setting in the project file.\n\n// [assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None,\n    ResourceDictionaryLocation.SourceAssembly)\n]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace StartMenuManager.GUI.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"StartMenuManager.GUI.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "src/StartMenuManager.GUI/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace StartMenuManager.GUI.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"16.4.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "src/StartMenuManager.GUI/Runner.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace StartMenuManager.GUI\n{\n    public static class Runner\n    {\n        public static void Run(string filePath)\n        {\n            string runnerPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Runner\", \"StartMenuManager.Runner.exe\");\n            ExecuteAsAdmin(runnerPath, filePath);\n        }\n\n        private static void ExecuteAsAdmin(string fileName, string arguments)\n        {\n            Process proc = new Process();\n            proc.StartInfo.FileName = fileName;\n            proc.StartInfo.UseShellExecute = true;\n            proc.StartInfo.Arguments = $\"\\\"{arguments}\\\"\";\n            proc.StartInfo.Verb = \"runas\";\n            proc.Start();\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Serialization/IconManager.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing ImageMagick;\nusing StartMenuManager.Core.DataStructures;\n\nnamespace StartMenuManager.GUI.Serialization\n{\n    public static class IconManager\n    {\n        /// <summary>\n        /// Saves Icon to temporary file path.\n        /// </summary>\n        /// <param name=\"icon\">Icon to save.</param>\n        /// <param name=\"shortcutName\">Shortcut Name</param>\n        /// <returns>Absolute file path of saved file.</returns>\n        public static string SaveIcon(MagickImage icon, string shortcutName)\n        {\n            string websiteIconsFolder = GetWebsiteIconsFolder();\n            int fileNum = 0;\n            while (File.Exists(Path.Combine(websiteIconsFolder, $\"{shortcutName}_{fileNum}.ico\")))\n            {\n                fileNum++;\n            }\n\n            string iconPath = Path.Combine(websiteIconsFolder, $\"{shortcutName}_{fileNum}.ico\");\n            icon.Write(iconPath);\n            return iconPath;\n        }\n\n        /// <summary>\n        /// Removes all unused icons from the website icons folder.\n        /// </summary>\n        /// <param name=\"config\">Shortcut Configuration.</param>\n        public static void ClearUnusedIcons(Config config)\n        {\n            List<string> usedIcons = new List<string>();\n\n            foreach (Shortcut shorctut in config.Shortcuts)\n            {\n                if (!string.IsNullOrEmpty(shorctut.IconPath))\n                {\n                    usedIcons.Add(shorctut.IconPath);\n                }\n            }\n\n            // Get all files from directory. Delete those which arent in usedIcons\n            string dir = GetWebsiteIconsFolder();\n            string[] filePaths = Directory.GetFiles(dir);\n            foreach (string filePath in filePaths)\n            {\n                if (!filePath.EndsWith(\".ico\"))\n                {\n                    return;\n                }\n\n                if (!usedIcons.Contains(filePath))\n                {\n                    File.Delete(filePath);\n                }\n            }\n        }\n\n        private static string GetWebsiteIconsFolder()\n        {\n            string baseDir = AppDomain.CurrentDomain.BaseDirectory;\n            string folder = Path.Combine(baseDir, \"Website Icons\");\n\n            if (!Directory.Exists(folder))\n            {\n                Directory.CreateDirectory(folder);\n            }\n\n            return folder;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Serialization/JsonSerializer.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.IO;\nusing Newtonsoft.Json;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\n\nnamespace StartMenuManager.GUI.Serialization\n{\n    public static class JsonSerializer\n    {\n        public static SettingsConfig GetSettings()\n        {\n            if (!File.Exists(GetSettingsFilePath()))\n            {\n                return SettingsConfig.GetDefaultSettings();\n            }\n\n            StreamReader reader = new StreamReader(GetSettingsFilePath());\n            string contents = reader.ReadToEnd();\n            reader.Close();\n\n            return JsonConvert.DeserializeObject<SettingsConfig>(contents);\n        }\n\n        public static void SaveSettings(SettingsConfig settings)\n        {\n            string settingsJson = JsonConvert.SerializeObject(settings, Formatting.Indented);\n            StreamWriter writer = new StreamWriter(GetSettingsFilePath(), false);\n            writer.WriteLine(settingsJson);\n            writer.Close();\n        }\n\n        public static string GetLastShortcutsJson()\n        {\n            if (!Directory.Exists(WindowRef.Wind.Settings.StartMenuFolder))\n            {\n                return GetDefaultJson();\n            }\n\n            if (!Directory.Exists(WindowRef.Wind.Settings.GetShortcutsFilePath()))\n            {\n                Directory.CreateDirectory(WindowRef.Wind.Settings.GetShortcutsFilePath());\n            }\n\n            if (!File.Exists(WindowRef.Wind.Settings.GetShortcutsFilePath(\"shortcuts.json\")))\n            {\n                return GetDefaultJson();\n            }\n\n            StreamReader reader = new StreamReader(WindowRef.Wind.Settings.GetShortcutsFilePath(\"shortcuts.json\"));\n            string contents = reader.ReadToEnd();\n            reader.Close();\n            return contents;\n        }\n\n        public static void SaveLastShortcutsJson(string jsonString)\n        {\n            if (!Directory.Exists(WindowRef.Wind.Settings.StartMenuFolder))\n            {\n                return;\n            }\n\n            if (!Directory.Exists(WindowRef.Wind.Settings.GetShortcutsFilePath()))\n            {\n                Directory.CreateDirectory(WindowRef.Wind.Settings.GetShortcutsFilePath());\n            }\n\n            StreamWriter writer = new StreamWriter(WindowRef.Wind.Settings.GetShortcutsFilePath(\"shortcuts.json\"), false);\n            writer.WriteLine(jsonString);\n            writer.Close();\n        }\n\n        private static string GetDefaultJson()\n        {\n            Config newConfig = new Config();\n            return Serializer.SerializeConfig(newConfig);\n        }\n\n        private static string GetSettingsFilePath()\n        {\n            return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"settings.json\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/ShortcutControl.xaml",
    "content": "﻿<UserControl x:Class=\"StartMenuManager.GUI.ShortcutControl\"\n             xmlns:materialDesign=\"http://materialdesigninxaml.net/winfx/xaml/themes\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:StartMenuManager.GUI\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <materialDesign:Card Margin=\"16 7 16 7\">\n            <Expander Padding=\"0\" Margin=\"-20 -8 0 -6\" IsExpanded=\"False\" ExpandDirection=\"Down\" FlowDirection=\"RightToLeft\" Background=\"{DynamicResource MaterialDesignCardBackground}\">\n                <Expander.Header>\n                    <DockPanel FlowDirection=\"LeftToRight\" Margin=\"-25 0 -10 -2\">\n                        <StackPanel Orientation=\"Horizontal\">\n                            <materialDesign:PackIcon x:Name=\"Icon\" VerticalAlignment=\"Center\" Kind=\"Web\" Width=\"25\" Height=\"25\"/>\n                            <TextBlock Name=\"ShortcutTitleName\" VerticalAlignment=\"Center\" Margin=\"10 0 10 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">My Shortcut</TextBlock>\n                        </StackPanel>\n                        <ComboBox Name=\"MenuComboBox\" SelectionChanged=\"MenuComboBoxSelectionChanged\" Width=\"40\" Margin=\"0 0 -10 0\" DockPanel.Dock=\"Right\" Style=\"{DynamicResource MaterialDesignDataGridComboBox}\" ToolTip=\"Select the type of shortcut you wish to create.\" VerticalAlignment=\"Center\">\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Play\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Test Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ContentCopy\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Duplicate Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ChevronUp\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Move Up</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ChevronDown\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Move Down</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Delete\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Delete Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                        </ComboBox>\n                        <materialDesign:PackIcon DockPanel.Dock=\"Right\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"DotsVertical\" Margin=\"5 0 -20 0\" Width=\"25\" Height=\"25\"/>\n                        <Button ToolTip=\"Delete this Shortcut\" Click=\"DeleteShortcutButtonClick\" Margin=\"0 -4 0 -4\" Padding=\"0\" DockPanel.Dock=\"Right\" HorizontalAlignment=\"Right\" Width=\"50\" Style=\"{DynamicResource MaterialDesignFlatButton}\">\n                            <materialDesign:PackIcon Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Delete\" Width=\"25\" Height=\"25\"/>\n                        </Button>\n                    </DockPanel>\n                </Expander.Header>\n                <Grid FlowDirection=\"LeftToRight\">\n                    <Grid Margin=\"34 12 14 20\">\n                        <StackPanel>\n                            <DockPanel Margin=\"0 0 0 5\">\n                                <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Shortcut Type:</TextBlock>\n                                <ComboBox ToolTip=\"Select the type of shortcut you wish to create.\" Name=\"ShortcutTypeComboBox\" SelectionChanged=\"ShortcutTypeChanged\" VerticalAlignment=\"Center\" Margin=\"15 0 0 0\">\n                                    <ComboBoxItem ToolTip=\"Opens your web browser to a URL.\">Web</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens a file in the default software.\">File</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens a folder in Windows File Explorer.\">Folder</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens software. E.g. an .exe file.\">Software</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Runs a command through Command Prompt.\">Command</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Performs multiple actions of different types.\">Multi-Action</ComboBoxItem>\n                                </ComboBox>\n                            </DockPanel>\n                            <DockPanel Margin=\"0 5 0 5\">\n                                <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Shortcut Name:</TextBlock>\n                                <TextBox ToolTip=\"Type the name of the shortcut. This will appear in Windows Search.\" x:Name=\"ShortcutNameField\" TextChanged=\"ShortcutNameChanged\" Margin=\"15 0 0 0\"/>\n                            </DockPanel>\n                            <StackPanel Name=\"WebsiteUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Website Url:</TextBlock>\n                                    <TextBox ToolTip=\"The Url of the website this shortcut will open.\" x:Name=\"WebsiteUriField\" TextChanged=\"WebsiteUriTextChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"FileUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">File Path:</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"FileUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the file this shortcut should open.\" x:Name=\"FileUi_Path\" TextChanged=\"FileUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"FolderUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Folder Path:</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"FolderUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the folder this shortcut should open.\" x:Name=\"FolderUi_Path\" TextChanged=\"FolderUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"SoftwareUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Software Path (e.g. .exe file):</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"SoftwareUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the software this shortcut should open.\" x:Name=\"SoftwareUi_Path\" TextChanged=\"SoftwareUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"CommandUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Command:</TextBlock>\n                                    <TextBox ToolTip=\"Enter the command which should be run in a terminal.\" x:Name=\"CommandUi_Comand\" TextChanged=\"CommandUi_CommandTextChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Keep Terminal Open?</TextBlock>\n                                    <CheckBox ToolTip=\"Should the terminal remain open after command completed?\" x:Name=\"CommandUi_KeepOpen\" Checked=\"CommandUi_KeepOpen_Checked\" Unchecked=\"CommandUi_KeepOpen_Unchecked\" Margin=\"15 0 0 0\" Foreground=\"White\"></CheckBox>\n                                </DockPanel>\n                            </StackPanel>\n                            <DockPanel Margin=\"0 5 0 5\">\n                                <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Icon:</TextBlock>\n                                <TextBlock x:Name=\"ShotcutNameText\" DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" Margin=\"15 0 0 0\">None Selected.</TextBlock>\n                                <Button DockPanel.Dock=\"Right\" Width=\"45\" Padding=\"-10 0 -10 0\" Margin=\"5 0 5 0\" HorizontalAlignment=\"Right\" Click=\"ClearSelectedIcon\">Clear</Button>\n                                <Button DockPanel.Dock=\"Right\" Width=\"160\" Margin=\"5 0 5 0\" HorizontalAlignment=\"Right\" Click=\"SelectIconFromWebsite\">Select from Website</Button>\n                                <Button DockPanel.Dock=\"Right\" Width=\"125\" Margin=\"5 0 5 0\" HorizontalAlignment=\"Right\" Click=\"SelectIconFromFile\">Select .ico File</Button>\n                            </DockPanel>\n                            <StackPanel Name=\"MultiUi\" Visibility=\"Collapsed\" Margin=\"0 10 0 0\">\n\n                                <StackPanel x:Name=\"MultiUi_ShortcutsParent\"></StackPanel>\n\n                                <materialDesign:Card Margin=\"16 7 16 0\" Width=\"165\" HorizontalAlignment=\"Left\">\n                                    <Button x:Name=\"MultiUi_AddButton\" Style=\"{DynamicResource MaterialDesignFlatButton}\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Click=\"MultiUi_AddShorcutButtonPressed\">\n                                        <DockPanel>\n                                            <materialDesign:PackIcon DockPanel.Dock=\"Left\" Margin=\"-10 0 5 0\" Kind=\"Add\" Width=\"25\" Height=\"25\"/>\n                                            <TextBlock VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Add Action</TextBlock>\n                                        </DockPanel>\n                                    </Button>\n                                </materialDesign:Card>\n                            </StackPanel>\n                        </StackPanel>\n                    </Grid>\n                </Grid>\n            </Expander>\n        </materialDesign:Card>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/ShortcutControl.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Microsoft.Win32;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.DataStructures.Actions;\nusing StartMenuManager.GUI.Extensions;\nusing StartMenuManager.GUI.Structures;\n\nnamespace StartMenuManager.GUI\n{\n    /// <summary>\n    /// Interaction logic for ShortcutControl.xaml\n    /// </summary>\n    public partial class ShortcutControl : UserControl\n    {\n        private bool eventBlock = false;\n        private Shortcut shortcut;\n\n        public ShortcutControl(ShortcutType shortcutType)\n        {\n            InitializeComponent();\n            InitControl(shortcutType);\n        }\n\n        public ShortcutControl()\n        {\n            InitializeComponent();\n            InitControl(ShortcutType.Web);\n        }\n\n        public ShortcutType ShortcutType { get; set; }\n\n        public List<SubShortcutControl> SubShorcuts { get; set; }\n\n        public Shortcut Shortcut\n        {\n            get\n            {\n                if (ShortcutType == ShortcutType.Multi)\n                {\n                    shortcut.Actions = new List<Core.DataStructures.Action>();\n\n                    if (SubShorcuts == null)\n                    {\n                        return shortcut;\n                    }\n\n                    foreach (SubShortcutControl subshort in SubShorcuts)\n                    {\n                        shortcut.Actions.Add(subshort.Shortcut.Actions[0]);\n                    }\n                }\n\n                return shortcut;\n            }\n\n            set\n            {\n                shortcut = value;\n            }\n        }\n\n        private void InitControl(ShortcutType shortcutType)\n        {\n            ShortcutType = shortcutType;\n\n            // Set up the underlying Shortcut class\n            Shortcut = new Shortcut();\n            eventBlock = true;\n            Shortcut.Name = \"My Shortcut\";\n            SetDefaultAction();\n\n            // Set up right UI:\n            SetIcon();\n            InitUiBasedOnType();\n            SetFieldValuesFromShortcut();\n\n            eventBlock = false;\n        }\n\n        private void SetDefaultAction()\n        {\n            Shortcut.Actions.Clear();\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    Shortcut.Actions.Add(new WebsiteAction());\n                    break;\n                case ShortcutType.File:\n                    Shortcut.Actions.Add(new FileAction());\n                    break;\n                case ShortcutType.Folder:\n                    Shortcut.Actions.Add(new FolderAction());\n                    break;\n                case ShortcutType.Software:\n                    Shortcut.Actions.Add(new SoftwareAction());\n                    break;\n                case ShortcutType.Command:\n                    Shortcut.Actions.Add(new CommandAction());\n                    break;\n            }\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Update UI from Shortcut class\n\n        public void UpdateUi()\n        {\n            SetIcon();\n            InitUiBasedOnType();\n            SetFieldValuesFromShortcut();\n        }\n\n        private void SetIcon()\n        {\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Web;\n                    break;\n                case ShortcutType.File:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.FileDocument;\n                    break;\n                case ShortcutType.Folder:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Folder;\n                    break;\n                case ShortcutType.Software:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Play;\n                    break;\n                case ShortcutType.Command:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Terminal;\n                    break;\n                case ShortcutType.Multi:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.ClipboardList;\n                    break;\n            }\n        }\n\n        private void InitUiBasedOnType()\n        {\n            WebsiteUi.Visibility = Visibility.Collapsed;\n            FileUi.Visibility = Visibility.Collapsed;\n            FolderUi.Visibility = Visibility.Collapsed;\n            SoftwareUi.Visibility = Visibility.Collapsed;\n            CommandUi.Visibility = Visibility.Collapsed;\n            MultiUi.Visibility = Visibility.Collapsed;\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    WebsiteUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.File:\n                    FileUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Folder:\n                    FolderUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Software:\n                    SoftwareUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Command:\n                    CommandUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Multi:\n                    MultiUi.Visibility = Visibility.Visible;\n                    break;\n            }\n        }\n\n        private void SetFieldValuesFromShortcut()\n        {\n            eventBlock = true;\n            ShortcutNameField.Text = Shortcut.Name;\n            ShortcutTitleName.Text = Shortcut.Name;\n            eventBlock = true;\n            ShortcutTypeComboBox.SelectedIndex = (int)ShortcutType;\n            if (!string.IsNullOrEmpty(Shortcut.IconPath))\n            {\n                if (!File.Exists(Shortcut.IconPath))\n                {\n                    Shortcut.IconPath = string.Empty;\n                    ShotcutNameText.Text = \"No icon selected.\";\n                }\n                else\n                {\n                    ShotcutNameText.Text = Path.GetFileName(Shortcut.IconPath);\n                }\n            }\n            else\n            {\n                ShotcutNameText.Text = \"No icon selected.\";\n            }\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    WebsiteAction webaction = (WebsiteAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    WebsiteUriField.Text = webaction.Url;\n                    eventBlock = true;\n                    break;\n                case ShortcutType.File:\n                    FileAction fileAction = (FileAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    FileUi_Path.Text = fileAction.Path;\n                    break;\n                case ShortcutType.Folder:\n                    FolderAction folderAction = (FolderAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    FolderUi_Path.Text = folderAction.Path;\n                    break;\n                case ShortcutType.Software:\n                    SoftwareAction softwareAction = (SoftwareAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    SoftwareUi_Path.Text = softwareAction.Path;\n                    break;\n                case ShortcutType.Command:\n                    CommandAction comaction = (CommandAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    CommandUi_Comand.Text = comaction.Command;\n                    eventBlock = true;\n                    CommandUi_KeepOpen.IsChecked = comaction.KeepOpen;\n                    break;\n                case ShortcutType.Multi:\n                    break;\n            }\n\n            eventBlock = false;\n        }\n\n        public void CreateGroupActions(List<Core.DataStructures.Action> actions)\n        {\n            SubShorcuts = new List<SubShortcutControl>();\n            if (actions != null)\n            {\n                foreach (Core.DataStructures.Action action in actions)\n                {\n                    CreateSubShorcut(action, MultiUi_ShortcutsParent.Children.Count);\n                }\n            }\n        }\n\n        private SubShortcutControl CreateSubShorcut(Core.DataStructures.Action action, int index)\n        {\n            SubShortcutControl newControl = new SubShortcutControl(this);\n            newControl.Shortcut.Actions[0] = action;\n            newControl.ShortcutType = action.ToShortcutType();\n            MultiUi_ShortcutsParent.Children.Insert(index, newControl);\n            SubShorcuts.Insert(index, newControl);\n            newControl.UpdateUi();\n            return newControl;\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Update Shortcut class from UI Events\n\n        // Main changed events\n\n        public void IconSelectedEvent(string filePath)\n        {\n            Shortcut.IconPath = filePath;\n            ShotcutNameText.Text = Path.GetFileName(filePath);\n        }\n\n        private void ShortcutTypeChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                List<Core.DataStructures.Action> oldActions = Shortcut.Actions.Select(a => a.Duplicate()).ToList();\n                ShortcutType oldType = ShortcutType;\n                ShortcutType = (ShortcutType)ShortcutTypeComboBox.SelectedIndex;\n                SetDefaultAction();\n                SetIcon();\n                InitUiBasedOnType();\n                SetFieldValuesFromShortcut();\n                if ((oldType != ShortcutType.Multi) && (ShortcutType == ShortcutType.Multi))\n                {\n                    MultiUi_ShortcutsParent.Children.Clear();\n                    CreateGroupActions(new List<Core.DataStructures.Action>() { oldActions[0] });\n                }\n\n                if ((oldType == ShortcutType.Multi) && (ShortcutType != ShortcutType.Multi) && (oldActions.Count == 1))\n                {\n                    if (oldActions[0].ToShortcutType() == ShortcutType)\n                    {\n                        Shortcut.Actions[0] = oldActions[0];\n                        SetFieldValuesFromShortcut();\n                    }\n                }\n            }\n\n            eventBlock = false;\n        }\n\n        private void ShortcutNameChanged(object sender, TextChangedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                Shortcut.Name = ShortcutNameField.Text;\n                ShortcutTitleName.Text = Shortcut.Name;\n            }\n\n            eventBlock = false;\n        }\n\n        private void SelectIconFromFile(object sender, RoutedEventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = \"icon files (*.ico)|*.ico\";\n            ofd.Title = \"Select and Icon file to use for this Shortcut\";\n            if (ofd.ShowDialog() == true)\n            {\n                if (File.Exists(ofd.FileName))\n                {\n                    Shortcut.IconPath = ofd.FileName;\n                    ShotcutNameText.Text = Path.GetFileName(ofd.FileName);\n                }\n            }\n        }\n\n        private void SelectIconFromWebsite(object sender, RoutedEventArgs e)\n        {\n            IconExtractorWindow.CreateOrFocusInstance((MainWindow)Application.Current.MainWindow, this);\n        }\n\n        private void ClearSelectedIcon(object sender, RoutedEventArgs e)\n        {\n            Shortcut.IconPath = string.Empty;\n            ShotcutNameText.Text = \"No icon selected.\";\n        }\n\n        // Website action changed events\n\n        private void WebsiteUriTextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                WebsiteAction action = (WebsiteAction)Shortcut.Actions[0];\n                action.Url = WebsiteUriField.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        // File action changed events\n\n        private void FileUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                FileAction action = (FileAction)Shortcut.Actions[0];\n                action.Path = FileUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void FileUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            OpenFileDialog openFileDialog = new OpenFileDialog();\n            openFileDialog.Filter = \"All files (*.*)|*.*\";\n            openFileDialog.InitialDirectory = Environment.SpecialFolder.Personal.ToString();\n            if (openFileDialog.ShowDialog() == true)\n            {\n                if (!string.IsNullOrEmpty(openFileDialog.FileName))\n                {\n                    FileAction action = (FileAction)Shortcut.Actions[0];\n                    action.Path = openFileDialog.FileName;\n\n                    if (FileUi_Path.Text != openFileDialog.FileName)\n                    {\n                        eventBlock = true;\n                        FileUi_Path.Text = openFileDialog.FileName;\n                    }\n                }\n            }\n        }\n\n        // Folder action changed events\n\n        private void FolderUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                FolderAction action = (FolderAction)Shortcut.Actions[0];\n                action.Path = FolderUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void FolderUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            System.Windows.Forms.FolderBrowserDialog openFolderDialog = new System.Windows.Forms.FolderBrowserDialog();\n            openFolderDialog.Description = \"Select the directory for the shortcut to open.\";\n            System.Windows.Forms.DialogResult result = openFolderDialog.ShowDialog();\n\n            if (result == System.Windows.Forms.DialogResult.OK)\n            {\n                if (!string.IsNullOrEmpty(openFolderDialog.SelectedPath))\n                {\n                    FolderAction action = (FolderAction)Shortcut.Actions[0];\n                    action.Path = openFolderDialog.SelectedPath;\n\n                    if (FolderUi_Path.Text != openFolderDialog.SelectedPath)\n                    {\n                        eventBlock = true;\n                        FolderUi_Path.Text = openFolderDialog.SelectedPath;\n                    }\n                }\n            }\n        }\n\n        // Software action changed evetns\n\n        private void SoftwareUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                SoftwareAction action = (SoftwareAction)Shortcut.Actions[0];\n                action.Path = SoftwareUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void SoftwareUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            OpenFileDialog openFileDialog = new OpenFileDialog();\n            openFileDialog.Filter = \"Exe Files (*.exe)|*.exe|All files (*.*)|*.*\";\n            openFileDialog.InitialDirectory = Environment.SpecialFolder.ProgramFiles.ToString();\n            if (openFileDialog.ShowDialog() == true)\n            {\n                if (!string.IsNullOrEmpty(openFileDialog.FileName))\n                {\n                    SoftwareAction action = (SoftwareAction)Shortcut.Actions[0];\n                    action.Path = openFileDialog.FileName;\n\n                    if (SoftwareUi_Path.Text != openFileDialog.FileName)\n                    {\n                        eventBlock = true;\n                        SoftwareUi_Path.Text = openFileDialog.FileName;\n                    }\n                }\n            }\n        }\n\n        // Command action changed events\n\n        private void CommandUi_CommandTextChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.Command = CommandUi_Comand.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void CommandUi_KeepOpen_Checked(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.KeepOpen = true;\n            }\n\n            eventBlock = false;\n        }\n\n        private void CommandUi_KeepOpen_Unchecked(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.KeepOpen = false;\n            }\n\n            eventBlock = false;\n        }\n\n        // Multi shortcut changed events\n\n        private void MultiUi_AddShorcutButtonPressed(object sender, RoutedEventArgs e)\n        {\n            if (SubShorcuts == null)\n            {\n                SubShorcuts = new List<SubShortcutControl>();\n            }\n\n            SubShortcutControl newControl = new SubShortcutControl(this);\n            MultiUi_ShortcutsParent.Children.Add(newControl);\n            SubShorcuts.Add(newControl);\n        }\n\n        public void DuplicateChild(SubShortcutControl control)\n        {\n            int insertIndex = SubShorcuts.IndexOf(control) + 1;\n            Shortcut newShortcut = control.Shortcut.Duplicate();\n            SubShortcutControl newControl = CreateSubShorcut(newShortcut.Actions[0], insertIndex);\n        }\n\n        public void MoveUpChild(SubShortcutControl control)\n        {\n            int oldIndex = SubShorcuts.IndexOf(control);\n            if (oldIndex > 0)\n            {\n                SubShorcuts.Remove(control);\n                MultiUi_ShortcutsParent.Children.Remove(control);\n                SubShorcuts.Insert(oldIndex - 1, control);\n                MultiUi_ShortcutsParent.Children.Insert(oldIndex - 1, control);\n            }\n        }\n\n        public void MoveDownChild(SubShortcutControl control)\n        {\n            int oldIndex = SubShorcuts.IndexOf(control);\n            if (oldIndex < SubShorcuts.Count - 1)\n            {\n                SubShorcuts.Remove(control);\n                MultiUi_ShortcutsParent.Children.Remove(control);\n                SubShorcuts.Insert(oldIndex + 1, control);\n                MultiUi_ShortcutsParent.Children.Insert(oldIndex + 1, control);\n            }\n        }\n\n        public void DeleteChild(SubShortcutControl control)\n        {\n            if (WindowRef.Wind.Settings.YesNoDialogsEnabled)\n            {\n                Dialogs.YesNoDialog.SetMessage(\"Are you sure?\", $\"Do you want to remove the action?\", \"Yes\", \"No\", (isYes) => RemoveSubShortcutYes(isYes, control));\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n            }\n            else\n            {\n                RemoveSubShortcutYes(true, control);\n            }\n        }\n\n        private void RemoveSubShortcutYes(bool isYes, SubShortcutControl control)\n        {\n            if (isYes)\n            {\n                SubShorcuts.Remove(control);\n                MultiUi_ShortcutsParent.Children.Remove(control);\n            }\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Other Events\n\n        private void DeleteShortcutButtonClick(object sender, RoutedEventArgs e)\n        {\n            DeleteShortcut();\n        }\n\n        public void MenuComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            switch (MenuComboBox.SelectedIndex)\n            {\n                case 0:\n                    TestRunShortcut();\n                    break;\n                case 1:\n                    DuplicateShortcut();\n                    break;\n                case 2:\n                    MoveUpShortcut();\n                    break;\n                case 3:\n                    MoveDownShortcut();\n                    break;\n                case 4:\n                    DeleteShortcut();\n                    break;\n            }\n\n            MenuComboBox.SelectedIndex = -1;\n        }\n\n        private void TestRunShortcut()\n        {\n            ShortcutListArea.TestRunShortcut(Shortcut);\n        }\n\n        private void DuplicateShortcut()\n        {\n            ShortcutListArea.DuplicateShortcut(this);\n        }\n\n        private void MoveUpShortcut()\n        {\n            ShortcutListArea.MoveUpShortcut(this);\n        }\n\n        private void MoveDownShortcut()\n        {\n            ShortcutListArea.MoveDownShortcut(this);\n        }\n\n        private void DeleteShortcut()\n        {\n            ShortcutListArea.RemoveShortcut(this);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/ShortcutListArea.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\nusing StartMenuManager.GUI.Extensions;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class ShortcutListArea\n    {\n        public static List<ShortcutControl> Shortcuts { get; set; } = new List<ShortcutControl> { };\n\n        public static void InitEvents()\n        {\n            Wind.ShortcutListArea_AddButton.Click += (sender, args) => AddShortcut(sender, args);\n        }\n\n        public static void AddShortcut(object sender, RoutedEventArgs args)\n        {\n            ShortcutControl newControl = new ShortcutControl();\n            Wind.ShortcutListArea_ShortcutsParent.Children.Add(newControl);\n            Shortcuts.Add(newControl);\n        }\n\n        private static ShortcutControl AddShortcut(Shortcut shortcut)\n        {\n            return AddShortcut(shortcut, Shortcuts.Count);\n        }\n\n        private static ShortcutControl AddShortcut(Shortcut shortcut, int insertIndex)\n        {\n            ShortcutControl newControl = new ShortcutControl();\n            newControl.Shortcut = shortcut;\n\n            if (shortcut.Actions == null)\n            {\n                shortcut.Actions = new List<Action>();\n            }\n\n            if (shortcut.Actions.Count != 1)\n            {\n                newControl.ShortcutType = Structures.ShortcutType.Multi;\n                newControl.CreateGroupActions(shortcut.Actions);\n            }\n            else\n            {\n                newControl.ShortcutType = shortcut.Actions[0].ToShortcutType();\n            }\n\n            Wind.ShortcutListArea_ShortcutsParent.Children.Insert(insertIndex, newControl);\n            Shortcuts.Insert(insertIndex, newControl);\n\n            newControl.UpdateUi();\n            return newControl;\n        }\n\n        private static bool IsFolder(string path)\n        {\n            FileAttributes attr = File.GetAttributes(path);\n            if ((attr & FileAttributes.Directory) == FileAttributes.Directory)\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public static void RemoveShortcut(ShortcutControl control)\n        {\n            if (Wind.Settings.YesNoDialogsEnabled)\n            {\n                Dialogs.YesNoDialog.SetMessage(\"Are you sure?\", $\"Do you want to remove the shortcut \\\"{control.Shortcut.Name}\\\"?\", \"Yes\", \"No\", (isYes) => RemoveShortcutYes(isYes, control));\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n            }\n            else\n            {\n                RemoveShortcutYes(true, control);\n            }\n        }\n\n        private static void RemoveShortcutYes(bool isYes, ShortcutControl control)\n        {\n            if (isYes)\n            {\n                Shortcuts.Remove(control);\n                Wind.ShortcutListArea_ShortcutsParent.Children.Remove(control);\n            }\n        }\n\n        public static void RemoveAllShortcuts()\n        {\n            Shortcuts.Clear();\n            Wind.ShortcutListArea_ShortcutsParent.Children.Clear();\n        }\n\n        public static void LoadShortcuts(List<Shortcut> shortcuts)\n        {\n            RemoveAllShortcuts();\n\n            if (shortcuts == null)\n            {\n                return;\n            }\n\n            foreach (Shortcut s in shortcuts)\n            {\n                AddShortcut(s);\n            }\n        }\n\n        public static Config GetConfig()\n        {\n            Config newConfig = new Config();\n            newConfig.Shortcuts = new List<Shortcut>();\n\n            foreach (ShortcutControl shortcutControl in Shortcuts)\n            {\n                newConfig.Shortcuts.Add(shortcutControl.Shortcut);\n            }\n\n            return newConfig;\n        }\n\n        public static void TestRunShortcut(Shortcut shortcut, bool isSub = false)\n        {\n            // Validate the shortcut (individually) first\n            ValidationError err = shortcut.IsValid();\n\n            if (err != null)\n            {\n                Wind.ValiationError.Visibility = Visibility.Visible;\n                Wind.ValidationErrorText.Text = isSub ? $\"Error: {err.Error}\" : $\"Error: \\\"{err.Shortcut.Name}\\\" {err.Error}\";\n                return;\n            }\n            else\n            {\n                Wind.ValiationError.Visibility = Visibility.Collapsed;\n            }\n\n            string tempShortcutJsonPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, \"Runner\", \"temp,json\");\n            string shortcutJson = Serializer.SerializeShortcut(shortcut);\n            StreamWriter writer = new StreamWriter(tempShortcutJsonPath, false);\n            writer.Write(shortcutJson);\n            writer.Close();\n\n            StartMenuManager.GUI.Runner.Run(tempShortcutJsonPath);\n        }\n\n        public static void DuplicateShortcut(ShortcutControl control)\n        {\n            int insertIndex = Shortcuts.IndexOf(control) + 1;\n            Shortcut newShortcut = control.Shortcut.Duplicate();\n            ShortcutControl newControl = AddShortcut(newShortcut, insertIndex);\n        }\n\n        public static void MoveUpShortcut(ShortcutControl control)\n        {\n            int oldIndex = Shortcuts.IndexOf(control);\n            if (oldIndex > 0)\n            {\n                Shortcuts.Remove(control);\n                Wind.ShortcutListArea_ShortcutsParent.Children.Remove(control);\n                Shortcuts.Insert(oldIndex - 1, control);\n                Wind.ShortcutListArea_ShortcutsParent.Children.Insert(oldIndex - 1, control);\n            }\n        }\n\n        public static void MoveDownShortcut(ShortcutControl control)\n        {\n            int oldIndex = Shortcuts.IndexOf(control);\n            if (oldIndex < Shortcuts.Count - 1)\n            {\n                Shortcuts.Remove(control);\n                Wind.ShortcutListArea_ShortcutsParent.Children.Remove(control);\n                Shortcuts.Insert(oldIndex + 1, control);\n                Wind.ShortcutListArea_ShortcutsParent.Children.Insert(oldIndex + 1, control);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/StartMenuManager.GUI.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{AB31D486-50B4-4FF1-9E2C-3D8A29FB8EF4}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>StartMenuManager.GUI</RootNamespace>\n    <AssemblyName>Start Menu Manager</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>icon-256.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Compile Include=\"Builder.cs\" />\n    <Compile Include=\"Extensions\\ActionExtensions.cs\" />\n    <Compile Include=\"IconExtractorWindow.xaml.cs\">\n      <DependentUpon>IconExtractorWindow.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"JsonViewManager.cs\" />\n    <Compile Include=\"Runner.cs\" />\n    <Compile Include=\"Serialization\\IconManager.cs\" />\n    <Compile Include=\"ShortcutListArea.cs\" />\n    <Compile Include=\"SubShortcutControl.xaml.cs\">\n      <DependentUpon>SubShortcutControl.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Utils\\DialogManager.cs\" />\n    <Compile Include=\"Dialogs\\MessageDialog.cs\" />\n    <Compile Include=\"Dialogs\\SettingsDialog.cs\" />\n    <Compile Include=\"Dialogs\\YesNoDialog.cs\" />\n    <Compile Include=\"LowerMenuBar.cs\" />\n    <Compile Include=\"Structures\\DialogTypes.cs\" />\n    <Compile Include=\"Structures\\ShortcutType.cs\" />\n    <Compile Include=\"Serialization\\JsonSerializer.cs\" />\n    <Compile Include=\"Utils\\IconExtractorWindow_TitleBarControl.cs\" />\n    <Compile Include=\"Utils\\ThemeManager.cs\" />\n    <Compile Include=\"TitleBarButtons.cs\" />\n    <Compile Include=\"Utils\\TitleBarControl.cs\" />\n    <Compile Include=\"ShortcutControl.xaml.cs\">\n      <DependentUpon>ShortcutControl.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"WelcomeCard.cs\" />\n    <Compile Include=\"Utils\\WindowRef.cs\" />\n    <Page Include=\"IconExtractorWindow.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Page Include=\"ShortcutControl.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"SubShortcutControl.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Include=\"app.manifest\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\HL\\HL.csproj\">\n      <Project>{9B9FF48A-D1F7-47D5-8E22-892DAD1FF4A5}</Project>\n      <Name>HL</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\StartMenuManager.Core\\StartMenuManager.Core.csproj\">\n      <Project>{f027fcb2-cc37-4d24-a2ab-072e19b87a18}</Project>\n      <Name>StartMenuManager.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\TextEditLib\\TextEditLib.csproj\">\n      <Project>{3e22a174-15f9-4c62-a15c-3b5e5e3f12bf}</Project>\n      <Name>TextEditLib</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"icon-256.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"FontAwesome.WPF\">\n      <Version>4.7.0.9</Version>\n    </PackageReference>\n    <PackageReference Include=\"MaterialDesignThemes\">\n      <Version>3.1.3</Version>\n    </PackageReference>\n    <PackageReference Include=\"WebImageExtractor\">\n      <Version>1.0.2</Version>\n    </PackageReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/StartMenuManager.GUI/Structures/DialogTypes.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nnamespace StartMenuManager.GUI.Structures\n{\n    public enum DialogTypes\n    {\n        SettingsDialog,\n        MessageDialog,\n        YesNoDialog,\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Structures/ShortcutType.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nnamespace StartMenuManager.GUI.Structures\n{\n    public enum ShortcutType\n    {\n        Web,\n        File,\n        Folder,\n        Software,\n        Command,\n        Multi,\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/SubShortcutControl.xaml",
    "content": "﻿<UserControl x:Class=\"StartMenuManager.GUI.SubShortcutControl\"\n             xmlns:materialDesign=\"http://materialdesigninxaml.net/winfx/xaml/themes\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:StartMenuManager.GUI\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <materialDesign:Card Margin=\"16 7 16 7\">\n            <Expander Padding=\"0\" Margin=\"-20 -8 0 -6\" IsExpanded=\"False\" ExpandDirection=\"Down\" FlowDirection=\"RightToLeft\" Background=\"{DynamicResource MaterialDesignCardBackground}\">\n                <Expander.Header>\n                    <DockPanel FlowDirection=\"LeftToRight\" Margin=\"-25 0 -10 -2\">\n                        <StackPanel Orientation=\"Horizontal\">\n                            <materialDesign:PackIcon x:Name=\"Icon\" VerticalAlignment=\"Center\" Kind=\"Web\" Width=\"25\" Height=\"25\"/>\n                            <TextBlock Name=\"ShortcutTitleName\" VerticalAlignment=\"Center\" Margin=\"10 0 10 0\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">My Shortcut</TextBlock>\n                        </StackPanel>\n                        <ComboBox Name=\"MenuComboBox\" SelectionChanged=\"MenuComboBoxSelectionChanged\" Width=\"40\" Margin=\"0 0 -10 0\" DockPanel.Dock=\"Right\" Style=\"{DynamicResource MaterialDesignDataGridComboBox}\" ToolTip=\"Select the type of shortcut you wish to create.\" VerticalAlignment=\"Center\">\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Play\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Test Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ContentCopy\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Duplicate Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ChevronUp\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Move Up</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"ChevronDown\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Move Down</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                            <ComboBoxItem>\n                                <DockPanel>\n                                    <materialDesign:PackIcon DockPanel.Dock=\"Left\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Delete\" Width=\"25\" Height=\"25\"/>\n                                    <TextBlock Margin=\"10 0 10 0\" VerticalAlignment=\"Center\" Style=\"{DynamicResource MaterialDesignBody1TextBlock}\">Delete Shortcut</TextBlock>\n                                </DockPanel>\n                            </ComboBoxItem>\n                        </ComboBox>\n                        <materialDesign:PackIcon DockPanel.Dock=\"Right\" Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"DotsVertical\" Margin=\"5 0 -20 0\" Width=\"25\" Height=\"25\"/>\n                        <Button ToolTip=\"Delete this Shortcut\" Click=\"DeleteShortcutButtonClick\" Margin=\"0 -4 0 -4\" Padding=\"0\" DockPanel.Dock=\"Right\" HorizontalAlignment=\"Right\" Width=\"50\" Style=\"{DynamicResource MaterialDesignFlatButton}\">\n                            <materialDesign:PackIcon Foreground=\"{DynamicResource PrimaryHueDarkForegroundBrush}\" Kind=\"Delete\" Width=\"25\" Height=\"25\"/>\n                        </Button>\n                    </DockPanel>\n                </Expander.Header>\n                <Grid FlowDirection=\"LeftToRight\">\n                    <Grid Margin=\"34 12 14 20\">\n                        <StackPanel>\n                            <DockPanel Margin=\"0 0 0 5\">\n                                <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Shortcut Type:</TextBlock>\n                                <ComboBox ToolTip=\"Select the type of shortcut you wish to create.\" Name=\"ShortcutTypeComboBox\" SelectionChanged=\"ShortcutTypeChanged\" VerticalAlignment=\"Center\" Margin=\"15 0 0 0\">\n                                    <ComboBoxItem ToolTip=\"Opens your web browser to a URL.\">Web</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens a file in the default software.\">File</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens a folder in Windows File Explorer.\">Folder</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Opens software. E.g. an .exe file.\">Software</ComboBoxItem>\n                                    <ComboBoxItem ToolTip=\"Runs a command through Command Prompt.\">Command</ComboBoxItem>\n                                </ComboBox>\n                            </DockPanel>\n                            <StackPanel Name=\"WebsiteUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Website Url:</TextBlock>\n                                    <TextBox ToolTip=\"The Url of the website this shortcut will open.\" x:Name=\"WebsiteUriField\" TextChanged=\"WebsiteUriTextChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"FileUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">File Path:</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"FileUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the file this shortcut should open.\" x:Name=\"FileUi_Path\" TextChanged=\"FileUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"FolderUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Folder Path:</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"FolderUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the folder this shortcut should open.\" x:Name=\"FolderUi_Path\" TextChanged=\"FolderUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"SoftwareUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Software Path (e.g. .exe file):</TextBlock>\n                                    <Button DockPanel.Dock=\"Right\" Click=\"SoftwareUi_PathSelectPressed\" Style=\"{DynamicResource MaterialDesignFlatDarkBgButton}\" Margin=\"8 0 0 0\" Width=\"73\" Height=\"26\">Select</Button>\n                                    <TextBox ToolTip=\"Enter path of the software this shortcut should open.\" x:Name=\"SoftwareUi_Path\" TextChanged=\"SoftwareUi_PathChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                            </StackPanel>\n                            <StackPanel Name=\"CommandUi\" Visibility=\"Collapsed\">\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Command:</TextBlock>\n                                    <TextBox ToolTip=\"Enter the command which should be run in a terminal.\" x:Name=\"CommandUi_Comand\" TextChanged=\"CommandUi_CommandTextChanged\" Margin=\"15 0 0 0\"/>\n                                </DockPanel>\n                                <DockPanel Margin=\"0 5 0 5\">\n                                    <TextBlock DockPanel.Dock=\"Left\" VerticalAlignment=\"Center\" FontWeight=\"Medium\">Keep Terminal Open?</TextBlock>\n                                    <CheckBox ToolTip=\"Should the terminal remain open after command completed?\" x:Name=\"CommandUi_KeepOpen\" Checked=\"CommandUi_KeepOpen_Checked\" Unchecked=\"CommandUi_KeepOpen_Unchecked\" Margin=\"15 0 0 0\" Foreground=\"White\"></CheckBox>\n                                </DockPanel>\n                            </StackPanel>\n                        </StackPanel>\n                    </Grid>\n                </Grid>\n            </Expander>\n        </materialDesign:Card>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "src/StartMenuManager.GUI/SubShortcutControl.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Microsoft.Win32;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.DataStructures.Actions;\nusing StartMenuManager.GUI.Structures;\n\nnamespace StartMenuManager.GUI\n{\n    /// <summary>\n    /// Interaction logic for ShortcutControl.xaml\n    /// </summary>\n    public partial class SubShortcutControl : UserControl\n    {\n        private bool eventBlock = false;\n        private ShortcutControl parent;\n\n        public SubShortcutControl(ShortcutControl parentControl)\n        {\n            parent = parentControl;\n            InitializeComponent();\n            InitControl(ShortcutType.Web);\n        }\n\n        public ShortcutType ShortcutType { get; set; }\n\n        public Shortcut Shortcut { get; set; }\n\n        private void InitControl(ShortcutType shortcutType)\n        {\n            ShortcutType = shortcutType;\n\n            // Set up the underlying Shortcut class\n            Shortcut = new Shortcut();\n            eventBlock = true;\n            Shortcut.Name = \"My Shortcut\";\n            SetDefaultAction();\n\n            // Set up right UI:\n            SetIcon();\n            InitUiBasedOnType();\n            SetFieldValuesFromShortcut();\n\n            eventBlock = false;\n        }\n\n        private void SetDefaultAction()\n        {\n            Shortcut.Actions.Clear();\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    Shortcut.Actions.Add(new WebsiteAction());\n                    break;\n                case ShortcutType.File:\n                    Shortcut.Actions.Add(new FileAction());\n                    break;\n                case ShortcutType.Folder:\n                    Shortcut.Actions.Add(new FolderAction());\n                    break;\n                case ShortcutType.Software:\n                    Shortcut.Actions.Add(new SoftwareAction());\n                    break;\n                case ShortcutType.Command:\n                    Shortcut.Actions.Add(new CommandAction());\n                    break;\n            }\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Update UI from Shortcut class\n\n        public void UpdateUi()\n        {\n            SetIcon();\n            InitUiBasedOnType();\n            SetFieldValuesFromShortcut();\n        }\n\n        private void SetIcon()\n        {\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Web;\n                    break;\n                case ShortcutType.File:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.FileDocument;\n                    break;\n                case ShortcutType.Folder:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Folder;\n                    break;\n                case ShortcutType.Software:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Play;\n                    break;\n                case ShortcutType.Command:\n                    Icon.Kind = MaterialDesignThemes.Wpf.PackIconKind.Terminal;\n                    break;\n            }\n        }\n\n        private void InitUiBasedOnType()\n        {\n            WebsiteUi.Visibility = Visibility.Collapsed;\n            FileUi.Visibility = Visibility.Collapsed;\n            FolderUi.Visibility = Visibility.Collapsed;\n            SoftwareUi.Visibility = Visibility.Collapsed;\n            CommandUi.Visibility = Visibility.Collapsed;\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    WebsiteUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.File:\n                    FileUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Folder:\n                    FolderUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Software:\n                    SoftwareUi.Visibility = Visibility.Visible;\n                    break;\n                case ShortcutType.Command:\n                    CommandUi.Visibility = Visibility.Visible;\n                    break;\n            }\n        }\n\n        private void SetFieldValuesFromShortcut()\n        {\n            eventBlock = true;\n            ShortcutTitleName.Text = $\"{Enum.GetName(typeof(ShortcutType), ShortcutType)} Action\";\n            eventBlock = true;\n            ShortcutTypeComboBox.SelectedIndex = (int)ShortcutType;\n\n            switch (ShortcutType)\n            {\n                case ShortcutType.Web:\n                    WebsiteAction webaction = (WebsiteAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    WebsiteUriField.Text = webaction.Url;\n                    eventBlock = true;\n                    break;\n                case ShortcutType.File:\n                    FileAction fileAction = (FileAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    FileUi_Path.Text = fileAction.Path;\n                    break;\n                case ShortcutType.Folder:\n                    FolderAction folderAction = (FolderAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    FolderUi_Path.Text = folderAction.Path;\n                    break;\n                case ShortcutType.Software:\n                    SoftwareAction softwareAction = (SoftwareAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    SoftwareUi_Path.Text = softwareAction.Path;\n                    break;\n                case ShortcutType.Command:\n                    CommandAction comaction = (CommandAction)Shortcut.Actions[0];\n                    eventBlock = true;\n                    CommandUi_Comand.Text = comaction.Command;\n                    eventBlock = true;\n                    CommandUi_KeepOpen.IsChecked = comaction.KeepOpen;\n                    break;\n            }\n\n            eventBlock = false;\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Update Shortcut class from UI Events\n\n        // Main changed events\n\n        private void ShortcutTypeChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                ShortcutType = (ShortcutType)ShortcutTypeComboBox.SelectedIndex;\n                SetDefaultAction();\n                SetIcon();\n                InitUiBasedOnType();\n                SetFieldValuesFromShortcut();\n            }\n\n            eventBlock = false;\n        }\n\n        // Website action changed events\n\n        private void WebsiteUriTextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                WebsiteAction action = (WebsiteAction)Shortcut.Actions[0];\n                action.Url = WebsiteUriField.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        // File action changed events\n\n        private void FileUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                FileAction action = (FileAction)Shortcut.Actions[0];\n                action.Path = FileUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void FileUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            OpenFileDialog openFileDialog = new OpenFileDialog();\n            openFileDialog.Filter = \"All files (*.*)|*.*\";\n            openFileDialog.InitialDirectory = Environment.SpecialFolder.Personal.ToString();\n            if (openFileDialog.ShowDialog() == true)\n            {\n                if (!string.IsNullOrEmpty(openFileDialog.FileName))\n                {\n                    FileAction action = (FileAction)Shortcut.Actions[0];\n                    action.Path = openFileDialog.FileName;\n\n                    if (FileUi_Path.Text != openFileDialog.FileName)\n                    {\n                        eventBlock = true;\n                        FileUi_Path.Text = openFileDialog.FileName;\n                    }\n                }\n            }\n        }\n\n        // Folder action changed events\n\n        private void FolderUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                FolderAction action = (FolderAction)Shortcut.Actions[0];\n                action.Path = FolderUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void FolderUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            System.Windows.Forms.FolderBrowserDialog openFolderDialog = new System.Windows.Forms.FolderBrowserDialog();\n            openFolderDialog.Description = \"Select the directory for the shortcut to open.\";\n            System.Windows.Forms.DialogResult result = openFolderDialog.ShowDialog();\n\n            if (result == System.Windows.Forms.DialogResult.OK)\n            {\n                if (!string.IsNullOrEmpty(openFolderDialog.SelectedPath))\n                {\n                    FolderAction action = (FolderAction)Shortcut.Actions[0];\n                    action.Path = openFolderDialog.SelectedPath;\n\n                    if (FolderUi_Path.Text != openFolderDialog.SelectedPath)\n                    {\n                        eventBlock = true;\n                        FolderUi_Path.Text = openFolderDialog.SelectedPath;\n                    }\n                }\n            }\n        }\n\n        // Software action changed evetns\n\n        private void SoftwareUi_PathChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                SoftwareAction action = (SoftwareAction)Shortcut.Actions[0];\n                action.Path = SoftwareUi_Path.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void SoftwareUi_PathSelectPressed(object sender, RoutedEventArgs e)\n        {\n            OpenFileDialog openFileDialog = new OpenFileDialog();\n            openFileDialog.Filter = \"Exe Files (*.exe)|*.exe|All files (*.*)|*.*\";\n            openFileDialog.InitialDirectory = Environment.SpecialFolder.ProgramFiles.ToString();\n            if (openFileDialog.ShowDialog() == true)\n            {\n                if (!string.IsNullOrEmpty(openFileDialog.FileName))\n                {\n                    SoftwareAction action = (SoftwareAction)Shortcut.Actions[0];\n                    action.Path = openFileDialog.FileName;\n\n                    if (SoftwareUi_Path.Text != openFileDialog.FileName)\n                    {\n                        eventBlock = true;\n                        SoftwareUi_Path.Text = openFileDialog.FileName;\n                    }\n                }\n            }\n        }\n\n        // Command action changed events\n\n        private void CommandUi_CommandTextChanged(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.Command = CommandUi_Comand.Text;\n            }\n\n            eventBlock = false;\n        }\n\n        private void CommandUi_KeepOpen_Checked(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.KeepOpen = true;\n            }\n\n            eventBlock = false;\n        }\n\n        private void CommandUi_KeepOpen_Unchecked(object sender, RoutedEventArgs e)\n        {\n            if (!eventBlock)\n            {\n                CommandAction action = (CommandAction)Shortcut.Actions[0];\n                action.KeepOpen = false;\n            }\n\n            eventBlock = false;\n        }\n\n        /////////////////////////////////////////////////////////////////////////////////////////////\n        // Other Events\n\n        private void DeleteShortcutButtonClick(object sender, RoutedEventArgs e)\n        {\n            DeleteShortcut();\n        }\n\n        public void MenuComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            switch (MenuComboBox.SelectedIndex)\n            {\n                case 0:\n                    TestRunShortcut();\n                    break;\n                case 1:\n                    DuplicateShortcut();\n                    break;\n                case 2:\n                    MoveUpShortcut();\n                    break;\n                case 3:\n                    MoveDownShortcut();\n                    break;\n                case 4:\n                    DeleteShortcut();\n                    break;\n            }\n\n            MenuComboBox.SelectedIndex = -1;\n        }\n\n        private void TestRunShortcut()\n        {\n            ShortcutListArea.TestRunShortcut(Shortcut, true);\n        }\n\n        private void DuplicateShortcut()\n        {\n            parent.DuplicateChild(this);\n        }\n\n        private void MoveUpShortcut()\n        {\n            parent.MoveUpChild(this);\n        }\n\n        private void MoveDownShortcut()\n        {\n            parent.MoveDownChild(this);\n        }\n\n        private void DeleteShortcut()\n        {\n            parent.DeleteChild(this);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/TitleBarButtons.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Windows;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.Serialization;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class TitleBarButtons\n    {\n        private static bool inJsonView = false;\n\n        public static void InitEvents()\n        {\n            Wind.TitleBar_SettingsButton.Click += (sender, args) => SettingsButtonPressed(sender, args);\n            Wind.TitleBar_JsonButton.Click += (sender, args) => JsonButtonPressed(sender, args);\n        }\n\n        public static void SettingsButtonPressed(object sender, RoutedEventArgs args)\n        {\n            if (DialogManager.OpenDialogSession != null)\n            {\n                return;\n            }\n\n            DialogManager.Show(Structures.DialogTypes.SettingsDialog);\n        }\n\n        public static void JsonButtonPressed(object sender, RoutedEventArgs args)\n        {\n            if (DialogManager.OpenDialogSession != null)\n            {\n                return;\n            }\n\n            if (inJsonView)\n            {\n                // Attempt to Deserialize Json\n                string json = Wind.textEditor.Text;\n                Config config = null;\n                try\n                {\n                    config = Serializer.DeserializeConfig(json);\n                }\n                catch (Exception e)\n                {\n                    Dialogs.MessageDialog.SetMessage(\"Json Error\", e.Message);\n                    DialogManager.Show(Structures.DialogTypes.MessageDialog);\n                    return;\n                }\n\n                ShortcutListArea.LoadShortcuts(config.Shortcuts);\n                Wind.JsonView.Visibility = Visibility.Collapsed;\n                Wind.NonJsonView.Visibility = Visibility.Visible;\n                Wind.ValiationError.Visibility = Visibility.Collapsed;\n            }\n            else\n            {\n                LoadJsonFromShortcuts();\n                Wind.JsonView.Visibility = Visibility.Visible;\n                Wind.NonJsonView.Visibility = Visibility.Collapsed;\n            }\n\n            inJsonView = !inJsonView;\n        }\n\n        private static void LoadJsonFromShortcuts()\n        {\n            Config config = ShortcutListArea.GetConfig();\n            string configJson = Serializer.SerializeConfig(config);\n            JsonViewManager.SetJson(configJson);\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Utils/DialogManager.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing MaterialDesignThemes.Wpf;\nusing StartMenuManager.GUI.Dialogs;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class DialogManager\n    {\n        public static DialogSession OpenDialogSession { get; set; }\n\n        /// <summary>\n        /// Opens a dialog\n        /// </summary>\n        /// <param name=\"dialogType\">The type of dialog to open</param>\n        public static async void Show(Structures.DialogTypes dialogType)\n        {\n            Wind.SettingsDialog.Visibility = System.Windows.Visibility.Collapsed;\n            Wind.MessageDialog.Visibility = System.Windows.Visibility.Collapsed;\n            Wind.YesNoDialog.Visibility = System.Windows.Visibility.Collapsed;\n\n            switch (dialogType)\n            {\n                case Structures.DialogTypes.SettingsDialog:\n                    SettingsDialog.InitDialog();\n                    Wind.SettingsDialog.Visibility = System.Windows.Visibility.Visible;\n                    break;\n                case Structures.DialogTypes.MessageDialog:\n                    Wind.MessageDialog.Visibility = System.Windows.Visibility.Visible;\n                    break;\n                case Structures.DialogTypes.YesNoDialog:\n                    Wind.YesNoDialog.Visibility = System.Windows.Visibility.Visible;\n                    break;\n            }\n\n            try\n            {\n                var result = await Wind.dialogHost.ShowDialog(\n                    Wind.DialogContent,\n                    delegate(object send, DialogOpenedEventArgs args)\n                    {\n                        DialogManager.OpenDialogSession = args.Session;\n                    });\n            }\n            catch (InvalidOperationException)\n            {\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Utils/IconExtractorWindow_TitleBarControl.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Forms;\nusing System.Windows.Input;\n\nnamespace StartMenuManager.GUI\n{\n    public static class IconExtractorWindow_TitleBarControl\n    {\n        private static Point startPos;\n\n        private static Screen[] screens = System.Windows.Forms.Screen.AllScreens;\n\n        public static void InitEvents(IconExtractorWindow wind)\n        {\n            wind.TitleBar_MaximizeButton.Click += (sender, e) => Maximize_Click(wind, sender, e);\n            wind.TitleBar_CloseButton.Click += (sender, e) => Close_Click(wind, sender, e);\n            wind.TitleBarArea.PreviewMouseDown += (sender, e) => System_MouseDown(wind, sender, e);\n            wind.TitleBarArea.PreviewMouseMove += (sender, e) => System_MouseMove(wind, sender, e);\n            wind.LocationChanged += (sender, e) => Window_LocationChanged(wind, sender, e);\n            wind.StateChanged += (sender, e) => Window_StateChanged(wind, sender, e);\n        }\n\n        private static void Window_LocationChanged(IconExtractorWindow wind, object sender, EventArgs e)\n        {\n            int sum = 0;\n            foreach (var item in screens)\n            {\n                sum += item.WorkingArea.Width;\n                if (sum >= wind.Left + (wind.Width / 2))\n                {\n                    wind.MaxHeight = item.WorkingArea.Height + 7;\n                    break;\n                }\n            }\n        }\n\n        private static void System_MouseDown(IconExtractorWindow wind, object sender, MouseButtonEventArgs e)\n        {\n            if (e.ChangedButton == MouseButton.Left)\n            {\n                if (e.ClickCount >= 2)\n                {\n                    wind.WindowState = (wind.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;\n                }\n                else\n                {\n                    startPos = e.GetPosition(null);\n                }\n            }\n            else if (e.ChangedButton == MouseButton.Right)\n            {\n                var pos = wind.PointToScreen(e.GetPosition(wind));\n                IntPtr hWnd = new System.Windows.Interop.WindowInteropHelper(wind).Handle;\n                IntPtr hMenu = GetSystemMenu(hWnd, false);\n                int cmd = TrackPopupMenu(hMenu, 0x100, (int)pos.X, (int)pos.Y, 0, hWnd, IntPtr.Zero);\n                if (cmd > 0)\n                {\n                    SendMessage(hWnd, 0x112, (IntPtr)cmd, IntPtr.Zero);\n                }\n            }\n        }\n\n        [DllImport(\"user32.dll\")]\n        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);\n\n        [DllImport(\"user32.dll\")]\n        public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);\n\n        [DllImport(\"user32.dll\")]\n        public static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags, int x, int y, int nReserved, IntPtr hWnd, IntPtr prcRect);\n\n        private static void System_MouseMove(IconExtractorWindow wind, object sender, System.Windows.Input.MouseEventArgs e)\n        {\n            if (e.LeftButton == MouseButtonState.Pressed)\n            {\n                if (wind.WindowState == WindowState.Maximized && Math.Abs(startPos.Y - e.GetPosition(null).Y) > 2)\n                {\n                    var point = wind.PointToScreen(e.GetPosition(null));\n\n                    wind.WindowState = WindowState.Normal;\n\n                    wind.Left = point.X - (wind.ActualWidth / 2);\n                    wind.Top = point.Y - (wind.border.ActualHeight / 2);\n                }\n\n                wind.DragMove();\n            }\n        }\n\n        private static void Maximize_Click(IconExtractorWindow wind, object sender, RoutedEventArgs e)\n        {\n            wind.WindowState = (wind.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;\n        }\n\n        private static void Close_Click(IconExtractorWindow wind, object sender, RoutedEventArgs e)\n        {\n            wind.Close();\n        }\n\n        private static void Mimimize_Click(IconExtractorWindow wind, object sender, RoutedEventArgs e)\n        {\n            wind.WindowState = WindowState.Minimized;\n        }\n\n        private static void Window_StateChanged(IconExtractorWindow wind, object sender, EventArgs e)\n        {\n            if (wind.WindowState == WindowState.Maximized)\n            {\n                wind.main.BorderThickness = new Thickness(0);\n                wind.main.Margin = new Thickness(7, 7, 7, 0);\n                wind.rectMax.Visibility = Visibility.Hidden;\n                wind.rectMin.Visibility = Visibility.Visible;\n            }\n            else\n            {\n                wind.main.BorderThickness = new Thickness(1);\n                wind.main.Margin = new Thickness(0);\n                wind.rectMax.Visibility = Visibility.Visible;\n                wind.rectMin.Visibility = Visibility.Hidden;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Utils/ThemeManager.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing System.Windows.Media;\nusing HL.Interfaces;\nusing HL.Manager;\nusing MaterialDesignThemes.Wpf;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public class ThemeManager\n    {\n        private static readonly PaletteHelper _paletteHelper = new PaletteHelper();\n\n        public static void InitTheme()\n        {\n            switch (Wind.Settings.Theme)\n            {\n                case \"light\":\n                    SetLightTheme();\n                    break;\n                case \"dark\":\n                    SetDarkTheme();\n                    break;\n                default:\n                    SetSystemTheme();\n                    break;\n            }\n        }\n\n        public static void SetSystemTheme()\n        {\n            if (IsSystemLightMode())\n            {\n                SetLightTheme();\n            }\n            else\n            {\n                SetDarkTheme();\n            }\n        }\n\n        public static void SetDarkTheme()\n        {\n            ITheme theme = _paletteHelper.GetTheme();\n            IBaseTheme baseTheme = new MaterialDesignDarkTheme();\n            theme.SetBaseTheme(baseTheme);\n            theme.SetPrimaryColor((Color)ColorConverter.ConvertFromString(\"#243b45\"));\n            theme.SetSecondaryColor((Color)ColorConverter.ConvertFromString(\"#3d6475\"));\n            _paletteHelper.SetTheme(theme);\n            SetAvalonTheme(true);\n        }\n\n        public static void SetLightTheme()\n        {\n            ITheme theme = _paletteHelper.GetTheme();\n            IBaseTheme baseTheme = new MaterialDesignLightTheme();\n            theme.SetBaseTheme(baseTheme);\n            theme.SetPrimaryColor((Color)ColorConverter.ConvertFromString(\"#7dd8ff\"));\n            theme.SetSecondaryColor((Color)ColorConverter.ConvertFromString(\"#b0e7ff\"));\n            _paletteHelper.SetTheme(theme);\n            SetAvalonTheme(false);\n        }\n\n        private static bool IsSystemLightMode()\n        {\n            bool isLightMode = false;\n            try\n            {\n                var v = Microsoft.Win32.Registry.GetValue(@\"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\", \"AppsUseLightTheme\", \"1\");\n                if (v != null && v.ToString() == \"1\")\n                {\n                    isLightMode = true;\n                }\n            }\n            catch\n            {\n            }\n\n            return isLightMode;\n        }\n\n        private static void SetAvalonTheme(bool isDark)\n        {\n            IThemedHighlightingManager hm = ThemedHighlightingManager.Instance;\n            hm.SetCurrentTheme(isDark ? \"VS2019_Dark\" : \"Light\");\n            MainWindow window = (MainWindow)Application.Current.MainWindow;\n            window.textEditor.SyntaxHighlighting = hm.GetDefinitionByExtension(\".js\");\n            window.textEditor.Background = new SolidColorBrush(isDark ? Color.FromRgb(30, 30, 30) : Color.FromRgb(255, 255, 255));\n            window.textEditor.Foreground = new SolidColorBrush(isDark ? Color.FromRgb(255, 255, 255) : Color.FromRgb(0, 0, 0));\n            window.textEditor.LineNumbersForeground = new SolidColorBrush(isDark ? Color.FromRgb(190, 190, 190) : Color.FromRgb(60, 60, 60));\n            window.textEditor.EditorCurrentLineBackground = new SolidColorBrush(isDark ? Color.FromRgb(37, 37, 37) : Color.FromRgb(245, 245, 245));\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Utils/TitleBarControl.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Forms;\nusing System.Windows.Input;\nusing StartMenuManager.GUI.Dialogs;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class TitleBarControl\n    {\n        private static Point startPos;\n\n        private static Screen[] screens = System.Windows.Forms.Screen.AllScreens;\n\n        public static void InitEvents()\n        {\n            Wind.TitleBar_MinimizeButton.Click += (sender, e) => Mimimize_Click(sender, e);\n            Wind.TitleBar_MaximizeButton.Click += (sender, e) => Maximize_Click(sender, e);\n            Wind.TitleBar_CloseButton.Click += (sender, e) => Close_Click(sender, e);\n            Wind.TitleBarArea.PreviewMouseDown += (sender, e) => System_MouseDown(sender, e);\n            Wind.TitleBarArea.PreviewMouseMove += (sender, e) => System_MouseMove(sender, e);\n            Wind.LocationChanged += (sender, e) => Window_LocationChanged(sender, e);\n            Wind.StateChanged += (sender, e) => Window_StateChanged(sender, e);\n        }\n\n        private static void Window_LocationChanged(object sender, EventArgs e)\n        {\n            int sum = 0;\n            foreach (var item in screens)\n            {\n                sum += item.WorkingArea.Width;\n                if (sum >= Wind.Left + (Wind.Width / 2))\n                {\n                    Wind.MaxHeight = item.WorkingArea.Height + 7;\n                    break;\n                }\n            }\n        }\n\n        private static void System_MouseDown(object sender, MouseButtonEventArgs e)\n        {\n            if (e.ChangedButton == MouseButton.Left)\n            {\n                if (e.ClickCount >= 2)\n                {\n                    Wind.WindowState = (Wind.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;\n                }\n                else\n                {\n                    startPos = e.GetPosition(null);\n                }\n            }\n            else if (e.ChangedButton == MouseButton.Right)\n            {\n                var pos = Wind.PointToScreen(e.GetPosition(Wind));\n                IntPtr hWnd = new System.Windows.Interop.WindowInteropHelper(Wind).Handle;\n                IntPtr hMenu = GetSystemMenu(hWnd, false);\n                int cmd = TrackPopupMenu(hMenu, 0x100, (int)pos.X, (int)pos.Y, 0, hWnd, IntPtr.Zero);\n                if (cmd > 0)\n                {\n                    SendMessage(hWnd, 0x112, (IntPtr)cmd, IntPtr.Zero);\n                }\n            }\n        }\n\n        [DllImport(\"user32.dll\")]\n        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);\n\n        [DllImport(\"user32.dll\")]\n        public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);\n\n        [DllImport(\"user32.dll\")]\n        public static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags, int x, int y, int nReserved, IntPtr hWnd, IntPtr prcRect);\n\n        private static void System_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)\n        {\n            if (e.LeftButton == MouseButtonState.Pressed)\n            {\n                if (Wind.WindowState == WindowState.Maximized && Math.Abs(startPos.Y - e.GetPosition(null).Y) > 2)\n                {\n                    var point = Wind.PointToScreen(e.GetPosition(null));\n\n                    Wind.WindowState = WindowState.Normal;\n\n                    Wind.Left = point.X - (Wind.ActualWidth / 2);\n                    Wind.Top = point.Y - (Wind.border.ActualHeight / 2);\n                }\n\n                Wind.DragMove();\n            }\n        }\n\n        private static void Maximize_Click(object sender, RoutedEventArgs e)\n        {\n            Wind.WindowState = (Wind.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;\n        }\n\n        private static void Close_Click(object sender, RoutedEventArgs e)\n        {\n            if (Wind.Settings.YesNoDialogsEnabled)\n            {\n                YesNoDialog.SetMessage(\"Are you sure you want to quit?\", \"You will loose any changes.\", \"Yes\", \"No\", CloseComplete);\n                DialogManager.Show(Structures.DialogTypes.YesNoDialog);\n            }\n            else\n            {\n                CloseComplete(true);\n            }\n        }\n\n        private static void CloseComplete(bool shouldClose)\n        {\n            if (shouldClose)\n            {\n                Wind.Close();\n            }\n        }\n\n        private static void Mimimize_Click(object sender, RoutedEventArgs e)\n        {\n            Wind.WindowState = WindowState.Minimized;\n        }\n\n        private static void Window_StateChanged(object sender, EventArgs e)\n        {\n            if (Wind.WindowState == WindowState.Maximized)\n            {\n                Wind.main.BorderThickness = new Thickness(0);\n                Wind.main.Margin = new Thickness(7, 7, 7, 0);\n                Wind.rectMax.Visibility = Visibility.Hidden;\n                Wind.rectMin.Visibility = Visibility.Visible;\n            }\n            else\n            {\n                Wind.main.BorderThickness = new Thickness(1);\n                Wind.main.Margin = new Thickness(0);\n                Wind.rectMax.Visibility = Visibility.Visible;\n                Wind.rectMin.Visibility = Visibility.Hidden;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/Utils/WindowRef.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nnamespace StartMenuManager.GUI\n{\n    public static class WindowRef\n    {\n        public static MainWindow Wind { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/WelcomeCard.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Windows;\nusing static StartMenuManager.GUI.WindowRef;\n\nnamespace StartMenuManager.GUI\n{\n    public static class WelcomeCard\n    {\n        public static void InitEvents()\n        {\n            Wind.welcomeCard_CloseButton.Click += (sender, args) => CloseCardPressed(sender, args);\n        }\n\n        private static void CloseCardPressed(object sender, RoutedEventArgs args)\n        {\n            CloseCard();\n            Wind.Settings.DisplayWelcomeBox = false;\n            Serialization.JsonSerializer.SaveSettings(Wind.Settings);\n        }\n\n        public static void CloseCard()\n        {\n            Wind.welcomeCard.Visibility = Visibility.Collapsed;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.GUI/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />-->\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />-->\n\n      <!-- Windows 10 -->\n      <!--<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />-->\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>\n  -->\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "src/StartMenuManager.GUI.Installer/Product.wxs",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\"\n          xmlns:netfx=\"http://schemas.microsoft.com/wix/NetFxExtension\">\n  <Product Id=\"*\" Name=\"Start Menu Manager\" Language=\"1033\" Version=\"1.0.0.0\" Manufacturer=\"Jam-Es.com\" UpgradeCode=\"05e56518-5f22-4069-bd95-dcdb38b4ee53\">\n    <Package InstallerVersion=\"200\" Compressed=\"yes\" InstallScope=\"perMachine\" />\n    <MajorUpgrade DowngradeErrorMessage=\"A newer version of Start Menu Manager is already installed.\" />\n    <MediaTemplate EmbedCab=\"yes\"/>\n\n    <Feature Id=\"ProductFeature\" Title=\"StartMenuManager.GUI.Installer\" Level=\"1\">\n      <ComponentGroupRef Id=\"ProductComponents\" />\n      <ComponentGroupRef Id=\"RunnerComponents\" />\n      <ComponentGroupRef Id=\"BuilderComponents\" />\n      <ComponentGroupRef Id=\"PreUninstallComponents\" />\n      <ComponentRef Id=\"ApplicationShortcut\" />\n      <ComponentRef Id=\"RunnerFolder\" />\n      <ComponentRef Id=\"WebsiteIconsFolder\" />\n      <ComponentRef Id=\"RootInstallFolder\" />\n    </Feature>\n\n    <PropertyRef Id=\"WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED\"/>\n    <Condition Message=\".NET Framework 4.7.2 or later not found. Install the .NET Framework and try again.\">\n      <![CDATA[INSTALLED OR WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED]]>\n    </Condition>\n\n    <InstallExecuteSequence>\n      <!--<Custom Action=\"InstallService\" After=\"InstallFiles\">(NOT Installed) AND (NOT REMOVE)</Custom>-->\n      <Custom Action=\"UninstallService\" After=\"InstallInitialize\">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE=\"ALL\")</Custom>\n    </InstallExecuteSequence>\n    <!--<CustomAction Id=\"InstallService\" Return=\"check\" Impersonate=\"no\" Execute=\"deferred\" Directory=\"INSTALLFOLDER\" ExeCommand=\"[INSTALLFOLDER]$(var.MyService.TargetFileName) parameters...\"/>-->\n    <CustomAction Id=\"UninstallService\" Return=\"check\" Impersonate=\"no\" Execute=\"deferred\" Directory=\"PreUninstallFolder\" ExeCommand=\"[PreUninstallFolder]$(var.StartMenuManager.PreUninstall.TargetFileName)\"/>\n  </Product>\n\n  <Fragment>\n    <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">\n      <Directory Id=\"ProgramMenuFolder\">\n        <Directory Id=\"ApplicationProgramsFolder\" Name=\"Start Menu Manager\"/>\n      </Directory>\n      <Directory Id=\"ProgramFilesFolder\">\n        <Directory Id=\"INSTALLFOLDER\" Name=\"Start Menu Manager\">\n          <Directory Id=\"RunnerFolder\" Name=\"Runner\">\n            <Component Id=\"RunnerFolder\" Guid=\"48712761-7811-44a6-b704-a4e60b13d366\">\n              <CreateFolder />\n              <RemoveFile Id=\"PurgeRunnerFolder\" Name=\"*.*\" On=\"uninstall\" />\n            </Component>\n          </Directory>\n          <Directory Id=\"BuilderFolder\" Name=\"Builder\">\n          </Directory>\n          <Directory Id=\"PreUninstallFolder\" Name=\"PreUninstall\">\n          </Directory>\n          <Directory Id=\"WebsiteIconsFolder\" Name=\"Website Icons\">\n            <Component Id=\"WebsiteIconsFolder\" Guid=\"dd89d982-e8a7-425a-9067-86c09c299edd\">\n              <CreateFolder />\n              <RemoveFile Id=\"PurgeWebsiteIconsFolder\" Name=\"*.*\" On=\"uninstall\" />\n            </Component>\n          </Directory>\n          <Component Id=\"RootInstallFolder\" Guid=\"0b233294-5fca-4c9d-ba69-b73b2acfe813\">\n            <CreateFolder />\n            <RemoveFile Id=\"RootInstallFolder\" Name=\"*.*\" On=\"uninstall\" />\n          </Component>\n        </Directory>\n      </Directory>\n    </Directory>\n  </Fragment>\n\n  <Fragment>\n    <DirectoryRef Id=\"ApplicationProgramsFolder\">\n      <Component Id=\"ApplicationShortcut\" Guid=\"be941bbd-7280-4aad-9ede-a48fdf1ba220\">\n        <!--Start Menu Shortcut Folder-->\n        <Shortcut Id=\"ApplicationStartMenuShortcut\"\n                    Name=\"Start Menu Manager\"\n                    Description=\"Opens Windows Start Menu Manager by Jam-Es.com\"\n                    Target=\"[#MainExe]\"\n                    WorkingDirectory=\"APPLICATIONROOTDIRECTORY\"/>\n        <RemoveFolder Id=\"CleanUpShortCut\" Directory=\"ApplicationProgramsFolder\" On=\"uninstall\"/>\n        <RegistryValue Root=\"HKCU\" Key=\"Software\\JamEs.com\\StartMenuManager\" Name=\"installed\" Type=\"integer\" Value=\"1\" KeyPath=\"yes\"/>\n      </Component>\n    </DirectoryRef>\n  </Fragment>\n\n  <Fragment>\n    <!-- The Root Install Folder -->\n    <ComponentGroup Id=\"ProductComponents\" Directory=\"INSTALLFOLDER\">\n      <Component Id=\"ProductComponent\">\n        <File Id=\"MainExe\" Source=\"$(var.StartMenuManager.GUI.TargetPath)\" />\n      </Component>\n      <Component Id=\"MaterialDesignThemes.Wpf.dll\" Guid=\"6bcf8169-12a0-4f0d-9f72-29adcb504767\">\n        <File Id=\"MaterialDesignThemes.Wpf.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)MaterialDesignThemes.Wpf.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"MaterialDesignColors.dll\" Guid=\"69911b17-546f-4a3f-9505-9db9d10c0fc0\">\n        <File Id=\"MaterialDesignColors.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)MaterialDesignColors.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Newtonsoft.Json.dll\" Guid=\"c159ebd1-9fe5-4168-8163-75df29285ee8\">\n        <File Id=\"Newtonsoft.Json.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)Newtonsoft.Json.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"JsonSubTypes.dll\" Guid=\"5dc78854-ec03-4e9b-ad5b-a45716a73598\">\n        <File Id=\"JsonSubTypes.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)JsonSubTypes.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"ICSharpCode.AvalonEdit.dll\" Guid=\"74114a97-9cff-4d29-886a-181935b5857f\">\n        <File Id=\"ICSharpCode.AvalonEdit.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)ICSharpCode.AvalonEdit.dll\" />\n      </Component>\n      <Component Id=\"StartMenuManager.Core.dll\" Guid=\"b69ce1fa-584d-469d-a942-bd0ee08e6415\">\n        <File Id=\"StartMenuManager.Core.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)StartMenuManager.Core.dll\" />\n      </Component>\n      <Component Id=\"ConfigFile\" Guid=\"04c9a847-e3e4-4b65-be22-51567f64c288\">\n        <File Id=\"ConfigFile\" Source=\"$(var.StartMenuManager.GUI.TargetDir)Start Menu Manager.exe.config\" />\n      </Component>\n      <Component Id=\"HL.dll\" Guid=\"aeab3399-1312-48ce-9fe9-7efd380407c6\">\n        <File Id=\"HL.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)HL.dll\" />\n      </Component>\n      <Component Id=\"TextEditLib.dll\" Guid=\"c9396597-d545-472a-aab3-10b9751c078d\">\n        <File Id=\"TextEditLib.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)TextEditLib.dll\" />\n      </Component>\n      <Component Id=\"WebImageExtractor.dll\" Guid=\"d320b18a-ebc0-4cbe-ba5e-dc8b8eaef6a9\">\n        <File Id=\"WebImageExtractor.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)WebImageExtractor.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Magick.NET_Q16_AnyCPU.dll\" Guid=\"c98a1d7c-8b8d-40a2-9ada-460fca49b0ae\">\n        <File Id=\"Magick.NET_Q16_AnyCPU.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)Magick.NET-Q16-AnyCPU.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Magick.NET.Core.dll\" Guid=\"dd42057e-8750-48fb-94f5-53df4d829331\">\n        <File Id=\"Magick.NET.Core.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)Magick.NET.Core.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"HtmlAgilityPack.dll\" Guid=\"828d7b08-d185-4263-88dd-a31d28f60f5d\">\n        <File Id=\"HtmlAgilityPack.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)HtmlAgilityPack.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"FontAwesome.WPF.dll\" Guid=\"3a88eaec-cf4e-4d7e-adc1-baf1bf348e9b\">\n        <File Id=\"FontAwesome.WPF.dll\" Source=\"$(var.StartMenuManager.GUI.TargetDir)FontAwesome.WPF.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n    </ComponentGroup>\n\n    <!-- The Runner Folder -->\n    <ComponentGroup Id=\"RunnerComponents\" Directory=\"RunnerFolder\">\n      <Component Id=\"StartMenuManager.Runner.dll\" Guid=\"2d71b00c-34e6-46ca-a7c1-2389b89cfb6e\">\n        <File Source=\"$(var.StartMenuManager.Runner.TargetPath)\" />\n      </Component>\n      <Component Id=\"Runner_JsonSubTypes.dll\" Guid=\"ede7e505-1564-442f-ac8e-905c5007c483\">\n        <File Id=\"Runner_JsonSubTypes.dll\" Source=\"$(var.StartMenuManager.Runner.TargetDir)JsonSubTypes.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Runner_Newtonsoft.Json.dll\" Guid=\"be2385b9-2662-4949-a27e-769f8f4589a3\">\n        <File Id=\"Runner_Newtonsoft.Json.dll\" Source=\"$(var.StartMenuManager.Runner.TargetDir)Newtonsoft.Json.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Runner_StartMenuManager.Core.dll\" Guid=\"8e5cd35d-4649-42ce-9d10-76ed2b2b51b2\">\n        <File Id=\"Runner_StartMenuManager.Core.dll\" Source=\"$(var.StartMenuManager.Runner.TargetDir)StartMenuManager.Core.dll\" />\n      </Component>\n      <Component Id=\"Runner_ConfigFile\" Guid=\"2d35acc0-765f-46ac-a44a-68e975ba26ab\">\n        <File Id=\"Runner_ConfigFile\" Source=\"$(var.StartMenuManager.Runner.TargetDir)StartMenuManager.Runner.exe.config\" />\n      </Component>\n    </ComponentGroup>\n\n    <!-- The Builder Folder -->\n    <ComponentGroup Id=\"BuilderComponents\" Directory=\"BuilderFolder\">\n      <Component Id=\"StartMenuManager.Builder.dll\" Guid=\"b4fe5e1e-fc94-4636-9927-3141deb93a39\">\n        <File Source=\"$(var.StartMenuManager.Builder.TargetPath)\" />\n      </Component>\n      <Component Id=\"Builder_JsonSubTypes.dll\" Guid=\"f66b47e1-cb8a-4124-b308-64ea9e639100\">\n        <File Id=\"Builder_JsonSubTypes.dll\" Source=\"$(var.StartMenuManager.Builder.TargetDir)JsonSubTypes.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Builder_Newtonsoft.Json.dll\" Guid=\"4f3ccfed-fe5d-4f8a-8f45-1cc8ec8720d8\">\n        <File Id=\"Builder_Newtonsoft.Json.dll\" Source=\"$(var.StartMenuManager.Builder.TargetDir)Newtonsoft.Json.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"Builder_StartMenuManager.Core.dll\" Guid=\"b02ef2e2-8c2f-4b93-9629-b51cbe3dd5ec\">\n        <File Id=\"Builder_StartMenuManager.Core.dll\" Source=\"$(var.StartMenuManager.Builder.TargetDir)StartMenuManager.Core.dll\" />\n      </Component>\n      <Component Id=\"Builder_ConfigFile\" Guid=\"fde63fa2-e79a-4766-a19e-33c9240eda0a\">\n        <File Id=\"Builder_ConfigFile\" Source=\"$(var.StartMenuManager.Builder.TargetDir)StartMenuManager.Builder.exe.config\" />\n      </Component>\n    </ComponentGroup>\n\n    <!-- The PreUninstall Folder -->\n    <ComponentGroup Id=\"PreUninstallComponents\" Directory=\"PreUninstallFolder\">\n      <Component Id=\"StartMenuManager.PreUninstall.dll\" Guid=\"96a19dbc-a0f2-4e10-aa1f-c2bfcccdab76\">\n        <File Source=\"$(var.StartMenuManager.PreUninstall.TargetPath)\" />\n      </Component>\n      <Component Id=\"PreUninstall_JsonSubTypes.dll\" Guid=\"a003bc08-ef26-42a1-8584-02498705fa11\">\n        <File Id=\"PreUninstall_JsonSubTypes.dll\" Source=\"$(var.StartMenuManager.PreUninstall.TargetDir)JsonSubTypes.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"PreUninstall_Newtonsoft.Json.dll\" Guid=\"653ddee4-501e-4535-a947-259d13c82665\">\n        <File Id=\"PreUninstall_Newtonsoft.Json.dll\" Source=\"$(var.StartMenuManager.PreUninstall.TargetDir)Newtonsoft.Json.dll\" KeyPath=\"yes\" Checksum=\"yes\"/>\n      </Component>\n      <Component Id=\"PreUninstall_StartMenuManager.Core.dll\" Guid=\"df48474e-c19a-4f84-af2d-09f09f18e23d\">\n        <File Id=\"PreUninstall_StartMenuManager.Core.dll\" Source=\"$(var.StartMenuManager.PreUninstall.TargetDir)StartMenuManager.Core.dll\" />\n      </Component>\n      <Component Id=\"PreUninstall_ConfigFile\" Guid=\"cf2e4bce-2e67-49fc-8d38-dd7109200ab5\">\n        <File Id=\"PreUninstall_ConfigFile\" Source=\"$(var.StartMenuManager.PreUninstall.TargetDir)StartMenuManager.PreUninstall.exe.config\" />\n      </Component>\n    </ComponentGroup>\n  </Fragment>\n</Wix>\n"
  },
  {
    "path": "src/StartMenuManager.GUI.Installer/StartMenuManager.GUI.Installer.wixproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" InitialTargets=\"EnsureWixToolsetInstalled\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>3.10</ProductVersion>\n    <ProjectGuid>b7cbb2b3-65e2-44fb-aad6-9bd76884d09d</ProjectGuid>\n    <SchemaVersion>2.0</SchemaVersion>\n    <OutputName>StartMenuManager.GUI.Installer</OutputName>\n    <OutputType>Package</OutputType>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <OutputPath>bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>Debug</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"netchecker.wxs\" />\n    <Compile Include=\"Product.wxs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\StartMenuManager.Builder\\StartMenuManager.Builder.csproj\">\n      <Name>StartMenuManager.Builder</Name>\n      <Project>{72692f58-2690-4677-a87b-a686bcaa6ff2}</Project>\n      <Private>True</Private>\n      <DoNotHarvest>True</DoNotHarvest>\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\StartMenuManager.Core\\StartMenuManager.Core.csproj\">\n      <Name>StartMenuManager.Core</Name>\n      <Project>{f027fcb2-cc37-4d24-a2ab-072e19b87a18}</Project>\n      <Private>True</Private>\n      <DoNotHarvest>True</DoNotHarvest>\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\StartMenuManager.GUI\\StartMenuManager.GUI.csproj\">\n      <Name>StartMenuManager.GUI</Name>\n      <Project>{ab31d486-50b4-4ff1-9e2c-3d8a29fb8ef4}</Project>\n      <Private>True</Private>\n      <DoNotHarvest>True</DoNotHarvest>\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\StartMenuManager.PreUninstall\\StartMenuManager.PreUninstall.csproj\">\n      <Name>StartMenuManager.PreUninstall</Name>\n      <Project>{e9c16107-0f20-4b36-a65f-54d4290736ab}</Project>\n      <Private>True</Private>\n      <DoNotHarvest>True</DoNotHarvest>\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\StartMenuManager.Runner\\StartMenuManager.Runner.csproj\">\n      <Name>StartMenuManager.Runner</Name>\n      <Project>{567580be-01ce-420c-86f5-1e91ef50beee}</Project>\n      <Private>True</Private>\n      <DoNotHarvest>True</DoNotHarvest>\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <WixExtension Include=\"WixUtilExtension\">\n      <HintPath>$(WixExtDir)\\WixUtilExtension.dll</HintPath>\n      <Name>WixUtilExtension</Name>\n    </WixExtension>\n    <WixExtension Include=\"WixNetFxExtension\">\n      <HintPath>$(WixExtDir)\\WixNetFxExtension.dll</HintPath>\n      <Name>WixNetFxExtension</Name>\n    </WixExtension>\n  </ItemGroup>\n  <Import Project=\"$(WixTargetsPath)\" Condition=\" '$(WixTargetsPath)' != '' \" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\WiX\\v3.x\\Wix.targets\" Condition=\" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\\Microsoft\\WiX\\v3.x\\Wix.targets') \" />\n  <Target Name=\"EnsureWixToolsetInstalled\" Condition=\" '$(WixTargetsImported)' != 'true' \">\n    <Error Text=\"The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/\" />\n  </Target>\n  <!--\n\tTo modify your build process, add your task inside one of the targets below and uncomment it.\n\tOther similar extension points exist, see Wix.targets.\n\t<Target Name=\"BeforeBuild\">\n\t</Target>\n\t<Target Name=\"AfterBuild\">\n\t</Target>\n\t-->\n</Project>"
  },
  {
    "path": "src/StartMenuManager.GUI.Installer/netchecker.wxs",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->\n\n<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\" xmlns:util=\"http://schemas.microsoft.com/wix/UtilExtension\">\n\n  <!--\n        .NET Framework installation state properties\n\n        Official documentation can be found at the following location:\n\n           .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx\n    -->\n\n  <?define NetFx472MinRelease = 461808 ?>\n  <?define NetFx472WebLink = http://go.microsoft.com/fwlink/?LinkId=863262 ?>\n  <?define NetFx472RedistLink = http://go.microsoft.com/fwlink/?LinkId=863265 ?>\n  <?define NetFx472EulaLink = http://referencesource.microsoft.com/license.html ?>\n\n  <Fragment>\n    <PropertyRef Id=\"WIXNETFX4RELEASEINSTALLED\" />\n    <Property Id=\"WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED\" Secure=\"yes\" />\n    <SetProperty Id=\"WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED\" Value=\"1\" After=\"AppSearch\">\n      WIXNETFX4RELEASEINSTALLED >= \"#$(var.NetFx472MinRelease)\"\n    </SetProperty>\n  </Fragment>\n\n  <Fragment>\n    <util:RegistrySearchRef Id=\"NETFRAMEWORK45\"/>\n\n    <WixVariable Id=\"WixMbaPrereqPackageId\" Value=\"NetFx472Web\" />\n    <WixVariable Id=\"WixMbaPrereqLicenseUrl\" Value=\"$(var.NetFx472EulaLink)\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472WebDetectCondition\" Value=\"NETFRAMEWORK45 &gt;= $(var.NetFx472MinRelease)\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472WebInstallCondition\" Value=\"\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472WebPackageDirectory\" Value=\"redist\\\" Overridable=\"yes\" />\n\n    <PackageGroup Id=\"NetFx472Web\">\n      <ExePackage\n          InstallCommand=\"/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          RepairCommand=\"/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          UninstallCommand=\"/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          PerMachine=\"yes\"\n          DetectCondition=\"!(wix.NetFx472WebDetectCondition)\"\n          InstallCondition=\"!(wix.NetFx472WebInstallCondition)\"\n          Id=\"NetFx472Web\"\n          Vital=\"yes\"\n          Permanent=\"yes\"\n          Protocol=\"netfx4\"\n          DownloadUrl=\"$(var.NetFx472WebLink)\"\n          LogPathVariable=\"NetFx472FullLog\"\n          Compressed=\"no\"\n          Name=\"!(wix.NetFx472WebPackageDirectory)NDP472-KB4054531-Web.exe\">\n        <RemotePayload\n          CertificatePublicKey=\"C090C1A2CAFA9B967D9C87C7FE02F7C01FBDE4F2\"\n          CertificateThumbprint=\"5EAD300DC7E4D637948ECB0ED829A072BD152E17\"\n          Description=\"Microsoft .NET Framework 4.7.2 Setup\"\n          Hash=\"507ECDADC23A27C2283BA130A2AA51650E6BC05B\"\n          ProductName=\"Microsoft .NET Framework 4.7.2\"\n          Size=\"1447320\"\n          Version=\"4.7.3062.0\" />\n      </ExePackage>\n    </PackageGroup>\n  </Fragment>\n\n  <Fragment>\n    <util:RegistrySearchRef Id=\"NETFRAMEWORK45\"/>\n\n    <WixVariable Id=\"WixMbaPrereqPackageId\" Value=\"NetFx472Redist\" />\n    <WixVariable Id=\"WixMbaPrereqLicenseUrl\" Value=\"$(var.NetFx472EulaLink)\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472RedistDetectCondition\" Value=\"NETFRAMEWORK45 &gt;= $(var.NetFx472MinRelease)\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472RedistInstallCondition\" Value=\"\" Overridable=\"yes\" />\n    <WixVariable Id=\"NetFx472RedistPackageDirectory\" Value=\"redist\\\" Overridable=\"yes\" />\n\n    <PackageGroup Id=\"NetFx472Redist\">\n      <ExePackage\n          InstallCommand=\"/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          RepairCommand=\"/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          UninstallCommand=\"/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx472FullLog].html&quot;\"\n          PerMachine=\"yes\"\n          DetectCondition=\"!(wix.NetFx472RedistDetectCondition)\"\n          InstallCondition=\"!(wix.NetFx472RedistInstallCondition)\"\n          Id=\"NetFx472Redist\"\n          Vital=\"yes\"\n          Permanent=\"yes\"\n          Protocol=\"netfx4\"\n          DownloadUrl=\"$(var.NetFx472RedistLink)\"\n          LogPathVariable=\"NetFx472FullLog\"\n          Compressed=\"no\"\n          Name=\"!(wix.NetFx472RedistPackageDirectory)NDP472-KB4054530-x86-x64-AllOS-ENU.exe\">\n        <RemotePayload\n          CertificatePublicKey=\"C090C1A2CAFA9B967D9C87C7FE02F7C01FBDE4F2\"\n          CertificateThumbprint=\"5EAD300DC7E4D637948ECB0ED829A072BD152E17\"\n          Description=\"Microsoft .NET Framework 4.7.2 Setup\"\n          Hash=\"D3A416DC5FC75758D41B4C0158ACA69270D2A904\"\n          ProductName=\"Microsoft .NET Framework 4.7.2\"\n          Size=\"71607232\"\n          Version=\"4.7.3062.0\" />\n      </ExePackage>\n    </PackageGroup>\n  </Fragment>\n</Wix>"
  },
  {
    "path": "src/StartMenuManager.PreUninstall/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\n    </startup>\n</configuration>"
  },
  {
    "path": "src/StartMenuManager.PreUninstall/Program.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n// This program does some cleaning up before uninstalling.\n// It removes all shortcuts from the start menu folder.\n\nusing System;\nusing System.IO;\nusing Newtonsoft.Json;\nusing StartMenuManager.Core.DataStructures;\n\nnamespace StartMenuManager.PreUninstall\n{\n    public class Program\n    {\n        private static SettingsConfig settings;\n\n        public static int Main(string[] args)\n        {\n            string settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @\"..\\settings.json\");\n            if (System.IO.File.Exists(settingsPath))\n            {\n                StreamReader reader = new StreamReader(settingsPath);\n                string contents = reader.ReadToEnd();\n                reader.Close();\n                settings = JsonConvert.DeserializeObject<SettingsConfig>(contents);\n            }\n            else\n            {\n                settings = SettingsConfig.GetDefaultSettings();\n            }\n\n            string shortcutsFilepath = settings.GetShortcutsFilePath();\n\n            // Delete the folder (within start menu folder) containing all the shortcuts\n            if (Directory.Exists(shortcutsFilepath))\n            {\n                Directory.Delete(shortcutsFilepath, true);\n            }\n\n            return 0;\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.PreUninstall/Properties/AssemblyInfo.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"StartMenuManager.PreUninstall\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"StartMenuManager.PreUninstall\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"e9c16107-0f20-4b36-a65f-54d4290736ab\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/StartMenuManager.PreUninstall/StartMenuManager.PreUninstall.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{E9C16107-0F20-4B36-A65F-54D4290736AB}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>StartMenuManager.PreUninstall</RootNamespace>\n    <AssemblyName>StartMenuManager.PreUninstall</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>12.0.3</Version>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\StartMenuManager.Core\\StartMenuManager.Core.csproj\">\n      <Project>{f027fcb2-cc37-4d24-a2ab-072e19b87a18}</Project>\n      <Name>StartMenuManager.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/StartMenuManager.Runner/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "src/StartMenuManager.Runner/Program.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.IO;\nusing StartMenuManager.Core.DataStructures;\nusing StartMenuManager.Core.DataStructures.Actions;\nusing StartMenuManager.Core.Serialization;\n\nnamespace StartMenuManager.Runner\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            if (args == null)\n            {\n                return;\n            }\n\n            if (args.Length == 0)\n            {\n                return;\n            }\n\n            if (!System.IO.File.Exists(args[0]))\n            {\n                return;\n            }\n\n            string shortcutJsonPath = args[0];\n\n            StreamReader reader = new StreamReader(shortcutJsonPath);\n            string shortcutJson = reader.ReadToEnd();\n            reader.Close();\n\n            Shortcut shortcut = Serializer.DeserializeShortcut(shortcutJson);\n\n            if (shortcut.IsValid() != null)\n            {\n                return;\n            }\n\n            ExecuteShortcut(shortcut);\n        }\n\n        public static void ExecuteShortcut(Shortcut shortcut)\n        {\n            foreach (Action action in shortcut.Actions)\n            {\n                switch (action.Type)\n                {\n                    case \"command\":\n                        CommandAction ca = action as CommandAction;\n                        System.Diagnostics.Process process = new System.Diagnostics.Process();\n                        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();\n                        if (!ca.KeepOpen)\n                        {\n                            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;\n                            startInfo.Arguments = $\"/C {ca.Command}\";\n                        }\n                        else\n                        {\n                            startInfo.Arguments = $\"/k {ca.Command}\";\n                        }\n\n                        startInfo.FileName = \"cmd.exe\";\n                        process.StartInfo = startInfo;\n                        process.Start();\n                        break;\n                    case \"file\":\n                        FileAction fa = action as FileAction;\n                        System.Diagnostics.Process.Start(fa.Path);\n                        break;\n                    case \"folder\":\n                        FolderAction foa = action as FolderAction;\n                        System.Diagnostics.Process.Start(foa.Path);\n                        break;\n                    case \"software\":\n                        SoftwareAction sa = action as SoftwareAction;\n                        System.Diagnostics.Process.Start(sa.Path);\n                        break;\n                    case \"website\":\n                        WebsiteAction wa = action as WebsiteAction;\n                        System.Diagnostics.Process.Start(wa.Url);\n                        break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/StartMenuManager.Runner/Properties/AssemblyInfo.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"StartMenuManager.Runner\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"StartMenuManager.Runner\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"567580be-01ce-420c-86f5-1e91ef50beee\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/StartMenuManager.Runner/StartMenuManager.Runner.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{567580BE-01CE-420C-86F5-1E91EF50BEEE}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>StartMenuManager.Runner</RootNamespace>\n    <AssemblyName>StartMenuManager.Runner</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>icon-256.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <StartupObject />\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\StartMenuManager.Core\\StartMenuManager.Core.csproj\">\n      <Project>{f027fcb2-cc37-4d24-a2ab-072e19b87a18}</Project>\n      <Name>StartMenuManager.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"icon-256.ico\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/TextEditLib/AssemblyInfo.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nusing System.Windows;\n\n[assembly: ThemeInfo(\n\n    // where theme specific resource dictionaries are located\n    // (used if a resource is not found in the page,\n    // or application resource dictionaries)\n    ResourceDictionaryLocation.None,\n\n    // where the generic resource dictionary is located\n    // (used if a resource is not found in the page,\n    // app, or any theme specific resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly\n)]\n"
  },
  {
    "path": "src/TextEditLib/Extensions/HighlightCurrentLineBackgroundRenderer.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace TextEditLib.Extensions\n{\n\tusing ICSharpCode.AvalonEdit;\n\tusing ICSharpCode.AvalonEdit.Rendering;\n\tusing System.Windows.Media;\n\tusing System.Windows;\n\n\t/// <summary>\n\t/// AvalonEdit: highlight current line even when not focused\n\t/// \n\t/// Source: http://stackoverflow.com/questions/5072761/avalonedit-highlight-current-line-even-when-not-focused\n\t/// </summary>\n\tinternal class HighlightCurrentLineBackgroundRenderer : IBackgroundRenderer\n\t{\n\t\t#region fields\n\t\tprivate readonly TextEdit _Editor;\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Class Constructor from editor and SolidColorBrush definition\n\t\t/// </summary>\n\t\t/// <param name=\"editor\"></param>\n\t\tpublic HighlightCurrentLineBackgroundRenderer(TextEdit editor)\n\t\t\t: this()\n\t\t{\n\t\t\t_Editor = editor;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Hidden class standard constructor\n\t\t/// </summary>\n\t\tprotected HighlightCurrentLineBackgroundRenderer()\n\t\t{\n\t\t\t// Nothing to initialize here...\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t/// <summary>\n\t\t/// Get the <seealso cref=\"KnownLayer\"/> of the <seealso cref=\"TextEditor\"/> control.\n\t\t/// </summary>\n\t\tpublic KnownLayer Layer\n\t\t{\n\t\t\tget { return KnownLayer.Background; }\n\t\t}\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Draw the background line highlighting of the current line.\n\t\t/// </summary>\n\t\t/// <param name=\"textView\"></param>\n\t\t/// <param name=\"drawingContext\"></param>\n\t\tpublic void Draw(TextView textView, DrawingContext drawingContext)\n\t\t{\n\t\t\tif (this._Editor == null)\n\t\t\t\treturn;\n\n\t\t\tif (this._Editor.Document == null)\n\t\t\t\treturn;\n\n\t\t\tif (_Editor.EditorCurrentLineBorderThickness == 0 && _Editor.EditorCurrentLineBackground == null)\n\t\t\t\treturn;\n\n\t\t\tPen borderPen = null;\n\n\t\t\tif (_Editor.EditorCurrentLineBorder != null)\n\t\t\t{\n\t\t\t\tborderPen = new Pen(_Editor.EditorCurrentLineBorder, _Editor.EditorCurrentLineBorderThickness);\n\n\t\t\t\tif (borderPen.CanFreeze)\n\t\t\t\t\tborderPen.Freeze();\n\t\t\t}\n\n\t\t\ttextView.EnsureVisualLines();\n\t\t\tvar currentLine = _Editor.Document.GetLineByOffset(_Editor.CaretOffset);\n\n\t\t\tforeach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, currentLine))\n\t\t\t{\n\t\t\t\tdrawingContext.DrawRectangle(_Editor.EditorCurrentLineBackground, borderPen,\n\t\t\t\t\t\t\t\t\t\t\t new Rect(rect.Location, new Size(textView.ActualWidth, rect.Height)));\n\t\t\t}\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/TextEditLib/TextEdit.xaml",
    "content": "﻿<ResourceDictionary\n\txmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n\txmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n\txmlns:avalonEdit=\"http://icsharpcode.net/sharpdevelop/avalonedit\"\n\txmlns:editing=\"clr-namespace:ICSharpCode.AvalonEdit.Editing;assembly=ICSharpCode.AvalonEdit\"\n\txmlns:local=\"clr-namespace:TextEditLib\"\n\txmlns:rendering=\"clr-namespace:ICSharpCode.AvalonEdit.Rendering;assembly=ICSharpCode.AvalonEdit\"\n\txmlns:reskeys=\"clr-namespace:TextEditLib.Themes\">\n\n\t<Style TargetType=\"{x:Type local:TextEdit}\">\n\t\t<!--  AvalonEdit does not support RTL, so ensure we use LTR by default  -->\n\t\t<Setter Property=\"FlowDirection\" Value=\"LeftToRight\" />\n\t\t<Setter Property=\"Background\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorBackground}}\" />\n\t\t<Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorForeground}}\" />\n\t\t<Setter Property=\"LineNumbersForeground\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorLineNumbersForeground}}\" />\n\t\t<Setter Property=\"EditorCurrentLineBackground\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorCurrentLineBackgroundBrushKey}}\" />\n\t\t<Setter Property=\"EditorCurrentLineBorder\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorCurrentLineBorderBrushKey}}\" />\n\t\t<Setter Property=\"EditorCurrentLineBorderThickness\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorCurrentLineBorderThicknessKey}}\" />\n\t\t<Setter Property=\"ContextMenu\">\n\t\t\t<Setter.Value>\n\t\t\t\t<ContextMenu>\n\t\t\t\t\t<MenuItem Command=\"Cut\" Header=\"Cut\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Cut}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t<MenuItem Command=\"Copy\" Header=\"Copy\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Copy}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t<MenuItem Command=\"Paste\" Header=\"Paste\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Paste}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t<MenuItem Command=\"Delete\" Header=\"Delete\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Delete}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\n\t\t\t\t\t<Separator />\n\n\t\t\t\t\t<MenuItem Command=\"Undo\" Header=\"Undo\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Undo}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t<MenuItem Command=\"Redo\" Header=\"Redo\">\n\t\t\t\t\t\t<MenuItem.Icon>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tHeight=\"16\"\n\t\t\t\t\t\t\t\tSnapsToDevicePixels=\"True\"\n\t\t\t\t\t\t\t\tSource=\"{DynamicResource Image_Redo}\" />\n\t\t\t\t\t\t</MenuItem.Icon>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t</ContextMenu>\n\t\t\t</Setter.Value>\n\t\t</Setter>\n\t\t<Setter Property=\"Template\">\n\t\t\t<Setter.Value>\n\t\t\t\t<ControlTemplate TargetType=\"{x:Type local:TextEdit}\">\n\t\t\t\t\t<ControlTemplate.Resources>\n\t\t\t\t\t\t<Style TargetType=\"{x:Type rendering:TextView}\">\n\t\t\t\t\t\t\t<Setter Property=\"NonPrintableCharacterBrush\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorNonPrintableCharacterBrush}}\" />\n\t\t\t\t\t\t\t<Setter Property=\"LinkTextForegroundBrush\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorLinkTextForegroundBrush}}\" />\n\t\t\t\t\t\t\t<!--  Style hyperlink displayed within text in text editor  -->\n\t\t\t\t\t\t\t<Setter Property=\"LinkTextBackgroundBrush\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorLinkTextBackgroundBrush}}\" />\n\t\t\t\t\t\t</Style>\n\n\t\t\t\t\t\t<Style TargetType=\"{x:Type editing:TextArea}\">\n\t\t\t\t\t\t\t<Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\n\t\t\t\t\t\t\t<Setter Property=\"SelectionBrush\" Value=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorSelectionBrush}}\" />\n\t\t\t\t\t\t\t<Setter Property=\"SelectionBorder\">\n\t\t\t\t\t\t\t\t<Setter.Value>\n\t\t\t\t\t\t\t\t\t<Pen Brush=\"{DynamicResource {x:Static reskeys:ResourceKeys.EditorSelectionBorder}}\" Thickness=\"1\" />\n\t\t\t\t\t\t\t\t</Setter.Value>\n\t\t\t\t\t\t\t</Setter>\n\t\t\t\t\t\t\t<Setter Property=\"SelectionCornerRadius\" Value=\"0\" />\n\t\t\t\t\t\t\t<Setter Property=\"SelectionForeground\" Value=\"{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}\" />\n\t\t\t\t\t\t\t<Setter Property=\"Template\">\n\t\t\t\t\t\t\t\t<Setter.Value>\n\t\t\t\t\t\t\t\t\t<ControlTemplate TargetType=\"{x:Type editing:TextArea}\">\n\t\t\t\t\t\t\t\t\t\t<DockPanel Focusable=\"False\">\n\t\t\t\t\t\t\t\t\t\t\t<ItemsControl\n\t\t\t\t\t\t\t\t\t\t\t\tDockPanel.Dock=\"Left\"\n\t\t\t\t\t\t\t\t\t\t\t\tFocusable=\"False\"\n\t\t\t\t\t\t\t\t\t\t\t\tItemsSource=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=LeftMargins}\">\n\t\t\t\t\t\t\t\t\t\t\t\t<ItemsControl.ItemsPanel>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ItemsPanelTemplate>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StackPanel Orientation=\"Horizontal\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ItemsPanelTemplate>\n\t\t\t\t\t\t\t\t\t\t\t\t</ItemsControl.ItemsPanel>\n\t\t\t\t\t\t\t\t\t\t\t</ItemsControl>\n\t\t\t\t\t\t\t\t\t\t\t<ContentPresenter\n\t\t\t\t\t\t\t\t\t\t\t\tPanel.ZIndex=\"-1\"\n\t\t\t\t\t\t\t\t\t\t\t\tContent=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TextView}\"\n\t\t\t\t\t\t\t\t\t\t\t\tFocusable=\"False\" />\n\t\t\t\t\t\t\t\t\t\t</DockPanel>\n\t\t\t\t\t\t\t\t\t</ControlTemplate>\n\t\t\t\t\t\t\t\t</Setter.Value>\n\t\t\t\t\t\t\t</Setter>\n\t\t\t\t\t\t</Style>\n\t\t\t\t\t</ControlTemplate.Resources>\n\t\t\t\t\t<Border\n\t\t\t\t\t\tBackground=\"{TemplateBinding Background}\"\n\t\t\t\t\t\tBorderBrush=\"{TemplateBinding BorderBrush}\"\n\t\t\t\t\t\tBorderThickness=\"{TemplateBinding BorderThickness}\">\n\t\t\t\t\t\t<ScrollViewer\n\t\t\t\t\t\t\tName=\"PART_ScrollViewer\"\n\t\t\t\t\t\t\tPadding=\"{TemplateBinding Padding}\"\n\t\t\t\t\t\t\tHorizontalContentAlignment=\"Left\"\n\t\t\t\t\t\t\tVerticalContentAlignment=\"Top\"\n\t\t\t\t\t\t\tCanContentScroll=\"True\"\n\t\t\t\t\t\t\tContent=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TextArea}\"\n\t\t\t\t\t\t\tFocusable=\"False\"\n\t\t\t\t\t\t\tHorizontalScrollBarVisibility=\"Auto\"\n\t\t\t\t\t\t\tVerticalScrollBarVisibility=\"Auto\" />\n\t\t\t\t\t</Border>\n\t\t\t\t\t<ControlTemplate.Triggers>\n\t\t\t\t\t\t<Trigger Property=\"WordWrap\" Value=\"True\">\n\t\t\t\t\t\t\t<Setter TargetName=\"PART_ScrollViewer\" Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\" />\n\t\t\t\t\t\t</Trigger>\n\t\t\t\t\t</ControlTemplate.Triggers>\n\t\t\t\t</ControlTemplate>\n\t\t\t</Setter.Value>\n\t\t</Setter>\n\t</Style>\n\n</ResourceDictionary>"
  },
  {
    "path": "src/TextEditLib/TextEdit.xaml.cs",
    "content": "﻿// -------------------------------------------------------------------------------------------------\n// Start Menu Manager - © Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace TextEditLib\n{\n\tusing ICSharpCode.AvalonEdit;\n    using System.Windows;\n\tusing System.Windows.Media;\n\tusing TextEditLib.Extensions;\n\n\t/// <summary>\n\t/// Implements an AvalonEdit control textedit control with extensions.\n\t/// </summary>\n\tpublic class TextEdit : TextEditor\n\t{\n\t\t#region fields\n\t\t#region EditorCurrentLine Highlighting Colors\n\t\tpublic static readonly DependencyProperty EditorCurrentLineBackgroundProperty =\n\t\t\tDependencyProperty.Register(\"EditorCurrentLineBackground\",\n\t\t\t\t\t\t\t\t\t\t typeof(Brush),\n\t\t\t\t\t\t\t\t\t\t typeof(TextEdit),\n\t\t\t\t\t\t\t\t\t\t new UIPropertyMetadata(new SolidColorBrush(Colors.Transparent)));\n\n\t\tpublic static readonly DependencyProperty EditorCurrentLineBorderProperty =\n\t\t\tDependencyProperty.Register(\"EditorCurrentLineBorder\", typeof(Brush),\n\t\t\t\ttypeof(TextEdit), new PropertyMetadata(new SolidColorBrush(\n\t\t\t\t\tColor.FromArgb(0x60, SystemColors.HighlightBrush.Color.R,\n\t\t\t\t\t\t\t\t\t\t SystemColors.HighlightBrush.Color.G,\n\t\t\t\t\t\t\t\t\t\t SystemColors.HighlightBrush.Color.B))));\n\n\t\tpublic static readonly DependencyProperty EditorCurrentLineBorderThicknessProperty =\n\t\t\tDependencyProperty.Register(\"EditorCurrentLineBorderThickness\", typeof(double),\n\t\t\t\ttypeof(TextEdit), new PropertyMetadata(2.0d));\n\t\t#endregion EditorCurrentLine Highlighting Colors\n\t\t#endregion fields\n\n\t\t#region ctors\n\t\t/// <summary>\n\t\t/// Static class constructor\n\t\t/// </summary>\n\t\tstatic TextEdit()\n\t\t{\n\t\t\tDefaultStyleKeyProperty.OverrideMetadata(typeof(TextEdit),\n\t\t\t\tnew FrameworkPropertyMetadata(typeof(TextEdit)));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Class constructor\n\t\t/// </summary>\n\t\tpublic TextEdit()\n\t\t{\n\t\t\tthis.Loaded += TextEdit_Loaded;\n\t\t}\n\t\t#endregion ctors\n\n\t\t#region properties\n\t\t#region EditorCurrentLine Highlighting Colors\n\t\t/// <summary>\n\t\t/// Style the background color of the current editor line\n\t\t/// </summary>\n\t\tpublic Brush EditorCurrentLineBackground\n\t\t{\n\t\t\tget { return (Brush)GetValue(EditorCurrentLineBackgroundProperty); }\n\t\t\tset { SetValue(EditorCurrentLineBackgroundProperty, value); }\n\t\t}\n\n\t\tpublic Brush EditorCurrentLineBorder\n\t\t{\n\t\t\tget { return (Brush)GetValue(EditorCurrentLineBorderProperty); }\n\t\t\tset { SetValue(EditorCurrentLineBorderProperty, value); }\n\t\t}\n\n\t\tpublic double EditorCurrentLineBorderThickness\n\t\t{\n\t\t\tget { return (double)GetValue(EditorCurrentLineBorderThicknessProperty); }\n\t\t\tset { SetValue(EditorCurrentLineBorderThicknessProperty, value); }\n\t\t}\n\t\t#endregion EditorCurrentLine Highlighting Colors\n\t\t#endregion properties\n\n\t\t#region methods\n\t\t/// <summary>\n\t\t/// Method is invoked when the control is loaded for the first time.\n\t\t/// </summary>\n\t\t/// <param name=\"sender\"></param>\n\t\t/// <param name=\"e\"></param>\n\t\tprivate void TextEdit_Loaded(object sender, RoutedEventArgs e)\n\t\t{\n\t\t\tAdjustCurrentLineBackground();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the <seealso cref=\"SolidColorBrush\"/> to be used for highlighting the current editor line.\n\t\t/// </summary>\n\t\tprivate void AdjustCurrentLineBackground()\n\t\t{\n\t\t\tHighlightCurrentLineBackgroundRenderer oldRenderer = null;\n\n\t\t\t// Make sure there is only one of this type of background renderer\n\t\t\t// Otherwise, we might keep adding and WPF keeps drawing them on top of each other\n\t\t\tforeach (var item in this.TextArea.TextView.BackgroundRenderers)\n\t\t\t{\n\t\t\t\tif (item != null)\n\t\t\t\t{\n\t\t\t\t\tif (item is HighlightCurrentLineBackgroundRenderer)\n\t\t\t\t\t{\n\t\t\t\t\t\toldRenderer = item as HighlightCurrentLineBackgroundRenderer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (oldRenderer != null)\n\t\t\t\tthis.TextArea.TextView.BackgroundRenderers.Remove(oldRenderer);\n\n\t\t\tthis.TextArea.TextView.BackgroundRenderers.Add(new HighlightCurrentLineBackgroundRenderer(this));\n\t\t}\n\t\t#endregion methods\n\t}\n}\n"
  },
  {
    "path": "src/TextEditLib/TextEditLib.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp3.0;net4.5.2</TargetFrameworks>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Remove=\"Resources\\Icons\\Copy.ico\" />\n    <None Remove=\"Resources\\Icons\\Copy_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\Cut.ico\" />\n    <None Remove=\"Resources\\Icons\\Cut_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\Delete.ico\" />\n    <None Remove=\"Resources\\Icons\\Delete_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\OpenFile.ico\" />\n    <None Remove=\"Resources\\Icons\\OpenFile_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\Paste.ico\" />\n    <None Remove=\"Resources\\Icons\\Paste_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\Redo.ico\" />\n    <None Remove=\"Resources\\Icons\\Redo_16x.svg\" />\n    <None Remove=\"Resources\\Icons\\Undo.ico\" />\n    <None Remove=\"Resources\\Icons\\Undo_16x.svg\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Resources\\Icons\\Copy_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\Cut_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\Delete_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\OpenFile_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\Paste_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\Redo_16x.svg\" />\n    <Content Include=\"Resources\\Icons\\Undo_16x.svg\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AvalonEdit\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Resource Include=\"Resources\\Icons\\Copy.ico\" />\n    <Resource Include=\"Resources\\Icons\\Cut.ico\" />\n    <Resource Include=\"Resources\\Icons\\Delete.ico\" />\n    <Resource Include=\"Resources\\Icons\\OpenFile.ico\" />\n    <Resource Include=\"Resources\\Icons\\Paste.ico\" />\n    <Resource Include=\"Resources\\Icons\\Redo.ico\" />\n    <Resource Include=\"Resources\\Icons\\Undo.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"TextEdit.xaml.cs\">\n      <SubType>Code</SubType>\n      <DependentUpon>TextEdit.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Update=\"Microsoft.SourceLink.GitHub\" Version=\"1.0.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Page Update=\"Themes\\DarkBrushs.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Update=\"Themes\\Generic.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Update=\"Themes\\Icons.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Update=\"Themes\\LightBrushs.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/TextEditLib/Themes/DarkBrushs.xaml",
    "content": "﻿<ResourceDictionary\n\txmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n\txmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n\txmlns:local=\"clr-namespace:TextEditLib.Themes\"\n\txmlns:options=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation/options\"\n\txmlns:reskeys=\"clr-namespace:TextEditLib.Themes\">\n\t<!--\n\t\tAccent Color Brush Definition\n\t\t- Look for references on ControlAccentBrushKey to find where this is being set in code\n\t-->\n\t<Color x:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys}, ResourceId=ControlAccentColorKey}\">#1ba1e2</Color>\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=ControlAccentBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorBackground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#FF181818\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorForeground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#FFFFFFFF\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLineNumbersForeground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#ff929292\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorSelectionBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\"0.75\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorSelectionBorder}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\"0.75\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorNonPrintableCharacterBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#2FFFFFFF\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLinkTextForegroundBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#FFAAAAFF\" />\n\n\t<!--  Style hyperlink displayed within text in text editor  -->\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLinkTextBackgroundBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"Transparent\" />\n\n\n\t<!--  Current Line Highlighting Keys  -->\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorCurrentLineBackgroundBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#2FCCCDCE\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorCurrentLineBorderBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\".6\"\n\t\tColor=\"#2FCCCDCE\" />\n\n\t<!--System:Double x:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n                     ResourceId=EditorCurrentLineBorderThicknessKey}\">3</System:Double-->\n\t<!--  Current Line Highlighting Keys  -->\n\n</ResourceDictionary>"
  },
  {
    "path": "src/TextEditLib/Themes/Generic.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\t<ResourceDictionary.MergedDictionaries>\n\t\t<ResourceDictionary Source=\"/TextEditLib;component/Themes/Icons.xaml\" />\n\t\t<ResourceDictionary Source=\"/TextEditLib;component/Themes/LightBrushs.xaml\" />\n\t\t<ResourceDictionary Source=\"/TextEditLib;component/TextEdit.xaml\" />\n\t</ResourceDictionary.MergedDictionaries>\n</ResourceDictionary>\n"
  },
  {
    "path": "src/TextEditLib/Themes/Icons.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n\t<BitmapImage x:Key=\"Image_OpenFile\" UriSource=\"/TextEditLib;component/Resources/Icons/OpenFile.ico\" />\n\n\t<BitmapImage x:Key=\"Image_Copy\" UriSource=\"/TextEditLib;component/Resources/Icons/Copy.ico\" />\n\t<BitmapImage x:Key=\"Image_Cut\" UriSource=\"/TextEditLib;component/Resources/Icons/Cut.ico\" />\n\t<BitmapImage x:Key=\"Image_Paste\" UriSource=\"/TextEditLib;component/Resources/Icons/Paste.ico\" />\n\n\t<BitmapImage x:Key=\"Image_Delete\" UriSource=\"/TextEditLib;component/Resources/Icons/Delete.ico\" />\n\n\t<BitmapImage x:Key=\"Image_Undo\" UriSource=\"/TextEditLib;component/Resources/Icons/Undo.ico\" />\n\t<BitmapImage x:Key=\"Image_Redo\" UriSource=\"/TextEditLib;component/Resources/Icons/Redo.ico\" />\n\n</ResourceDictionary>"
  },
  {
    "path": "src/TextEditLib/Themes/LightBrushs.xaml",
    "content": "﻿<ResourceDictionary\n\txmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n\txmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n\txmlns:local=\"clr-namespace:TextEditLib.Themes\"\n\txmlns:options=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation/options\"\n\txmlns:reskeys=\"clr-namespace:TextEditLib.Themes\">\n\n\t<!--\n\t\tAccent Color Brush Definition\n\t\t- Look for references on ControlAccentBrushKey to find where this is being set in code\n\t-->\n\t<Color x:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys}, ResourceId=ControlAccentColorKey}\">#1ba1e2</Color>\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=ControlAccentBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorBackground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"White\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorForeground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"Black\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLineNumbersForeground}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"Black\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorSelectionBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\"0.75\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorSelectionBorder}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\"0.75\"\n\t\tColor=\"{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorNonPrintableCharacterBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#3F8080FF\" />\n\n\t<!--  Style hyperlink displayed within text in text editor  -->\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLinkTextForegroundBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#FF4040FF\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorLinkTextBackgroundBrush}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#00000000\" />\n\n\t<!--  Current Line Highlighting Keys  -->\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorCurrentLineBackgroundBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tColor=\"#2FCCCDCE\" />\n\n\t<SolidColorBrush\n\t\tx:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n\t\t\t\t\t\t\t\t\t ResourceId=EditorCurrentLineBorderBrushKey}\"\n\t\toptions:Freeze=\"true\"\n\t\tOpacity=\".6\"\n\t\tColor=\"#2FCCCDCE\" />\n\n\t<!--System:Double x:Key=\"{ComponentResourceKey TypeInTargetAssembly={x:Type reskeys:ResourceKeys},\n                     ResourceId=EditorCurrentLineBorderThicknessKey}\">3</System:Double-->\n\t<!--  Current Line Highlighting Keys  -->\n\n</ResourceDictionary>"
  },
  {
    "path": "src/TextEditLib/Themes/ResourceKeys.cs",
    "content": "// -------------------------------------------------------------------------------------------------\n// Start Menu Manager -  Copyright 2020 - Jam-Es.com\n// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.\n// -------------------------------------------------------------------------------------------------\n\n#pragma warning disable\n\nnamespace TextEditLib.Themes\n{\n\tusing System.Windows;\n\n\tpublic static class ResourceKeys\n\t{\n\t\t#region Accent Keys\n\t\t/// <summary>\n\t\t/// Accent Color Key - This Color key is used to accent elements in the UI\n\t\t/// (e.g.: Color of Activated Normal Window Frame, ResizeGrip, Focus or MouseOver input elements)\n\t\t/// </summary>\n\t\tpublic static readonly ComponentResourceKey ControlAccentColorKey = new ComponentResourceKey(typeof(ResourceKeys), \"ControlAccentColorKey\");\n\n\t\t/// <summary>\n\t\t/// Accent Brush Key - This Brush key is used to accent elements in the UI\n\t\t/// (e.g.: Color of Activated Normal Window Frame, ResizeGrip, Focus or MouseOver input elements)\n\t\t/// </summary>\n\t\tpublic static readonly ComponentResourceKey ControlAccentBrushKey = new ComponentResourceKey(typeof(ResourceKeys), \"ControlAccentBrushKey\");\n\t\t#endregion Accent Keys\n\n\t\t#region TextEditor BrushKeys\n\t\tpublic static readonly ComponentResourceKey EditorBackground = new ComponentResourceKey(typeof(ResourceKeys), \"EditorBackground\");\n\t\tpublic static readonly ComponentResourceKey EditorForeground = new ComponentResourceKey(typeof(ResourceKeys), \"EditorForeground\");\n\t\tpublic static readonly ComponentResourceKey EditorLineNumbersForeground = new ComponentResourceKey(typeof(ResourceKeys), \"EditorLineNumbersForeground\");\n\t\tpublic static readonly ComponentResourceKey EditorSelectionBrush = new ComponentResourceKey(typeof(ResourceKeys), \"EditorSelectionBrush\");\n\t\tpublic static readonly ComponentResourceKey EditorSelectionBorder = new ComponentResourceKey(typeof(ResourceKeys), \"EditorSelectionBorder\");\n\t\tpublic static readonly ComponentResourceKey EditorNonPrintableCharacterBrush = new ComponentResourceKey(typeof(ResourceKeys), \"EditorNonPrintableCharacterBrush\");\n\t\tpublic static readonly ComponentResourceKey EditorLinkTextForegroundBrush = new ComponentResourceKey(typeof(ResourceKeys), \"EditorLinkTextForegroundBrush\");\n\t\tpublic static readonly ComponentResourceKey EditorLinkTextBackgroundBrush = new ComponentResourceKey(typeof(ResourceKeys), \"EditorLinkTextBackgroundBrush\");\n\n\t\t#region DiffView Currentline Keys\n\t\t/// <summary>\n\t\t/// Gets the background color for highlighting for the currently highlighed line.\n\t\t/// </summary>\n\t\tpublic static readonly ComponentResourceKey EditorCurrentLineBackgroundBrushKey = new ComponentResourceKey(typeof(ResourceKeys), \"EditorCurrentLineBackgroundBrushKey\");\n\n\t\t/// <summary>\n\t\t/// Gets the border color for highlighting for the currently highlighed line.\n\t\t/// </summary>\n\t\tpublic static readonly ComponentResourceKey EditorCurrentLineBorderBrushKey = new ComponentResourceKey(typeof(ResourceKeys), \"EditorCurrentLineBorderBrushKey\");\n\n\t\t/// <summary>\n\t\t/// Gets the border thickness for highlighting for the currently highlighed line.\n\t\t/// </summary>\n\t\tpublic static readonly ComponentResourceKey EditorCurrentLineBorderThicknessKey = new ComponentResourceKey(typeof(ResourceKeys), \"EditorCurrentLineBorderThicknessKey\");\n\t\t#endregion DiffView Currentline Keys\n\t\t#endregion TextEditor BrushKeys\n\t}\n}\n"
  },
  {
    "path": "stylecop.json",
    "content": "﻿{\n  \"$schema\": \"https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json\",\n  \"settings\": {\n    \"documentationRules\": {\n      \"companyName\": \"Jam-Es.com\",\n      \"copyrightText\": \"-------------------------------------------------------------------------------------------------\\nStart Menu Manager - © Copyright 2020 - {companyName}\\nLicensed under the {licenseName} License ({licenseName}). See {licenseFile} in the repo root for license information.\\n-------------------------------------------------------------------------------------------------\",\n      \"variables\": {\n        \"licenseName\": \"MIT\",\n        \"licenseFile\": \"LICENSE\"\n      },\n      \"xmlHeader\": false,\n      \"headerDecoration\": \"-------------------------------------------------------------------------------------------------\"\n    },\n    \"orderingRules\": {\n      \"systemUsingDirectivesFirst\": true,\n      \"usingDirectivesPlacement\": \"outsideNamespace\",\n      \"elementOrder\": [\n        \"kind\"\n      ]\n    },\n    \"indentation\": {\n      \"useTabs\": false,\n      \"indentationSize\": 4,\n      \"tabSize\": 4\n    }\n  }\n}\n"
  }
]