Example #1
0
 private void Update(EvaluationContext context)
 {
     Builder.Value = _builder;
     if (ClearTrigger.GetValue(context))
     {
         _builder.Clear();
     }
 }
Example #2
0
        private void Update(EvaluationContext context)
        {
            var maxLength     = MaxLength.GetValue(context);
            var stringBuilder = InputBuffer.GetValue(context);
            var lastIndex     = _index;

            if (maxLength <= 0)
            {
                Result.Value = String.Empty;
                return;
            }

            if (!InputBuffer.IsConnected || stringBuilder == null)
            {
                stringBuilder = _fallbackBuffer;
            }

            if (ClearTrigger.GetValue(context))
            {
                stringBuilder.Clear();
                _index = 0;
            }

            //var mode = (Modes)WriteMode.GetValue(context);

            try
            {
                if (Insert.GetValue(context))
                {
                    if (TriggerRandomPos.GetValue(context))
                    {
                        _index = (int)_random.NextLong(0, stringBuilder.Length);
                    }

                    var separator = Separator.GetValue(context);;
                    if (!string.IsNullOrEmpty(separator))
                    {
                        separator = separator.Replace("\\n", "\n");
                    }

                    var str           = InsertString.GetValue(context);
                    var insertString  = str + separator;
                    var insertLength  = insertString.Length;
                    var currentLength = stringBuilder.Length;
                    var lineWrap      = (WrapLinesModes)WrapLines.GetValue(context);
                    var mode          = (Modes)WriteMode.GetValue(context);

                    if (_index > maxLength)
                    {
                        _index = 0;
                    }

                    var pos = _index;
                    if (pos + insertLength > maxLength)
                    {
                        insertLength = maxLength - pos;
                    }

                    if (mode != Modes.Insert && pos < currentLength - insertLength)
                    {
                        stringBuilder.Remove(pos, insertLength);
                    }

                    if (pos > currentLength)
                    {
                        var fillString = FillCharacter.GetValue(context);
                        var fillChar   = string.IsNullOrEmpty(fillString) ?  '_' : fillString[0];
                        stringBuilder.Append(new string(fillChar, pos - currentLength));
                    }

                    stringBuilder.Insert(pos, insertString);

                    InsertLineWraps(lineWrap, stringBuilder, pos, insertLength, WrapLineColumn.GetValue(context).Clamp(1, 1000));
                    switch (mode)
                    {
                    case Modes.Insert:
                    {
                        _index += insertLength;
                        break;
                    }

                    case Modes.Overwrite:
                    {
                        _index += insertLength;
                        _index %= maxLength;
                        break;
                    }

                    case Modes.OverwriteAtFixedOffset:
                        _index += FillOffset.GetValue(context);
                        if (_index > maxLength)
                        {
                            _index = _index % maxLength;
                        }
                        else if (_index < 0)
                        {
                            _index += maxLength - insertLength;
                        }

                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }


                    //InsertLineWraps(lineWrap, stringBuilder);

                    if (stringBuilder.Length > maxLength)
                    {
                        stringBuilder.Length = maxLength;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Warning($"Failed to manipulate string at index {_index} " + e.Message);
            }

            //

            Builder.Value = stringBuilder;
            Result.Value  = stringBuilder.ToString();
        }