pluralexpr.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 135 行

JAVA
135
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * *   Free Software Foundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Nam Nguyen */package com.caucho.quercus.lib.gettext.expr;import com.caucho.quercus.env.StringValue;/** * Represents a gettext plural expression. */public class PluralExpr{  private PluralExprParser _parser;  private Expr _npluralsExpr;  private Expr _pluralExpr;  private PluralExpr(CharSequence expr)  {    _parser = new PluralExprParser(expr);  }  private void init()  {    if (_parser != null) {      _npluralsExpr = _parser.getNpluralsExpr();      _pluralExpr = _parser.getPluralExpr();      _parser = null;    }  }  /**   * Returns a PluralExpr from the metadata.   *   * @param metadata contains the plural expression   * @return PluralExpr   */  public static PluralExpr getPluralExpr(StringValue metaData)  {    String pluralForms = "Plural-Forms:";    int i = metaData.indexOf(pluralForms);    if (i < 0)      return new PluralExpr("nplurals=2; plural=n!=1");    i += pluralForms.length();    int j = metaData.indexOf('\n', i);    if (j < 0)      return new PluralExpr(metaData.substring(i));    else      return new PluralExpr(metaData.substring(i, j));  }  /**   * Returns evaluated plural expression   *   * @param expr   * @param quantity number of items   */  public static int eval(CharSequence expr, int quantity)  {    return new PluralExpr(expr).eval(quantity);  }  /**   * Evaluates this plural expression.   */  public int eval(int quantity)  {    init();    return validate(quantity);  }  /**   * Returns a valid plural form index.   */  private int validate(int quantity)  {    int pluralForm;    int numOfPlurals;    if (_pluralExpr == null)      pluralForm = -1;    else      pluralForm = _pluralExpr.eval(quantity);    if (_npluralsExpr == null)      numOfPlurals = -1;    else      numOfPlurals = _npluralsExpr.eval(quantity);    if (numOfPlurals < 1 || pluralForm < 0)    {      if (quantity == 1)        return 0;      else        return 1;    }    // pluralForm is a 0-based index    if (pluralForm >= numOfPlurals)      return 0;    return pluralForm;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?