예제 #1
0
파일: Expr.cs 프로젝트: while-true/gettext
 public abstract long Execute(ExpressionState state);
예제 #2
0
        private void ParsePluralFormsHeader()
        {
            string pluralForms;
            if (!Headers.TryGetValue(PluralFormsHeaderKey, out pluralForms)) return;

            Script script = null;
            try
            {
                var scanner = new ExpressionEvaluator.Scanner();
                scanner.SetSource(pluralForms, 0);
                var parser = new ExpressionEvaluator.Parser(scanner);

                parser.Parse();

                script = parser.Script;
            } catch (Exception e)
            {
                throw new GettextException("Error parsing the plural forms header", e);
            }

            if (script == null) return;

            var assignmentNplurals = script.Assignments.SingleOrDefault(x => x.Var == "nplurals");
            var assignmentN = script.Assignments.SingleOrDefault(x => x.Var == "plural");
            if (assignmentNplurals == null || assignmentN == null) return;

            {
                var state = new ExpressionState();
                assignmentNplurals.Execute(state);
                NPlurals = (int) state.GetVar("nplurals");
            }

            {
                PluralExpression = assignmentN;

                GetPluralIndex = n =>
                                     {
                                         var state = new ExpressionState();
                                         state.SetVar("nplurals", NPlurals);
                                         state.SetVar("n", n);
                                         assignmentN.Execute(state);
                                         return (int) state.GetVar("plural");
                                     };
            }
        }
예제 #3
0
파일: Expr.cs 프로젝트: while-true/gettext
        public long Execute(ExpressionState state)
        {
            foreach (var assignment in Assignments)
            {
                assignment.Execute(state);
            }

            return 0;
        }
예제 #4
0
파일: Expr.cs 프로젝트: while-true/gettext
 public long Execute(ExpressionState state)
 {
     var execute = Expr.Execute(state);
     state.SetVar(Var, execute);
     return execute;
 }
예제 #5
0
파일: Expr.cs 프로젝트: while-true/gettext
 public override long Execute(ExpressionState state)
 {
     return state.GetVar(id);
 }
예제 #6
0
파일: Expr.cs 프로젝트: while-true/gettext
 public override long Execute(ExpressionState state)
 {
     return num;
 }
예제 #7
0
파일: Expr.cs 프로젝트: while-true/gettext
 public override long Execute(ExpressionState state)
 {
     return expr.Execute(state);
 }
예제 #8
0
파일: Expr.cs 프로젝트: while-true/gettext
 public override long Execute(ExpressionState state)
 {
     switch (op)
     {
         case OpEnum.Equals:
             return (left.Execute(state) == right.Execute(state)) ? 1 : 0;
         case OpEnum.NotEquals:
             return (left.Execute(state) != right.Execute(state)) ? 1 : 0;
             break;
         case OpEnum.And:
             return ((left.Execute(state) == 1) && (right.Execute(state) == 1)) ? 1 : 0;
             break;
         case OpEnum.Minus:
             return left.Execute(state) - right.Execute(state);
             break;
         case OpEnum.Modulo:
             return left.Execute(state) % right.Execute(state);
             break;
         case OpEnum.Or:
             return ((left.Execute(state) == 1) || (right.Execute(state) == 1)) ? 1 : 0;
             break;
         case OpEnum.LessThan:
             return (left.Execute(state) < right.Execute(state)) ? 1 : 0;
             break;
         case OpEnum.GreaterThan:
             return (left.Execute(state) > right.Execute(state)) ? 1 : 0;
             break;
         case OpEnum.LessThanOrEquals:
             return (left.Execute(state) <= right.Execute(state)) ? 1 : 0;
             break;
         case OpEnum.GreaterThanOrEquals:
             return (left.Execute(state) >= right.Execute(state)) ? 1 : 0;
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
예제 #9
0
파일: Expr.cs 프로젝트: while-true/gettext
 public override long Execute(ExpressionState state)
 {
     return (condition.Execute(state) == 1) ? statement1.Execute(state) : statement2.Execute(state);
 }