public void ThreeFormsEvalTest()
        {
            string expr = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)";
            PluralFormsCalculator pfc = PluralFormsCalculator.Make(expr);

            Assert.IsNotNull(pfc, "Parse failed");
            Assert.AreEqual(3, pfc.NPlurals, "Plurals count");

            //pfc.DumpNodes("./EvalNodes.txt");

            Assert.AreEqual(0, pfc.Evaluate(1 /*, true*/), "Case 1");
            Assert.AreEqual(1, pfc.Evaluate(3), "Case 2");
            Assert.AreEqual(2, pfc.Evaluate(7), "Case 3");
            Assert.AreEqual(2, pfc.Evaluate(11), "Case 4");
        }
        public void CatalogParseTest()
        {
            Catalog cat = new Catalog();

            cat.Load("./Data/Test01.po");

            PluralFormsCalculator pfc = PluralFormsCalculator.Make(cat.GetPluralFormsHeader());

            Assert.IsNotNull(pfc, "Parse failed");
            Assert.AreEqual(3, pfc.NPlurals, "Plurals count");

            Assert.AreEqual(0, pfc.Evaluate(1), "Case 1");
            Assert.AreEqual(1, pfc.Evaluate(3), "Case 2");
            Assert.AreEqual(2, pfc.Evaluate(7), "Case 3");
        }
        public void TwoFormsEvalTest()
        {
            string expr = "nplurals=2; plural=(n != 1)";

            Assert.IsNotNull(PluralFormsCalculator.Make(expr + "\\n"));
            Assert.IsNotNull(PluralFormsCalculator.Make(expr + "\n"));
            Assert.IsNotNull(PluralFormsCalculator.Make(expr + ";"));

            PluralFormsCalculator pfc = PluralFormsCalculator.Make(expr);

            Assert.IsNotNull(pfc, "Parse failed");
            Assert.AreEqual(2, pfc.NPlurals, "Plurals count");

            Assert.AreEqual(1, pfc.Evaluate(0), "Case 1");
            Assert.AreEqual(0, pfc.Evaluate(1), "Case 2");
            Assert.AreEqual(1, pfc.Evaluate(5), "Case 3");
            Assert.AreEqual(1, pfc.Evaluate(23), "Case 4");
        }
		void OnHeaderChanged (object sender, System.EventArgs e)
		{
			if (inUpdate)
				return;
			headers.CommentForGui = textviewComments.Buffer.Text;
			headers.Project = (entryProjectName.Text + ' ' + entryProjectVersion.Text).Trim ();
			headers.SetHeader ("Report-Msgid-Bugs-To", entryBugzilla.Text);
			headers.Translator = entryTranslatorName.Text;
			headers.TranslatorEmail = entryTranslatorEmail.Text;
			headers.Team = entryLanguageGroupName.Text;
			headers.TeamEmail = entryLanguageGroupEmail.Text;
			
			if (!String.IsNullOrEmpty (entryPluralsForms.Text)) {
				PluralFormsCalculator calc = new PluralFormsCalculator ();
				PluralFormsScanner scanner = new PluralFormsScanner (entryPluralsForms.Text);
				PluralFormsParser parser = new PluralFormsParser (scanner);
				bool wellFormed = parser.Parse (calc);
				
				if (wellFormed) {
					for (int i = 0; i < headers.PluralFormsCount; i++) {
						int example = 0;
						for (example = 1; example < 1000; example++) {
							if (calc.Evaluate (example) == i)
								break;
						}
						
						if (example == 1000 && calc.Evaluate (0) == i)
							example = 0;
						
						if (i > 0 && (example == 0 || example == 1000)) {
							wellFormed = false;
							break;
						}
					}
				}
			
				Gdk.Color background = wellFormed ? new Gdk.Color (138, 226,52) : new Gdk.Color (204, 0, 0);
				entryPluralsForms.ModifyBase (StateType.Normal, background); //from tango palete - 8ae234 green, cc0000 red
				if (wellFormed) {
					headers.SetHeaderNotEmpty ("Plural-Forms", entryPluralsForms.Text);
					OnPluralDefinitionChanged ();
				}
			} else {
				entryPluralsForms.ModifyBase (StateType.Normal);
				headers.SetHeaderNotEmpty ("Plural-Forms", entryPluralsForms.Text);
				OnPluralDefinitionChanged ();
			}
			headers.UpdateHeaderDict ();
			headers.IsDirty = true;
		}
Пример #5
0
        void OnHeaderChanged(object sender, System.EventArgs e)
        {
            if (inUpdate)
            {
                return;
            }
            headers.CommentForGui = textviewComments.Buffer.Text;
            headers.Project       = (entryProjectName.Text + ' ' + entryProjectVersion.Text).Trim();
            headers.SetHeader("Report-Msgid-Bugs-To", entryBugzilla.Text);
            headers.Translator      = entryTranslatorName.Text;
            headers.TranslatorEmail = entryTranslatorEmail.Text;
            headers.Team            = entryLanguageGroupName.Text;
            headers.TeamEmail       = entryLanguageGroupEmail.Text;

            if (!String.IsNullOrEmpty(entryPluralsForms.Text))
            {
                PluralFormsCalculator calc    = new PluralFormsCalculator();
                PluralFormsScanner    scanner = new PluralFormsScanner(entryPluralsForms.Text);
                PluralFormsParser     parser  = new PluralFormsParser(scanner);
                bool wellFormed = parser.Parse(calc);

                if (wellFormed)
                {
                    for (int i = 0; i < headers.PluralFormsCount; i++)
                    {
                        int example = 0;
                        for (example = 1; example < 1000; example++)
                        {
                            if (calc.Evaluate(example) == i)
                            {
                                break;
                            }
                        }

                        if (example == 1000 && calc.Evaluate(0) == i)
                        {
                            example = 0;
                        }

                        if (i > 0 && (example == 0 || example == 1000))
                        {
                            wellFormed = false;
                            break;
                        }
                    }
                }

                Gdk.Color background = wellFormed ? new Gdk.Color(138, 226, 52) : new Gdk.Color(204, 0, 0);
                entryPluralsForms.ModifyBase(StateType.Normal, background);                  //from tango palete - 8ae234 green, cc0000 red
                if (wellFormed)
                {
                    headers.SetHeaderNotEmpty("Plural-Forms", entryPluralsForms.Text);
                    OnPluralDefinitionChanged();
                }
            }
            else
            {
                entryPluralsForms.ModifyBase(StateType.Normal);
                headers.SetHeaderNotEmpty("Plural-Forms", entryPluralsForms.Text);
                OnPluralDefinitionChanged();
            }
            headers.UpdateHeaderDict();
            headers.IsDirty = true;
        }