diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/ForceRuntimeCompatibility.reg b/military-symbology-styles/utils-and-source-data/style-creation-utilities/ForceRuntimeCompatibility.reg
deleted file mode 100644
index 1480674..0000000
Binary files a/military-symbology-styles/utils-and-source-data/style-creation-utilities/ForceRuntimeCompatibility.reg and /dev/null differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/.gitignore b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/.gitignore
new file mode 100644
index 0000000..ac69bc4
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/.gitignore
@@ -0,0 +1,8 @@
+################################################################################
+# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
+################################################################################
+
+/.vs
+/bin/Debug
+/bin/Release
+/obj
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Config.daml b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Config.daml
new file mode 100644
index 0000000..15d62dc
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Config.daml
@@ -0,0 +1,37 @@
+
+
+ GenerateSVGStyle
+ GenerateSVGStyle description
+ Images\AddinDesktop32.png
+ Acme
+ Acme
+ 2/21/2018
+ Framework
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/CsvToTableMaker.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/CsvToTableMaker.cs
new file mode 100644
index 0000000..9ddd476
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/CsvToTableMaker.cs
@@ -0,0 +1,152 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GenerateSVGStyle
+{
+ ///
+ /// Takes a CSV file and converts to a Data Table
+ /// IMPORTANT: the CSV *must* have a first/header row that has the desired
+ /// column names to be used
+ /// CSV lines starting with "#" will be ignored (as comments)
+ ///
+ class CsvToTableMaker
+ {
+ public CsvToTableMaker()
+ {
+
+ }
+
+ // Somewhat hack-ish - needed check for when file is locked or can't be opened
+ // (e.g. because of open/being viewed somewhere else-like Excel)
+ public bool IsFileOpenable(string filePath)
+ {
+ try
+ {
+ using (File.Open(filePath, FileMode.Open)) { }
+ }
+ catch (IOException ex)
+ {
+ System.Diagnostics.Trace.WriteLine("ERROR: " + " Message: " + ex.Message +
+ " Could not open file : " + filePath);
+ return false;
+ }
+
+ return true;
+ }
+
+ public bool LoadTable(string csvFile)
+ {
+ bool success = false;
+
+ if (!File.Exists(csvFile) || !(IsFileOpenable(csvFile)))
+ return false;
+
+ if (table != null)
+ {
+ System.Diagnostics.Trace.WriteLine(
+ "Warning: Unexpected: Table has been initialized previously");
+ return false;
+ }
+
+ table = new DataTable();
+
+ bool firstRow = true;
+ int maxHeadingColumn = 0;
+
+ foreach (string line in File.ReadLines(csvFile))
+ {
+ if (line.StartsWith("#")) // allow "#" comment character
+ continue;
+
+ string[] values = line.Split(',');
+
+ if (firstRow)
+ {
+ // IMPORTANT: creates column names from the first row
+ foreach (string columnName in values)
+ {
+ table.Columns.Add(columnName);
+ maxHeadingColumn++;
+ }
+ firstRow = false;
+ continue;
+ }
+
+ DataRow row = table.NewRow();
+
+ int index = 0;
+ foreach (string value in values)
+ {
+ if (index < maxHeadingColumn) // just in case
+ row[index++] = value;
+ }
+
+ table.Rows.Add(row);
+ }
+
+ success = true;
+
+ return success;
+ }
+
+ public DataTable Table
+ {
+ get { return table; }
+ }
+ private DataTable table = null;
+
+ public bool IsValid
+ {
+ get
+ {
+ if (table == null)
+ return false;
+
+ if ((table.Rows != null) && (table.Columns != null) &&
+ (table.Rows.Count > 0) && (table.Columns.Count > 0))
+ {
+ // Any other check needed? column names?
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ public void DebugOutput()
+ {
+ if (!IsValid)
+ {
+ System.Diagnostics.Trace.WriteLine("Table not initialized! Can't Output!");
+ return;
+ }
+
+ foreach (DataRow row in table.Rows)
+ {
+ foreach (var item in row.ItemArray)
+ {
+ System.Diagnostics.Trace.Write(" | " + item);
+ }
+ System.Diagnostics.Trace.WriteLine(" |");
+ }
+ }
+
+ }
+
+}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop16.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop16.png
new file mode 100644
index 0000000..0118942
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop16.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop32.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop32.png
new file mode 100644
index 0000000..9713e3b
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/AddInDesktop32.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue16.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue16.png
new file mode 100644
index 0000000..20b1187
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue16.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue32.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue32.png
new file mode 100644
index 0000000..e3b26ab
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/DarkImages/GenericButtonBlue32.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateButton.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateButton.cs
new file mode 100644
index 0000000..81d0d2f
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateButton.cs
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2018 Esri
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ArcGIS.Desktop.Framework;
+using ArcGIS.Desktop.Framework.Contracts;
+
+namespace GenerateSVGStyle
+{
+ internal class GenerateButton : Button
+ {
+ private GenerateOptionsViewModel _vm = new GenerateOptionsViewModel();
+ protected override void OnClick()
+ {
+ GenerateOptions dlg = new GenerateOptions(_vm);
+
+ Module1.Current.GenerateOptionsWindow = dlg;
+
+ var ok = dlg.ShowDialog();
+ }
+ }
+}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml
new file mode 100644
index 0000000..3873fc8
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml.cs
new file mode 100644
index 0000000..792978e
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptions.xaml.cs
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright 2018 Esri
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+ using ArcGIS.Desktop.Framework.Controls;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace GenerateSVGStyle
+{
+ ///
+ /// Interaction logic for GenerateOptions.xaml
+ ///
+ public partial class GenerateOptions
+ {
+ public GenerateOptions(GenerateOptionsViewModel vm)
+ {
+ InitializeComponent();
+ this.DataContext = vm;
+ }
+ }
+}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptionsViewModel.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptionsViewModel.cs
new file mode 100644
index 0000000..c1fa157
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateOptionsViewModel.cs
@@ -0,0 +1,737 @@
+/*******************************************************************************
+ * Copyright 2018 Esri
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+ using ArcGIS.Core.CIM;
+using ArcGIS.Desktop.Core;
+using ArcGIS.Desktop.Framework;
+using ArcGIS.Desktop.Framework.Controls;
+using ArcGIS.Desktop.Framework.Contracts;
+using ArcGIS.Desktop.Framework.Threading.Tasks;
+using ArcGIS.Desktop.Internal.Mapping;
+using ArcGIS.Desktop.Mapping;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using System.Windows;
+using Microsoft.Win32;
+using ArcGIS.Desktop.Catalog;
+
+namespace GenerateSVGStyle
+{
+ public class GenerateOptionsViewModel : ViewModelBase
+ {
+ public bool IsGenerateEnabled
+ {
+ get
+ {
+ return !(string.IsNullOrEmpty(CsvPath) || string.IsNullOrEmpty(StyleFolder)
+ || string.IsNullOrEmpty(StyleFileName));
+ }
+ }
+
+ private string svgRootPath = "";
+ public string SvgRootPath
+ {
+ get
+ { return svgRootPath; }
+ set
+ {
+ SetProperty(ref svgRootPath, value, () => SvgRootPath);
+ }
+ }
+
+ private string csvPath = "";
+ public string CsvPath
+ {
+ get
+ { return csvPath; }
+ set
+ {
+ SetProperty(ref csvPath, value, () => CsvPath);
+ NotifyPropertyChanged(() => IsGenerateEnabled);
+ }
+ }
+
+ private string styleFolder = "";
+ public string StyleFolder
+ {
+ get
+ { return styleFolder; }
+ set
+ {
+ SetProperty(ref styleFolder, value, () => StyleFolder);
+ NotifyPropertyChanged(() => IsGenerateEnabled);
+ }
+ }
+
+ private string styleFileName = "StyleFile.stylx";
+ public string StyleFileName
+ {
+ get
+ { return styleFileName; }
+ set
+ {
+ SetProperty(ref styleFileName, value, () => StyleFileName);
+ NotifyPropertyChanged(() => IsGenerateEnabled);
+ }
+ }
+
+ public string StylePath
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(StyleFolder)
+ || string.IsNullOrEmpty(StyleFileName))
+ return string.Empty;
+
+ string styleFile = System.IO.Path.Combine(StyleFolder, StyleFileName);
+ // ensure it ends with ".stylx"
+
+ if (!styleFile.ToLower().EndsWith(".stylx"))
+ styleFile += ".stylx";
+
+ return styleFile;
+ }
+ }
+
+ private ICommand _browseFileCmd = null;
+ public ICommand BrowseFileCommand
+ {
+ get { return _browseFileCmd ?? (_browseFileCmd = new RelayCommand(() => this.BrowseFileName())); }
+ }
+
+ private ICommand _browseSvgFolderCmd = null;
+ public ICommand BrowseSvgFolderCmd
+ {
+ get { return _browseSvgFolderCmd ?? (_browseSvgFolderCmd = new RelayCommand(() => this.BrowseSvgFolder())); }
+ }
+
+ private ICommand _browseStyleFolderCmd = null;
+ public ICommand BrowseStyleFolderCommand
+ {
+ get { return _browseStyleFolderCmd ?? (_browseStyleFolderCmd = new RelayCommand(() => this.BrowseStyleFolder())); }
+ }
+
+ private ICommand _mergeStylesCmd = null;
+ public ICommand MergeStylesCommand
+ {
+ get { return _mergeStylesCmd ?? (_mergeStylesCmd = new RelayCommand(() => this.MergeStyles())); }
+ }
+
+ private ICommand _browseStyle1Cmd = null;
+ public ICommand BrowseStyle1Command
+ {
+ get { return _browseStyle1Cmd ?? (_browseStyle1Cmd = new RelayCommand(() => this.BrowseStyle1())); }
+ }
+
+ private ICommand _browseStyle2Cmd = null;
+ public ICommand BrowseStyle2Command
+ {
+ get { return _browseStyle2Cmd ?? (_browseStyle2Cmd = new RelayCommand(() => this.BrowseStyle2())); }
+ }
+
+ private ICommand _executeSqlScriptCmd = null;
+ public ICommand ExecuteSqlScriptCommand
+ {
+ get { return _executeSqlScriptCmd ?? (_executeSqlScriptCmd = new RelayCommand(() => this.ExecuteSqlScript())); }
+ }
+
+ private string BrowseItem(string itemFilter, string initialPath = "")
+ {
+ Module1.Current.GenerateOptionsWindow.Topmost = false;
+
+ string folderPath = "";
+
+ if (string.IsNullOrEmpty(initialPath))
+ {
+ var myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+ initialPath = Path.Combine(System.IO.Path.Combine(myDocs, "ArcGIS"));
+ }
+
+ OpenItemDialog pathDialog = new OpenItemDialog()
+ {
+ Title = "Select Folder",
+ InitialLocation = initialPath,
+ MultiSelect = false,
+ Filter = itemFilter,
+ };
+
+ bool? ok = pathDialog.ShowDialog();
+ if ((ok == true) && (pathDialog.Items.Count() > 0))
+ {
+ IEnumerable- selectedItems = pathDialog.Items;
+ folderPath = selectedItems.First().Path;
+ }
+
+ // IMPORTANT/WORKAROUND: must set Addin Form back to topmost
+ Module1.Current.GenerateOptionsWindow.Topmost = true;
+
+ return folderPath;
+ }
+
+ private void BrowseSvgFolder()
+ {
+ SvgRootPath = BrowseItem(ItemFilters.folders);
+
+ // Check against a Well Known File:
+ string expectedFile = "BoundingOctagon.svg";
+ string expectedPath = System.IO.Path.Combine(SvgRootPath, expectedFile);
+
+ if (!File.Exists(expectedPath))
+ {
+ MessageBoxResult result =
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Are you sure this path is correct? \n" + expectedPath,
+ "Recheck Path", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+ }
+
+ private void BrowseStyleFolder()
+ {
+ StyleFolder = BrowseItem(ItemFilters.folders);
+ }
+
+ private ICommand _generateCommand = null;
+ public ICommand GenerateCommand
+ {
+ get
+ {
+ if (_generateCommand == null)
+ {
+ _generateCommand = new RelayCommand(GenerateStyleFromCsvFile, () =>
+ {
+ return CsvPath != null && StylePath != null;
+ });
+ }
+ return _generateCommand;
+ }
+ }
+
+ private void BrowseFileName()
+ {
+ OpenFileDialog openFileDialog = new OpenFileDialog();
+ openFileDialog.Filter = "JSON Files (*.csv)|*.csv";
+ if (openFileDialog.ShowDialog() != true)
+ return;
+
+ var filename = openFileDialog.FileName;
+ CsvPath = filename;
+
+ NotifyPropertyChanged(() => CsvPath);
+ }
+
+ public bool IsMergeEnabled
+ {
+ get
+ {
+ // Enable if Styles are set and exist
+ return !string.IsNullOrEmpty(SourceStyleToMerge) && !string.IsNullOrEmpty(StyleToMergeInto) &&
+ !string.IsNullOrEmpty(MergedStyleName) && (SourceStyleToMerge != StyleToMergeInto) &&
+ File.Exists(SourceStyleToMerge) && File.Exists(StyleToMergeInto);
+ }
+ }
+
+ public void BrowseStyle1()
+ {
+ SourceStyleToMerge = BrowseItem(ItemFilters.styleFiles);
+
+ NotifyPropertyChanged(() => SourceStyleToMerge);
+ }
+
+ public void BrowseStyle2()
+ {
+ StyleToMergeInto = BrowseItem(ItemFilters.styleFiles);
+
+ NotifyPropertyChanged(() => StyleToMergeInto);
+ }
+
+ private string sourceStyleToMerge = "SourceStyle.stylx";
+ public string SourceStyleToMerge
+ {
+ get
+ { return sourceStyleToMerge; }
+ set
+ {
+ SetProperty(ref sourceStyleToMerge, value, () => SourceStyleToMerge);
+ NotifyPropertyChanged(() => IsMergeEnabled);
+ NotifyPropertyChanged(() => IsExecuteSqlScriptEnabled);
+ }
+ }
+
+ private string styleToMergeInto = "StyleToMergeInto.stylx";
+ public string StyleToMergeInto
+ {
+ get
+ { return styleToMergeInto; }
+ set
+ {
+ SetProperty(ref styleToMergeInto, value, () => StyleToMergeInto);
+ NotifyPropertyChanged(() => IsMergeEnabled);
+ }
+ }
+
+ private string mergedStyleName = "MergedStyle.stylx";
+ public string MergedStyleName
+ {
+ get
+ { return mergedStyleName; }
+ set
+ {
+ SetProperty(ref mergedStyleName, value, () => MergedStyleName);
+ NotifyPropertyChanged(() => IsMergeEnabled);
+ }
+ }
+
+ private async Task RemoveStyleItem(string styleFileFullPath)
+ {
+ await QueuedTask.Run(() =>
+ {
+ var styles = Project.Current.GetItems();
+
+ //Get the style in the project
+ StyleProjectItem style = styles.FirstOrDefault(x => x.Path == styleFileFullPath);
+
+ if (style != null)
+ {
+ // remove it, if it was found
+ Project.Current.RemoveStyle(styleFileFullPath);
+ }
+ });
+ }
+
+ private async Task GetStyleItem(string styleFileFullPath)
+ {
+ StyleProjectItem style = null;
+
+ if (!File.Exists(styleFileFullPath))
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Style File does not exist: \n" + styleFileFullPath,
+ "Style File Missing", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+ else
+ {
+ if (Project.Current != null)
+ {
+ await QueuedTask.Run(() =>
+ {
+ //Get all styles in the project
+ var styles = Project.Current.GetItems();
+
+ //Get the style in the project
+ style = styles.FirstOrDefault(x => x.Path == styleFileFullPath);
+
+ if (style == null)
+ {
+ // add it, if it wasn't found
+ Project.Current.AddStyle(styleFileFullPath);
+
+ // then check again for style (just in case)
+ styles = Project.Current.GetItems();
+ style = styles.FirstOrDefault(x => x.Path == styleFileFullPath);
+ }
+ });
+ }
+ }
+
+ return style;
+ }
+
+ private async void MergeStyles()
+ {
+ var result = ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Merging Styles: \n" + SourceStyleToMerge + "\n Into: \n" +
+ StyleToMergeInto,
+ "Merge Styles", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);
+
+ if (result.ToString() != "OK")
+ return;
+
+ string mergedStylePath = Path.GetDirectoryName(StyleToMergeInto);
+ string mergedStyleFile = System.IO.Path.Combine(mergedStylePath, MergedStyleName);
+
+ if (File.Exists(mergedStyleFile))
+ {
+ var result2 = ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Style already exists: \n" + mergedStyleFile + "\n Overwrite?",
+ "Overwrite Style?", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);
+
+ if (result2.ToString() != "OK")
+ return;
+ }
+
+ System.IO.File.Copy(StyleToMergeInto, mergedStyleFile, true);
+
+ var styleSourceStyleToMerge = await GetStyleItem(SourceStyleToMerge);
+ var styleMergedStyleFile = await GetStyleItem(mergedStyleFile);
+
+ int numSymbolsAdded = 0;
+ await QueuedTask.Run(() =>
+ {
+ IList sourceSymbols = styleSourceStyleToMerge.SearchSymbols(StyleItemType.PointSymbol, string.Empty);
+
+ foreach (var styleItem in sourceSymbols)
+ {
+ styleMergedStyleFile.AddItem(styleItem);
+
+ System.Diagnostics.Debug.WriteLine("Merging item: " + styleItem.Name);
+
+ numSymbolsAdded++;
+ }
+ });
+
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Merge Complete: \n" + mergedStyleFile +
+ "Number of Symbols Added: " + numSymbolsAdded,
+ "Merge Styles", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+
+ // When done set the style in the UI to the merged style
+ // so the default is good for the next step/tab:
+ SourceStyleToMerge = mergedStyleFile;
+ }
+
+ public bool IsExecuteSqlScriptEnabled
+ {
+ get
+ {
+ // Enable if Styles are set and exist
+ return !string.IsNullOrEmpty(SourceStyleToMerge) &&
+ File.Exists(SourceStyleToMerge);
+ }
+ }
+
+ public string SqliteCommand
+ {
+ get
+ {
+ string addinLocation = AddinAssemblyLocation();
+
+ string exeLocation = Path.Combine(addinLocation, "sqlite", "sqlite3.exe");
+
+ return exeLocation;
+ }
+ }
+
+ public string SqliteCommandScript
+ {
+ get
+ {
+ string addinLocation = AddinAssemblyLocation();
+
+ string exeLocation = Path.Combine(addinLocation, "sqlite", "SqliteStyleCommands.sql");
+
+ return exeLocation;
+ }
+ }
+
+ public async void ExecuteSqlScript()
+ {
+ string sqliteDb = SourceStyleToMerge;
+
+ var result = ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Execute Sql Command?",
+ "Execute Sql Command?", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);
+
+ if (result.ToString() != "OK")
+ return;
+
+ if (!File.Exists(SqliteCommand) || !File.Exists(SqliteCommandScript) ||
+ !File.Exists(sqliteDb))
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Required File Missing",
+ "Required File Missing", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ return;
+ }
+
+ try
+ {
+ // Remove the style from the project if there (to avoid the style being locked)
+ await RemoveStyleItem(sqliteDb);
+
+ // Run Sql Command
+ // Command format: "%SQLITE_PATH_AND_EXE%" "%SQLITE_DATABASE%" < "%SQLITE_SCRIPT%"
+
+ // WORKAROUND: Command only running from Batch File:
+ string addinLocation = AddinAssemblyLocation();
+ string batFile = Path.Combine(addinLocation, "sqlite", "SqliteBatch.bat");
+ System.IO.StreamWriter fileOut = new System.IO.StreamWriter(batFile, false);
+ fileOut.WriteLine(SqliteCommand + " " + sqliteDb + " < " + SqliteCommandScript + " > BatchOutput.txt 2>&1");
+ fileOut.Close();
+
+ System.Diagnostics.ProcessStartInfo pStart = new System.Diagnostics.ProcessStartInfo(batFile);
+ // Note: WORKAROUND - Setting these didn't seem to work - had to run from batch
+ // pStart.Arguments = sqliteDb + " < " + SqliteCommandScript;
+ pStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
+ pStart.WorkingDirectory = addinLocation;
+
+ System.Diagnostics.Process proc = new System.Diagnostics.Process();
+
+ proc.StartInfo = pStart;
+ proc.Start();
+ proc.WaitForExit();
+ proc.Close();
+
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Trace.WriteLine(ex.Message);
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Unknown exception while updating style",
+ "Update style FAILURE!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Sqlite Label Command Complete",
+ "Sqlite Command Complete", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+
+ private async void GenerateStyleFromCsvFile(object parameter)
+ {
+ // CloseWindow();
+
+ int numSymbolsAttempted = 0;
+ int numSymbolsLoaded = 0;
+
+ await QueuedTask.Run(() => {
+ try
+ {
+ if (string.IsNullOrEmpty(StylePath))
+ {
+
+ }
+
+ if (File.Exists(StylePath))
+ {
+ MessageBoxResult result =
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Style File Already Exists - Do you Want to Overwrite? \n" + StylePath,
+ "Style Exists - Overwrite?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
+ if (result.ToString() == "Yes")
+ {
+ File.Delete(StylePath);
+ }
+ else
+ {
+ // Don't delete/stop
+ return;
+ }
+ }
+
+ string fullStylePath = Path.GetDirectoryName(StylePath);
+ if (!Directory.Exists(fullStylePath))
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Style Path Does Not Exist: \n" + fullStylePath,
+ "Invalid Path", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ return;
+ }
+
+ if (!StylePath.ToLower().EndsWith(".stylx"))
+ {
+ MessageBoxResult result =
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Style File Name does not end with .stylx - Continue? \n" + StylePath,
+ "Continue?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
+ if (result.ToString() != "Yes")
+ return;
+ }
+
+ // Warning: must be mobile style
+ // StyleHelper.CreateStyle(Project.Current, StylePath);
+ //
+ StyleHelper.CreateMobileStyle(Project.Current, StylePath);
+ StyleProjectItem style = Project.Current.GetItems().First(x => x.Path == StylePath);
+
+ if (!File.Exists(CsvPath))
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "CSV File Does Not Exist: " + CsvPath,
+ "Invalid Csv", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ return;
+ }
+
+ if (!string.IsNullOrEmpty(SvgRootPath) && !Directory.Exists(SvgRootPath))
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "SVG Root Folder Does Not Exist: " + SvgRootPath,
+ "Invalid SVG Root Folder", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ return;
+ }
+
+ // Test File:
+ // string csvTableFullPath = @"C:\MyFiles\Work\Esri\ProSDK\TestImportStyleCsv\App6D-Added-Icons.csv";
+
+ CsvToTableMaker csvTable = new CsvToTableMaker();
+ csvTable.LoadTable(CsvPath);
+ DataTable symbolTable = csvTable.Table;
+
+ // Output input table if needed
+ // csvTable.DebugOutput();
+
+ // Make sure initialized properly
+ bool tableInitialized = (symbolTable != null) &&
+ (symbolTable.Rows != null) && (symbolTable.Columns != null) &&
+ (symbolTable.Rows.Count > 0) && (symbolTable.Columns.Count > 0);
+
+ ////////////////////////////////////////////////////////
+ // Check required columns exist
+ Dictionary requiredColumnsExists =
+ new Dictionary()
+ {
+ { "filePath", false },
+ { "pointSize", false },
+ { "styleItemName", false },
+ { "styleItemCategory", false },
+ { "styleItemTags", false },
+ { "styleItemUniqueId", false },
+ };
+
+ foreach (DataColumn column in symbolTable.Columns)
+ {
+ var colName = column.ColumnName;
+ if (requiredColumnsExists.ContainsKey(colName))
+ requiredColumnsExists[colName] = true;
+ }
+
+ bool doRequiredColumnsExist = true;
+ foreach (KeyValuePair pair in requiredColumnsExists)
+ {
+ if (pair.Value == false)
+ {
+ doRequiredColumnsExist = false;
+ break;
+ }
+ }
+
+ if (!doRequiredColumnsExist)
+ {
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "CSV File Does Not Have Expected Columns: " + CsvPath,
+ "Invalid Csv", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ return;
+ }
+ ////////////////////////////////////////////////////////
+
+ var results = from row in symbolTable.AsEnumerable()
+ select row;
+
+ foreach (DataRow row in results)
+ {
+ // filePath pointSize, styleItemName, styleItemCategory, styleItemTags styleItemUniqueId styleItemGeometryType notes
+ string svgFile = row["filePath"] as string;
+ int pointSize = int.Parse(row["pointSize"] as string);
+ string styleItemName = row["styleItemName"] as string;
+ string styleItemCategory = row["styleItemCategory"] as string;
+ string styleItemTags = row["styleItemTags"] as string;
+ string styleItemUniqueId = row["styleItemUniqueId"] as string;
+ string styleItemGeometryType = row["styleItemGeometryType"] as string;
+
+ // Expand this string if present:
+ string svgPathToReplace = "{Symbols_Root}";
+ if (svgFile.Contains(svgPathToReplace) && !string.IsNullOrEmpty(SvgRootPath))
+ {
+ svgFile = svgFile.Replace(svgPathToReplace, SvgRootPath);
+ }
+
+ // WORKAROUND: old files contained ".emf" instead of ".svg"
+ // Replace ".emf" with ".svg" string if present:
+ string emfStringToReplace = ".emf";
+ if (svgFile.EndsWith(emfStringToReplace))
+ {
+ svgFile = svgFile.Replace(emfStringToReplace, ".svg");
+ }
+
+ if (!File.Exists(svgFile))
+ {
+ var result = ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Warning: SVG File not found: " + svgFile,
+ "SVG File Not Found!", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);
+
+ if (result.ToString() == "OK")
+ continue;
+ else
+ break;
+ }
+
+ try
+ {
+ numSymbolsAttempted++;
+
+ SymbolStyleItem styleItem = new SymbolStyleItem();
+
+ CIMMarker svgMarker =
+ SymbolFactory.Instance.ConstructMarkerFromFile(svgFile);
+
+ svgMarker.Size = pointSize;
+ styleItem.Name = styleItemName;
+ styleItem.Category = styleItemCategory;
+ styleItem.Tags = styleItemTags;
+ styleItem.Key = styleItemUniqueId;
+ styleItem.Symbol = SymbolFactory.Instance.ConstructPointSymbol(svgMarker);
+
+ styleItem.PatchWidth = pointSize;
+ styleItem.PatchHeight = pointSize;
+
+ // set the style item thumbnail - working?
+ StyleItem.GeneratePreview(styleItem, pointSize, pointSize);
+
+ style.AddItem(styleItem);
+
+ numSymbolsLoaded++;
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Trace.WriteLine(ex.Message);
+ MessageBoxResult result = ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to create symbol, failed on symbol#: " + numSymbolsAttempted +
+ ", File: " + svgFile,
+ "Symbol Creation FAILURE!", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);
+ if (result.ToString() == "Cancel")
+ throw new Exception("Operation Cancelled");
+ }
+ } // foreach
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Trace.WriteLine(ex.Message);
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to create style, stopped on symbol#: " + numSymbolsAttempted,
+ "Style File Generation FAILURE!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+ });
+
+ ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
+ "Added: " + numSymbolsLoaded + " Symbols out of " + numSymbolsAttempted +
+ " attempted to style: \n" + StylePath,
+ "Style File Generation Complete", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+
+ internal static string AddinAssemblyLocation()
+ {
+ var asm = System.Reflection.Assembly.GetExecutingAssembly();
+ return System.IO.Path.GetDirectoryName(
+ Uri.UnescapeDataString(
+ new Uri(asm.CodeBase).LocalPath));
+ }
+
+ internal static void CloseWindow()
+ {
+ ProWindow window = Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive);
+ window.Close();
+ }
+ }
+}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.csproj b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.csproj
new file mode 100644
index 0000000..71df13c
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.csproj
@@ -0,0 +1,167 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {0B54DB9A-45BC-445B-B275-DD6FACA598A5}
+ Library
+ Properties
+ GenerateSVGStyle
+ GenerateSVGStyle
+ v4.6.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ Program
+ C:\Program Files\ArcGIS\Pro\bin\ArcGISPro.exe
+ AnyCPU
+
+
+ pdbonly
+ false
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ Program
+ C:\Program Files\ArcGIS\Pro\bin\ArcGISPro.exe
+ AnyCPU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Core.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\Core\ArcGIS.Desktop.Core.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\Mapping\ArcGIS.Desktop.Mapping.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\Catalog\ArcGIS.Desktop.Catalog.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\Editing\ArcGIS.Desktop.Editing.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\DesktopExtensions\ArcGIS.Desktop.Extensions.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\Extensions\Layout\ArcGIS.Desktop.Layouts.dll
+ False
+
+
+ C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Shared.Wpf.dll
+ False
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+ GenerateOptions.xaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+
+ BuildDefault
+
+
+ BuildDefault
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.sln b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.sln
new file mode 100644
index 0000000..5f0bedf
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/GenerateSVGStyle.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateSVGStyle", "GenerateSVGStyle.csproj", "{0B54DB9A-45BC-445B-B275-DD6FACA598A5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0B54DB9A-45BC-445B-B275-DD6FACA598A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0B54DB9A-45BC-445B-B275-DD6FACA598A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0B54DB9A-45BC-445B-B275-DD6FACA598A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0B54DB9A-45BC-445B-B275-DD6FACA598A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop16.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop16.png
new file mode 100644
index 0000000..5910bbf
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop16.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop32.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop32.png
new file mode 100644
index 0000000..1d19084
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/AddInDesktop32.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue16.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue16.png
new file mode 100644
index 0000000..ab6cad3
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue16.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue32.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue32.png
new file mode 100644
index 0000000..4a573fd
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericButtonBlue32.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen16.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen16.png
new file mode 100644
index 0000000..8db63d4
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen16.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen32.png b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen32.png
new file mode 100644
index 0000000..f7a3913
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Images/GenericOpen32.png differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Module1.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Module1.cs
new file mode 100644
index 0000000..596d9e1
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Module1.cs
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright 2018 Esri
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+using ArcGIS.Desktop.Framework;
+using ArcGIS.Desktop.Framework.Contracts;
+using System.Threading.Tasks;
+
+namespace GenerateSVGStyle
+{
+ internal class Module1 : Module
+ {
+ private static Module1 _this = null;
+
+ public GenerateOptions GenerateOptionsWindow = null;
+
+ ///
+ /// Retrieve the singleton instance to this module here
+ ///
+ public static Module1 Current
+ {
+ get
+ {
+ return _this ?? (_this = (Module1)FrameworkApplication.FindModule("GenerateSVGStyle_Module"));
+ }
+ }
+
+ #region Overrides
+ ///
+ /// Called by Framework when ArcGIS Pro is closing
+ ///
+ /// False to prevent Pro from closing, otherwise True
+ protected override bool CanUnload()
+ {
+ //TODO - add your business logic
+ //return false to ~cancel~ Application close
+ return true;
+ }
+
+ #endregion Overrides
+
+ }
+}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/PreBuiltAddin/GenerateSVGStyle.esriAddinX b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/PreBuiltAddin/GenerateSVGStyle.esriAddinX
new file mode 100644
index 0000000..3b08f9e
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/PreBuiltAddin/GenerateSVGStyle.esriAddinX differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Properties/AssemblyInfo.cs b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..119398e
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("GenerateSVGStyle")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Acme")]
+[assembly: AssemblyProduct("GenerateSVGStyle")]
+[assembly: AssemblyCopyright("Copyright © Acme 2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0b54db9a-45bc-445b-b275-dd6faca598b6")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/README.md b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/README.md
new file mode 100644
index 0000000..faf1e7c
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/README.md
@@ -0,0 +1,15 @@
+# GenerateSVGStyle
+
+Pro Add-in to Generate Pro Styles from SVG Files and CSV Metadata
+
+For detailed instructions on using this addin see:
+https://github.com/Esri/military-features-data/wiki/Creating-Dictionary-Renderer-Style-Files
+
+Install the pre-built Pro Addin from `.\PreBuiltAddin`
+
+## Build Requirements
+
+* Visual Studio 2015+
+* ArcGIS Pro 2.0+
+* ArcGIS Pro 2.0+ SDK
+
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteMergeStylx.sql b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteMergeStylx.sql
similarity index 100%
rename from military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteMergeStylx.sql
rename to military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteMergeStylx.sql
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteScriptRunner.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteScriptRunner-Sample.bat
similarity index 100%
rename from military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteScriptRunner.bat
rename to military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteScriptRunner-Sample.bat
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteStyleCommands.sql b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteStyleCommands.sql
new file mode 100644
index 0000000..96fc548
--- /dev/null
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/SqliteStyleCommands.sql
@@ -0,0 +1,31 @@
+/*
+File: SqliteStyleCommands.sql
+Purpose: Performs any specific updates that are not currently exposed by the Pro API to update the style
+ This that still need to be done using sqlite
+
+Requirements:
+1. A Pro/Runtime compatible stylx file ("Mobile" Style File)
+2. A Sqlite Editor/Interpreter capable of executing SQL commands (ex. sqlite3.exe)
+
+*/
+
+/*****************************/
+/* SET THE LABELRULES Column */
+/*****************************/
+
+/* First: set the general case for all framed symbols here: */
+UPDATE ITEMS SET LabelRules = '21;27;29;30;31;32;33;34;35' where (CATEGORY == 'Frame');
+
+/* Next: set the specific cases below: */
+
+/* TODO: Currently every frame is getting set to the same label set, this shoulb be refined/changed below: */
+
+/* TODO: Add Label Rules specific to each symbol set: */
+/* Ex: Symbol Set 40: (Icons contain "40_") */
+/*
+ UPDATE ITEMS SET LabelRules = '21;27;29;30;31;32;33;34;35' where
+ ((CATEGORY == 'Frame') and (instr(Key, '40_') > 0));
+*/
+
+
+
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/sqlite3.exe b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/sqlite3.exe
new file mode 100644
index 0000000..43f29f9
Binary files /dev/null and b/military-symbology-styles/utils-and-source-data/style-creation-utilities/GenerateSVGStyle/Sqlite/sqlite3.exe differ
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/README.md b/military-symbology-styles/utils-and-source-data/style-creation-utilities/README.md
index 4be8912..b432a20 100644
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/README.md
+++ b/military-symbology-styles/utils-and-source-data/style-creation-utilities/README.md
@@ -2,99 +2,22 @@
## Purpose
-* These utilities are used to convert a set of (1) Scalable Vector Graphics (.svg) files and (2) Comma-Delimited (.csv) specification files into ArcGIS Desktop (.style) and Pro/Runtime (.stylx) style files
-* Individual utilities and steps:
- * Creates a set of Enhanced Meta Files (.emf) vector image files from a source tree of Scalable Vector Graphics (.svg) files
- * Imports a set of .emf vector image files into ArcGIS .style files
- * Creates a .stylx from the .style
- * Merges the automatically generated .stylx created (in steps above) with a version of the .stylx that is manually created/maintained
- * Validate that the .stylx has been created correctly and can be viewed in ArcGIS Pro
+* These utilities/steps are used to:
+ * Convert a set of (1) Scalable Vector Graphics (SVG/.svg) files and (2) Comma-Delimited/Separated Values (CSV/.csv) specification files into ArcGIS Pro/Runtime Mobile Style File (.stylx) **Point Symbols**
+ * Merge the **Point Symbols** Mobile Style generated (in step above) with a version of the .stylx that is manually created/maintained that contains Lines, Areas, and Labels
+ * Validate that the .stylx has been created correctly and can be used in ArcGIS Pro and Runtime
## Requirements
* This repo has been cloned to your local machine
* A local set of Military Feature source .svg images in the expected file/folder format
* These files are [obtained from the repo here](../svg)
-* ArcGIS Desktop 10.X (Standard)
- * Used to create and verify the 10.X .style file(s)
* ArcGIS Pro
- * Used to create and verify the Pro .stylx file(s)
-* See each of the readme's for the dependent steps/more information/some additional requirements
- * [image-conversion-utilities](./image-conversion-utilities)
- * [style-file-utilities](./style-file-utilities)
- * [merge-stylx-utilities](./merge-stylx-utilities)
-
-## Important Warning on Runtime Compatibility Before You Begin
-
-**IMPORTANT:** Because the .stylx files in this repo are shared between ArcGIS Pro and Runtime, before you begin creating or editing these .stylx files, you should be aware of and familiar with a very important pre-requisite step. This important step is the setting of a .stylx "ArcGIS Runtime Compatibility Flag" in ArcGIS Pro. This flag disables some Pro symbol features that are currently incompatible with Runtime. Failure to set this flag will result in a .stylx file with symbols that fail to draw in ArcGIS Runtime.
-
-* IMPORTANT: Set the ArcGIS Runtime Compatibility Flag in ArcGIS Pro before doing any .stylx editing operations (importing .style(s), editing .stylx(s), etc.)
- * Justification/Background: ArcGIS Pro and Runtime have some differences in how each application encodes/handles colors, fonts, and arcs/curves.
- * Therefore, **if you are creating a .stylx to be used in both platforms (and in this case you are), you must set a runtime compatibility flag in ArcGIS Pro**
- * To do this:
- * Using the .reg file:
- * Use the .reg file [ForceRuntimeCompatibility.reg](./ForceRuntimeCompatibility.reg)
- * Double click on this file to install this key
- * Manually installing this key -and verifying that this key is set (highly recommended):
- * Run `regedit`
- * Navigate to `HKEY_CURRENT_USER\Software\ESRI\ArcGISPro` `*`
- * `*` IMPORTANT: verify that the current version of ArcGIS Pro settings are still installed at this location - this location could be subject to change.
- * Add a new key `RTCStyles` as DWORD with value 1
- * Setting this key in Pro, does/forces the following:
- * Converts all colors to use RGB instead of the Pro color model
- * Vectorizes the fonts/character markers (Runtime does not install fonts)
- * Densifies curves (instead of using Bezier curves or circular arcs)
- * Examples of Json entries incompatible with Runtime include:
- * CIMRGBColor Objects - `"CIMRGBColor","values":[0,0,0,100]` - "CIMRGBColor" color object versus simplified RGBA: `"color":[0,0,0,255]` and last/alpha value of "100" (CIMRGBColor full opaque) vs. "255" (RGBA full opaque)
- * Curve objects - `"curveRings"`
- * Text strings (rather than line paths) - `"textString"`
- * To determine if your .stylx contains incompatible features, you can use SQLite to perform this query for incompatible content: `select * from ITEMS where (Content like '%CIMRGBColor%') or (Content like '%curveRings%') or (CONTENT LIKE '%textString%')`
- * To determine if your .stylx contains NULL entries which may also impact compatibility with Runtime: `select * from ITEMS WHERE (CONTENT LIKE '%[]%')`
- * Be aware that setting this flag/key could affect the editing of non-ArcGIS Runtime .stylx(s), so if you intend to edit other Pro .stylx(s), you may wish to remove/disable this setting when done this process.
+ * Used to create and verify the Pro Mobile Style (.stylx) file(s)
+ * IMPORTANT: the version of Pro should match the version of the Cartographic Information Model (CIM) that you wish to target. Ex: Pro 2.0 targets CIM 2.0
## General Instructions
-* Verify that the [Runtime Compatibility Flag] has been set on the machine you intend to run ArcGIS Pro. See [the ArcGIS Runtime Compatibility Flag section above](#important-warning-on-runtime-compatibility-before-you-begin)
-* Obtain the latest set of Military Feature source .svg images in the expected file/folder format
- * These files should be [here](../svg)
- * Note the local location of the `military-features-data/military-symbology-styles/utils-and-source-data/svg` folder:
- * `{Svg_Images_Home}` = C:\{local path}_______
- * Ex: `{Svg_Images_Home}` = `C:\Github\military-features-data\military-symbology-styles\utils-and-source-data\svg`
-* Convert the .svg files to .emf
- * See [image-conversion-utilities](./image-conversion-utilities) for the details of this process
- * Note the location of these converted images:
- * `{Emf_Images_Home}` = ____________
- * Ex: `{Emf_Images_Home}` = `C:\Github\military-features-data/military-symbology-styles/utils-and-source-data/emf`
-* Convert/import the .emf files to .style files using the Style File Import Utility (csv2ArcGISStyle)
- * See [style-file-utilities](./style-file-utilities) for the details of this process
-* Open ArcGIS Desktop (ArcMap) and verify/validate the output style files produced by checking these styles for errors
- * ArcMap | Customize | Style Manager (Add Style to List)
- * Close ArcMap
- * Once you have verified/validated the output style files, you may want to rename them
- * Note: names *without spaces* were used during the conversion process so you may wish to change these names at this time (if you updating the .styles in this repo)
-* Create a Pro .stylx file for the "mil2525d-points-only.style"
- * Open ArcGIS Pro and import the file `mil2525d-points-only.style`
- * Project | Styles | Import Style - *(Note this operation may take several minutes to complete)*
- * Verify/validate that the file imported correctly and the icons look as expected
- * View | Project View | Styles | mil2525d-points-only
- * *Note: if scrolling through all of the symbols, it may take 30-60 seconds for all of the style symbols to initially show*
- * Close ArcGIS Pro and locate the newly-created `mil2525d-points-only.stylx` (Note: this converted/imported file now has a **stylx** file extension)
-* Merge `mil2525d-points-only.stylx` (created above) with `mil2525d-lines-areas-labels-base-template.stylx` to create: `mil2525d.stylx`
- * See [merge-stylx-utilities](./merge-stylx-utilities) for the details of this process, including generally
- * Copy the file created above: `mil2525d-points-only.stylx`
- * Copy (from this repo) the latest copy of [mil2525d-lines-areas-labels-base-template.stylx](../style-source-files)
- * Merge the 2 files into a single file: `mil2525d.stylx`
-* Verify/validate the final/resulting `mil2525d.stylx`
- * Verify that there are no unmapped Symbol Keys
- * To verify that all symbol keys were created correctly by the merge process above, perform the following:
- * Use the SQLite editor of your choice to perform a query for missing/unmapped keys:
- * `select * from ITEMS WHERE Key REGEXP '(^[A-Za-z]+)'`
- * Note: This query tests for keys that start with an alphabetic character - all of the imported mil2525d keys should start with a numeric character - this query should not return any rows from the mil2525d icon source data (it may return some alphabetic rows that existed in the style prior to the merge so you may want to also do this query before making changes to compare the before vs. after)
- * Verify/validate the final `mil2525d.stylx` file created in ArcGIS Pro
- * This file should now contain points, lines, polygon, text, and label placement symbols
- * View | Project View | Styles | mil2525d
- * Change the `Show:` Pull Down to change between the Point Symbol, Line Symbol, etc. types
- * Verify symbols and associated meta data
-* If creating a stylx for the legacy (2525C or 2525Bc2) standards, see: [legacy-stylx-utilities](./legacy-stylx-utilities)
-* Finally, update [the mil2525d.stylx file in this repo](../../mil2525d)
-
+* Consult the wiki for detailed instructions:
+
+https://github.com/Esri/military-features-data/wiki/Creating-Dictionary-Renderer-Style-Files
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/BatchConvertSVGtoEMF.aia b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/BatchConvertSVGtoEMF.aia
deleted file mode 100644
index 48b203f..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/BatchConvertSVGtoEMF.aia
+++ /dev/null
@@ -1,82 +0,0 @@
-/version 3
-/name [ 20
- 4261746368436f6e76657274535647746f454d46
-]
-/isOpen 0
-/actionCount 1
-/action-1 {
- /name [ 11
- 4578706f72746173454d46
- ]
- /keyIndex 0
- /colorIndex 0
- /isOpen 0
- /eventCount 1
- /event-1 {
- /useRulersIn1stQuadrant 0
- /internalName (adobe_exportDocument)
- /localizedName [ 6
- 4578706f7274
- ]
- /isOpen 1
- /isOn 1
- /hasDialog 1
- /showDialog 0
- /parameterCount 7
- /parameter-1 {
- /key 1885434477
- /showInPalette 0
- /type (raw)
- /value < 4
- 00000000
- >
- /size 4
- }
- /parameter-2 {
- /key 1851878757
- /showInPalette -1
- /type (ustring)
- /value [ 72
- 433a5c55736572735c64616e69383230305c446f63756d656e74735c47697448
- 75625c6a6f696e742d6d696c69746172792d73796d626f6c6f67792d786d6c5c
- 454d467465737432
- ]
- }
- /parameter-3 {
- /key 1718775156
- /showInPalette -1
- /type (ustring)
- /value [ 17
- 456e68616e636564204d65746166696c65
- ]
- }
- /parameter-4 {
- /key 1702392942
- /showInPalette -1
- /type (ustring)
- /value [ 3
- 656d66
- ]
- }
- /parameter-5 {
- /key 1936548194
- /showInPalette -1
- /type (boolean)
- /value 0
- }
- /parameter-6 {
- /key 1935764588
- /showInPalette -1
- /type (boolean)
- /value 1
- }
- /parameter-7 {
- /key 1936875886
- /showInPalette -1
- /type (ustring)
- /value [ 1
- 31
- ]
- }
- }
-}
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF-CaptureOutput.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF-CaptureOutput.bat
deleted file mode 100644
index 1df5dc3..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF-CaptureOutput.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-:: Runs the converter batch and captures output to a file
-:: (useful if there are errors in the conversion process)
-ConvertTree-SVGtoEMF.bat > ConverterOutput.txt 2>&1
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF.bat
deleted file mode 100644
index f3af4a5..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoEMF.bat
+++ /dev/null
@@ -1,154 +0,0 @@
-@ECHO OFF
-
-:: License Apache V2 - Adapted from Craig Williams script:
-:: https://github.com/williamscraigm/csv2ArcGISStyle/blob/master/SVGtoEMF.bat
-:: Adaptations were to create the same folder structure in the destination folder
-:: This was needed to handle a set of source svgs with a complex folder structure that
-:: needed to be maintained
-
-:: This script converts SVG files to EMF/PNG.
-:: For Inkscape help, see http://inkscape.org/doc/inkscape-man.html
-:: For an alternative to Inkscape that works just as well, see http://code.google.com/p/svg2emf/
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-:: IMPORTANT/TODO: you must set/correct paths below
-::
-:: IMPORTANT CONSTRAINT:
-:: 1. Must be FULL PATHs (because the replacement below depends on)
-:: 2. No spaces in the folder/file names (doing text replacement of variables in DOS is just too impossible)
-
-:: INPUTS/SETTINGS:
-:: (1) Converter location:
-SET converter=C:\{TODO_NO_SPACES}\inkscape\inkscape.com
-
-:: (2) Source SVG Root Folder
-SET source_folder=C:\{TODO_NO_SPACES_PATH_TO_SVGs}
-
-:: (3) Desired Destination Folder (this does not need to exist - it will be created if not)
-SET destination_folder=C:\{TODO_NO_SPACES_DESIRED_PATH_TO_OUTPUT_FILES}
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-:: it is the default, but just in case, this enables the needed feature "goto :eof" ("return")
-setlocal ENABLEEXTENSIONS
-
-:: Check the converter destination folder exists
-if exist %converter% goto prereqs_converter_exists_ok
-
-echo "Required Converter does not exist: %converter%"
-goto :EOF
-
-:prereqs_converter_exists_ok
-
-:: Check source folder exists
-if exist %source_folder% goto prereqs_exists_ok
-
-echo "Required Source Folder does not exist: %source_folder%"
-goto :EOF
-
-:prereqs_exists_ok
-
-:: IMPORTANT: The destination folders must exist in order for conversion below to work
-:: (so we create them in advance)
-call :CreateDestinationFolders %source_folder% %destination_folder%
-
-:: Note: Use "/r" option if you want to convert a folder and all subfolders (recursion)
-:: do ExportImage for each svg found:
-for /r "%source_folder%" %%i in (*.svg) do call :ExportImage %converter% %%i %source_folder% %destination_folder%
-
-:: Done
-echo Successfully Completed!
-goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: ExportImage - export image, maintaining same folder structure
-::
-:: %1 - Converter executable
-:: %2 - Source Image (full path)
-:: %3 - Source Folder
-:: %4 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:ExportImage
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-if "" == "%3" goto :EOF
-if "" == "%4" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Check destination folder exists
-if exist %4 goto exists_ok
-
-echo "Required Folder does not exist: %4"
-goto :EOF
-
-:exists_ok
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%3
-set replacement=%4
-set source_file=%2
-set new_file=!source_file:%original%=%replacement%!
-set new_file_emf=%new_file:.svg=.emf%
-echo "Exporting %source_file% ==> %new_file_emf%"
-
-:: DEBUG:
-:: echo "%1" "%2" "%3" "%4" "%new_file_emf%"
-
-:: IMPORTANT: Now actually call the exporter/converter here:
-"%1" "%2" --export-emf="%new_file_emf%"
-
-endlocal & goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: CreateDestinationFolders - Creates Required Destination Folders
-:: (based on source folder)
-:: %1 - Source Folder
-:: %2 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:CreateDestinationFolders
-
-:: get structure of source and recreate in destination folder
-
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-
-echo "Creating Folder Structure of %1 in %2"
-
-echo "Creating Dest Folder Root: %2"
-mkdir "%2"
-
-for /f "delims=" %%i in ('dir /ad/s/b %1') do call :CreateReplacementFolder %1 %2 %%i
-
-endlocal & goto :EOF
-:: ----------------------------------------------------------------------------
-
-:: ----------------------------------------------------------------------------
-:: CreateReplacementFolder - replaces the source folder root with the destination
-:: and creates the folder
-::
-:: %1 - Source Folder Root
-:: %2 - Destination Folder Root
-:: %3 - Current Folder
-:: ----------------------------------------------------------------------------
-
-:CreateReplacementFolder
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%1
-set replacement=%2
-set source_folder=%3
-set new_folder=!source_folder:%original%=%replacement%!
-echo "Creating New Folder for Copying: %source_folder% ==> %new_folder%"
-
-mkdir "%new_folder%"
-
-endlocal & goto :EOF
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-128.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-128.bat
deleted file mode 100644
index ffa624a..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-128.bat
+++ /dev/null
@@ -1,158 +0,0 @@
-@ECHO OFF
-
-:: License Apache V2 - Adapted from Craig Williams script:
-:: https://github.com/williamscraigm/csv2ArcGISStyle/blob/master/SVGtoEMF.bat
-:: Adaptations were to create the same folder structure in the destination folder
-:: This was needed to handle a set of source svgs with a complex folder structure that
-:: needed to be maintained
-
-:: This script converts SVG files to EMF/PNG.
-:: For Inkscape help, see http://inkscape.org/doc/inkscape-man.html
-:: For an alternative to Inkscape that works just as well, see http://code.google.com/p/svg2emf/
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-:: IMPORTANT/TODO: you must set/correct paths below
-::
-:: IMPORTANT CONSTRAINT:
-:: 1. Must be FULL PATHs (because the replacement below depends on)
-:: 2. No spaces in the folder/file names (doing text replacement of variables in DOS is just too impossible)
-
-:: INPUTS/SETTINGS:
-:: (1) Converter location:
-SET converter=C:\{TODO_NO_SPACES}\inkscape\inkscape.com
-
-:: (2) Source SVG Root Folder
-SET source_folder=C:\{TODO_NO_SPACES_PATH_TO_SVGs}
-
-:: (3) Desired Destination Folder (this does not need to exist - it will be created if not)
-SET destination_folder=C:\{TODO_NO_SPACES_DESIRED_PATH_TO_OUTPUT_FILES}
-
-:: (4) (If desired) change height / width of png see TODO below:
-:: "TODO: SET THE DESIRED HEIGHT/WIDTH HERE (currently 128 pixels)"
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-:: it is the default, but just in case, this enables the needed feature "goto :eof" (i.e. "return")
-setlocal ENABLEEXTENSIONS
-
-:: Check the converter destination folder exists
-if exist %converter% goto prereqs_converter_exists_ok
-
-echo "Required Converter does not exist: %converter%"
-goto :EOF
-
-:prereqs_converter_exists_ok
-
-:: Check source folder exists
-if exist %source_folder% goto prereqs_exists_ok
-
-echo "Required Source Folder does not exist: %source_folder%"
-goto :EOF
-
-:prereqs_exists_ok
-
-:: IMPORTANT: The destination folders must exist in order for conversion below to work
-:: (so we create them in advance)
-call :CreateDestinationFolders %source_folder% %destination_folder%
-
-:: Note: Use "/r" option if you want to convert a folder and all subfolders (recursion)
-:: do ExportImage for each svg found:
-for /r "%source_folder%" %%i in (*.svg) do call :ExportImage %converter% %%i %source_folder% %destination_folder%
-
-:: Done
-echo Successfully Completed!
-goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: ExportImage - export image, maintaining same folder structure
-::
-:: %1 - Converter executable
-:: %2 - Source Image (full path)
-:: %3 - Source Folder
-:: %4 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:ExportImage
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-if "" == "%3" goto :EOF
-if "" == "%4" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Check destination folder exists
-if exist %4 goto exists_ok
-
-echo "Required Folder does not exist: %4"
-goto :EOF
-
-:exists_ok
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%3
-set replacement=%4
-set source_file=%2
-set new_file=!source_file:%original%=%replacement%!
-set new_file_png=%new_file:.svg=.png%
-echo "Exporting %source_file% ==> %new_file_png%"
-
-:: DEBUG:
-:: echo "%1" "%2" "%3" "%4" "%new_file_png%"
-
-:: IMPORTANT: Now actually call the exporter/converter here:
-:: TODO: SET THE DESIRED HEIGHT/WIDTH HERE (currently 64 pixels):
-"%1" "%2" --export-width=128 --export-height=128 --export-png="%new_file_png%"
-
-endlocal & goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: CreateDestinationFolders - Creates Required Destination Folders
-:: (based on source folder)
-:: %1 - Source Folder
-:: %2 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:CreateDestinationFolders
-
-:: get structure of source and recreate in destination folder
-
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-
-echo "Creating Folder Structure of %1 in %2"
-
-echo "Creating Dest Folder Root: %2"
-mkdir "%2"
-
-for /f "delims=" %%i in ('dir /ad/s/b %1') do call :CreateReplacementFolder %1 %2 %%i
-
-endlocal & goto :EOF
-:: ----------------------------------------------------------------------------
-
-:: ----------------------------------------------------------------------------
-:: CreateReplacementFolder - replaces the source folder root with the destination
-:: and creates the folder
-::
-:: %1 - Source Folder Root
-:: %2 - Destination Folder Root
-:: %3 - Current Folder
-:: ----------------------------------------------------------------------------
-
-:CreateReplacementFolder
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%1
-set replacement=%2
-set source_folder=%3
-set new_folder=!source_folder:%original%=%replacement%!
-echo "Creating New Folder for Copying: %source_folder% ==> %new_folder%"
-
-mkdir "%new_folder%"
-
-endlocal & goto :EOF
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-256.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-256.bat
deleted file mode 100644
index 333b205..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/ConvertTree-SVGtoPNG-256.bat
+++ /dev/null
@@ -1,158 +0,0 @@
-@ECHO OFF
-
-:: License Apache V2 - Adapted from Craig Williams script:
-:: https://github.com/williamscraigm/csv2ArcGISStyle/blob/master/SVGtoEMF.bat
-:: Adaptations were to create the same folder structure in the destination folder
-:: This was needed to handle a set of source svgs with a complex folder structure that
-:: needed to be maintained
-
-:: This script converts SVG files to EMF/PNG.
-:: For Inkscape help, see http://inkscape.org/doc/inkscape-man.html
-:: For an alternative to Inkscape that works just as well, see http://code.google.com/p/svg2emf/
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-:: IMPORTANT/TODO: you must set/correct paths below
-::
-:: IMPORTANT CONSTRAINT:
-:: 1. Must be FULL PATHs (because the replacement below depends on)
-:: 2. No spaces in the folder/file names (doing text replacement of variables in DOS is just too impossible)
-
-:: INPUTS/SETTINGS:
-:: (1) Converter location:
-SET converter=C:\{TODO_NO_SPACES}\inkscape\inkscape.com
-
-:: (2) Source SVG Root Folder
-SET source_folder=C:\{TODO_NO_SPACES_PATH_TO_SVGs}
-
-:: (3) Desired Destination Folder (this does not need to exist - it will be created if not)
-SET destination_folder=C:\{TODO_NO_SPACES_DESIRED_PATH_TO_OUTPUT_FILES}
-
-:: (4) (If desired) change height / width of png see TODO below:
-:: "TODO: SET THE DESIRED HEIGHT/WIDTH HERE (currently 256 pixels)"
-
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-:: it is the default, but just in case, this enables the needed feature "goto :eof" (i.e. "return")
-setlocal ENABLEEXTENSIONS
-
-:: Check the converter destination folder exists
-if exist %converter% goto prereqs_converter_exists_ok
-
-echo "Required Converter does not exist: %converter%"
-goto :EOF
-
-:prereqs_converter_exists_ok
-
-:: Check source folder exists
-if exist %source_folder% goto prereqs_exists_ok
-
-echo "Required Source Folder does not exist: %source_folder%"
-goto :EOF
-
-:prereqs_exists_ok
-
-:: IMPORTANT: The destination folders must exist in order for conversion below to work
-:: (so we create them in advance)
-call :CreateDestinationFolders %source_folder% %destination_folder%
-
-:: Note: Use "/r" option if you want to convert a folder and all subfolders (recursion)
-:: do ExportImage for each svg found:
-for /r "%source_folder%" %%i in (*.svg) do call :ExportImage %converter% %%i %source_folder% %destination_folder%
-
-:: Done
-echo Successfully Completed!
-goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: ExportImage - export image, maintaining same folder structure
-::
-:: %1 - Converter executable
-:: %2 - Source Image (full path)
-:: %3 - Source Folder
-:: %4 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:ExportImage
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-if "" == "%3" goto :EOF
-if "" == "%4" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Check destination folder exists
-if exist %4 goto exists_ok
-
-echo "Required Folder does not exist: %4"
-goto :EOF
-
-:exists_ok
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%3
-set replacement=%4
-set source_file=%2
-set new_file=!source_file:%original%=%replacement%!
-set new_file_png=%new_file:.svg=.png%
-echo "Exporting %source_file% ==> %new_file_png%"
-
-:: DEBUG:
-:: echo "%1" "%2" "%3" "%4" "%new_file_png%"
-
-:: IMPORTANT: Now actually call the exporter/converter here:
-:: TODO: SET THE DESIRED HEIGHT/WIDTH HERE (currently 64 pixels):
-"%1" "%2" --export-width=256 --export-height=256 --export-png="%new_file_png%"
-
-endlocal & goto :EOF
-
-:: ----------------------------------------------------------------------------
-:: CreateDestinationFolders - Creates Required Destination Folders
-:: (based on source folder)
-:: %1 - Source Folder
-:: %2 - Destination Folder
-:: ----------------------------------------------------------------------------
-
-:CreateDestinationFolders
-
-:: get structure of source and recreate in destination folder
-
-if "" == "%1" goto :EOF
-if "" == "%2" goto :EOF
-
-setlocal ENABLEEXTENSIONS
-
-echo "Creating Folder Structure of %1 in %2"
-
-echo "Creating Dest Folder Root: %2"
-mkdir "%2"
-
-for /f "delims=" %%i in ('dir /ad/s/b %1') do call :CreateReplacementFolder %1 %2 %%i
-
-endlocal & goto :EOF
-:: ----------------------------------------------------------------------------
-
-:: ----------------------------------------------------------------------------
-:: CreateReplacementFolder - replaces the source folder root with the destination
-:: and creates the folder
-::
-:: %1 - Source Folder Root
-:: %2 - Destination Folder Root
-:: %3 - Current Folder
-:: ----------------------------------------------------------------------------
-
-:CreateReplacementFolder
-
-setlocal ENABLEEXTENSIONS
-setlocal ENABLEDELAYEDEXPANSION
-
-:: Text Replacement with variables in DOS - oy vey
-set original=%1
-set replacement=%2
-set source_folder=%3
-set new_folder=!source_folder:%original%=%replacement%!
-echo "Creating New Folder for Copying: %source_folder% ==> %new_folder%"
-
-mkdir "%new_folder%"
-
-endlocal & goto :EOF
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/README.md b/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/README.md
deleted file mode 100644
index 79a87a0..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/image-conversion-utilities/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# image-conversion-utilities
-
-## Purpose
-
-* Converts a set of Scalable Vector Graphics (.svg) files (arranged in a directory tree) to other formats (ex: .png/.emf)
-* Recreates the original folder structure/tree of the source folder in the destination folder
-
-## Important Notes/Caveats/Limitations
-
-* Windows-only
- * These utilities were written as DOS batch (.bat) files to be able to run relatively easily (with minimum configuration) i.e. without needing to install additional software (besides the .svg converter)
-* IMPORTANT: No spaces in any of the paths (path to Inkscape, path to SVGs, etc.)
- * Because of the Windows batch file constraints (mainly needing to replace text in variables in a DOS batch file), there can't be any spaces in the paths
- * So, for instance, **don't** install your converter to **"Program Files"** or put the files to convert in **"My Documents"**
-* Need to install a third party .svg converter utility, **we recommend Inkscape version 048.5.R10040.**
- * While several other .svg converters are available, it is HIGHLY recommended to use the specific version of Inkscape mentioned, as it is the only version verified to not distort the colors/fonts/dash pattern during this process.
-
-## Instructions
-
-* Ensure that an appropriate .svg converter is installed
- * This utility has been tested with Inkscape version 048.5.R10040. While several other .svg converters are available, it is highly recommended to use the version of inkscape mentioned below, as it is the only version verified to NOT distort the colors/fonts/dash pattern during this process
- * Inkscape is available at: http://www.inkscape.org/en/download/ (you may use 32 or 64-bit Windows version)
- * It is recommended that you use the [.7zip version](https://inkscape.org/en/gallery/item/3932/Inkscape-0.91-1-win32.7z) which allows you to extract anywhere (so you don't put a space in the path - [see limitations](#important-notescaveatslimitations) )
-* Select the desired .bat that matches your desired conversion method
- * `ConvertTree-SVGtoEMF.bat` used to convert an .svg file tree to Enhanced Metafile Format (.emf) is the version you will normally want to use with this process.
-* IMPORTANT: Modify the converter .bat command file to match your local paths
- * Open and edit the desired .bat file, find the "IMPORTANT/TODO" section at the top, and edit the paths:
- * (1) Converter location: full path to .svg converter
- * (2) Source .svg file Root Folder
- * The local path to [this SVG folder](../../svg)
- * (3) Desired Destination Folder
- * The local path to [this EMF folder](../../emf)
- * See [sample converter .bat file for more information](./ConvertTree-SVGtoEMF.bat)
-* Run the desired .bat file
- * `cd {local-path-to-bat}`
- * Run the .bat, e.g. ConvertTree-SVGtoEMF.bat
- * If you wish to capture the command-line output for later analysis of errors add the following to the command above: `ConverterOutput.txt 2>&1`
- * If you wish to capture the output, alternately, you can run the file: `ConvertTree-SVGtoEMF-CaptureOutput.bat`
- * (Full Example) `ConvertTree-SVGtoEMF.bat > ConverterOutput.txt 2>&1`
- * *(May take several minutes depending on the number of files)*
- * Check the output for errors
-* Check the destination folder for the converted image files
- * IMPORTANT NOTE: MS Paint (which is the default file association) does not support the latest version of EMF so you will need to use an alternative program to view the resulting EMF files (ex. MS Word)
-
-## Alternative Workflow using Adobe Illustrator Actions
-
-* If you have access to Adobe Illustrator (We are using CS6), you can use Actions in Batch Mode to convert your files from .svg to .emf.
-* IMPORTANT: This process will export .emfs to one singular folder, not the origin .svg file directory.
-* To start, download the `BatchConvertSVGtoEMF.aia` action set file contained in this repository.
-* Open Adobe Illustrator, navigate to the Window pane, and open up Actions.
-* Choose Load Actions from the Actions Panel menu. Navigate to the ExportasEMF action set, and click Open.
-* Under the `ExportasEMF` action, double click on the destination file path and edit it to ensure that your files will be converted to .emf in the desired location.
-* Click on the `ExportasEMF` action within the action set. Then, navigate to the Actions Panel menu on the top right of the pane and choose Batch. This will open up the Batch pane.
- * Set the source folder to where your .svg files are located.
- * Make sure that the `Include All Subdirectories` check box is checked if your .svg files are stored in subdirectories.
- * Set the destination to `Save and Close.` Optionally, you can specify the output folder by choosing `Override Action 'Export' Commands.` If you choose not to do this, the output will navigate to the destination file path you set under the `ExportasEMF` action.
- * Click OK, which will start the batch conversion process.
-* Check for any unwanted converted .emf files in your output folder before moving on to `style-file-utilities`.
-* At this point, you will have to either re-map the svg files to their original directories, or edit the `Military-All-Icons.csv` to collapse the `filePath` column so that the paths reflect the singular output .emf folder.
- * For example, you could replace "Appendices\Activities" with "" and do the same for the other appendices. For the Legacy folder, however, this may not work as well due to repeat entries in the .csv. As a result, it would be best to run this process separately for the legacy subdirectories.
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/.gitignore b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/.gitignore
deleted file mode 100644
index 3540e57..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-# Ignore these temp file used for the merge process
-Military-All-Icons.csv
-Military-ControlMeasures-Source-Points.csv
-Military-ControlMeasures-Source-Lines.csv
-Military-ControlMeasures-Source-Areas.csv
-*.stylx
-*.orig
-*.localversion
-*-local.*
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/AutomatedCopyandMerge.bat b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/AutomatedCopyandMerge.bat
deleted file mode 100644
index 1706d34..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/AutomatedCopyandMerge.bat
+++ /dev/null
@@ -1,73 +0,0 @@
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-:: IMPORTANT/TODO: you must set/correct paths below: "TODO_"
-:: The expected workflow is to
-:: 1. Edit this file and save as "AutomatedCopyandMerge-local.bat"
-:: 2. Edit a version of "SqliteMergeStylx.sql" in this folder and save as "SqliteMergeStylx-local.sql"
-:: (The reason for the "-local" file naming/change is .gitignore is set to ignore that file pattern as a change)
-:: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-:: INPUTS/SETTINGS:
-:: (1) Joint Military Symbology Cloned Repo location:
-:: Cloned from: https://github.com/Esri/joint-military-symbology-xml to local machine
-SET LOCAL_JMSXML_REPO_CLONE=C:\{TODO_EDIT_THIS_PATH}\joint-military-symbology-xml
-:: EXAMPLE: SET LOCAL_JMSXML_REPO_CLONE=C:\Github\joint-military-symbology-xml
-
-:: (2) Path to Sqlite executable/engine
-:: If you are using a tool other than sqlite3.exe, you may need to edit that also
-SET SQLITE_PATH_AND_EXE=C:\{TODO_EDIT_THIS_PATH}\sqlite3.exe
-:: EXAMPLE: SET SQLITE_PATH_AND_EXE=C:\Installs\Sqlite\sqlite3.exe
-
-:: (3) Military Features Data Root Folder (military-features-data)
-:: No need to set this, but do note it assumes it is being run from:
-:: .\military-features-data\data\mil2525d\utilities\style-utilities\merge-stylx-utilities
-:: Just make it relative to this folder (this is easier than using this relative path everywhere)
-SET LOCAL_MIL_FEATURES_REPO_2525D=..\..\..\..
-
-:: (4) Name of the stylx file that has only the Point/SVG symbols
-:: IMPORTANT: the script currently assumes this file will be in the same folder:
-:: ...style-utilities\merge-stylx-utilities (but you can add a path to this here if you want to)
-SET POINTS_ONLY_STYLX=mil2525d-points-only.stylx
-
-:: it is the default, but just in case, this enables the needed feature "goto :eof" ("exit/return")
-setlocal ENABLEEXTENSIONS
-
-:prereqs_jmsxml_exists_ok
-
-:: Check the Sqlite exe exists
-if exist "%SQLITE_PATH_AND_EXE%" goto prereqs_sqlite_exists_ok
-
-echo "ERROR: Required Sqlite exe/engine does not exist: %SQLITE_PATH_AND_EXE%"
-goto :pauseit
-
-:prereqs_sqlite_exists_ok
-
-:: Check that we are in the expected military-features-data folder
-:: just check that an expected folder exists
-if exist "%LOCAL_MIL_FEATURES_REPO_2525D%\military-symbology-styles\utils-and-source-data\style-source-files" goto prereqs_milfeatures_exists_ok
-
-echo "ERROR: This .bat does not appear to be in the expected folder: %LOCAL_MIL_FEATURES_REPO_2525D%"
-goto :pauseit
-
-:prereqs_milfeatures_exists_ok
-
-if exist "%POINTS_ONLY_STYLX%" goto prereqs_points_only_stylx_exists_ok
-echo "ERROR: Could not find points only stylx in current folder: %POINTS_ONLY_STYLX%"
-goto :pauseit
-
-:prereqs_points_only_stylx_exists_ok
-
-:: Prerequisites have been verified, now copy all of the dependent files into the current folder
-
-copy ""%LOCAL_MIL_FEATURES_REPO_2525D%\military-symbology-styles\utils-and-source-data\style-source-files\mil2525d\imagefile_name_category_tags\Military-All-Icons.csv .
-
-copy "%LOCAL_MIL_FEATURES_REPO_2525D%\military-symbology-styles\utils-and-source-data\style-source-files\mil2525d-lines-areas-labels-base-template.stylx" mil2525d.stylx
-
-copy %POINTS_ONLY_STYLX% mil2525d-points-to-add-keys-labels.stylx
-
-:: TODO: (Possibly) you may also want to rename this "SqliteMergeStylx-local.sql" (if that is the version of the file you edited)
-"%SQLITE_PATH_AND_EXE%" < "%LOCAL_MIL_FEATURES_REPO_2525D%\military-symbology-styles\utils-and-source-data\style-creation-utilities\merge-stylx-utilities\SqliteMergeStylx.sql"
-
-echo ******* IMPORTANT: Now verify the output and check for any errors *******
-
-:pauseit
-Pause
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/Readme.md b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/Readme.md
deleted file mode 100644
index d16d064..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/Readme.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# merge-stylx-utilities
-
-## Purpose
-
-* Merges:
- * A version of the .stylx that is edited and maintained in ArcGIS Pro
- * See: [mil2525d-lines-areas-labels-base-template.stylx](../../style-source-files/mil2525d-lines-areas-labels-base-template.stylx)
-* -with-
- * A version of the .stylx file with the SVG/EMF marker/points-only icons. This version is normally automatically generated from SVG icon marker symbols and meta-data-tagged source data from the [source data folder](../../utils-and-source-data/style-source-files)
- * For more information on this data/process/version, see :
- * [style-file-utilities](../README.md)
-
-## Requirements
-
-* `(1)` 2 Versions of the .stylx files:
- * A version of the .stylx file with the SVG/EMF icons
- * A Pro/Runtime stylx file with all of the 2525D Point Icons called `mil2525d-points-only.stylx`
- * This would have been created [by following the steps/readme here](../README.md)
- * If you don't already have this file, you can create one by (1) importing the 10.X **.style** file with these point icons into ArcGIS Pro and (2) renaming the resulting file to `mil2525d-points-only.stylx` - steps:
- * Import the file "mil2525d-points-only.style" into Pro (Note: this is a 10.X **style** file until you import it into Pro, after which time a **.stylx** file will be created)
- * Rename `Military 2525Delta All.stylx` to `mil2525d-points-only.stylx`
- * A version of the .stylx that is edited and maintained in ArcGIS Pro: [mil2525d-lines-areas-labels-base-template.stylx](../../style-source-files/mil2525d-lines-areas-labels-base-template.stylx)
- * This version has Label Placement definitions, Point, Line, Polygon, and Text Symbols that are manually created and maintained in ArcGIS Pro
- * This file is already included with this repo
-* `(2)` A SQLite Engine/Editor/Interpreter capable of executing SQL commands from a script
- * These steps have been tested using [sqlite3.exe](http://www.sqlite.org/download.html) but you may use the application/sqlite engine of your choice
-* `(3)` A Style Icon specification file: [Military-All-Icons.csv](../../style-source-files/mil2525d/imagefile_name_category_tags) with the following required fields: `styleItemCategory, styleItemName, styleItemUniqueId, styleItemTags`
-
-## Instructions
-
-* Copy/edit/verify the prerequisite files are present
- * Copy the required "Points/Icons-Only" version of the .stylx mentioned in Requirements above to this folder and ensure it is named: `mil2525d-points-only.stylx`
- * This file should now exist locally: `...utilities\style-utilities\merge-stylx-utilities\mil2525d-points-only.stylx`
- * Note the location of the Style Icon specification file: [Military-All-Icons.csv](../../style-source-files/mil2525d/imagefile_name_category_tags) with the following required fields: `styleItemCategory, styleItemName, styleItemUniqueId, styleItemTags`
- * Edit the versions.csv file to update the pertinent version information, this information will be inserted into the completed/merged mil2525d.stylx file
- * This file should now be current with the updated/desired version information: `...style-creation-utilities\merge-stylx-utilities\versions.csv`
-* Edit the automated scripts to point to the paths/configuration of your local machine:
- * Use a text editor of your choice, such as Notepad/Notepad++, to edit and save local versions of the following files
- * Edit the batch file: [AutomatedCopyandMerge.bat](./AutomatedCopyandMerge.bat), set/replace the following settings:
- * These settings read `{TODO_EDIT_THIS_PATH}` and are:
- * The path to the SQLite executable/engine: `SET SQLITE_PATH_AND_EXE=________`
- * Save the updated version of the batch file
- * Edit the SQLite script [SqliteMergeStylx.sql](./SqliteMergeStylx.sql) to provide the fully qualified local path to this folder (`.../style-creation-utilities/merge-stylx-utilities`)
- * **IMPORTANT**: the SQLite engine `sqlite3.exe` will *not* recognize backslashes (`\` - MS-DOS paths) so forward slashes (`/` - Unix-style paths) must be used.
- * Replace all instances (currently 4 instances) of `{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}` with the fully qualified local path to this folder: `....utilities/style-utilities/merge-stylx-utilities` being careful to
- * Use forward slashes (`/`) rather than backslashes (`\`)
- * Scroll through the entire file to check for replacements, several instances are near the bottom, end of the file
- * Save the updated version of the .sql file
-* Run the automated script to merge the two stylx files - [AutomatedCopyandMerge.bat](./AutomatedCopyandMerge.bat)
- * After the batch file has run, verify that there are no errors in the output
-* Test and update the resulting `mil2525d.stylx` created. To test you may:
- * Open the mil2525d.stylx in ArcGIS Pro -or-
- * You may replace/update the .stylx used mil2525d DictionaryRenderer by replacing the file at `ArcGIS\Pro\Resources\Dictionaries\mil2525d`
-* Once you have tested for correctness, you may wish to update the managed version in this repository at [military-symbology-styles/mil2525d](../../../mil2525d)
-
-
-
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteDeNullifier.sql b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteDeNullifier.sql
deleted file mode 100644
index 7c1b213..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteDeNullifier.sql
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-SqliteDeNullifier.sql
-Description: (Workaround) Removes JSON Null/"[]" from CIM 1.1/1.2 stylx's that cause .stylx's to fail in ArcGIS Runtime Quartz
-Notes: these nulls are incorrectly introduced in Pro "Upgrade to Pro/CIM 1.1/1.2" - this issue is being reported/tracked/worked
-*/
-
-.print "Starting..."
-
-/* replace spurious nulls [] */
-.print "Removing nulls..."
-
-/* Common Issues Found: */
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"effects":[]', '') WHERE (CONTENT LIKE '%,"effects":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"callout":[]', '') WHERE (CONTENT LIKE '%,"callout":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"haloSymbol":[]', '') WHERE (CONTENT LIKE '%,"haloSymbol":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"symbol3DProperties":[]', '') WHERE (CONTENT LIKE '%,"symbol3DProperties":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"markerPlacement":[]', '') WHERE (CONTENT LIKE '%,"markerPlacement":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"shadowColor":[]', '') WHERE (CONTENT LIKE '%,"shadowColor":[]%');
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"markerGraphics":[]', '') WHERE (CONTENT LIKE '%,"markerGraphics":[]%');
-
-/* Less Common Issues Found (these may be old and no longer issues & can be checked/removed at some point): */
-
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"sourceModifiedTime":[]', '') WHERE (CONTENT LIKE '%,"sourceModifiedTime":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"layerElevation":[]', '') WHERE (CONTENT LIKE '%,"layerElevation":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"layer3DProperties":[]', '') WHERE (CONTENT LIKE '%,"layer3DProperties":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"layerMasks":[]', '') WHERE (CONTENT LIKE '%,"layerMasks":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"layerTemplate":[]', '') WHERE (CONTENT LIKE '%,"layerTemplate":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"popupInfo":[]', '') WHERE (CONTENT LIKE '%,"popupInfo":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"charts":[]', '') WHERE (CONTENT LIKE '%,"charts":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"layers":[]', '') WHERE (CONTENT LIKE '%,"layers":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"symbolLayerDrawing":[]', '') WHERE (CONTENT LIKE '%,"symbolLayerDrawing":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"colorSubstitutions":[]', '') WHERE (CONTENT LIKE '%,"colorSubstitutions":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"tintColor":[]', '') WHERE (CONTENT LIKE '%,"tintColor":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"dashTemplate":[]', '') WHERE (CONTENT LIKE '%,"dashTemplate":[]%');
-UPDATE ITEMS SET CONTENT = REPLACE(CONTENT, ',"symbolLayers":[]', '') WHERE (CONTENT LIKE '%,"symbolLayers":[]%');
-
-/* clean up */
-.print "VACUUM..."
-VACUUM;
-
-.print "DONE"
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteUpdateTemplateStylxTags.sql b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteUpdateTemplateStylxTags.sql
deleted file mode 100644
index 789189a..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/SqliteUpdateTemplateStylxTags.sql
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-Purpose: this script is an administrative tool to update the *Tags* column of the manually maintained .stylx:
- `mil2525d-lines-areas-labels-base-template.stylx`
- if/when the source data (as maintained in Military-All-Icons.csv) changes
-
-Prerequisites:
-1. A version of the .stylx that is edited and maintained in ArcGIS Pro: `mil2525d-lines-areas-labels-base-template.stylx`
- Copy this file: `mil2525d-lines-areas-labels-base-template.stylx` into the current/merge folder
-2. A Sqlite Editor/Interpreter capable of executing SQL commands (ex. sqlite3.exe)
-3. The 3 Icon specification files for the **Control Measures**:
- 1. Military-ControlMeasures-Source-Points.csv
- 2. Military-ControlMeasures-Source-Lines.csv
- 3. Military-ControlMeasures-Source-Areas.csv
- 4. Copy these files into the current/merge folder
- 5. Additional Notes:
- Obtained from: https://github.com/Esri/joint-military-symbology-xml/blob/master/samples/imagefile_name_category_tags
- With the following required fields: `styleItemCategory, styleItemName, styleItemUniqueId, styleItemTags`
-
-To Run:
-1. In this file, replace all instances of `{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}`
- with the fully qualified local path to this folder: `....utilities/style-utilities/merge-stylx-utilities`
- being careful to use forward slashes (`/`) rather than backslashes (`\`)
- and save the file
-1. Run sqlite3.exe
-2. .read "{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}/SqliteUpdateTemplateStylxTags.sql"
--or-
-sqlite3.exe < "{PATH_TO_LOCAL_MIL_FEATURES_REPO}\style-utilities\merge-stylx-utilities\SqliteUpdateTemplateStylxTags.sql"
-*/
-
-.print "Attaching stylx..."
-attach "{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}/mil2525d-lines-areas-labels-base-template.stylx" as mil2525d;
-
-/* Import the icon specification files for the Control Measures */
-.print "Importing Military-All-Icons.csv to use for join..."
-.mode csv
-.import "{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}/Military-ControlMeasures-Source-Points.csv" NameJoin1
-
-.import "{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}/Military-ControlMeasures-Source-Lines.csv" NameJoin2
-
-.import "{FULL-PATH-TO-MERGE-FOLDER-NO-BACKSLASHES}/Military-ControlMeasures-Source-Areas.csv" NameJoin3
-
-.print "Print current tables attached..."
-.tables
-
-/* Now Join on those specification files to update the Tags with the data from the spec files */
-.print "Updating Tags where ITEMS.Key *contains* NameJoin.styleItemUniqueId for each csv file..."
-INSERT OR REPLACE INTO mil2525d.ITEMS
- SELECT ITEMS.ID,ITEMS.CLASS,ITEMS.CATEGORY,ITEMS.NAME,NameJoin1.styleItemTags,ITEMS.CONTENT,ITEMS.Key,ITEMS.LabelRules
- FROM ITEMS JOIN NameJoin1 ON instr(ITEMS.Key, NameJoin1.styleItemUniqueId) > 0;
-
-INSERT OR REPLACE INTO mil2525d.ITEMS
- SELECT ITEMS.ID,ITEMS.CLASS,ITEMS.CATEGORY,ITEMS.NAME,NameJoin2.styleItemTags,ITEMS.CONTENT,ITEMS.Key,ITEMS.LabelRules
- FROM ITEMS JOIN NameJoin2 ON instr(ITEMS.Key, NameJoin2.styleItemUniqueId) > 0;
-
-INSERT OR REPLACE INTO mil2525d.ITEMS
- SELECT ITEMS.ID,ITEMS.CLASS,ITEMS.CATEGORY,ITEMS.NAME,NameJoin3.styleItemTags,ITEMS.CONTENT,ITEMS.Key,ITEMS.LabelRules
- FROM ITEMS JOIN NameJoin3 ON instr(ITEMS.Key, NameJoin3.styleItemUniqueId) > 0;
-
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/versions.csv b/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/versions.csv
deleted file mode 100644
index 01235ba..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/merge-stylx-utilities/versions.csv
+++ /dev/null
@@ -1,9 +0,0 @@
-runtime_version,1.0.0
-rule_engine_plugin_version,1.0.0
-pro_version,1.2.5023
-milstylx_version,1.2.0
-milstd_version,2525D-0
-jmsml_version,1.0.2
-legacy_standard_switch,original
-legacy_standard,mil2525bc2
-fringe,-100;-100;100;100
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/.gitignore b/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/.gitignore
deleted file mode 100644
index 937014e..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-csv2ArcGISStyleDeployment/
-*-old
-*-local
\ No newline at end of file
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/README.md b/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/README.md
deleted file mode 100644
index 5de6a44..0000000
--- a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# style-file-utilities
-
-## Purpose
-
-* Imports a set of Enhanced Meta File (.emf) vector image files into ArcGIS .style files
-* Used to produce Military Feature Style Files (**point markers only** at this time)
-
-## Requirements
-
-* A set of .emf files to import into selected styles
- * See [../image-conversion-utilities](../image-conversion-utilities) for one method of creating .emf files
-* A set of Comma-Separated Value (.csv) files containing the specifications for the images to import
- * Icon specification file - [Military-All-Icons.csv](../../style-source-files/mil2525d/imagefile_name_category_tags)
- * [Sample .csv specification file here](https://github.com/csmoore/csv2ArcGISStyle/blob/master/sample/myStyleSample.csv)
-* ArcGIS for Desktop 10.1 (or later)
-* To build the .NET Solution from source in [csv2ArcGISStyle](https://github.com/csmoore/csv2ArcGISStyle) you will also need
- * Visual Studio 2010 or later
- * ArcObjects .NET Engine or Desktop Development Kit (10.1 or later)
- * If you do not need to build from source, you may skip this requirement
-
-## Instructions
-
-* Locations you will need to note in the steps below:
- * `{Emf_Images_Home}` = _____________________
- * `{Csv_2_ArcGISStyle_Home}` = ____________
- * IMPORTANT: these paths/locations may not contain spaces
-* Obtain the set of .emf source files to import and note the location of these files: `{Emf_Images_Home}`
- * Make note of this location: `{Emf_Images_Home}` = __________
- * See [../image-conversion-utilities](../image-conversion-utilities) for one method of creating .emf files
-* (Optional) If building from source, build the Style File Import Utility csv2ArcGISStyle project at [csmoore/csv2ArcGISStyle](https://github.com/csmoore/csv2ArcGISStyle)
- * This is a fork of [williamscraigm/csv2ArcGISStyle](https://github.com/williamscraigm/csv2ArcGISStyle) - see that repo for more information on this process/source
-* A sample deployment of the Style File Import Utility `csv2ArcGISStyle` is provided in this folder (Windows only)
- * Unzip the file: csv2ArcGISStyleDeployment.zip to a desired location
- * Make note of this location: `{Csv_2_ArcGISStyle_Home}` = __________
- * IMPORTANT: `{Csv_2_ArcGISStyle_Home}` will be the location of the folder that contains the file/executable: `csv2ArcGISStyle.exe`
-* Edit the file `{Csv_2_ArcGISStyle_Home}\CreateAllMilitaryStyles.bat`
- * Change the value of `C:\{TODO_NO_SPACES_CSV2STYLEHOME}` to the value noted above in `{Csv_2_ArcGISStyle_Home}`
- * Verify that the .csv file & style names in this .bat file are still current/valid
- * **IMPORTANT: there should be no spaces in any of these names/paths/parameters in this .bat**
-* Update the .csv's containing the specifications for the images to import in the CsvSourceData folder
- * The location of these files is at: `{Csv_2_ArcGISStyle_Home}`\CsvSourceData
- * You will need to update the files in this folder with the latest versions of the specification files from [Military-All-Icons.csv](../../style-source-files/mil2525d/imagefile_name_category_tags)
- * Obtain the files from the link above and overwrite them in the folder: `{Csv_2_ArcGISStyle_Home}`\CsvSourceData
- * IMPORTANT: Next, you will need to edit these files to change (i.e. find&replace) the string `{Symbols_Root}` in each specification file/.csv to your local location/full path noted in `{Emf_Images_Home}`
- * Open each file in a text editor (Notepad or Notepad+), find/replace: `{Symbols_Root}` with the full path of `{Emf_Images_Home}`, and save each file.
-* Open a command prompt:
- * `cd {Csv_2_ArcGISStyle_Home}`
- * `CreateAllMilitaryStyles.bat`
- * Output will be produced at `{Csv_2_ArcGISStyle_Home}\StyleOutputData`
-* Verify the output in the `{Csv_2_ArcGISStyle_Home}\StyleOutputData` folder and check the styles for errors
-
-
-
diff --git a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/csv2ArcGISStyleDeployment.zip b/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/csv2ArcGISStyleDeployment.zip
deleted file mode 100644
index 3d71f67..0000000
Binary files a/military-symbology-styles/utils-and-source-data/style-creation-utilities/style-file-utilities/csv2ArcGISStyleDeployment.zip and /dev/null differ