Пример #1
0
    public static TSpec Expand(ICommandSpec src)
    {
        if ((src as TSpec)?.Expanded ?? false)
        {
            return(src as TSpec);
        }

        var args      = src.Arguments;
        var expansion = new TSpec
        {
            CommandName = src.CommandName,
            Expanded    = true,
        };

        iter(args, arg =>
        {
            if (ParameterIndex.ContainsKey(arg.Name))
            {
                if ((arg.Value as string) != null)
                {
                    var argExpansion    = ScriptText.SpecifyEnvironmentParameters((string)arg.Value);
                    expansion[arg.Name] = new CommandArgument(arg.Name, argExpansion);
                }
                else
                {
                    expansion[arg.Name] = new CommandArgument(arg.Name, arg.Value);
                }
            }
        });
        return(expansion);
    }
 protected override void OnScriptText(ScriptText scriptText)
 {
     if (FlagNotSet(Flag.RemoveScriptTags))
     {
         base.OnScriptText(scriptText);
     }
 }
Пример #3
0
        private void Query()
        {
            Contract.Requires(Results != null);
            Contract.Ensures(Results.Any(ftr => ftr == null) == false);

            Results.Clear();
            if (ScriptText == null || string.IsNullOrEmpty(SearchText))
            {
                FIRE();
                return;
            }

            int res   = -1;
            int index = 0;

            while ((res = ScriptText.IndexOf(SearchText, res + 1, StringComparison.CurrentCultureIgnoreCase)) >= 0)
            {
                Results.Add(new FoundTextResult(index++)
                {
                    StartOffset = res, EndOffset = res + SearchText.Length
                });
            }

            _activeResultIndex = 0;
            FIRE();
        }
Пример #4
0
        public PlayerBotController(BotEntity botEntityPrefab, TileMapInfo tileMapInfo, BulletEntity bulletPrefab,
                                   CameraFollower cameraFollower, PlayerHpPresenter playerHpPresenter, RunButtonEvent runButtonEvent,
                                   ScriptText scriptText, ErrorMsg errorMsg, SoundManager soundManager, MeleeAttackEntity meleeAttackEntity,
                                   ProcessScrollViewPresenter processScrollViewPresenter, EventSystemWatcher eventSystemWatcher)
        {
            this.errorMsg          = errorMsg;
            this.playerHpPresenter = playerHpPresenter;
            var botEntity = Object.Instantiate(botEntityPrefab);

            tileMapInfo.PlayerTankTransform = botEntity.transform;
            botEntity.gameObject.layer      = LayerMask.NameToLayer("PlayerBot");
            cameraFollower.SetPlayerPosition(botEntity.transform);
            var botEntityAnimation = botEntity.GetComponent <BotEntityAnimation>();

            botEntity.transform.position = tileMapInfo.GetPlayer1StartPosition();
            MeleeAttackApplication meleeAttackApplication = new MeleeAttackApplication(meleeAttackEntity, soundManager);
            var gun = new Gun(
                soundManager,
                new BulletEntityCreator(bulletPrefab, LayerMask.NameToLayer("PlayerBullet")),
                false
                );

            botApplication = new BotApplication.BotApplication(
                botEntity, botEntityAnimation, tileMapInfo, eventSystemWatcher, gun, meleeAttackApplication
                );

            javaScriptEngine = new JavaScriptEngine.JavaScriptEngine(botApplication);
            runButtonEvent.AddClickEvent(() => OnRunButtonClick(processScrollViewPresenter, scriptText));
        }
Пример #5
0
        internal void Parse(string unparsed)
        {
            object result;

            System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo;
            ScriptText flags = ScriptText.None;

            if (this.isParse32)
            {
                this.parse32.ParseScriptText(unparsed,
                                             itemName: null,
                                             context: null,
                                             delimiter: null,
                                             sourceContextCookie: IntPtr.Zero,
                                             startingLineNumber: 0,
                                             flags: flags,
                                             result: out result,
                                             exceptionInfo: out exceptionInfo);
            }
            else
            {
                this.parse64.ParseScriptText(unparsed,
                                             itemName: null,
                                             context: null,
                                             delimiter: null,
                                             sourceContextCookie: IntPtr.Zero,
                                             startingLineNumber: 0,
                                             flags: flags,
                                             result: out result,
                                             exceptionInfo: out exceptionInfo);
            }
        }
Пример #6
0
 public PlayGameInitData(
     BotEntity botEntityPrefab,
     BotEntity botEntityPrefab2P,
     CameraFollower cameraFollower,
     PlayerHpPresenter playerHpPresenter,
     TileMapInfo tileMapInfo,
     RunButtonEvent runButtonEvent,
     ScriptText scriptText,
     BulletEntity bulletPrefab,
     ErrorMsg errorMsg,
     SoundManager soundManager,
     MeleeAttackEntity meleeAttackPrefab,
     ProcessScrollViewPresenter processScrollViewPresenter,
     EventSystemWatcher eventSystemWatcher)
 {
     this.botEntityPrefab            = botEntityPrefab;
     this.botEntityPrefab2P          = botEntityPrefab2P;
     this.cameraFollower             = cameraFollower;
     this.playerHpPresenter          = playerHpPresenter;
     this.tileMapInfo                = tileMapInfo;
     this.runButtonEvent             = runButtonEvent;
     this.scriptText                 = scriptText;
     this.bulletPrefab               = bulletPrefab;
     this.errorMsg                   = errorMsg;
     this.soundManager               = soundManager;
     this.meleeAttackPrefab          = meleeAttackPrefab;
     this.processScrollViewPresenter = processScrollViewPresenter;
     this.eventSystemWatcher         = eventSystemWatcher;
 }
Пример #7
0
 public override void SafeAwake()
 {
     ModContext = SingleInstance <Logic> .Instance;
     Gas        = AddSlider("Gas", "gas", 100.0f, 1.0f, MaxGas);
     Script     = new ScriptText("script", "script");
     BlockBehaviour.AddCustom(Script);
     // DO NOT CALL AddPIO here, because it sends invalid machine state in multiverse after simulation start
     machineHandler = ModContext.GetMachineHandler(BlockBehaviour);
     machineHandler.AddCpuBlock(this);
 }
Пример #8
0
        protected override void OnScriptText(ScriptText scriptText)
        {
            if (scriptText == null || _scriptDepth > 0)
            {
                return;
            }

            Emit(scriptText.ToString());
            base.OnScriptText(scriptText);
        }
Пример #9
0
        internal string Text(int line)
        {
            int start = _lineStartMap[line - 1];

            if (line < _lineStartMap.Length)
            {
                int length = _lineStartMap[line] - start;
                return(ScriptText.Substring(start, length));
            }
            return(ScriptText.Substring(start));
        }
Пример #10
0
        private async void OnRunButtonClick(ProcessScrollViewPresenter processScrollViewPresenter,
                                            ScriptText scriptText)
        {
            var tokenSource = new CancellationTokenSource();
            var token       = tokenSource.Token;
            var panel       = processScrollViewPresenter.AddProcessPanel(tokenSource.Cancel);
            var task        = javaScriptEngine.ExecuteJS(scriptText.GetScriptText(), token, panel.ProcessId);

            await task;

            panel.Dispose();
        }
Пример #11
0
 internal HRESULT ParseScriptText(
     string code,
     string itemName,
     [MarshalAs(UnmanagedType.IUnknown)] object context,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     [MarshalAs(UnmanagedType.Struct)] out object result,
     out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo)
 {
     return(this.FAsp32 != null?this.FAsp32.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie, startingLineNumber, flags, out result, out exceptionInfo) : this.FAsp64.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie, startingLineNumber, flags, out result, out exceptionInfo));
 }
Пример #12
0
        /// <summary>
        /// Constructor
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();
            //new TextRange(ScriptText.Document.ContentStart, ScriptText.Document.ContentEnd).Text = "";
            Data = new IntelliData();
            ScriptText.KeyWordSource   = Data.KeyWords;
            ScriptText.PredictTriggers = Data.Predict;
            ScriptText.KeyColour       = false;
            KeyWordColour.IsChecked    = ScriptText.KeyColour;
            ScriptText.Focus();

            CreateParser();


            DataContext = this;
        }
        public ClientBotController(BotEntity botEntityPrefab, TileMapInfo tileMapInfo, BulletEntity bulletPrefab,
                                   CameraFollower cameraFollower, PlayerHpPresenter playerHpPresenter, RunButtonEvent runButtonEvent,
                                   ScriptText scriptText, ErrorMsg errorMsg, SoundManager soundManager,
                                   GameSignalingClient gameSignalingClient,
                                   MeleeAttackEntity meleeAttackEntity, ProcessScrollViewPresenter processScrollViewPresenter,
                                   EventSystemWatcher eventSystemWatcher)
        {
            this.errorMsg          = errorMsg;
            this.playerHpPresenter = playerHpPresenter;
            var botEntity = Object.Instantiate(botEntityPrefab);

            tileMapInfo.PlayerTankTransform = botEntity.transform;
            botEntity.gameObject.layer      = LayerMask.NameToLayer("PlayerBot");
            cameraFollower.SetPlayerPosition(botEntity.transform);
            var botEntityAnimation = botEntity.GetComponent <BotEntityAnimation>();

            botEntity.transform.position = tileMapInfo.GetPlayer2StartPosition();
            MeleeAttackApplication meleeAttackApplication = new MeleeAttackApplication(meleeAttackEntity, soundManager);
            var gun = new Gun(
                soundManager,
                new BulletEntityCreator(bulletPrefab, LayerMask.NameToLayer("PlayerBullet")),
                false
                );

            botApplication = new BotApplication.BotApplication(
                botEntity, botEntityAnimation, tileMapInfo, eventSystemWatcher, gun,
                meleeAttackApplication, true
                );
            var hookBotApplication = new ClientBotCommandsHook(botApplication, gameSignalingClient);

            javaScriptEngine = new JavaScriptEngine.JavaScriptEngine(hookBotApplication);
            runButtonEvent.AddClickEvent(async() =>
            {
                var tokenSource = new CancellationTokenSource();
                var token       = tokenSource.Token;
                var panel       =
                    processScrollViewPresenter.AddProcessPanel(
                        () => { tokenSource.Cancel(); });
                var task = javaScriptEngine.ExecuteJS(scriptText.GetScriptText(), token, panel.ProcessId);
                await task;
                panel.Dispose();
            });
        }
Пример #14
0
        protected void OnNewButtonClick(object sender, EventArgs e)
        {
            while (ScriptTabs.Count > 1)
            {
                ScriptTabs.RemoveAt(ScriptTabs.Count - 1);
            }

            NameText.Text   = "";
            KeyText.Text    = "C5";
            BpmText.Text    = "120";
            VolumeText.Text = "100";

            ScriptTabList.SelectedTab.ToolTipText = ScriptText.Text = "";
            ScriptTabList.SelectedTab.ImageKey    = VolumeText.Text = "100";

            MusicList.SelectedIndex = -1;

            ScriptText.Select();
        }
Пример #15
0
        private void SetParametersInScript()
        {
            System.Text.StringBuilder sb;
            int first, last;

            first = ScriptText.IndexOf(ParameterDefinitionRegionStart);
            if (first < 0)
            {
                throw new ApplicationException("The script text seems to no longer contain a parameter definition start region");
            }
            first += ParameterDefinitionRegionStart.Length;
            last   = ScriptText.IndexOf(ParameterDefinitionRegionEnd);
            if (last < 0)
            {
                throw new ApplicationException("The script text seems to no longer contain a parameter definition end region");
            }
            sb = new System.Text.StringBuilder();
            sb.Append(ScriptText.Substring(0, first));
            sb.Append(ParameterDefinitionRegionCore);
            sb.Append(DefinitionRegionIndentation);
            sb.Append(ScriptText.Substring(last));
            ScriptText = sb.ToString();

            first = ScriptText.IndexOf(ParameterAssignmentRegionStart);
            if (first < 0)
            {
                throw new ApplicationException("The script text seems to no longer contain a parameter assignment start region");
            }
            first += ParameterAssignmentRegionStart.Length;
            last   = ScriptText.IndexOf(ParameterAssignmentRegionEnd);
            if (last < 0)
            {
                throw new ApplicationException("The script text seems to no longer contain a parameter assignment end region");
            }
            sb = new System.Text.StringBuilder();
            sb.Append(ScriptText.Substring(0, first));
            sb.Append(ParameterAssignmentRegionCore);
            sb.Append(AssignmentRegionIndentation);
            sb.Append(ScriptText.Substring(last));
            ScriptText = sb.ToString();
        }
Пример #16
0
        protected void OnAddPartButtonClick(object sender, EventArgs e)
        {
            if (ScriptTabs.Count == 64)
            {
                ms.g("No way", "TOO MANY PARTS! THAT'D BE EAR-RAPING!");

                return;
            }

            ScriptTabList.SelectedTab.ToolTipText = ScriptText.Text;
            ScriptTabList.SelectedTab.ImageKey    = VolumeText.Text;

            ScriptTabs.Add($"Part {ScriptTabs.Count + 1}");

            ScriptTabList.SelectedIndex = ScriptTabs.Count - 1;

            ScriptTabList.SelectedTab.ToolTipText = ScriptText.Text = "";
            ScriptTabList.SelectedTab.ImageKey    = VolumeText.Text = "100";

            ScriptText.Select();
        }
Пример #17
0
 internal void AddScriptlet(
     string defaultName,
     string code,
     string itemName,
     string subItemName,
     string eventName,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     out string name,
     out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo)
 {
     if (this.FAsp32 != null)
     {
         this.FAsp32.AddScriptlet(defaultName, code, itemName, subItemName, eventName, delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
     else
     {
         this.FAsp64.AddScriptlet(defaultName, code, itemName, subItemName, eventName, delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
 }
Пример #18
0
        public void ParseScriptText(
            string code,
            string itemName,
            object context,
            string delimiter,
            int sourceContextCookie,
            uint startingLineNumber,
            ScriptText flags,
            IntPtr result,
            IntPtr info)
        {
            Debug.WriteLine("ParseScriptText()");
            Debug.WriteLine("code: " + code);
            Debug.WriteLine("itemName: " + itemName);
            Debug.WriteLine("delimiter: " + delimiter);
            Debug.WriteLine("flags: " + flags);
            Debug.Flush();

            //result = null;
            // info = new System.Runtime.InteropServices.ComTypes.EXCEPINFO ();
            CL.Eval(CL.ReadFromString(code));
        }
 internal void ParseScriptText(
     string code,
     string itemName,
     [MarshalAs(UnmanagedType.IUnknown)] object context,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     [MarshalAs(UnmanagedType.Struct)] out object result,
     out EXCEPINFO exceptionInfo)
 {
     if (asp32 != null)
     {
         asp32.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
                               startingLineNumber, flags, out result, out exceptionInfo);
     }
     else
     {
         asp64.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
                               startingLineNumber, flags, out result, out exceptionInfo);
     }
 }
Пример #20
0
 private void OnClick_LoadScript(object sender, RoutedEventArgs e)
 {
     System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();
     dlg.AddExtension  = true;
     dlg.DefaultExt    = ".bql";
     dlg.Title         = "Specify the script file";
     dlg.Filter        = "Building Query Language|*.bql";
     dlg.FilterIndex   = 0;
     dlg.ValidateNames = true;
     dlg.FileOk       += delegate(object s, System.ComponentModel.CancelEventArgs eArg)
     {
         Stream file       = null;
         string dataFormat = "Text";
         try
         {
             file = dlg.OpenFile();
             TextRange txtRange = new TextRange(ScriptText.Document.ContentStart, ScriptText.Document.ContentEnd);
             if (txtRange.CanLoad(dataFormat))
             {
                 txtRange.Load(file, dataFormat);
             }
             this.Title = "BQL Console - " + System.IO.Path.GetFileName(dlg.FileName);
         }
         catch (Exception ex)
         {
             System.Windows.MessageBox.Show(string.Format("Loading script from file failed : {0}.", ex.Message), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
         }
         finally
         {
             if (file != null)
             {
                 file.Close();
             }
         }
     };
     dlg.ShowDialog();
     ScriptText.RefreshKeyColour();
 }
 internal void AddScriptlet(
     string defaultName,
     string code,
     string itemName,
     string subItemName,
     string eventName,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     out string name,
     out EXCEPINFO exceptionInfo)
 {
     if (asp32 != null)
     {
         asp32.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
                            delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
     else
     {
         asp64.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
                            delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
 }
Пример #22
0
 /// <summary>
 /// On Click for turning key word colour on/off
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnClick_KeyWordColour(object sender, RoutedEventArgs e)
 {
     ScriptText.KeyColour = (bool)KeyWordColour.IsChecked;
     ScriptText.RefreshKeyColour();
 }
 protected virtual void OnScriptText(ScriptText scriptText)
 {
     DefaultAction(scriptText);
 }
Пример #24
0
 internal void ParseScriptText(
     string code,
     string itemName,
     [MarshalAs(UnmanagedType.IUnknown)] object context,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     [MarshalAs(UnmanagedType.Struct)] out object result,
     out EXCEPINFO exceptionInfo)
 {
     if (asp32 != null)
     {
         asp32.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
             startingLineNumber, flags, out result, out exceptionInfo);
     }
     else
     {
         asp64.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
             startingLineNumber, flags, out result, out exceptionInfo);
     }
 }
Пример #25
0
 internal void AddScriptlet(
     string defaultName,
     string code,
     string itemName,
     string subItemName,
     string eventName,
     string delimiter,
     IntPtr sourceContextCookie,
     uint startingLineNumber,
     ScriptText flags,
     out string name,
     out EXCEPINFO exceptionInfo)
 {
     if (asp32 != null)
     {
         asp32.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
             delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
     else
     {
         asp64.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
             delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
     }
 }
Пример #26
0
        public void ParseScriptText(
            string code,
            string itemName,
            object context,
            string delimiter,
            int sourceContextCookie,
            uint startingLineNumber,
            ScriptText flags,
            IntPtr result,
            IntPtr info)
        {
            Debug.WriteLine ("ParseScriptText()");
            Debug.WriteLine ("code: " + code);
            Debug.WriteLine ("itemName: "+ itemName);
            Debug.WriteLine ("delimiter: "+delimiter);
            Debug.WriteLine ("flags: " + flags);
            Debug.Flush ();

            //result = null;
            // info = new System.Runtime.InteropServices.ComTypes.EXCEPINFO ();
            CL.Eval (CL.ReadFromString (code));
        }
Пример #27
0
        public override void Save(BinaryWriter writer, Language language)
        {
            int firstChunkOffsetsItemSize  = 4 + 4 + 8; // text start + text end + string offset
            int secondChunkOffsetsItemSize = 8 * 4;     // 4 strings

            // Save the file start offset as we will be writing the first chunk size once we know it
            long fileStartPos = writer.BaseStream.Position;

            writer.Write((long)0);

            writer.Write(Scripts.Count);
            writer.Write(Text.Count);

            long firstChunkOffsetsOffset = writer.BaseStream.Position;
            long firstChunkOffsetsSize   = Scripts.Count * firstChunkOffsetsItemSize;

            writer.Write(new byte[firstChunkOffsetsSize]);

            for (int i = 0; i < Scripts.Count; i++)
            {
                Script script = Scripts[i];

                long tempOffset = writer.BaseStream.Position;

                writer.BaseStream.Position = firstChunkOffsetsOffset + (i * firstChunkOffsetsItemSize);
                writer.Write(script.TextStartIndex);
                writer.Write(script.TextEndIndex);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(script.CodeName.GetText(language), encoding);// Is this ascii or utf-8?
            }

            // We now know the size of the first chunk. Write it to the buffer.
            long temp = writer.BaseStream.Position;

            writer.BaseStream.Position = fileStartPos;
            writer.Write(temp - fileStartPos);
            writer.BaseStream.Position = temp;

            long secondChunkOffsetsOffset = writer.BaseStream.Position;
            long secondChunkOffsetsSize   = Text.Count * secondChunkOffsetsItemSize;

            writer.Write(new byte[secondChunkOffsetsSize]);

            for (int i = 0; i < Text.Count; i++)
            {
                ScriptText scriptText = Text[i];

                int  characterNameLen       = GetStringSize(scriptText.CharacterName.GetText(language), encoding);
                int  characterPositionLen   = GetStringSize(scriptText.CharacterPosition.GetText(language), encoding);
                int  characterExpressionLen = GetStringSize(scriptText.CharacterExpression.GetText(language), encoding);
                long tempOffset             = writer.BaseStream.Position;

                writer.BaseStream.Position = secondChunkOffsetsOffset + (i * secondChunkOffsetsItemSize);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + characterNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + characterNameLen + characterPositionLen);
                writer.WriteOffset(fileStartPos, tempOffset + characterNameLen + characterPositionLen + characterExpressionLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(scriptText.CharacterName.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.CharacterPosition.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.CharacterExpression.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.Text.GetText(language), encoding);
            }
        }
Пример #28
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var firstChunkSize = reader.ReadInt64();

            var firstChunkItemCount  = reader.ReadInt32();
            var secondChunkItemCount = reader.ReadInt32();

            for (var i = 0; i < firstChunkItemCount; i++)
            {
                var textStartIndex = reader.ReadInt32();
                var textEndIndex   = reader.ReadInt32();
                var codeNameOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;
                reader.BaseStream.Position = fileStartPos + codeNameOffset;
                var codeName = reader.ReadNullTerminatedString(encoding);
                reader.BaseStream.Position = tempOffset;

                Script script = null;
                if (Scripts.Count > i)
                {
                    script = Scripts[i];
                }
                else
                {
                    Scripts.Add(script = new Script(textStartIndex, textEndIndex));
                }
                script.CodeName.SetText(language, codeName);
            }

            reader.BaseStream.Position = fileStartPos + firstChunkSize;

            for (var i = 0; i < secondChunkItemCount; i++)
            {
                var characterNameOffset       = reader.ReadInt64();
                var characterPositionOffset   = reader.ReadInt64();
                var characterExpressionOffset = reader.ReadInt64();
                var textOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + characterNameOffset;
                var characterName = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + characterPositionOffset;
                var characterPosition = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + characterExpressionOffset;
                var characterExpression = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + textOffset;
                var text = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = tempOffset;

                ScriptText scriptText = null;
                if (Text.Count > i)
                {
                    scriptText = Text[i];
                }
                else
                {
                    Text.Add(scriptText = new ScriptText());
                }
                scriptText.CharacterName.SetText(language, characterName);
                scriptText.CharacterPosition.SetText(language, characterPosition);
                scriptText.CharacterExpression.SetText(language, characterExpression);
                scriptText.Text.SetText(language, text);
            }
        }
Пример #29
0
 protected override void OnScriptText(ScriptText scriptText)
 {
 }
Пример #30
0
        /// <inheritdoc />
        protected override async Task <Result <StringStream, IError> > Run(
            IStateMonad stateMonad,
            CancellationToken cancellationToken)
        {
            //var isAdmin = IsCurrentProcessAdmin();
            //var isLinux = IsLinux;
            //if(isAdmin &&!isLinux)
            //    return new SingleError("You cannot run arbitrary Nuix Scripts as Administrator", ErrorCode.ExternalProcessError, new StepErrorLocation(this));

            var functionName = await FunctionName.Run(stateMonad, cancellationToken)
                               .Map(x => x.GetStringAsync())
            ;

            if (functionName.IsFailure)
            {
                return(functionName.ConvertFailure <StringStream>());
            }

            var scriptText = await ScriptText.Run(stateMonad, cancellationToken)
                             .Map(x => x.GetStringAsync());

            if (scriptText.IsFailure)
            {
                return(scriptText.ConvertFailure <StringStream>());
            }

            var parameters = await Parameters.Run(stateMonad, cancellationToken);

            if (parameters.IsFailure)
            {
                return(parameters.ConvertFailure <StringStream>());
            }

            var nuixConnection = await stateMonad.GetOrCreateNuixConnection(this, false);

            if (nuixConnection.IsFailure)
            {
                return(nuixConnection.ConvertFailure <StringStream>()
                       .MapError(x => x.WithLocation(this)));
            }

            var rubyFunctionParameters = parameters.Value
                                         .Select(x => new RubyFunctionParameter(ConvertString(x.Name), x.Name, true))
                                         .ToList();

            var parameterDict = parameters.Value
                                .ToDictionary(
                x =>
                new RubyFunctionParameter(ConvertString(x.Name), x.Name, true),
                x => x.BestValue.ObjectValue
                )
                                .Where(x => x.Value != null)
                                .ToDictionary(x => x.Key, x => x.Value !);

            if (EntityStreamParameter != null)
            {
                var streamResult = await EntityStreamParameter.Run(stateMonad, cancellationToken);

                if (streamResult.IsFailure)
                {
                    return(streamResult.ConvertFailure <StringStream>());
                }

                const string streamParameter = "datastream";

                var parameter = new RubyFunctionParameter(
                    ConvertString(streamParameter),
                    streamParameter,
                    true
                    );

                rubyFunctionParameters.Add(parameter);

                parameterDict.Add(parameter, streamResult.Value);
            }

            var function = new RubyFunction <string>(
                ConvertString(functionName.Value),
                scriptText.Value,
                rubyFunctionParameters,
                new Version(5, 0),
                ArraySegment <NuixFeature> .Empty
                );

            var runResult = await nuixConnection.Value.RunFunctionAsync(
                stateMonad,
                this,
                function,
                parameterDict,
                CasePathParameter.IgnoresOpenCase.Instance,
                cancellationToken
                )
                            .Map(x => new StringStream(x));

            if (runResult.IsFailure)
            {
                return(runResult.MapError(x => x.WithLocation(this)).ConvertFailure <StringStream>());
            }

            return(runResult.Value);
        }
Пример #31
0
 public override int GetHashCode()
 {
     return(ScriptText.GetHashCode());
 }
Пример #32
0
        private object Parse(string text, bool expression)
        {
            const string varName = "x___";
            object       result;

            _engine.SetScriptState(ScriptState.Connected);

            ScriptText flags = ScriptText.None;

            if (expression)
            {
                flags |= ScriptText.IsExpression;
            }

            try
            {
                // immediate expression computation seems to work only for 64-bit
                // so hack something for 32-bit...
                System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo;
                if (_parse32 != null)
                {
                    if (expression)
                    {
                        // should work for jscript & vbscript at least...
                        text = varName + "=" + text;
                    }
                    _parse32.ParseScriptText(text, null, IntPtr.Zero, null, 0, 0, flags, out result, out exceptionInfo);
                }
                else
                {
                    _parse64.ParseScriptText(text, null, IntPtr.Zero, null, 0, 0, flags, out result, out exceptionInfo);
                }
            }
            catch
            {
                if (Site.LastException != null)
                {
                    throw Site.LastException;
                }

                throw;
            }

            IntPtr dispatch;

            if (expression)
            {
                // continue  our 32-bit hack...
                if (_parse32 != null)
                {
                    _engine.GetScriptDispatch(null, out dispatch);
                    object dp = Marshal.GetObjectForIUnknown(dispatch);
                    try
                    {
                        return(dp.GetType().InvokeMember(varName, BindingFlags.GetProperty, null, dp, null));
                    }
                    catch
                    {
                        if (Site.LastException != null)
                        {
                            throw Site.LastException;
                        }

                        throw;
                    }
                }
                return(result);
            }

            _engine.GetScriptDispatch(null, out dispatch);
            ParsedScript parsed = new ParsedScript(this, dispatch);

            return(parsed);
        }
        public void Parse()
        {
            SimpleHtmlParser parser = new SimpleHtmlParser(_html);

            OnDocumentBegin();
            while (true)
            {
                Element currentElement = parser.Next();

                BeginTag beginTag = currentElement as BeginTag;
                if (beginTag != null)
                {
                    OnBeginTag(beginTag);
                    continue;
                }

                EndTag endTag = currentElement as EndTag;
                if (endTag != null)
                {
                    OnEndTag(endTag);
                    continue;
                }

                ScriptLiteral literal = currentElement as ScriptLiteral;
                if (literal != null)
                {
                    OnScriptLiteral(literal);
                    continue;
                }

                Comment comment = currentElement as Comment;
                if (comment != null)
                {
                    OnComment(comment);
                    continue;
                }

                MarkupDirective markupDirective = currentElement as MarkupDirective;
                if (markupDirective != null)
                {
                    OnMarkupDirective(markupDirective);
                    continue;
                }

                ScriptText scriptText = currentElement as ScriptText;
                if (scriptText != null)
                {
                    OnScriptText(scriptText);
                    continue;
                }

                ScriptComment scriptComment = currentElement as ScriptComment;
                if (scriptComment != null)
                {
                    OnScriptComment(scriptComment);
                    continue;
                }

                StyleText styleText = currentElement as StyleText;
                if (styleText != null)
                {
                    OnStyleText(styleText);
                    continue;
                }

                StyleUrl styleUrl = currentElement as StyleUrl;
                if (styleUrl != null)
                {
                    OnStyleUrl(styleUrl);
                    continue;
                }

                StyleImport styleImport = currentElement as StyleImport;
                if (styleImport != null)
                {
                    OnStyleImport(styleImport);
                    continue;
                }

                StyleComment styleComment = currentElement as StyleComment;
                if (styleComment != null)
                {
                    OnStyleComment(styleComment);
                    continue;
                }

                StyleLiteral styleLiteral = currentElement as StyleLiteral;
                if (styleLiteral != null)
                {
                    OnStyleLiteral(styleLiteral);
                    continue;
                }

                Text text = currentElement as Text;
                if (text != null)
                {
                    OnText(text);
                    continue;
                }


                if (currentElement == null)
                {
                    OnDocumentEnd();
                    return;
                }

                Debug.Fail("Unrecognized element in LightWeightHTMLDocumentIterator");
            }
        }