internal CaseWordVocabularySource(ApplicationModel model, WordVocabularySource source, HeadWordItem target)
            : base(model)
        {
            _source = source;
            _target = target;

            var substitutes = new List <string>();

            var tile       = TileData.FromTokenString(target.Content);
            var content    = tile.Content;
            var isPrefix   = tile.IsPrefix;
            var isSuffix   = tile.IsSuffix;
            var attributes = tile.Attributes;
            var included   = new HashSet <string> {
                target.Content
            };

            var map = WordCaseMap.Create(content);

            if (map.LetterCount != 0)
            {
                var position0 = map.Positions[0];

                CheckedAdd(model.HeadItems[0].Culture.TextInfo.ToTitleCase(content));
                CheckedAdd(content.ToLower());
                CheckedAdd(content.ToUpper());
                CheckedAdd(content.Substring(0, position0) + char.ToUpper(content[position0]) + content.Substring(position0 + 1));

                for (var i = 0; i < map.Positions.Length; i++)
                {
                    var position = map.Positions[i];
                    var ch       = map.Uppers[i] ? char.ToLower(content[position]) : char.ToUpper(content[position]);
                    var cased    = content.Substring(0, position) + ch + content.Substring(position + 1);
                    CheckedAdd(cased);
                }

                void CheckedAdd(string newContent)
                {
                    var newTile = TileData.Create(content: newContent, isSuffix: isPrefix, isPrefix: isSuffix, attributes: attributes);
                    var version = newTile.ToTokenString();

                    if (included.Add(version))
                    {
                        substitutes.Add(version);
                    }
                }
            }

            for (var i = 0; i < 4; i++)
            {
                var spacedTile    = TileData.Create(content: content, isSuffix: (i & 1) != 0, isPrefix: (i & 2) != 0, attributes: attributes);
                var spacedContent = spacedTile.ToTokenString();
                if (included.Add(spacedContent))
                {
                    substitutes.Add(spacedContent);
                }
            }

            _substitutes = substitutes.ToArray();
        }
Beispiel #2
0
        public void CheckTokenizationTest()
        {
            CheckTokenization(TileData.Create("Normal"), "Normal");
            CheckTokenization(TileData.Create("Prefix", isPrefix: true), "Prefix\0B");
            CheckTokenization(TileData.Create("Suffix", isSuffix: true), "Suffix\0A");
            CheckTokenization(TileData.Create("Infix", isPrefix: true, isSuffix: true), "Infix\0J");

            void CheckTokenization(TileData tile, string expected)
            {
                var token = tile.ToTokenString();

                Assert.AreEqual(expected, token);

                var reborn = TileData.FromTokenString(token);

                Assert.AreEqual(tile, reborn);
            }
        }
Beispiel #3
0
        public void NoNullInContentTest()
        {
            var contents = new[] { "Good", "Bad\0", "\0Badder", "Bad\0est" };

            for (var i = 0; i < contents.Length; i++)
            {
                var good = true;
                try
                {
                    _ = TileData.Create(contents[i]);
                }
                catch (ArgumentException)
                {
                    good = false;
                }
                Assert.AreEqual(i == 0, good);
            }
        }
Beispiel #4
0
        public void TileEqualityTest()
        {
            var unmatchable = TileData.Create("TEST");
            var matchable   = TileData.Create("1");
            var plainWrong  = "Wibble";

            var matchCount = 0;

            foreach (var element in ElementEnumerable)
            {
                Assert.IsFalse(unmatchable.Equals(element));
                if (matchable.Equals(element))
                {
                    matchCount++;
                }
                Assert.IsFalse(plainWrong.Equals(element));

                Assert.AreEqual(element.Equals(matchable), matchable.Equals(element));
                Assert.AreEqual(element.Equals(unmatchable), unmatchable.Equals(element));
                Assert.AreEqual(element.Equals(plainWrong), plainWrong.Equals(element));
            }
            Assert.AreEqual(1, matchCount);
        }
        public void SpacingThrashTest()
        {
            ThrashTestHelper.Run(8, v => SequenceSanityCheck(v),
                                 TileData.Create("X", false, false),
                                 TileData.Create("X", true, false),
                                 TileData.Create("X", false, true),
                                 TileData.Create("X", true, true));
            ThrashTestHelper.Run(8, v => SequenceSanityCheck(v),
                                 TileData.Create("-", false, false),
                                 TileData.Create("-", true, false),
                                 TileData.Create("-", false, true),
                                 TileData.Create("-", true, true));

            ThrashTestHelper.Run(4, v => SequenceSanityCheck(v),
                                 TileData.Create("X", false, false),
                                 TileData.Create("X", true, false),
                                 TileData.Create("X", false, true),
                                 TileData.Create("X", true, true),
                                 TileData.Create("-", false, false),
                                 TileData.Create("-", true, false),
                                 TileData.Create("-", false, true),
                                 TileData.Create("-", true, true));
        }
Beispiel #6
0
        public void IsSimpleWordTest()
        {
            {
                var tile = TileData.Create("Hello");
                Assert.IsTrue(tile.ToString() == "<T>Hello</T>");
                Assert.IsTrue(tile.IsSimpleWord);
            }

            var simples = new[] { "Hello", "This-is" };

            foreach (var simple in simples)
            {
                var tile = TileData.Create(simple);
                Assert.IsTrue(tile.IsSimpleWord);
            }

            foreach (var simple in simples)
            {
                var tile = TileData.Create(simple, isPrefix: true);
                Assert.IsFalse(tile.IsSimpleWord);
            }

            foreach (var simple in simples)
            {
                var tile = TileData.Create(simple, isSuffix: true);
                Assert.IsFalse(tile.IsSimpleWord);
            }

            var complexes = new[] { "Hello World", "&^%^" };

            foreach (var complex in complexes)
            {
                var tile = TileData.Create(complex);
                Assert.IsFalse(tile.IsSimpleWord);
            }
        }
        public void EqualsTest()
        {
            var a = TileData.Create("A");
            var b = TileData.Create("B");

            var sequences = new[]
            {
                TileSequence.FromData(),
                TileSequence.FromData(a, a),
                TileSequence.FromData(a, b),
                TileSequence.FromData(b, a)
            };

            for (var i = 0; i < sequences.Length; i++)
            {
                for (var j = 0; j < sequences.Length; j++)
                {
                    var lhs = sequences[i];
                    var rhs = sequences[j];

                    var equals  = lhs.Equals(rhs);
                    var lhsHash = lhs.GetHashCode();
                    var rhsHash = rhs.GetHashCode();

                    Assert.AreEqual(i == j, equals);
                    Assert.IsTrue(!equals || lhsHash == rhsHash);

                    var equalsUntyped   = lhs.Equals((object)rhs);
                    var unequalsUntyped = lhs.Equals(42);
                    Assert.AreEqual(equals, equalsUntyped);
                    Assert.IsFalse(unequalsUntyped);
                }
            }

            Assert.AreNotEqual(sequences[0], "Ethel the Aardvark");
        }
 public void HelloWorldSequenceCheck()
 {
     SequenceSanityCheck(TileData.Create("Hello"), TileData.Create("World"));
 }
        public void ComplexishConstructionTest()
        {
            var sequence = TileSequence.FromData(TileData.Create("hello"), TileData.Create("world"));

            Assert.IsNotNull(sequence);
        }
        private void OnCursedTextChanged(object sender, RoutedEventArgs e)
        {
            var box  = (TextBox)sender;
            var text = box.Text;

            var sequence = TileSequence.FromRaw(text);

            var start  = box.SelectionStart;
            var length = box.SelectionLength;

            Debug.WriteLine($"Selection is {start} for {length}");

            var list = new List <TileVisualizationElement>();

            var charPosition = 0;
            var tilePosition = 0;

            while (tilePosition < sequence.Count &&
                   charPosition + sequence[tilePosition].Content.Length <= start)
            {
                list.Add(new TileVisualizationElement(sequence[tilePosition].Type, sequence[tilePosition].Content, TileColor.Text, TileColor.HeadBackground));

                charPosition += sequence[tilePosition].Content.Length;
                tilePosition++;
                if (tilePosition < sequence.Count &&
                    !sequence[tilePosition - 1].IsPrefix &&
                    !sequence[tilePosition].IsSuffix)
                {
                    charPosition++;
                }
            }

            if (length == 0)
            {
                if (tilePosition < sequence.Count)
                {
                    if (charPosition < start)
                    {
                        var tile = sequence[tilePosition];
                        tilePosition++;

                        var prefix = TileData.Create(tile.Content.Substring(0, start - charPosition),
                                                     isPrefix: true,
                                                     isSuffix: tile.IsSuffix);
                        list.Add(new TileVisualizationElement(prefix.Type, prefix.Content, TileColor.Text, TileColor.HeadBackground));

                        var caret = TileData.Create("^");
                        list.Add(new TileVisualizationElement(caret.Type, caret.Content, TileColor.Text, TileColor.SuggestionPartBackground));

                        var suffix = TileData.Create(tile.Content.Substring(start - charPosition),
                                                     isPrefix: tile.IsPrefix,
                                                     isSuffix: true);
                        list.Add(new TileVisualizationElement(suffix.Type, suffix.Content, TileColor.Text, TileColor.HeadBackground));
                    }
                    else
                    {
                        var caret = TileData.Create("^",
                                                    isPrefix: start == charPosition,
                                                    isSuffix: start < charPosition);
                        list.Add(new TileVisualizationElement(caret.Type, caret.Content, TileColor.Text, TileColor.SuggestionPartBackground));
                    }
                }
                else
                {
                    var caret = TileData.Create("^", isSuffix: true);
                    list.Add(new TileVisualizationElement(caret.Type, caret.Content, TileColor.Text, TileColor.SuggestionPartBackground));
                }
            }
            else
            {
            }

            while (tilePosition < sequence.Count)
            {
                list.Add(new TileVisualizationElement(sequence[tilePosition].Type, sequence[tilePosition].Content, TileColor.Text, TileColor.HeadBackground));
                tilePosition++;
            }

            CursedContainer.Items.Clear();
            foreach (var child in list)
            {
                CursedContainer.Items.Add(child);
            }
        }