Example #1
0
        /*
         * public static void SaveTemplates ()
         * {
         *      if (!Directory.Exists (TemplatePath))
         *              Directory.CreateDirectory (TemplatePath);
         *      foreach (string templateFile in Directory.GetFiles (TemplatePath, "*.xml")) {
         *              File.Delete (templateFile);
         *      }
         *      foreach (CodeTemplate template in templates) {
         *              if (string.IsNullOrEmpty (template.Shortcut)) {
         *                      LoggingService.LogError ("CodeTemplateService: Can't save unnamed template " + template);
         *                      continue;
         *              }
         *              SaveTemplate (template, Path.Combine (TemplatePath, template.Shortcut + ".template.xml"));
         *      }
         * }*/

        static List <CodeTemplate> LoadTemplates(XmlReader reader)
        {
            List <CodeTemplate> result = new List <CodeTemplate> ();

            try {
                while (reader.Read())
                {
                    if (reader.IsStartElement())
                    {
                        switch (reader.LocalName)
                        {
                        case Node:
                            string fileVersion = reader.GetAttribute(VersionAttribute);
                            if (fileVersion != Version)
                            {
                                return(null);
                            }
                            break;

                        case CodeTemplate.Node:
                            result.Add(CodeTemplate.Read(reader));
                            break;
                        }
                    }
                }
            } catch (Exception e) {
                LoggingService.LogError("CodeTemplateService: Exception while loading template.", e);
                return(null);
            } finally {
                reader.Close();
            }
            return(result);
        }
Example #2
0
 public static void SaveTemplate(CodeTemplate template)
 {
     if (!Directory.Exists(TemplatePath))
     {
         Directory.CreateDirectory(TemplatePath);
     }
     SaveTemplate(template, Path.Combine(TemplatePath, template.Shortcut + ".template.xml"));
 }
Example #3
0
		public static CodeTemplate Read (XmlReader reader)
		{
			Debug.Assert (reader.LocalName == Node);
			
			CodeTemplate result = new CodeTemplate ();
			
			XmlReadHelper.ReadList (reader, Node, delegate () {
				//Console.WriteLine (reader.LocalName);
				switch (reader.LocalName) {
				case HeaderNode:
					XmlReadHelper.ReadList (reader, HeaderNode, delegate () {
						switch (reader.LocalName) {
						case GroupNode:
							result.Group = reader.ReadElementContentAsString ();
							return true;
						case VersionNode:
							result.Version = reader.ReadElementContentAsString ();
							return true;
						case MimeNode:
							result.MimeType = reader.ReadElementContentAsString ();
							return true;
						case ContextNode:
							result.CodeTemplateContext = (CodeTemplateContext)Enum.Parse (typeof (CodeTemplateContext), reader.ReadElementContentAsString ());
							return true;
						case ShortcutNode:
							result.Shortcut = reader.ReadElementContentAsString ();
							return true;
						case DescriptionNode:
							result.Description = reader.ReadElementContentAsString ();
							return true;
						case TemplateTypeNode:
							result.CodeTemplateType = (CodeTemplateType)Enum.Parse (typeof (CodeTemplateType), reader.ReadElementContentAsString ());
							return true;
						}
						return false;
					});
					return true;
				case VariablesNode:
					XmlReadHelper.ReadList (reader, VariablesNode, delegate () {
						//Console.WriteLine ("var:" + reader.LocalName);
						switch (reader.LocalName) {
						case CodeTemplateVariable.Node:
							CodeTemplateVariable var = CodeTemplateVariable.Read (reader);
							result.variableDecarations [var.Name] = var;
							return true;
						}
						return false;
					});
					return true;
				case CodeNode:
					result.Code = reader.ReadElementContentAsString ();
					return true;
				}
				return false;
			});
			//Console.WriteLine ("result:" + result);
			return result;
		}
		public CodeTemplateCompletionData (Document doc, CodeTemplate template)
		{
			this.doc      = doc;
			this.template = template;
			this.CompletionText = "test";
			this.Icon        = template.Icon;
			this.DisplayText = template.Shortcut;
			this.Description = template.Shortcut + Environment.NewLine + GettextCatalog.GetString (template.Description);
		}
 public CodeTemplateCompletionData(TextEditorExtension doc, CodeTemplate template)
 {
     this.doc            = doc;
     this.template       = template;
     this.CompletionText = template.Shortcut;
     this.Icon           = template.Icon;
     this.DisplayText    = template.Shortcut;
     this.Description    = template.Shortcut + Environment.NewLine + GettextCatalog.GetString(template.Description);
 }
        void ButtonAddClicked(object sender, EventArgs e)
        {
            var newTemplate = new CodeTemplate();
            var editDialog  = new EditTemplateDialog(newTemplate, true);

            if (MessageService.ShowCustomDialog(editDialog, this.Toplevel as Gtk.Window) == (int)ResponseType.Ok)
            {
                InsertTemplate(newTemplate);
                templates.Add(newTemplate);
                templatesToSave.Add(newTemplate);
            }
        }
Example #7
0
 public static void DeleteTemplate(CodeTemplate template)
 {
     try {
         var fileName = Path.Combine(TemplatePath, template.Shortcut + ".template.xml");
         if (File.Exists(fileName))
         {
             File.Delete(fileName);
         }
     } catch (Exception e) {
         LoggingService.LogError("Error while removing template file", e);
     }
 }
        void RenderIcon(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            CodeTemplate template = (CodeTemplate)templateStore.GetValue(iter, 0);

            if (template == null)
            {
                pixbufCellRenderer.Pixbuf = ImageService.GetPixbuf(treeviewCodeTemplates.GetRowExpanded(templateStore.GetPath(iter)) ? MonoDevelop.Ide.Gui.Stock.OpenFolder : MonoDevelop.Ide.Gui.Stock.ClosedFolder, IconSize.Menu);
            }
            else
            {
                pixbufCellRenderer.Pixbuf = ImageService.GetPixbuf("md-template", IconSize.Menu);
            }
        }
Example #9
0
        static void RenderIcon(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            CodeTemplate template = (CodeTemplate)model.GetValue(iter, 0);

            var cri = (CellRendererImage)cell;

            if (template == null)
            {
                cri.Image = ImageService.GetIcon(((TreeView)column.TreeView).GetRowExpanded(model.GetPath(iter)) ? MonoDevelop.Ide.Gui.Stock.OpenFolder : MonoDevelop.Ide.Gui.Stock.ClosedFolder, IconSize.Menu);
            }
            else
            {
                cri.Image = ImageService.GetIcon(template.Icon, IconSize.Menu);
            }
        }
Example #10
0
        static void SaveTemplate(CodeTemplate template, string fileName)
        {
            XmlTextWriter writer = new XmlTextWriter(fileName, System.Text.Encoding.UTF8);

            writer.Formatting = Formatting.Indented;

            try {
                writer.WriteStartDocument();
                writer.WriteStartElement(Node);
                writer.WriteAttributeString(VersionAttribute, Version);
                template.Write(writer);
                writer.WriteEndElement();                  // Node
            } finally {
                writer.Close();
            }
        }
Example #11
0
        static List <CodeTemplate> LoadTemplates()
        {
            const string        ManifestResourceName = "MonoDevelop-templates.xml";
            List <CodeTemplate> builtinTemplates     = LoadTemplates(XmlTextReader.Create(typeof(CodeTemplateService).Assembly.GetManifestResourceStream(ManifestResourceName)));

            if (Directory.Exists(TemplatePath))
            {
                List <CodeTemplate> result = new List <CodeTemplate> ();
                foreach (string templateFile in Directory.GetFiles(TemplatePath, "*.xml"))
                {
                    result.AddRange(LoadTemplates(XmlTextReader.Create(templateFile)));
                }

                // merge user templates with built in templates
                for (int i = 0; i < builtinTemplates.Count; i++)
                {
                    CodeTemplate curTemplate = builtinTemplates[i];
                    bool         found       = false;
                    for (int j = 0; j < result.Count; j++)
                    {
                        CodeTemplate curResultTemplate = result[j];
                        if (curTemplate.Shortcut == curResultTemplate.Shortcut)
                        {
                            found = true;
                            if (curResultTemplate.Version != curTemplate.Version)
                            {
                                result[j] = curTemplate;
                            }
                        }
                    }
                    // template is new, insert it.
                    if (!found)
                    {
                        result.Add(curTemplate);
                    }
                }


                return(result);
            }

            LoggingService.LogInfo("CodeTemplateService: No user templates, reading default templates.");
            return(builtinTemplates);
        }
        void HandleChanged(object sender, EventArgs e)
        {
            TreeIter iter;

            if (treeviewCodeTemplates.Selection.GetSelected(out iter))
            {
                CodeTemplate template = templateStore.GetValue(iter, 0) as CodeTemplate;
                if (template != null)
                {
                    textEditor.ClearSelection();
                    textEditor.Document.MimeType = template.MimeType;
                    textEditor.Document.Text     = template.Code;
                }
                else
                {
                    textEditor.Document.Text = "";
                }
            }
        }
        void RenderTemplateName(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            CodeTemplate template = (CodeTemplate)templateStore.GetValue(iter, 0);

            if (template == null)
            {
                templateCellRenderer.Markup = (string)templateStore.GetValue(iter, 2);
                return;
            }

            if (treeviewCodeTemplates.Selection.IterIsSelected(iter))
            {
                templateCellRenderer.Markup = GLib.Markup.EscapeText(template.Shortcut) + " (" +
                                              GLib.Markup.EscapeText(GettextCatalog.GetString(template.Description)) + ")";
            }
            else
            {
                templateCellRenderer.Markup = GLib.Markup.EscapeText(template.Shortcut) + " <span foreground=\"" +
                                              GetColorString(Style.Text(StateType.Insensitive)) + "\">("
                                              + GLib.Markup.EscapeText(GettextCatalog.GetString(template.Description)) + ")</span>";
            }
        }
Example #14
0
        void RenderTemplateName(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            CodeTemplate template = (CodeTemplate)model.GetValue(iter, 0);
            var          crt      = (CellRendererText)cell;

            if (template == null)
            {
                crt.Markup = (string)model.GetValue(iter, 2);
                return;
            }

            if (((TreeView)column.TreeView).Selection.IterIsSelected(iter))
            {
                crt.Markup = GLib.Markup.EscapeText(template.Shortcut) + " (" +
                             GLib.Markup.EscapeText(GettextCatalog.GetString(template.Description)) + ")";
            }
            else
            {
                crt.Markup = GLib.Markup.EscapeText(template.Shortcut) + " <span foreground=\"" +
                             Styles.SecondaryTextColorHexString + "\">("
                             + GLib.Markup.EscapeText(GettextCatalog.GetString(template.Description)) + ")</span>";
            }
        }
		public static ExpansionObject GetExpansionObject (CodeTemplate template)
		{
			// TODO: Add more expansion objects.
			return new ExpansionObject ();
		}
Example #16
0
		public static CodeTemplate Read (XmlReader reader)
		{
			Debug.Assert (reader.LocalName == Node);
			
			var result = new CodeTemplate ();
			
			XmlReadHelper.ReadList (reader, Node, delegate () {
				//Console.WriteLine (reader.LocalName);
				switch (reader.LocalName) {
				case HeaderNode:
					XmlReadHelper.ReadList (reader, HeaderNode, delegate () {
						switch (reader.LocalName) {
						case GroupNode:
							result.Group = reader.ReadElementContentAsString ();
							return true;
						case VersionNode:
							result.Version = reader.ReadElementContentAsString ();
							return true;
						case MimeNode:
							result.MimeType = reader.ReadElementContentAsString ();
							return true;
						case ContextNode:
							result.CodeTemplateContext = (CodeTemplateContext)Enum.Parse (typeof (CodeTemplateContext), reader.ReadElementContentAsString ());
							return true;
						case ShortcutNode:
							result.Shortcut = reader.ReadElementContentAsString ();
							return true;
						case DescriptionNode:
							result.Description = reader.ReadElementContentAsString ();
							return true;
						case TemplateTypeNode:
							result.CodeTemplateType = (CodeTemplateType)Enum.Parse (typeof (CodeTemplateType), reader.ReadElementContentAsString ());
							return true;
						}
						return false;
					});
					return true;
				case VariablesNode:
					XmlReadHelper.ReadList (reader, VariablesNode, delegate () {
						//Console.WriteLine ("var:" + reader.LocalName);
						switch (reader.LocalName) {
						case CodeTemplateVariable.Node:
							var var = CodeTemplateVariable.Read (reader);
							result.variableDecarations [var.Name] = var;
							return true;
						}
						return false;
					});
					return true;
				case CodeNode:
					result.Code = reader.ReadElementContentAsString ();
					return true;
				}
				return false;
			});
			//Console.WriteLine ("result:" + result);
			return result;
		}
		public void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Editor.TextEditor editor, DocumentContext context)
		{
			TextEditor.InsertTemplate (template, editor, context);
		}
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext context)
		{
			using (var undo = editor.OpenUndoGroup ()) {
				var result = template.InsertTemplateContents (editor, context);

				var links = result.TextLinks.Select (l => new Mono.TextEditor.TextLink (l.Name) {
					Links = l.Links.Select (s => new TextSegment (s.Offset, s.Length)).ToList (),
					IsEditable = l.IsEditable,
					IsIdentifier = l.IsIdentifier
				}).ToList ();
				var tle = new TextLinkEditMode (this, result.InsertPosition, links);
				tle.TextLinkMode = TextLinkMode.General;
				if (tle.ShouldStartTextLinkMode) {
					tle.OldMode = CurrentMode;
					tle.StartMode ();
					CurrentMode = tle;
				}
			}
		}
        public EditTemplateDialog(CodeTemplate template, bool isNew)
        {
            this.Build();
            this.Title                          = isNew ? GettextCatalog.GetString("New template") : GettextCatalog.GetString("Edit template");
            this.template                       = template;
            this.entryShortcut1.Text            = template.Shortcut ?? "";
            this.comboboxentryGroups.Entry.Text = template.Group ?? "";
            this.comboboxentryMime.Entry.Text   = template.MimeType ?? "";
            this.entryDescription.Text          = template.Description ?? "";
            this.textEditor.Document.MimeType   = template.MimeType;
            this.textEditor.Document.Text       = template.Code;

            checkbuttonExpansion.Active    = (template.CodeTemplateType & CodeTemplateType.Expansion) == CodeTemplateType.Expansion;
            checkbuttonSurroundWith.Active = (template.CodeTemplateType & CodeTemplateType.SurroundsWith) == CodeTemplateType.SurroundsWith;

            scrolledwindow1.Child = textEditor;
            textEditor.ShowAll();
            textEditor.Caret.PositionChanged += CaretPositionChanged;
            options = new Mono.TextEditor.TextEditorOptions();
            options.ShowLineNumberMargin = false;
            options.ShowFoldMargin       = false;
            options.ShowIconMargin       = false;
            options.ShowInvalidLines     = false;
            options.ShowSpaces           = options.ShowTabs = options.ShowEolMarkers = false;
            options.ColorScheme          = PropertyService.Get("ColorScheme", "Default");
            textEditor.Options           = options;

            HashSet <string> mimeTypes = new HashSet <string> ();
            HashSet <string> groups    = new HashSet <string> ();

            foreach (CodeTemplate ct in CodeTemplateService.Templates)
            {
                mimeTypes.Add(ct.MimeType);
                groups.Add(ct.Group);
            }
            comboboxentryMime.AppendText("");
            foreach (string mime in mimeTypes)
            {
                comboboxentryMime.AppendText(mime);
            }
            comboboxentryGroups.AppendText("");
            foreach (string group in groups)
            {
                comboboxentryGroups.AppendText(group);
            }
            textEditor.Document.TextReplaced += DocumentTextReplaced;
            this.buttonOk.Clicked            += ButtonOkClicked;

            checkbuttonWhiteSpaces.Toggled += CheckbuttonWhiteSpacesToggled;

            variablesListStore         = new ListStore(typeof(string), typeof(CodeTemplateVariable));
            comboboxVariables.Model    = variablesListStore;
            comboboxVariables.Changed += ComboboxVariablesChanged;

            variableStore                   = new TreeStore(typeof(string), typeof(CodeTemplateVariable), typeof(string), typeof(int));
            treeviewVariable.Model          = variableStore;
            treeviewVariable.HeadersVisible = false;

            treeviewVariable.AppendColumn("", new Gtk.CellRendererText(), "text", 0);
            CellRendererText nameRenderer = new CellRendererText();

            treeviewVariable.AppendColumn("", nameRenderer, delegate(TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter) {
                nameRenderer.Markup = ((string)model.GetValue(iter, 2));
            });

            grid = new MonoDevelop.Components.PropertyGrid.PropertyGrid();
            grid.PropertySort = MonoDevelop.Components.PropertyGrid.PropertySort.Alphabetical;
            grid.ShowHelp     = true;
            grid.ShowAll();
            grid.ShowToolbar = false;

            vbox4.Remove(scrolledwindow2);
            vbox4.PackEnd(grid, true, true, 0);

            UpdateVariables();
        }
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Gui.Document document)
		{
			Document.BeginAtomicUndo ();
			var result = template.InsertTemplateContents (document);
			var tle = new TextLinkEditMode (this, result.InsertPosition, result.TextLinks);
			
			if (PropertyService.Get ("OnTheFlyFormatting", false)) {
				var prettyPrinter = CodeFormatterService.GetFormatter (Document.MimeType);
				if (prettyPrinter != null) {
					int endOffset = result.InsertPosition + result.Code.Length;
					string oldText = Document.GetTextAt (result.InsertPosition, result.Code.Length);
					var policies = document.Project != null ? document.Project.Policies : null;
					string text = prettyPrinter.FormatText (policies, Document.Text, result.InsertPosition, endOffset);
					
					if (text != null)
						Replace (result.InsertPosition, result.Code.Length, text);
					else
						//if formatting failed, just use the unformatted text
						text = oldText;
					
					Caret.Offset = result.InsertPosition + TranslateOffset (oldText, text, Caret.Offset - result.InsertPosition);
					foreach (TextLink textLink in tle.Links) {
						foreach (ISegment segment in textLink.Links) {
							segment.Offset = TranslateOffset (oldText, text, segment.Offset);
						}
					}
				}
			}
			
			if (tle.ShouldStartTextLinkMode) {
				tle.OldMode = CurrentMode;
				tle.StartMode ();
				CurrentMode = tle;
			}
			Document.EndAtomicUndo ();
		}
Example #21
0
		public void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Gui.Document doc)
		{
			TextEditor.InsertTemplate (template, doc);
		}
		void ButtonAddClicked (object sender, EventArgs e)
		{
			var newTemplate = new CodeTemplate ();
			using (var editDialog = new EditTemplateDialog (newTemplate, true)) {
				if (MessageService.ShowCustomDialog (editDialog, this.Toplevel as Gtk.Window) == (int)ResponseType.Ok) {
					InsertTemplate (newTemplate);
					templates.Add (newTemplate);
					templatesToSave.Add (newTemplate);
				}
			}
		}
		TreeIter InsertTemplate (CodeTemplate template)
		{
			TreeIter iter = GetGroup (template.Group);
			return templateStore.AppendValues (iter, template, template.Shortcut, null);
		}
Example #24
0
        static CodeTemplate ConvertToTemplate(TmSnippet setting)
        {
            var result = new CodeTemplate();

            result.Shortcut = setting.TabTrigger;
            var  sb                  = new StringBuilder();
            var  nameBuilder         = new StringBuilder();
            bool readDollar          = false;
            bool inBracketExpression = false;
            bool inExpressionContent = false;
            bool inVariable          = false;
            int  number              = 0;

            foreach (var ch in setting.Content)
            {
                if (inVariable)
                {
                    if (char.IsLetter(ch))
                    {
                        nameBuilder.Append(ch);
                    }
                    else
                    {
                        sb.Append(ConvertVariable(nameBuilder.ToString()));
                        nameBuilder.Length = 0;
                        inVariable         = false;
                    }
                }

                if (ch == '$')
                {
                    readDollar = true;
                    continue;
                }
                if (readDollar)
                {
                    if (ch == '{')
                    {
                        number = 0;
                        inBracketExpression = true;
                        readDollar          = false;
                        continue;
                    }
                    else if (char.IsLetter(ch))
                    {
                        inVariable = true;
                    }
                    else
                    {
                        sb.Append("$$");
                        readDollar = false;
                    }
                }
                if (inBracketExpression)
                {
                    if (ch == ':')
                    {
                        inBracketExpression = false;
                        inExpressionContent = true;
                        continue;
                    }
                    number = number * 10 + (ch - '0');
                    continue;
                }


                if (inExpressionContent)
                {
                    if (ch == '}')
                    {
                        if (number == 0)
                        {
                            sb.Append("$end$");
                            sb.Append(nameBuilder);
                        }
                        else
                        {
                            sb.Append("$" + nameBuilder + "$");
                            result.AddVariable(new CodeTemplateVariable(nameBuilder.ToString())
                            {
                                Default = nameBuilder.ToString(), IsEditable = true
                            });
                        }
                        nameBuilder.Length  = 0;
                        number              = 0;
                        inExpressionContent = false;
                        continue;
                    }
                    nameBuilder.Append(ch);
                    continue;
                }
                sb.Append(ch);
            }
            if (inVariable)
            {
                sb.Append(ConvertVariable(nameBuilder.ToString()));
                nameBuilder.Length = 0;
                inVariable         = false;
            }

            result.Code = sb.ToString();
            result.CodeTemplateContext = CodeTemplateContext.Standard;
            result.CodeTemplateType    = CodeTemplateType.Expansion;
            result.Description         = setting.Name;
            return(result);
        }
        TreeIter InsertTemplate(CodeTemplate template)
        {
            TreeIter iter = GetGroup(template.Group);

            return(templateStore.AppendValues(iter, template, template.Shortcut, null));
        }
Example #26
0
		public TemplateToolboxNode (CodeTemplate template)
		{
			this.Template = template;
			ItemFilters.Add (new ToolboxItemFilterAttribute ("text/plain", ToolboxItemFilterType.Allow));
		}
		public static void DeleteTemplate (CodeTemplate template)
		{
			try {
				var fileName = Path.Combine (TemplatePath, template.Shortcut + ".template.xml");
				if (File.Exists (fileName))
					File.Delete (fileName);
			} catch (Exception e) {
				LoggingService.LogError ("Error while removing template file", e);
			}
		}
Example #28
0
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Gui.Document document)
		{
			using (var undo = Document.OpenUndoGroup ()) {
				var result = template.InsertTemplateContents (document);

				var links = result.TextLinks;
				if (PropertyService.Get ("OnTheFlyFormatting", true)) {
					var prettyPrinter = CodeFormatterService.GetFormatter (Document.MimeType);
					if (prettyPrinter != null) {
						int endOffset = result.InsertPosition + result.Code.Length;
						//						string oldText = Document.GetTextAt (result.InsertPosition, result.Code.Length);
						//						var policies = document.Project != null ? document.Project.Policies : null;
						var oldVersion = Document.Version;
						prettyPrinter.OnTheFlyFormat (document, result.InsertPosition, endOffset);
						foreach (var textLink in links) {
							for (int i = 0; i < textLink.Links.Count; i++) {
								var segment = textLink.Links [i];
								var translatedOffset = oldVersion.MoveOffsetTo (Document.Version, result.InsertPosition + segment.Offset) - result.InsertPosition;
								textLink.Links [i] = new TextSegment (translatedOffset, segment.Length);
							}
						}
					}
				}

				var tle = new TextLinkEditMode (this, result.InsertPosition, links);
				if (tle.ShouldStartTextLinkMode) {
					tle.OldMode = CurrentMode;
					tle.StartMode ();
					CurrentMode = tle;
				}
			}
		}
		static void SaveTemplate (CodeTemplate template, string fileName)
		{
			XmlTextWriter writer = new XmlTextWriter (fileName, System.Text.Encoding.UTF8);
			writer.Formatting = Formatting.Indented;
			
			try {
				writer.WriteStartDocument ();
				writer.WriteStartElement (Node);
				writer.WriteAttributeString (VersionAttribute, Version);
				template.Write (writer);
				writer.WriteEndElement (); // Node 
			} finally {
				writer.Close ();
			}
		}
		public void InsertTemplate (CodeTemplate template)
		{
			TextIter iter = buf.GetIterAtMark (buf.InsertMark);
			int newCaretOffset = iter.Offset;
			string word = GetWordBeforeCaret ().Trim ();
			int beginLine = iter.Line;
			int endLine = beginLine;
			if (word.Length > 0)
				newCaretOffset = DeleteWordBeforeCaret ();
			
			string leadingWhiteSpace = GetLeadingWhiteSpace (beginLine);

			int finalCaretOffset = newCaretOffset;
			
			for (int i =0; i < template.Text.Length; ++i) {
				switch (template.Text[i]) {
					case '|':
						finalCaretOffset = newCaretOffset;
						break;
					case '\r':
						break;
					case '\t':
						buf.InsertAtCursor ("\t");
						newCaretOffset++;
						break;
					case '\n':
						buf.InsertAtCursor ("\n");
						newCaretOffset++;
						endLine++;
						break;
					default:
						buf.InsertAtCursor (template.Text[i].ToString ());
						newCaretOffset++;
						break;
				}
			}
			
			if (endLine > beginLine) {
				IndentLines (beginLine+1, endLine, leadingWhiteSpace);
			}
			
			buf.PlaceCursor (buf.GetIterAtOffset (finalCaretOffset));
		}
		public static void SaveTemplate (CodeTemplate template)
		{
			if (!Directory.Exists (TemplatePath))
				Directory.CreateDirectory (TemplatePath);
			SaveTemplate (template, Path.Combine (TemplatePath, template.Shortcut + ".template.xml"));
		}
Example #32
0
		public EditTemplateDialog (CodeTemplate template, bool isNew)
		{
			this.Build();
			this.Title = isNew ? GettextCatalog.GetString ("New template") : GettextCatalog.GetString ("Edit template");
			this.template = template;
			this.entryShortcut1.Text = template.Shortcut  ?? "";
			this.comboboxentryGroups.Entry.Text = template.Group ?? "";
			this.comboboxentryMime.Entry.Text = template.MimeType ?? "";
			this.entryDescription.Text = template.Description ?? "";
			this.textEditor.MimeType = template.MimeType;
			this.textEditor.Text = template.Code ?? "";
			
			checkbuttonExpansion.Active = (template.CodeTemplateType & CodeTemplateType.Expansion) == CodeTemplateType.Expansion;
			checkbuttonSurroundWith.Active = (template.CodeTemplateType & CodeTemplateType.SurroundsWith) == CodeTemplateType.SurroundsWith;
			
			Gtk.Widget control = textEditor;
			scrolledwindow1.Child = control;
			control.ShowAll ();
			textEditor.CaretPositionChanged += CaretPositionChanged;
			textEditor.Options = DefaultSourceEditorOptions.PlainEditor;

			var mimeTypes = new HashSet<string> ();
			var groups    = new HashSet<string> ();
			foreach (CodeTemplate ct in CodeTemplateService.Templates) {
				mimeTypes.Add (ct.MimeType);
				groups.Add (ct.Group);
			}
			comboboxentryMime.AppendText ("");
			foreach (string mime in mimeTypes) {
				comboboxentryMime.AppendText (mime);
			}
			comboboxentryGroups.AppendText ("");
			foreach (string group in groups) {
				comboboxentryGroups.AppendText (group);
			}
			textEditor.TextChanged += DocumentTextReplaced;
			this.buttonOk.Clicked += ButtonOkClicked;
			
			checkbuttonWhiteSpaces.Hide ();
			
			variablesListStore = new ListStore (typeof (string), typeof (CodeTemplateVariable));
			comboboxVariables.Model = variablesListStore;
			comboboxVariables.Changed += ComboboxVariablesChanged;
			
			variableStore = new TreeStore (typeof (string), typeof (CodeTemplateVariable), typeof (string), typeof (int));
			treeviewVariable.Model = variableStore;
			treeviewVariable.HeadersVisible = false;
			
			treeviewVariable.AppendColumn ("", new Gtk.CellRendererText (), "text", 0);
			CellRendererText nameRenderer = new CellRendererText ();
			treeviewVariable.AppendColumn ("", nameRenderer, delegate (TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter) {
				nameRenderer.Markup = ((string)model.GetValue (iter, 2));
			});
			
			grid = new MonoDevelop.Components.PropertyGrid.PropertyGrid ();
			grid.PropertySort = MonoDevelop.Components.PropertyGrid.PropertySort.Alphabetical;
			grid.ShowHelp = true;
			grid.ShowAll ();
			grid.ShowToolbar = false;
			
			vbox4.Remove (scrolledwindow2);
			vbox4.PackEnd (grid, true, true, 0);
			
			UpdateVariables ();
		}
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Gui.Document document)
		{
			using (var undo = Document.OpenUndoGroup ()) {
				var result = template.InsertTemplateContents (document);

				var links = result.TextLinks;

				var tle = new TextLinkEditMode (this, result.InsertPosition, links);
				tle.TextLinkMode = TextLinkMode.General;
				if (tle.ShouldStartTextLinkMode) {
					tle.OldMode = CurrentMode;
					tle.StartMode ();
					CurrentMode = tle;
				}
			}
		}
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext context)
		{
			using (var undo = editor.OpenUndoGroup ()) {
				var result = template.InsertTemplateContents (editor, context);

				var links = result.TextLinks.Select (l => new Mono.TextEditor.TextLink (l.Name) {
					Links = l.Links.Select (s => new TextSegment (s.Offset, s.Length)).ToList (),
					IsEditable = l.IsEditable,
					IsIdentifier = l.IsIdentifier,
					GetStringFunc = l.GetStringFunc != null ? (Func<Func<string, string>, Mono.TextEditor.PopupWindow.IListDataProvider<string>>)(arg => new ListDataProviderWrapper (l.GetStringFunc (arg))) : null
				}).ToList ();
				var tle = new TextLinkEditMode (this, result.InsertPosition, links);
				tle.TextLinkMode = TextLinkMode.General;
				if (tle.ShouldStartTextLinkMode) {
					tle.OldMode = CurrentMode;
					tle.StartMode ();
					CurrentMode = tle;
					GLib.Timeout.Add (10, delegate {
						tle.UpdateTextLinks ();
						return false;
					}); 
				}
			}
		}
Example #35
0
		internal void InsertTemplate (CodeTemplate template, MonoDevelop.Ide.Gui.Document document)
		{
			Document.BeginAtomicUndo ();
			var result = template.InsertTemplateContents (document);
			TextLinkEditMode tle = new TextLinkEditMode (this, 
			                                             result.InsertPosition,
			                                             result.TextLinks);
			
			if (PropertyService.Get ("OnTheFlyFormatting", false)) {
				Formatter prettyPrinter = TextFileService.GetFormatter (Document.MimeType);
				if (prettyPrinter != null && prettyPrinter.SupportsOnTheFlyFormatting) {
					int endOffset = result.InsertPosition + result.Code.Length;
					string text = prettyPrinter.FormatText (document.Project.Policies, Document.MimeType, Document.Text, result.InsertPosition, endOffset);
					string oldText = Document.GetTextAt (result.InsertPosition, result.Code.Length);
					//					Console.WriteLine (result.InsertPosition);
					//					Console.WriteLine ("old:" + oldText);
					//					Console.WriteLine ("new:" + text);
					Replace (result.InsertPosition, result.Code.Length, text);
					Caret.Offset = result.InsertPosition + TranslateOffset (oldText, text, Caret.Offset - result.InsertPosition);
					foreach (TextLink textLink in tle.Links) {
						foreach (ISegment segment in textLink.Links) {
							segment.Offset = TranslateOffset (oldText, text, segment.Offset);
						}
					}
				}
			}
			
			if (tle.ShouldStartTextLinkMode) {
				tle.OldMode = CurrentMode;
				tle.StartMode ();
				CurrentMode = tle;
			}
			Document.EndAtomicUndo ();
		}
Example #36
0
 public static ExpansionObject GetExpansionObject(CodeTemplate template)
 {
     // TODO: Add more expansion objects.
     return(new ExpansionObject());
 }