/// <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); }
/// <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); }
/// <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; }
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; }
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); }