Example #1
0
        private void SaveScript(object parameter)
        {
            ConceptNodeViewModel concept = Shell.SelectedTabViewModel as ConceptNodeViewModel;

            if (concept == null)
            {
                MessageBox.Show("Script is not selected!", ONE_C_SHARP, MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }
            if (!(concept.SyntaxNode is ScriptConcept script))
            {
                return;
            }

            SyntaxTreeJsonSerializer _serializer = new SyntaxTreeJsonSerializer();
            var knownTypes = _serializer.Binder.KnownTypes;

            knownTypes.Add(typeof(ScriptConcept).FullName, typeof(ScriptConcept));
            knownTypes.Add(typeof(LanguageConcept).FullName, typeof(LanguageConcept));
            foreach (LanguageConcept language in script.Languages)
            {
                if (language.Assembly == null)
                {
                    continue;
                }
                foreach (Type type in language.Assembly.GetTypes()
                         .Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(SyntaxNode))))
                {
                    knownTypes.Add(type.FullName, type);
                }
            }
            if (knownTypes.Count == 0)
            {
                return;
            }

            string filePath = ScriptFilePath;
            string json     = _serializer.ToJson(script);

            using (StreamWriter writer = File.CreateText(filePath))
            {
                writer.Write(json);
            }

            MessageBox.Show("Script has been saved successfully!", ONE_C_SHARP, MessageBoxButton.OK, MessageBoxImage.Information);
        }