From 38897a455d8e7cb157ecb43973aca486af232b34 Mon Sep 17 00:00:00 2001 From: elsassph Date: Tue, 21 May 2013 14:07:41 +0200 Subject: [PATCH] generate Live metadatas --- ColtPlugin/ColtPlugin.csproj | 6 ++- ColtPlugin/PluginMain.cs | 80 +++++++++++++++++++++++++++- ColtPlugin/obj/Debug/ColtPlugin.dll | Bin 14848 -> 16384 bytes 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/ColtPlugin/ColtPlugin.csproj b/ColtPlugin/ColtPlugin.csproj index 9fa1816..f59094c 100644 --- a/ColtPlugin/ColtPlugin.csproj +++ b/ColtPlugin/ColtPlugin.csproj @@ -54,7 +54,7 @@ x86 - ..\..\..\FlashDevelop\Bin\Debug\Plugins\ + ..\..\svn\FlashDevelop\Bin\Debug\Plugins\ TRACE true @@ -118,6 +118,10 @@ + + {4EBF2653-9654-4E40-880E-0046B3D6210E} + ASCompletion + {78101C01-E186-4954-B1DD-DEBB7905FAD8} ProjectManager diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index a8a1f9e..8f69353 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -13,6 +13,9 @@ using PluginCore.Helpers; using PluginCore; using ProjectManager.Projects.AS3; +using ASCompletion.Context; +using System.Text.RegularExpressions; +using ASCompletion.Model; namespace ColtPlugin { @@ -32,6 +35,7 @@ public class PluginMain : IPlugin private FileSystemWatcher watcher; private String pathToLog; private System.Timers.Timer timer; + private Keys MakeItLiveKeys = Keys.Control | Keys.Shift | Keys.L; #region Required Properties @@ -155,6 +159,24 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority prority) case EventType.FileSave: if (active) ClearErrors(); break; + + case EventType.Keys: // shortcut pressed + KeyEvent ke = (KeyEvent)e; + if (ke.Value == MakeItLiveKeys) + { + ke.Handled = true; + MakeItLive(); + } + break; + + case EventType.Shortcut: // shortcut changed + DataEvent de = (DataEvent)e; + if (de.Action == "ColtPlugin.MakeItLive") + { + MakeItLiveKeys = (Keys)de.Data; + } + break; + } } @@ -200,11 +222,13 @@ public void InitLocalization() /// public void AddEventHandlers() { - EventManager.AddEventHandler(this, EventType.Command | EventType.FileSave); + EventManager.AddEventHandler(this, EventType.Command | EventType.FileSave | EventType.Keys | EventType.Shortcut); watcher = new FileSystemWatcher(); watcher.NotifyFilter = NotifyFilters.LastWrite; watcher.Changed += new FileSystemEventHandler(OnFileChange); + + PluginBase.MainForm.RegisterShortcutItem("ColtPlugin.MakeItLive", MakeItLiveKeys); } #endregion @@ -350,6 +374,60 @@ private void ShowErrors() #endregion + /// + /// Generate meta tags + /// + private void MakeItLive() + { + ScintillaNet.ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl; + if (sci == null) + return; + + IASContext context = ASCompletion.Context.ASContext.Context; + if (context.CurrentClass == null || context.CurrentClass.IsVoid() || context.CurrentClass.LineFrom == 0) + return; + + // make member live + int originalPos = sci.CurrentPos; + int pos; + int line; + string indent; + MemberModel member = context.CurrentMember; + FlagType mask = FlagType.Function | FlagType.Dynamic; + if (member != null && (member.Flags & mask) == mask) + { + line = context.CurrentMember.LineFrom; + indent = LineIndentPosition(sci, line); + pos = sci.PositionFromLine(line) + indent.Length; + string insert = "[LiveCodeUpdateListener(method=\"" + member.Name + "\")]\n" + indent; + sci.SetSel(pos, pos); + sci.ReplaceSel(insert); + originalPos += insert.Length; + } + + // make class live + if (!Regex.IsMatch(sci.Text, "\\[Live\\]")) + { + line = context.CurrentClass.LineFrom; + indent = LineIndentPosition(sci, line); + pos = sci.PositionFromLine(line) + indent.Length; + string insert = "[Live]\n" + indent; + sci.SetSel(pos, pos); + sci.ReplaceSel(insert); + originalPos += insert.Length; + } + + sci.SetSel(originalPos, originalPos); + } + + private string LineIndentPosition(ScintillaNet.ScintillaControl sci, int line) + { + string txt = sci.GetLine(line); + for (int i = 0; i < txt.Length; i++) + if (txt[i] > 32) return txt.Substring(0, i); + return ""; + } + /// /// Opens the project in COLT /// diff --git a/ColtPlugin/obj/Debug/ColtPlugin.dll b/ColtPlugin/obj/Debug/ColtPlugin.dll index ddf886c6b134cfa9349b3f99cb38d591e84824c3..0c45b536dbbd9988621c43fd97c3399d0752b949 100644 GIT binary patch delta 6426 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 AU;qFB delta 4950 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 ZfIqlc?0OT9v2Q86G387;!+IO^{{wX?MnM1o