예제 #1
0
        private List <string> RecursiveAddRegisterUseCase(IEnumerable <string> source, List <string> acc)
        {
            var(front, middle, rear) = TextSplitter.DivideIntoThree(
                source,
                line => line.TrimStart().StartsWith("#region"),
                line => line.TrimStart().StartsWith("#endregion")
                );

            IEnumerable <string> changedMiddle = middle;
            var middleHead = middle.FirstOrDefault();
            var isTarget   = middleHead != null && middleHead.Contains(controllerName);

            if (isTarget)
            {
                changedMiddle = InvokeAddRegisterUseCase(middle);
            }
            acc.AddRange(front.Concat(changedMiddle));
            if (rear.Any())
            {
                return(RecursiveAddRegisterUseCase(rear, acc));
            }
            else
            {
                return(acc);
            }
        }
예제 #2
0
        private static void OnHighlighterChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            HighlightedTagsPanel panel = d as HighlightedTagsPanel;

            if (panel != null)
            {
                ITagSource tagsource = panel.TagSource;
                if (tagsource != null)
                {
                    TextSplitter highlighter = e.NewValue as TextSplitter;
                    if (highlighter == null)
                    {
                        highlighter = new TextSplitter();
                    }

                    bool firstMatch = false;
                    int  i          = 0;
                    foreach (IHighlightableTagDataContext ctx in tagsource.TagDataContextCollection)
                    {
                        ctx.Highlighter = highlighter;
                        Control ctrl = (Control)panel.tagsPanel.Children[i];
                        if (!firstMatch && ctx.HasHighlights)
                        {
                            ctrl.BringIntoView();
                            firstMatch = true;
                        }
                        ctrl.Focusable = ctx.HasHighlights;
                        i++;
                    }
                }
            }
        }
        /// <summary>
        /// Create a new instance of a design time view model
        /// </summary>
        public FindTaggedPagesDesignerModel()
        {
            _scopes = new List <SearchScopeFacade> {
                new SearchScopeFacade()
                {
                    Scope      = SearchScope.AllNotebooks,
                    ScopeLabel = "All Notebooks"
                },
                new SearchScopeFacade()
                {
                    Scope      = SearchScope.Notebook,
                    ScopeLabel = "Notebooks"
                }
            };

            _selectedScope = _scopes[0];

            TagsAndPages c = new TagsAndPages(null);

            c.ExtractTags(XDocument.Parse(_strXml), false);

            TextSplitter splitter = new TextSplitter("Cool");

            _pages.AddAll(from TaggedPage tp in c.Pages.Values select new HitHighlightedPageLinkModel(tp, splitter, null));

            _tags.AddAll(from t in c.Tags.Values select new TagSelectorModel(t));
        }
예제 #4
0
        public void SplitStringTestWhenBrackets(string str)
        {
            var result = new TextSplitter().SplitString(str);

            Assert.AreEqual("привет (буфет)", result.RuStr);
            Assert.AreEqual("hello", result.EnStr);
        }
예제 #5
0
        public void CanCheckSingleLineWithoutSplitting()
        {
            string text      = "kishore 1234567890 1234567890 reddy";
            string splitText = TextSplitter.CheckAndSplitText(text, 15);

            Assert.AreEqual("kishore 1234567890 1234567890 reddy", splitText);
        }
        /// <summary>
        /// FindTaggedPages pages matching a search criterion in the background.
        /// </summary>
        /// <param name="query">query. If null or empty just all page tags are collected</param>
        /// <param name="scope">Range of the search</param>
        internal async Task FindPagesAsync(string query, SearchScope scope)
        {
            switch (scope)
            {
            case SearchScope.Notebook:
                LastScopeID = OneNoteApp.CurrentNotebookID;
                break;

            case SearchScope.SectionGroup:
                LastScopeID = OneNoteApp.CurrentSectionGroupID;
                break;

            case SearchScope.Section:
                LastScopeID = OneNoteApp.CurrentSectionID;
                break;

            default:
                LastScopeID = String.Empty;
                break;
            }

            if (!string.IsNullOrEmpty(query))
            {
                query = query.Trim().Replace(',', ' ');
                SearchHistory.Remove(query);
                SearchHistory.Insert(0, query);
                // update settings
                StringBuilder history = new StringBuilder();
                for (int i = 0; i < SearchHistory.Count() && i < Properties.Settings.Default.SearchHistory_Size; i++)
                {
                    if (history.Length > 0)
                    {
                        history.Append(',');
                    }
                    history.Append(SearchHistory[i]);
                }
                Properties.Settings.Default.SearchHistory = history.ToString();

                // construct the query pattern
                string[] words = query.Split(new char[] { ',', ' ', ':', ';' }, StringSplitOptions.RemoveEmptyEntries);

                _highlighter = new TextSplitter(from w in words select w.Replace("'", "").Replace("\"", ""));
            }
            else
            {
                _highlighter = new TextSplitter();
            }

            await Task.Run(() => _searchResult.Find(query, LastScopeID), _cancelWorker.Token);

            // restore filter tag selection
            foreach (string filterTag in _searchResult.Filter)
            {
                TagSelectorModel mdl;
                if (Tags.TryGetValue(filterTag, out mdl))
                {
                    mdl.IsChecked = true;
                }
            }
        }
예제 #7
0
        public ScrollingMessageDialog(INativeGraphicsManager nativeGraphicsManager,
                                      IGameStateProvider gameStateProvider,
                                      IEODialogButtonService eoDialogButtonService)
            : base(gameStateProvider)
        {
            _font         = Game.Content.Load <SpriteFont>(Constants.FontSize08);
            _textSplitter = new TextSplitter("", _font)
            {
                LineLength = 275
            };

            BackgroundTexture = nativeGraphicsManager.TextureFromResource(GFXTypes.PreLoginUI, 40);

            var smallButtonSheet = eoDialogButtonService.SmallButtonSheet;

            _ok = new XNAButton(smallButtonSheet,
                                new Vector2(138, 197),
                                eoDialogButtonService.GetSmallDialogButtonOutSource(SmallButton.Ok),
                                eoDialogButtonService.GetSmallDialogButtonOverSource(SmallButton.Ok));
            _ok.OnClick += (sender, e) => Close(XNADialogResult.OK);
            _ok.SetParentControl(this);

            _scrollBar = new ScrollBar(new Vector2(320, 66), new Vector2(16, 119),
                                       ScrollBarColors.LightOnMed, nativeGraphicsManager);
            _scrollBar.SetParentControl(this);

            MessageText = "";

            CenterInGameView();
        }
예제 #8
0
        public void SplitStringTest(string str)
        {
            var result = new TextSplitter().SplitString(str);

            Assert.AreEqual("привет", result.RuStr);
            Assert.AreEqual("hello", result.EnStr);
        }
예제 #9
0
        /// <inheritdoc />
        public SmsSplittingResult SplitMessageWithWordWrap(string text, bool concatenatedSms = true)
        {
            if (text == null)
            {
                throw new ArgumentNullException(nameof(text));
            }

            if (text == string.Empty)
            {
                return(new SmsSplittingResult
                {
                    Encoding = SmsEncoding.Gsm7Bit,
                    Parts = new List <SmsPart>()
                });
            }

            var encoding = GetEncoding(text);
            var blocks   = TextSplitter.Split(text, encoding);
            var builder  = new SmsBuilder(blocks, encoding, concatenatedSms);

            return(new SmsSplittingResult
            {
                Encoding = encoding,
                Parts = builder.Parts
            });
        }
예제 #10
0
        private IEnumerable <string> AddUsing(IEnumerable <string> arg)
        {
            var(usings, rest) = TextSplitter.DivideInto2(
                arg,
                text => text == "",
                false
                );

            var implementsNamespaceUsing = $"using {OnAppendUsingNamespace(controllerName)};";
            var normalUsing = $"using UseCase.{controllerName}.{actionName};";

            var adjustedUsings = usings.ToList();

            if (adjustedUsings.All(x => !x.Contains(implementsNamespaceUsing)))
            {
                adjustedUsings.Add(implementsNamespaceUsing);
            }
            if (adjustedUsings.All(x => !x.Contains(normalUsing)))
            {
                adjustedUsings.Add(normalUsing);
            }

            adjustedUsings.Sort();

            return(adjustedUsings.Concat(rest));
        }
예제 #11
0
        public void CanSplitSingleLongWord()
        {
            string longWord  = "abcdefghijklmnopqrstuvwxyz";
            string splitWord = TextSplitter.SplitWord(longWord, 5, " ");

            Assert.AreEqual("abcde fghij klmno pqrst uvwxy z", splitWord);
        }
예제 #12
0
 private IEnumerable <string> SplitInput(string inputText)
 {
     if (TextSplitter != null)
     {
         return(TextSplitter.Split(inputText));
     }
     return(new[] { inputText });
 }
 protected override void Apply(TextSplitter<Server> textSplitter)
 {
     textSplitter
         .Map(@"(alert|monitor|check)(ANYTHING)(?<name>staging|prod)(ANYTHING)version(ANYTHING)")
         .Map(@"(alert|monitor|check)(ANYTHING)version(ANYTHING)(?<name>staging|prod)(ANYTHING)")
         .Map(@"(alert|monitor|check)(ANYTHING)version(ANYTHING)")
         .Map(@"(ANYTHING)version(ANYTHING)changes(ANYTHING) ");
 }
예제 #14
0
 //=========================================================================================
 internal void SetText(string text)
 {
     this.Lines.Clear();
     foreach (string sLine in TextSplitter.GetLinesFromText(text))
     {
         this.Lines.Add(new DocumentLine(sLine));
     }
 }
        /// <summary>
        /// create a new instance of the view model.
        /// </summary>
        /// <param name="tp">a OneNote page object</param>
        /// <param name="highlighter">object to generate a highlight description of the link title</param>
        /// <param name="onenote">OneNote application object proxy</param>
        internal HitHighlightedPageLinkModel(TaggedPage tp, TextSplitter highlighter, OneNoteProxy onenote)
            : base(tp.Title, tp.ID)
        {
            IsSelected  = false;
            _page       = tp;
            _highlights = highlighter.SplitText(_page.Title);

            HitCount = _highlights.Count((f) => f.IsMatch);
            _onenote = onenote;
        }
예제 #16
0
 //=========================================================================================
 /// <summary>Разобрать текст "keywords" на слова и указать, что эти ключевые слова должны отображаться в указанном стиле.</summary>
 protected void LoadKeywordsToGroup(Dictionary <string, TextStyle> dictionary, TextStyle style, string keywords)
 {
     foreach (string sWord in TextSplitter.GetWordsFromText(keywords))
     {
         //if (dictionary.ContainsKey(sWord))
         //    Console.WriteLine(sWord);
         //else
         dictionary.Add(sWord, style);
     }
 }
        public void GetWords_supportsCyrillic()
        {
            var textSource = A.Fake<ITextSource>();
            A.CallTo(() => textSource.GetText()).Returns(
                "Это кириллические буквы.");
            var textSplitter = new TextSplitter(textSource);

            var words = textSplitter.GetWords();

            words.Should().Equal("Это", "кириллические", "буквы");
        }
        public void GetWords_splitsTextToWords()
        {
            var textSource = A.Fake<ITextSource>();
            A.CallTo(() => textSource.GetText()).Returns(
                "Well-written Martin's text   (with comment). ");
            var textSplitter = new TextSplitter(textSource);

            var words = textSplitter.GetWords();

            words.Should().Equal("Well-written", "Martin's", "text", "with", "comment");
        }
예제 #19
0
        private void _showForgetAllMessage(Action forgetAllAction)
        {
            List <string> drawStrings = new List <string>();

            string[] messages =
            {
                OldWorld.GetString(EOResourceID.SKILLMASTER_FORGET_ALL),
                OldWorld.GetString(EOResourceID.SKILLMASTER_FORGET_ALL_MSG_1),
                OldWorld.GetString(EOResourceID.SKILLMASTER_FORGET_ALL_MSG_2),
                OldWorld.GetString(EOResourceID.SKILLMASTER_FORGET_ALL_MSG_3),
                OldWorld.GetString(EOResourceID.SKILLMASTER_CLICK_HERE_TO_FORGET_ALL)
            };

            TextSplitter ts = new TextSplitter("", Game.Content.Load <SpriteFont>(Constants.FontSize08pt5))
            {
                LineLength = 200
            };

            foreach (string s in messages)
            {
                ts.Text = s;
                if (!ts.NeedsProcessing)
                {
                    //no text clipping needed
                    drawStrings.Add(s);
                    drawStrings.Add(" ");
                    continue;
                }

                drawStrings.AddRange(ts.SplitIntoLines());
                drawStrings.Add(" ");
            }

            //now need to take the processed draw strings and make an ListDialogItem for each one
            foreach (string s in drawStrings)
            {
                string next = s;
                bool   link = false;
                if (next.Length > 0 && next[0] == '*')
                {
                    next = next.Remove(0, 1);
                    link = true;
                }
                ListDialogItem nextItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small)
                {
                    Text = next
                };
                if (link)
                {
                    nextItem.SetPrimaryTextLink(forgetAllAction);
                }
                AddItemToList(nextItem, false);
            }
        }
        public void GetKeywordsFromText()
        {
            string        sText = " GO\tя12\r\n\tANY ";
            List <string> words = new List <string>();

            foreach (string sWord in TextSplitter.GetWordsFromText(sText))
            {
                words.Add(sWord);
            }
            Assert.That(words, Is.EquivalentTo(new string[] { "GO", "я12", "ANY" }));
        }
예제 #21
0
        public void CanCheckMultiLineWithOutSplitting()
        {
            string text = "Famed archaeologist/adventurer Dr. Henry \"Indiana\" Jones" + Environment.NewLine
                          + "is called back into action when he becomes entangled in a " + Environment.NewLine
                          + "Soviet plot to uncover the secret behind mysterious artifacts" + Environment.NewLine
                          + "known as the Crystal Skulls";


            string splitText = TextSplitter.CheckAndSplitText(text, 25);

            Assert.AreEqual(text, splitText);
        }
예제 #22
0
        public void PositiveCaseLongText(
            string text,
            int symbolsCountPerSegment)
        {
            TextSplitter splitter = new TextSplitter(text);

            string[] split = splitter.Split(symbolsCountPerSegment);
            foreach (var sp in split)
            {
                Assert.True(sp.Length <= symbolsCountPerSegment);
            }
        }
예제 #23
0
        public void SplitWords_HasPunctuation_ShouldReturnWithoutPunctuation()
        {
            // Arrange
            var targetStr = @"Lorem, ipsum!? dolor; sit: posuere.";
            var target    = new TextSplitter();

            // Act
            var actual = target.SplitWords(targetStr);

            // Assert
            actual.ShouldBeEquivalentTo(new[] { "Lorem", "ipsum", "dolor", "sit", "posuere" });
        }
예제 #24
0
        public void SplitWords_HasDoubleSpaces_ShouldReturnWithoutSpaces()
        {
            // Arrange
            var targetStr = @"Lorem ipsum  dolor   sit     posuere.";
            var target    = new TextSplitter();

            // Act
            var actual = target.SplitWords(targetStr);

            // Assert
            actual.ShouldBeEquivalentTo(new[] { "Lorem", "ipsum", "dolor", "sit", "posuere" });
        }
예제 #25
0
        private void _setDialogText()
        {
            ClearItemList();

            List <string> rows = new List <string>();

            TextSplitter ts = new TextSplitter(_pages[_pageIndex], Game.Content.Load <SpriteFont>(Constants.FontSize08pt5));

            if (!ts.NeedsProcessing)
            {
                rows.Add(_pages[_pageIndex]);
            }
            else
            {
                rows.AddRange(ts.SplitIntoLines());
            }

            int index = 0;

            foreach (var row in rows)
            {
                ListDialogItem rowItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++)
                {
                    Text = row
                };
                AddItemToList(rowItem, false);
            }

            if (_pageIndex < _pages.Count - 1)
            {
                return;
            }

            ListDialogItem item = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++)
            {
                Text = " "
            };

            AddItemToList(item, false);

            foreach (var link in _links)
            {
                ListDialogItem linkItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++)
                {
                    Text = link.Value
                };

                var linkIndex = (byte)link.Key;
                linkItem.SetPrimaryTextLink(() => _clickLink(linkIndex));
                AddItemToList(linkItem, false);
            }
        }
예제 #26
0
        private IReadOnlyList <ChatPair> SplitTextIntoLines(string who, IReadOnlyList <string> input)
        {
            var retStrings = new List <ChatPair>();

            who = who ?? "";

            string indentForUserName = "******"; //padding string for additional lines if it is a multi-line message

            if (!string.IsNullOrEmpty(who))
            {
                while (_chatFont.MeasureString(indentForUserName).X < _chatFont.MeasureString(who).X)
                {
                    indentForUserName += " ";
                }
            }

            var splitter = new TextSplitter("", _chatFont)
            {
                LineLength = LINE_LEN,
                LineIndent = indentForUserName
            };

            foreach (var text in input)
            {
                if (string.IsNullOrWhiteSpace(who) && string.IsNullOrWhiteSpace(text))
                {
                    retStrings.Add(new ChatPair {
                        Text = " ", IsFirstLineOfMultilineMessage = true
                    });
                    continue;
                }

                splitter.Text = text;
                if (!splitter.NeedsProcessing)
                {
                    retStrings.Add(new ChatPair {
                        Text = text, IsFirstLineOfMultilineMessage = true
                    });
                    continue;
                }

                var stringsToAdd = splitter.SplitIntoLines()
                                   .Select((str, i) => new ChatPair {
                    Text = str, IsFirstLineOfMultilineMessage = i == 0
                })
                                   .ToList();
                retStrings.AddRange(stringsToAdd);
            }

            return(retStrings);
        }
예제 #27
0
        public void DoesNotSplitSingleShortWord()
        {
            string longWord  = "abcdefghijklmn";
            string splitWord = TextSplitter.SplitWord(longWord, 15, " ");

            Assert.AreEqual("abcdefghijklmn", splitWord);

            longWord  = null;
            splitWord = TextSplitter.SplitWord(longWord, 15, " ");
            Assert.IsNull(splitWord);

            longWord  = string.Empty;
            splitWord = TextSplitter.SplitWord(longWord, 15, " ");
            Assert.AreEqual(string.Empty, splitWord);
        }
		public ScrollingMessageDialog(string msgText)
		{
			textSplitter = new TextSplitter("", EOGame.Instance.DBGFont) { LineLength = 275 };

			bgTexture = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PreLoginUI, 40);
			_setSize(bgTexture.Width, bgTexture.Height);

			XNAButton ok = new XNAButton(smallButtonSheet, new Vector2(138, 197), _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok));
			ok.OnClick += (sender, e) => Close(ok, XNADialogResult.OK);
			ok.SetParent(this);
			dlgButtons.Add(ok);

			scrollBar = new ScrollBar(this, new Vector2(320, 66), new Vector2(16, 119), ScrollBarColors.LightOnMed);
			MessageText = msgText;

			endConstructor();
		}
        private static void AddWords(OneToSetMap <string, string> wordsPerAssembly, JetHashSet <string> abbreviations,
                                     IAssemblyPsiModule assemblyPsiModule, string name)
        {
            var textParts = TextSplitter.Split(name);

            foreach (var textPart in textParts.Where(tp => tp.Type == TextPartType.Word))
            {
                if (textPart.Text == textPart.Text.ToUpperInvariant())
                {
                    abbreviations.Add(textPart.Text);
                }
                else
                {
                    wordsPerAssembly.Add(assemblyPsiModule.Assembly.AssemblyName.Name, textPart.Text);
                }
            }
        }
예제 #30
0
        public void Run()
        {
            var file = Path.Combine(
                param.WebProjectDirectoryFullPath,
                "ClArc",
                "DI",
                OnLauncherFileName()
                );
            var lines = File.ReadAllLines(file);

            var(front, middle, after) = TextSplitter.DivideIntoThree(
                lines,
                line => line.TrimStart().StartsWith("#region ClArc START"),
                line => line.TrimStart().StartsWith("#endregion ClArc END"),
                false
                );

            var adjustedFront = AddUsing(front);
            IEnumerable <string> newMiddle;

            if (middle.Any(x => x.TrimStart().StartsWith($"#region {param.ControllerName}")))
            {
                var usecaseLines = CreateAddedUsecaseLines(middle);
                newMiddle = usecaseLines;
            }
            else
            {
                var appendAfterMiddle = new List <string>
                {
                    "",
                    $"{Indent}#region {param.ControllerName}",
                    _registerUsecaseText(),
                    $"{Indent}#endregion"
                };
                newMiddle = middle.Concat(appendAfterMiddle);
            }
            var splitedMiddles = TextSplitter.Divide(newMiddle, x => x.Contains("#region"), false, true);
            var middles        = splitedMiddles.OrderBy(x => x.First()).Select(x => x.Where(text => !string.IsNullOrWhiteSpace(text)));
            var newMids        = TextJoiner.Join(middles, "");

            var result = adjustedFront.Concat(newMids).Concat(after);

            File.WriteAllLines(file, result, Encoding.UTF8);
        }
예제 #31
0
        private IEnumerable <string> InvokeAddRegisterUseCase(IEnumerable <string> source)
        {
            var(front, middle, rear) = TextSplitter.DivideIntoThree(
                source,
                line => line.TrimStart().StartsWith("#region"),
                line => line.TrimStart().StartsWith("#endregion"),
                false
                );
            var prefix = controllerName + actionName;
            var reg    = new Regex(@"<(?<request>.*),(?<usecaseInterface>.*),(?<usecaseImplements>.*)>");
            var hit    = false;

            foreach (var m in middle)
            {
                var matched = reg.Match(m);
                if (matched.Success)
                {
                    var request = matched.Groups["request"].Value;
                    if (request.StartsWith(prefix))
                    {
                        hit = true;
                    }
                }
            }

            if (hit)
            {
                return(source);
            }
            else
            {
                var addedMiddle = new List <string>(middle)
                {
                    _registerUsecaseText()
                };
                addedMiddle.Sort();
                return(front
                       .Concat(addedMiddle)
                       .Concat(rear));
            }
        }
예제 #32
0
        private async Task ResumeAfterRateIsSet(
            IDialogContext context,
            IAwaitable <long> argument)
        {
            rating = (int)await argument;
            string message = GetMessageAfterRatingSet(rating);
            await context.SayAsync(message);

            var    scraper      = new ScraperService();
            string scrappedText = await scraper.ScrapAsync(link);

            TextSplitter splitter = new TextSplitter(scrappedText.Trim());

            string[] split         = splitter.Split(MaxDocumentLength);
            var      textAnalytics = new TextAnalyticsApiService();
            var      keywords      = await textAnalytics.GetKeywordsAsync(split);

            await context.PostAsync($"Keywords: {String.Join(",", keywords)}");

            context.Done <object>(null);
        }
예제 #33
0
        private void OnTagdataContextCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            ITagSource tagsource = sender as ITagSource;

            if (tagsource != null)
            {
                switch (e.Action)
                {
                case NotifyCollectionChangedAction.Add:
                    DataTemplate tpl          = TagTemplate;
                    int          newItemCount = e.NewItems.Count;
                    TextSplitter highlighter  = Highlighter;
                    for (int i = 0; i < newItemCount; i++)
                    {
                        FrameworkElement             tagControl = tpl.LoadContent() as FrameworkElement;
                        IHighlightableTagDataContext ctx        = e.NewItems[i] as IHighlightableTagDataContext;
                        if (ctx != null)
                        {
                            ctx.Highlighter        = highlighter;
                            tagControl.DataContext = ctx;
                        }

                        tagsPanel.Children.Insert(i + e.NewStartingIndex, tagControl);
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    int oldItemCount = e.OldItems.Count;
                    for (int i = 0; i < oldItemCount; i++)
                    {
                        tagsPanel.Children.RemoveAt(e.OldStartingIndex);
                    }
                    break;

                case NotifyCollectionChangedAction.Reset:
                    tagsPanel.Children.Clear();
                    break;
                }
            }
        }
예제 #34
0
        //=========================================================================================
        internal void PasteText(string text)
        {
            this.InitFields();
            if (this.HasSelection())
            {
                this.DeleteSelection();
                this.InitFields();
            }

            var lines = TextSplitter.SplitTextToLines(text);

            if (lines.Count == 1)
            {
                string sLine = this.CurLine.Insert(this.CurPos.Char, text);
                this.Doc[this.CurPos.Line].Text = sLine;
                int iChar = this.CurPos.Char + text.Length;
                int iCol  = this.Viewer.Caret.GetColumn(sLine, iChar);
                this.Viewer.Caret.MoveToPos(this.CurPos.Line, iCol, true);
            }
            else
            {
                string sLine = this.CurLine;
                if (sLine.Length > 0 && this.CurPos.Char < sLine.Length)
                {
                    sLine = sLine.Remove(this.CurPos.Char);
                }
                this.Doc[this.CurPos.Line].Text = sLine + lines[0];
                lines.RemoveAt(0);

                int iChar = lines[lines.Count - 1].Length;
                lines[lines.Count - 1] += this.CurLine.Substring(this.CurPos.Char);
                this.Doc.InsertRange(this.CurPos.Line + 1, lines);

                int    iLine           = this.CurPos.Line + lines.Count;
                string sLastPastedLine = this.Doc[iLine].Text;
                int    iCol            = this.Viewer.Caret.GetColumn(sLastPastedLine, iChar);
                this.Viewer.Caret.MoveToPos(iLine, iCol, true);
            }
        }
예제 #35
0
        public void SanitizeAndSplitIntoWordReturnsListWithOnlyWords()
        {
            // Arrange
            var text = "Lorem! ££ ipsum* dolor.. sit amet, at   elitr habemus consequat quo\n\rLorem didn't";

            // act
            var splitter = new TextSplitter();
            var result = splitter.SanitizeAndSplitIntoWords(text).ToList();

            //
            Assert.AreEqual(12, result.Count);
            Assert.IsTrue(result.Contains("Lorem"));
            Assert.IsTrue(result.Contains("ipsum"));
            Assert.IsTrue(result.Contains("dolor"));
            Assert.IsTrue(result.Contains("sit"));
            Assert.IsTrue(result.Contains("amet"));
            Assert.IsTrue(result.Contains("at"));
            Assert.IsTrue(result.Contains("elitr"));
            Assert.IsTrue(result.Contains("habemus"));
            Assert.IsTrue(result.Contains("consequat"));
            Assert.IsTrue(result.Contains("quo"));
            Assert.IsTrue(result.Contains("Lorem"));
            Assert.IsTrue(result.Contains("didn't"));
        }
예제 #36
0
		/// <summary>
		/// Adds text to the tab. For multi-line text strings, does text wrapping. For text length > 415 pixels, does text wrapping
		/// </summary>
		/// <param name="who">Person that spoke</param>
		/// <param name="text">Message that was spoken</param>
		/// <param name="icon">Icon to display next to the chat</param>
		/// <param name="col">Rendering color (enumerated value)</param>
		public void AddText(string who, string text, ChatType icon = ChatType.None, ChatColor col = ChatColor.Default)
		{
			const int LINE_LEN = 380;

			//special case: blank line, like in the news panel between news items
			if (string.IsNullOrWhiteSpace(who) && string.IsNullOrWhiteSpace(text))
			{
				lock(ChatStringsLock)
					chatStrings.Add(new ChatIndex(chatStrings.Count, icon, who, col), " ");
				scrollBar.UpdateDimensions(chatStrings.Count);
				if (chatStrings.Count > 7 && WhichTab != ChatTabs.None)
				{
					scrollBar.ScrollToEnd();
				}
				if (!Selected)
					tabLabel.ForeColor = Color.White;
				if (!Visible)
					Visible = true;
				return;
			}

			string whoPadding = "  "; //padding string for additional lines if it is a multi-line message
			if (!string.IsNullOrEmpty(who))
				while (EOGame.Instance.DBGFont.MeasureString(whoPadding).X < EOGame.Instance.DBGFont.MeasureString(who).X)
					whoPadding += " ";

			TextSplitter ts = new TextSplitter(text, EOGame.Instance.DBGFont)
			{
				LineLength = LINE_LEN,
				LineEnd = "",
				LineIndent = whoPadding
			};
			
			if (!ts.NeedsProcessing)
			{
				lock (ChatStringsLock)
					chatStrings.Add(new ChatIndex(chatStrings.Count, icon, who, col), text);
			}
			else
			{
				List<string> chatStringsToAdd = ts.SplitIntoLines();

				for (int i = 0; i < chatStringsToAdd.Count; ++i)
				{
					lock (ChatStringsLock)
					{
						if (i == 0)
							chatStrings.Add(new ChatIndex(chatStrings.Count, icon, who, col), chatStringsToAdd[0]);
						else
							chatStrings.Add(new ChatIndex(chatStrings.Count, ChatType.None, "", col), chatStringsToAdd[i]);
					}
				}
			}

			scrollBar.UpdateDimensions(chatStrings.Count);
			if (chatStrings.Count > 7 && WhichTab != ChatTabs.None)
			{
				scrollBar.ScrollToEnd();
			}
			if (!Selected)
				tabLabel.ForeColor = Color.White;
			if (!Visible)
				Visible = true;
		}
예제 #37
0
		private void _setDialogText()
		{
			ClearItemList();

			List<string> rows = new List<string>();

			TextSplitter ts = new TextSplitter(_pages[_pageIndex], Game.Content.Load<SpriteFont>(Constants.FontSize08pt5));
			if (!ts.NeedsProcessing)
				rows.Add(_pages[_pageIndex]);
			else
				rows.AddRange(ts.SplitIntoLines());

			int index = 0;
			foreach (var row in rows)
			{
				ListDialogItem rowItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++)
				{
					Text = row
				};
				AddItemToList(rowItem, false);
			}

			if (_pageIndex < _pages.Count - 1)
				return;

			ListDialogItem item = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++) { Text = " " };
			AddItemToList(item, false);

			foreach (var link in _links)
			{
				ListDialogItem linkItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++)
				{
					Text = link.Value
				};

				var linkIndex = (byte)link.Key;
				linkItem.SetPrimaryTextLink(() => _clickLink(linkIndex));
				AddItemToList(linkItem, false);
			}
		}
예제 #38
0
		private void _showForgetAllMessage(Action forgetAllAction)
		{
			List<string> drawStrings = new List<string>();

			string[] messages =
			{
				World.GetString(DATCONST2.SKILLMASTER_FORGET_ALL),
				World.GetString(DATCONST2.SKILLMASTER_FORGET_ALL_MSG_1),
				World.GetString(DATCONST2.SKILLMASTER_FORGET_ALL_MSG_2),
				World.GetString(DATCONST2.SKILLMASTER_FORGET_ALL_MSG_3),
				World.GetString(DATCONST2.SKILLMASTER_CLICK_HERE_TO_FORGET_ALL)
			};

			TextSplitter ts = new TextSplitter("", Game.Content.Load<SpriteFont>(Constants.FontSize08pt5)) { LineLength = 200 };
			foreach (string s in messages)
			{
				ts.Text = s;
				if (!ts.NeedsProcessing)
				{
					//no text clipping needed
					drawStrings.Add(s);
					drawStrings.Add(" ");
					continue;
				}

				drawStrings.AddRange(ts.SplitIntoLines());
				drawStrings.Add(" ");
			}

			//now need to take the processed draw strings and make an ListDialogItem for each one
			foreach (string s in drawStrings)
			{
				string next = s;
				bool link = false;
				if (next.Length > 0 && next[0] == '*')
				{
					next = next.Remove(0, 1);
					link = true;
				}
				ListDialogItem nextItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small) { Text = next };
				if (link) nextItem.SetPrimaryTextLink(forgetAllAction);
				AddItemToList(nextItem, false);
			}
		}