/// <summary>
        /// Formats the specified begin token.
        /// </summary>
        /// <param name="beginToken">The begin token.</param>
        /// <returns>The token in serialized form.</returns>
        protected override string Format(BeginToken beginToken)
        {
            var dict = new Dictionary <string, string> {
                { "name", beginToken.Name },
                { "id", beginToken.Id.ToString() }
            };

            return(CreateNodeStart(typeCache[beginToken.TypeId], dict));
        }
示例#2
0
        /// <summary>
        /// Formats the specified begin token.
        /// </summary>
        /// <param name="beginToken">The begin token.</param>
        /// <returns>The token in serialized form.</returns>
        protected override string Format(BeginToken beginToken)
        {
            var dict = new Dictionary <string, string> {
                { "name", beginToken.Name },
                { "typeId", beginToken.TypeId.ToString() },
                { "id", beginToken.Id.ToString() }
            };

            AddTypeInfo(beginToken.TypeId, dict);
            return(CreateNodeStart(XmlStringConstants.COMPOSITE, dict));
        }
示例#3
0
 public override bool IsValue(string term, string term2 = null)
 {
     if (BeginToken != null)
     {
         return(BeginToken.IsValue(term, term2));
     }
     else
     {
         return(false);
     }
 }
示例#4
0
        private void CompositeStartHandler(BeginToken token)
        {
            InstantiateParent();
            Type type = typeIds[(int)token.TypeId];

            try {
                parentStack.Push(new Midwife(type, (ICompositeSerializer)serializerMapping[type], token.Id));
            } catch (Exception e) {
                if (e is InvalidCastException || e is KeyNotFoundException)
                {
                    throw new PersistenceException(String.Format(
                                                       "Invalid composite serializer configuration for type \"{0}\".",
                                                       type.AssemblyQualifiedName), e);
                }
                else
                {
                    throw new PersistenceException(String.Format(
                                                       "Unexpected exception while trying to compose object of type \"{0}\".",
                                                       type.AssemblyQualifiedName), e);
                }
            }
        }
        /// <summary>
        /// Formats the specified begin token.
        /// </summary>
        /// <param name="beginToken">The begin token.</param>
        /// <returns>The token in serialized form.</returns>
        protected override string Format(BeginToken beginToken)
        {
            StringBuilder sb = new StringBuilder();

            if (isSepReq)
            {
                sb.Append(", ");
            }
            if (!string.IsNullOrEmpty(beginToken.Name))
            {
                sb.Append(beginToken.Name);
                if (beginToken.Id != null && showRefs)
                {
                    sb.Append('[');
                    sb.Append(beginToken.Id);
                    sb.Append(']');
                }
            }
            sb.Append("(");
            isSepReq = false;
            return(sb.ToString());
        }
示例#6
0
 public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false)
 {
     Pullenti.Ner.Core.GetTextAttr attr = Pullenti.Ner.Core.GetTextAttr.No;
     if (num == Pullenti.Morph.MorphNumber.Singular)
     {
         attr |= Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominativeSingle;
     }
     else
     {
         attr |= Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominative;
     }
     if (keepChars)
     {
         attr |= Pullenti.Ner.Core.GetTextAttr.KeepRegister;
     }
     if (BeginToken == EndToken)
     {
         return(BeginToken.GetNormalCaseText(mc, num, gender, keepChars));
     }
     else
     {
         return(Pullenti.Ner.Core.MiscHelper.GetTextValue(BeginToken, EndToken, attr));
     }
 }
示例#7
0
 /// <summary>
 /// Formats the specified begin token.
 /// </summary>
 /// <param name="beginToken">The begin token.</param>
 /// <returns>The token in serialized form.</returns>
 protected abstract T Format(BeginToken beginToken);
示例#8
0
        public Token GetToken()
        {
            State = LexicAnalyserState.Initial;
            Value = HasNext ? Character.ToString() : "";
            Token token = null;

            while (HasNext && token == null)
            {
                switch (State)
                {
                case LexicAnalyserState.Initial:
                    HandleInitial();
                    break;

                case LexicAnalyserState.NonTerminal:
                    token = new NonTerminalToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Space:
                    token = new SpaceToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Terminal:
                    token = new TerminalToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Empty:
                    token = new EmptyToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.NewLine:
                    token = new NewLineToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Identifier:
                    token = new IdentifierToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Number:
                    token = new NumberToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Var:
                    token = new VarToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Write:
                    token = new WriteToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Read:
                    token = new ReadToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.If:
                    token = new IfToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.End:
                    token = new EndToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Then:
                    token = new ThenToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Begin:
                    token = new BeginToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.While:
                    token = new WhileToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Do:
                    token = new DoToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.SemiColon:
                    token = new SemiColonToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.OpenParentheses:
                    token = new OpenParenthesesToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.CloseParentheses:
                    token = new CloseParenthesesToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Plus:
                    token = new PlusToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Sub:
                    token = new SubToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Great:
                    token = new GreatToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Less:
                    token = new LessToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Equal:
                    token = new EqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Repeat:
                    token = new RepeatToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Until:
                    token = new UntilToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Attribution:
                    token = new AttributionToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.NotEqual:
                    token = new NotEqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.GreatOrEqual:
                    token = new GreatOrEqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.LessOrEqual:
                    token = new LessOrEqualToken();
                    CurrentIndex++;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(token);
        }
示例#9
0
        public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false)
        {
            if ((BeginToken is Pullenti.Ner.ReferentToken) && BeginToken == EndToken)
            {
                return(BeginToken.GetNormalCaseText(mc, num, gender, keepChars));
            }
            string res     = null;
            int    maxCoef = 0;
            int    defCoef = -1;

            foreach (Pullenti.Morph.MorphBaseInfo it in Morph.Items)
            {
                NounPhraseItemTextVar v = it as NounPhraseItemTextVar;
                if (v == null)
                {
                    continue;
                }
                if (v.UndefCoef > 0 && (((v.UndefCoef < maxCoef) || defCoef >= 0)))
                {
                    continue;
                }
                if (num == Pullenti.Morph.MorphNumber.Singular && v.SingleNumberValue != null)
                {
                    if (mc != null && ((gender == Pullenti.Morph.MorphGender.Neuter || gender == Pullenti.Morph.MorphGender.Feminie)) && mc.IsAdjective)
                    {
                        Pullenti.Morph.MorphBaseInfo bi = new Pullenti.Morph.MorphBaseInfo()
                        {
                            Class = new Pullenti.Morph.MorphClass()
                            {
                                Value = mc.Value
                            }, Gender = gender, Number = Pullenti.Morph.MorphNumber.Singular, Case = Pullenti.Morph.MorphCase.Nominative, Language = Morph.Language
                        };
                        string str = Pullenti.Morph.MorphologyService.GetWordform(v.SingleNumberValue, bi);
                        if (str != null)
                        {
                            res = str;
                        }
                    }
                    else
                    {
                        res = v.SingleNumberValue;
                    }
                    if (v.UndefCoef == 0)
                    {
                        break;
                    }
                    maxCoef = v.UndefCoef;
                    continue;
                }
                if (string.IsNullOrEmpty(v.NormalValue))
                {
                    continue;
                }
                if (char.IsDigit(v.NormalValue[0]) && mc != null && mc.IsAdjective)
                {
                    int val;
                    if (int.TryParse(v.NormalValue, out val))
                    {
                        string str = Pullenti.Ner.Core.NumberHelper.GetNumberAdjective(val, gender, (num == Pullenti.Morph.MorphNumber.Singular || val == 1 ? Pullenti.Morph.MorphNumber.Singular : Pullenti.Morph.MorphNumber.Plural));
                        if (str != null)
                        {
                            res = str;
                            if (v.UndefCoef == 0)
                            {
                                break;
                            }
                            maxCoef = v.UndefCoef;
                            continue;
                        }
                    }
                }
                string res1 = (it as NounPhraseItemTextVar).NormalValue;
                if (num == Pullenti.Morph.MorphNumber.Singular)
                {
                    if (res1 == "ДЕТИ")
                    {
                        res1 = "РЕБЕНОК";
                    }
                    else if (res1 == "ЛЮДИ")
                    {
                        res1 = "ЧЕЛОВЕК";
                    }
                }
                maxCoef = v.UndefCoef;
                if (v.UndefCoef > 0)
                {
                    res = res1;
                    continue;
                }
                int defCo = 0;
                if (mc != null && mc.IsAdjective && v.UndefCoef == 0)
                {
                }
                else if (((BeginToken is Pullenti.Ner.TextToken) && res1 == (BeginToken as Pullenti.Ner.TextToken).Term && it.Case.IsNominative) && it.Number == Pullenti.Morph.MorphNumber.Singular)
                {
                    defCo = 1;
                }
                if (num == Pullenti.Morph.MorphNumber.Plural && ((v.Number & Pullenti.Morph.MorphNumber.Plural)) == Pullenti.Morph.MorphNumber.Plural)
                {
                    defCo += 3;
                }
                if (res == null || defCo > defCoef)
                {
                    res     = res1;
                    defCoef = defCo;
                    if (defCo > 0)
                    {
                        break;
                    }
                }
            }
            if (res != null)
            {
                return(this._corrChars(res, keepChars));
            }
            if (res == null && BeginToken == EndToken)
            {
                res = BeginToken.GetNormalCaseText(mc, num, gender, keepChars);
            }
            else if (res == null)
            {
                res = BeginToken.GetNormalCaseText(mc, num, gender, keepChars);
                if (res == null)
                {
                    res = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(this, (keepChars ? Pullenti.Ner.Core.GetTextAttr.KeepRegister : Pullenti.Ner.Core.GetTextAttr.No));
                }
                else
                {
                    res = string.Format("{0} {1}", res, Pullenti.Ner.Core.MiscHelper.GetTextValue(BeginToken.Next, EndToken, (keepChars ? Pullenti.Ner.Core.GetTextAttr.KeepRegister : Pullenti.Ner.Core.GetTextAttr.No)));
                }
            }
            return(res ?? "?");
        }
示例#10
0
 public override bool IsValue(string term, string termUA = null)
 {
     return(BeginToken.IsValue(term, termUA));
 }