コード例 #1
0
        /// <summary>
        /// Make the specified str.
        /// Creates evaluator object. Returns null if failed to parse.
        /// </summary>
        /// <param name='str'>
        /// Text after "Plural-Forms:" (e.g. "nplurals=2; plural=(n != 1);").
        /// </param>
        public static PluralFormsCalculator Make(string str)
        {
            if (String.IsNullOrEmpty(str))
            {
                return(null);
            }
            if (str.EndsWith("\n"))
            {
                str = str.Remove(str.Length - 1, 1);
            }
            if (str.EndsWith("\\n"))
            {
                str = str.Remove(str.Length - 2, 2);
            }
            if (!str.EndsWith(";"))
            {
                str += ";";
            }

            PluralFormsCalculator calculator = new PluralFormsCalculator(str);
            PluralFormsScanner    scanner    = new PluralFormsScanner(str);
            PluralFormsParser     p          = new PluralFormsParser(scanner);

            if (!p.Parse(calculator))
            {
                return(null);
            }
            return(calculator);
        }
コード例 #2
0
        /// <summary>
        /// Returns the index of the plural form to be chosen for a given number.
        /// The default implementation is the Englis/Germanic/French plural formula:
        /// See <see cref="DefaultPluralForms"/>
        /// </summary>
        protected virtual long PluralEval(long n)
        {
            PluralFormsCalculator pfc = PluralFormsCalculator.Make(PluralForms);

            if (pfc != null)
            {
                return(pfc.Evaluate(n));
            }
            pfc = PluralFormsCalculator.Make(DefaultPluralForms);
            if (pfc != null)
            {
                return(pfc.Evaluate(n));
            }
            return(n == 1 ? 0 : 1);
        }
コード例 #3
0
ファイル: PluralForms.cs プロジェクト: rzaitov/GetTextNet
        /// <summary>
        /// Make the specified str.
        /// Creates evaluator object. Returns null if failed to parse.
        /// </summary>
        /// <param name='str'>
        /// Text after "Plural-Forms:" (e.g. "nplurals=2; plural=(n != 1);").
        /// </param>
        public static PluralFormsCalculator Make(string str)
        {
            if (String.IsNullOrEmpty(str))
                return null;
            if (str.EndsWith("\n"))
                str = str.Remove(str.Length - 1, 1);
            if (str.EndsWith("\\n"))
                str = str.Remove(str.Length - 2, 2);
            if (!str.EndsWith(";"))
                str += ";";

            PluralFormsCalculator calculator = new PluralFormsCalculator(str);
            PluralFormsScanner scanner = new PluralFormsScanner(str);
            PluralFormsParser p = new PluralFormsParser(scanner);
            if (!p.Parse(calculator)) {
                return null;
            }
            return calculator;
        }
コード例 #4
0
ファイル: PluralForms.cs プロジェクト: rzaitov/GetTextNet
 public bool Parse(PluralFormsCalculator calculator)
 {
     if (Token.TokenType != PluralFormsToken.Type.Nplurals)
         return false;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Assign)
         return false;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Number)
         return false;
     int nplurals = Token.Number;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Semicolon)
         return false;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Plural)
         return false;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Assign)
         return false;
     if (! NextToken())
         return false;
     PluralFormsNode plural = ParsePlural();
     if (plural == null)
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Semicolon)
         return false;
     if (! NextToken())
         return false;
     if (Token.TokenType != PluralFormsToken.Type.Eof)
         return false;
     calculator.Init(nplurals, plural);
     return true;
 }
コード例 #5
0
        public bool Parse(PluralFormsCalculator calculator)
        {
            if (Token.TokenType != PluralFormsToken.Type.Nplurals)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Assign)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Number)
            {
                return(false);
            }
            int nplurals = Token.Number;

            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Semicolon)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Plural)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Assign)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            PluralFormsNode plural = ParsePlural();

            if (plural == null)
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Semicolon)
            {
                return(false);
            }
            if (!NextToken())
            {
                return(false);
            }
            if (Token.TokenType != PluralFormsToken.Type.Eof)
            {
                return(false);
            }
            calculator.Init(nplurals, plural);
            return(true);
        }