Esempio n. 1
0
        private static void Define(ExecuteAtParseTimeData data, LocatedString token, [AllowSpaces] LocatedString argument)
        {
            var name = Helper.ReadIdentifierTokenString(token);

            void Action(IInjectorStream <object> stream)
            {
                stream.Add(argument, Env.Config.DefaultInputReader);
            }

            Action(Env.CreateInjector()); // Test if argument is in correct format.
            data.ParserOutput.DynamicHotkeyCollection.AddDynamicHotkey(name, Action, (StandardSection)data.Section);
        }
Esempio n. 2
0
 private static void ComposeHelper(ExecuteAtParseTimeData data, [AllowSpaces] LocatedString locatedArgument)
 {
     foreach (var s in locatedArgument.Split(" "))
     {
         if (s.Length == 1)
         {
             throw new ParseException(s, "Expecting more than one character.");
         }
         if (s.Length > 0)
         {
             var chord  = Env.Config.DefaultChordReader.CreateChord(s.Substring(0, s.Value.Length - 1));
             var action = Env.CreateInjector().Add(s.Value[s.Length - 1].ToString(), Env.Config.DefaultInputReader).Compile();
             data.ParserOutput.AddHotkey(data.Section, chord, combo => action(), null);
         }
     }
 }
Esempio n. 3
0
        public void Test(ExecuteAtParseTimeData data, LocatedString toSimulate, string expectedOutput, string processName = null,
                         string windowTitle = null, string flag = null)
        {
            Env.Parser.FireNewParserOutput(data.ParserOutput);
            _primaryHook.Reset();
            _outputHandler.Reset();
            _foregroundListener.Reset();
            Env.FlagManager.ClearFlags();
            if (!string.IsNullOrEmpty(processName))
            {
                _foregroundListener.NewProcessName = processName;
            }
            if (!string.IsNullOrEmpty(windowTitle))
            {
                _foregroundListener.NewWindowTitle = windowTitle;
            }
            if (!string.IsNullOrEmpty(flag))
            {
                Env.FlagManager.ToggleFlag(flag);
            }
            _primaryHookInjector.CreateInjector().Add(toSimulate, _inputReader).Run();
            var output   = _outputHandler.GetStateInfo();
            var state    = _primaryHook.GetStateInfo();
            var errorLog = Env.Notifier.GetLog();

            if (expectedOutput != output || errorLog.Length > 0 || state.Length > 0)
            {
                var sb = new StringBuilder($"\n\n{data.LocatedName.Location}:\n");
                if (expectedOutput != output)
                {
                    var expected = expectedOutput.Length == 0 ? "(no output)" : expectedOutput;
                    var actual   = output.Length == 0 ? "(no output)" : output;
                    sb.Append($"Expected output: {expected}\n");
                    sb.Append($"Actual output: {actual}\n\n");
                }
                if (errorLog.Length > 0)
                {
                    sb.Append($"Unexpected error(s):\n{errorLog}\n\n");
                }
                if (state.Length > 0)
                {
                    sb.Append($"Invalid state after simulation:\n{state}\n\n");
                }
                Assert.Fail(sb.ToString());
            }
        }
Esempio n. 4
0
        private void Replace(ExecuteAtParseTimeData data, LocatedString argument, bool surroundWithSpaces)
        {
            var chord = data.Chord;
            int backspaceCount, deleteCount;

            if (data.Section is Mode)
            {
                backspaceCount = 0;
                deleteCount    = 0;
            }
            else
            {
                var count = new InputCounter(false).Add(chord.Take(chord.Length - 1));
                backspaceCount = count.LeftCount;
                deleteCount    = count.RightCount;
            }
            var replaceAction = Env.CreateInjector()
                                .Add(Input.Bs, backspaceCount)
                                .Add(Input.Del, deleteCount)
                                .Add(Input.Space, surroundWithSpaces ? 1 : 0)
                                .Add(argument, Env.Config.DefaultInputReader)
                                .Add(Input.Space, surroundWithSpaces ? 1 : 0)
                                .Compile();
            var count1          = new InputCounter(true).Add(argument, Env.Config.DefaultInputReader);
            var backspaceAction = Env.CreateInjector()
                                  .Add(Input.Bs, count1.LeftCount + (surroundWithSpaces ? 2 : 0))
                                  .Add(Input.Del, count1.RightCount)
                                  .Compile();
            var description = chord + " " + nameof(Replace) + " " + argument.Value;

            void Action(Combo dummy)
            {
                _backspaceAction = backspaceAction;
                replaceAction();
            }

            data.ParserOutput.AddHotkey(data.Section, chord, Action, description);
        }
Esempio n. 5
0
 public void ReplaceOp(ExecuteAtParseTimeData data, [AllowSpaces] LocatedString argument)
 {
     Replace(data, argument, true);
 }
Esempio n. 6
0
 public void Reset(ExecuteAtParseTimeData data)
 {
     data.ParserOutput.Clear();
 }
Esempio n. 7
0
 private static void MutualExclusiveFlags(ExecuteAtParseTimeData data, [AllowSpaces] string names)
 {
     data.ParserOutput.FlagSets.Add(new HashSet <string>(names.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)));
 }
Esempio n. 8
0
 private static void IncludeMode(ExecuteAtParseTimeData data, LocatedString modeName)
 {
     ((Mode)data.Section).IncludeMode(modeName.Value);
 }