示例#1
0
    private static IConditionKeyword?ReadKeyword(IWordReader reader, List <string> messages)
    {
        if (reader.WordType == WordType.Null)
        {
            return(new ConstantCondition(null));
        }

        if (reader.WordType == WordType.Variable)
        {
            return(new VariableCondition(reader.Word));
        }

        if (reader.WordType == WordType.String)
        {
            return(new ConstantCondition(reader.Word));
        }

        if (reader.WordType == WordType.Number)
        {
            if (int.TryParse(reader.Word, out var number))
            {
                return(new ConstantCondition(number));
            }

            messages.Add(string.Format(InvalidNumber, reader.Word));
            return(null);
        }

        messages.Add(string.Format(InvalidOperand, reader.Word));
        return(null);
    }
示例#2
0
 public ReadRootContext(IWordReader reader, List <string> messages, bool allowCloseParenthesys, bool singleCondition)
 {
     Reader                = reader;
     Messages              = messages;
     SingleCondition       = singleCondition;
     AllowCloseParenthesys = allowCloseParenthesys;
 }
示例#3
0
 public IEnumerable <string> FilterWords(IWordReader reader)
 {
     return(reader
            .ReadWords()
            .Select(_converter.ConvertWord)
            .Where(_analyzer.IsCorrectWord));
 }
示例#4
0
    private static ICondition?ReadNullCondition(IConditionKeyword operand, IWordReader reader, List <string> messages)
    {
        if (!ReadExpectingNotBeTheEnd(reader, messages))
        {
            return(null);
        }

        if (reader.WordType == WordType.Null)
        {
            return(new IsNullCondition(operand));
        }

        if (reader.WordType != WordType.Not)
        {
            messages.Add(string.Format(InvalidTokenAfterIs, reader.Word));
            return(null);
        }

        if (!ReadExpectingNotBeTheEnd(reader, messages))
        {
            return(null);
        }

        if (reader.WordType == WordType.Null)
        {
            return(new IsNotNullCondition(operand));
        }

        messages.Add(string.Format(InvalidTokenAfterIsNot, reader.Word));
        return(null);
    }
 public ConsoleTagsCloudCreator(ITagsCloudCreator creator, IImageSaver saver, IWordReader reader,
                                IWordProcessor processor)
 {
     this.creator   = creator;
     this.saver     = saver;
     this.reader    = reader;
     this.processor = processor;
 }
示例#6
0
 public CloudCreator(Config config, IWordReader wordReader, ITextFilter textFilter, IDrawer drawer, ITagMaker tagMaker)
 {
     this.config     = config;
     this.textFilter = textFilter;
     this.wordReader = wordReader;
     this.drawer     = drawer;
     this.tagMaker   = tagMaker;
 }
示例#7
0
 public IEnumerable <WeightedWord> WeightWords(IWordReader reader)
 {
     return(_filter
            .FilterWords(reader)
            .GroupBy(word => word)
            .Select(group => new WeightedWord(group.Key, group.Count()))
            .OrderByDescending(weightedWord => weightedWord.Weight)
            .ToList());
 }
示例#8
0
        public TranslationManager()
        {
            wordReader = WordReaderFactory.GetCurrentInstance();
            wordWriter = WordWriterFactory.GetCurrentInstance();
            translatorCreator = new TranslatorCreator();

            ConfigureObjects();
            ConfigureThreadPool();
        }
示例#9
0
        // The main word processing algorithm
        public static void ProcessWords(IWordReader reader, IWordProcessor processor)
        {
            string word;
            while((word = reader.ReadWord()) != null) {
                processor.ProcessWord(word);
            }

            processor.Finish();
        }
示例#10
0
        public void SetUp()
        {
            var processor = new SimpleWordProcessor();

            reader = Substitute.For <IWordReader>();
            var provider = new SimpleWordProvider(reader, processor);

            creator = new SimpleTagsCreator(provider);
        }
示例#11
0
 public WordSourceProvider(TextReaderFactory textReaderFactory, IWordReader textSplitter,
                           IChangerFactory changerFactory,
                           ISelectorFactory selectorFactory)
 {
     this.textReaderFactory = textReaderFactory;
     this.changerFactory    = changerFactory;
     this.selectorFactory   = selectorFactory;
     this.textSplitter      = textSplitter;
 }
示例#12
0
    private static ICondition?ReadCondition(IWordReader reader, List <string> messages)
    {
        var left = ReadKeyword(reader, messages);

        if (left is null)
        {
            return(null);
        }

        if (!reader.Read())
        {
            messages.Add(UnexpectedExpressionEnd);
            return(null);
        }

        switch (reader.WordType)
        {
        case WordType.Invalid:
            messages.Add(string.Format(InvalidToken, reader.Word));
            return(null);

        case WordType.Equals:
            return(ReadOperator(reader, messages, left, (l, r) => new EqualsToCondition(l, r)));

        case WordType.NotEqualsTo:
            return(ReadOperator(reader, messages, left, (l, r) => new NotEqualsToCondition(l, r)));

        case WordType.GreaterThan:
            return(ReadOperator(reader, messages, left, (l, r) => new GreaterThanCondition(l, r)));

        case WordType.LowerThan:
            return(ReadOperator(reader, messages, left, (l, r) => new LowerThanCondition(l, r)));

        case WordType.EqualOrGreaterThan:
            return(ReadOperator(reader, messages, left, (l, r) => new EqualOrGreaterThanCondition(l, r)));

        case WordType.EqualOrLowerThan:
            return(ReadOperator(reader, messages, left, (l, r) => new EqualOrLowerThanCondition(l, r)));

        case WordType.In:
            return(ReadInCondition(left, false, reader, messages));

        case WordType.Between:
            return(ReadBetweenCondition(left, false, reader, messages));

        case WordType.Not:
            return(ReadNotOperator(reader, messages, left));

        case WordType.Is:
            return(ReadNullCondition(left, reader, messages));

        default:
            messages.Add(string.Format(InvalidOperator, reader.Word));
            return(null);
        }
    }
示例#13
0
        public TranslationManager(IWordReader wordReader,
            IWordWriter wordWriter, ITranslatorCreator translatorCreator)
        {
            this.wordReader = wordReader;
            this.wordWriter = wordWriter;
            this.translatorCreator = translatorCreator;

            ConfigureObjects();
            ConfigureThreadPool();
        }
示例#14
0
        // The main word processing algorithm
        public static void ProcessWords(IWordReader reader, IWordProcessor processor)
        {
            string word;

            while ((word = reader.ReadWord()) != null)
            {
                processor.ProcessWord(word);
            }

            processor.Finish();
        }
示例#15
0
 public CloudImageBuilder(
     ICloudBuilder builder,
     IWordReader reader,
     IWordWeighter weighter,
     IWordDrawer drawer,
     Size imageSize
     )
 {
     _weighter = weighter;
     _drawer   = drawer;
     BuildCloudImage(builder, reader, imageSize);
 }
示例#16
0
        private void BuildCloudImage(ICloudBuilder builder, IWordReader reader, Size imageSize)
        {
            _cloudImage = new Bitmap(imageSize.Width, imageSize.Height);
            var graphics      = Graphics.FromImage(_cloudImage);
            var weightedWords = _weighter.WeightWords(reader);

            foreach (var weightedWord in weightedWords)
            {
                var rectanglePlace = builder.PutNextRectangle(_drawer.GetWordSize(graphics, weightedWord));
                graphics.DrawRectangle(Pens.RoyalBlue, rectanglePlace);
                _drawer.DrawWord(graphics, weightedWord, rectanglePlace);
            }
        }
示例#17
0
    private static ICondition?ReadOperator(
        IWordReader reader,
        List <string> messages,
        IConditionKeyword left,
        Func <IConditionKeyword, IConditionKeyword, ICondition> factory
        )
    {
        var right = ReadNextKeyword(reader, messages);

        if (right is null)
        {
            return(null);
        }
        return(factory.Invoke(left, right));
    }
示例#18
0
        public static IWordReader GetCurrentInstance()
        {
            if(currentWordReader == null)
            {
                lock(syncRoot)
                {
                    if(currentWordReader == null)
                    {
                        ConfigureWordReaderType();
                        currentWordReader = ActiveteInstance();
                    }
                }
            }

            return currentWordReader;
        }
示例#19
0
    private static IConditionKeyword?ReadNextKeyword(IWordReader reader, List <string> messages)
    {
        if (!reader.Read())
        {
            messages.Add(UnexpectedExpressionEnd);
            return(null);
        }

        if (reader.WordType == WordType.Invalid)
        {
            messages.Add(string.Format(InvalidToken, reader.Word));
            return(null);
        }

        return(ReadKeyword(reader, messages));
    }
示例#20
0
    private static bool ReadExpectingNotBeTheEnd(IWordReader reader, List <string> messages)
    {
        if (!reader.Read())
        {
            messages.Add(UnexpectedExpressionEnd);
            return(false);
        }

        if (reader.WordType == WordType.Invalid)
        {
            messages.Add(string.Format(InvalidToken, reader.Word));
            return(false);
        }

        return(true);
    }
示例#21
0
 public void ZarovnejVypis()
 {
     reader = fileProcessor.dalsiSoubor();
     while (true)
     {
         bool konecOdstavce = false;
         slovo = reader.vratSlovo();
         if (slovo == "\n")
         {
             konecOdstavce = true;
         }
         if (reader.konecSouboru)
         {
             PosledniSlovo(konecOdstavce);
             fileProcessor.zavriSr();
             reader = fileProcessor.dalsiSoubor();
             if (reader == null)
             {
                 vypisRadek(slovaRadku, delkaRadku, false, true);
                 return;
             }
         }
         else
         {
             if ((slovo.Length + slovaRadku.Count + delkaRadku > povolenaDelkaRadku || konecOdstavce) && slovaRadku.Count > 0)
             {
                 vypisRadek(slovaRadku, delkaRadku, konecOdstavce, false);
                 slovaRadku.Clear();
                 delkaRadku = 0;
             }
             if (!konecOdstavce)
             {
                 delkaRadku += slovo.Length;
                 slovaRadku.Add(slovo);
             }
         }
     }
 }
示例#22
0
    private static ICondition?ReadNotOperator(
        IWordReader reader,
        List <string> messages,
        IConditionKeyword left
        )
    {
        if (!ReadExpectingNotBeTheEnd(reader, messages))
        {
            return(null);
        }

        if (reader.WordType == WordType.In)
        {
            return(ReadInCondition(left, true, reader, messages));
        }

        if (reader.WordType == WordType.Between)
        {
            return(ReadBetweenCondition(left, true, reader, messages));
        }

        messages.Add(string.Format(InvalidTokenAfterNot, reader.Word));
        return(null);
    }
示例#23
0
 private static ICondition?ReadingError(IWordReader reader, List <string> messages, string message)
 {
     messages.Add(string.Format(message, reader.Word));
     return(null);
 }
示例#24
0
 public BasicWordsSelector(IWordReader reader, WordSetting wordSetting)
 {
     this.reader      = reader;
     this.wordSetting = wordSetting;
 }
示例#25
0
 public void RebuildCloudImage(ICloudBuilder builder, IWordReader reader, Size imageSize)
 {
     BuildCloudImage(builder, reader, imageSize);
 }
示例#26
0
 public TagsCreator(IWordReader wordReader, IStatisticsMaker statisticsMaker)
 {
     this.wordReader      = wordReader;
     this.statisticsMaker = statisticsMaker;
 }
示例#27
0
 public SimpleWordProvider(IWordReader reader, IWordProcessor processor)
 {
     this.reader    = reader;
     this.processor = processor;
 }
示例#28
0
    private static ICondition?ReadRoot(IWordReader reader, List <string> messages, bool allowCloseParenthesys, bool singleCondition)
    {
        if (!reader.Read())
        {
            messages.Add(UnexpectedExpressionEnd);
            return(null);
        }

        var context = new ReadRootContext(reader, messages, allowCloseParenthesys, singleCondition);

        do
        {
            switch (reader.WordType)
            {
            case WordType.Invalid:
                return(ReadingError(reader, messages, InvalidToken));

            case WordType.Variable:
            case WordType.String:
            case WordType.Number:
            case WordType.Null:
                ReadRootVariableOrConstant(context);
                break;

            case WordType.OpenParenthesys:
                ReadRootOpenParenthesys(context);
                break;

            case WordType.CloseParenthesys:
                ReadRootCloseParenthesys(context);
                break;

            case WordType.And:
                ReadRootLogicalOperator(context, (l, r) => new AndCondition(l, r));
                break;

            case WordType.Or:
                ReadRootLogicalOperator(context, (l, r) => new OrCondition(l, r));
                break;

            case WordType.Not:
                ReadRootNot(context);
                break;

            default:
                return(ReadingError(reader, messages, MisplacedKeyword));
            }

            if (context.ShouldReturnCurrent)
            {
                return(context.Current);
            }
        }while (reader.Read());

        if (context.AllowCloseParenthesys || context.Current is null)
        {
            messages.Add(UnexpectedExpressionEnd);
            return(null);
        }

        return(context.Current);
    }
示例#29
0
    private static ICondition?ReadInCondition(IConditionKeyword operand, bool negated, IWordReader reader, List <string> messages)
    {
        if (!ReadExpectingNotBeTheEnd(reader, messages))
        {
            return(null);
        }

        if (reader.WordType != WordType.OpenParenthesys)
        {
            messages.Add(string.Format(InvalidTokenAfterIn, reader.Word));
            return(null);
        }

        var values = new List <IConditionKeyword>();
        IConditionKeyword?value;

        for (; ;)
        {
            value = ReadNextKeyword(reader, messages);
            if (value is null)
            {
                return(null);
            }
            values.Add(value);

            if (!ReadExpectingNotBeTheEnd(reader, messages))
            {
                return(null);
            }

            if (reader.WordType == WordType.CloseParenthesys)
            {
                break;
            }

            if (reader.WordType != WordType.Comma)
            {
                messages.Add(string.Format(InvalidTokenAfterInValue, reader.Word));
                return(null);
            }
        }

        if (negated)
        {
            return(new NotInCondition(operand, values));
        }

        return(new InCondition(operand, values));
    }
示例#30
0
 public void SetUp()
 {
     processor = new SimpleWordProcessor();
     reader    = Substitute.For <IWordReader>();
     provider  = new SimpleWordProvider(reader, processor);
 }
示例#31
0
    private static ICondition?ReadBetweenCondition(IConditionKeyword operand, bool negated, IWordReader reader, List <string> messages)
    {
        var min = ReadNextKeyword(reader, messages);

        if (min is null)
        {
            return(null);
        }

        if (!ReadExpectingNotBeTheEnd(reader, messages))
        {
            return(null);
        }

        if (reader.WordType != WordType.And)
        {
            messages.Add(string.Format(BetweenWithoutAnd, reader.Word));
            return(null);
        }

        var max = ReadNextKeyword(reader, messages);

        if (max is null)
        {
            return(null);
        }

        if (negated)
        {
            return(new NotBetweenCondition(operand, min, max));
        }

        return(new BetweenCondition(operand, min, max));
    }
示例#32
0
 public WordsAnalyzer(IFilter filter, IWordReader wordReader)
 {
     this.filter     = filter;
     this.wordReader = wordReader;
 }
示例#33
0
 public WordPreprocessor(IWordReader reader, IPreprocessingRule[] rules)
 {
     this.reader = reader;
     this.rules  = rules;
 }