示例#1
0
        /// <summary>
        /// <p>
        /// Return a snapshot of the visible IDs for this service. This set will not
        /// change as Factories are added or removed, but the supported ids will, so
        /// there is no guarantee that all and only the ids in the returned set are
        /// visible and supported by the service in subsequent calls.
        /// </p>
        /// <p>
        /// matchID is passed to createKey to create a key. If the key is not null,
        /// it is used to filter out ids that don't have the key as a fallback.
        /// </summary>
        ///
        public ILOG.J2CsMapping.Collections.ISet GetVisibleIDs(String matchID)
        {
            ILOG.J2CsMapping.Collections.ISet result = new ILOG.J2CsMapping.Collections.ListSet(GetVisibleIDMap().Keys);

            ICUService.Key fallbackKey = CreateKey(matchID);

            if (fallbackKey != null)
            {
                ILOG.J2CsMapping.Collections.ISet temp = new HashedSet(result.Count);
                IIterator iter = new ILOG.J2CsMapping.Collections.IteratorAdapter(result.GetEnumerator());
                while (iter.HasNext())
                {
                    String id_0 = (String)iter.Next();
                    if (fallbackKey.IsFallbackOf(id_0))
                    {
                        ILOG.J2CsMapping.Collections.Generics.Collections.Add(temp, id_0);
                    }
                }
                result = temp;
            }
            return(result);
        }
示例#2
0
        public BNF Complete()
        {
            // check that the rules match the variables, except for $root in rules
            ILOG.J2CsMapping.Collections.ISet ruleSet = new ILOG.J2CsMapping.Collections.ListSet(map.Keys);
            // add also
            ILOG.J2CsMapping.Collections.Generics.Collections.Add(variables, "$root");
            ILOG.J2CsMapping.Collections.Generics.Collections.AddAll(t.GetLookedUpItems(), variables);
            if (!ruleSet.Equals(variables))
            {
                String msg = ShowDiff(variables, ruleSet);
                if (msg.Length != 0)
                {
                    msg = "Error: Missing definitions for: " + msg;
                }
                String temp = ShowDiff(ruleSet, variables);
                if (temp.Length != 0)
                {
                    temp = "Warning: Defined but not used: " + temp;
                }
                if (msg.Length == 0)
                {
                    msg = temp;
                }
                else if (temp.Length != 0)
                {
                    msg = msg + "; " + temp;
                }
                Error(msg);
            }

            if (!ruleSet.Equals(variables))
            {
                String msg_0 = ShowDiff(variables, ruleSet);
                if (msg_0.Length != 0)
                {
                    msg_0 = "Missing definitions for: " + msg_0;
                }
                String temp_1 = ShowDiff(ruleSet, variables);
                if (temp_1.Length != 0)
                {
                    temp_1 = "Defined but not used: " + temp_1;
                }
                if (msg_0.Length == 0)
                {
                    msg_0 = temp_1;
                }
                else if (temp_1.Length != 0)
                {
                    msg_0 = msg_0 + "; " + temp_1;
                }
                Error(msg_0);
            }

            // replace variables by definitions
            IIterator it = new ILOG.J2CsMapping.Collections.IteratorAdapter(ruleSet.GetEnumerator());

            while (it.HasNext())
            {
                String    key        = (String)it.Next();
                Pick      expression = (Pick)ILOG.J2CsMapping.Collections.Collections.Get(map, key);
                IIterator it2        = new ILOG.J2CsMapping.Collections.IteratorAdapter(ruleSet.GetEnumerator());
                if (false && key.Equals("$crlf"))
                {
                    System.Console.Out.WriteLine("debug");
                }
                while (it2.HasNext())
                {
                    Object key2 = it2.Next();
                    if (key.Equals(key2))
                    {
                        continue;
                    }
                    Pick expression2 = (Pick)ILOG.J2CsMapping.Collections.Collections.Get(map, key2);
                    expression2.Replace(key, expression);
                }
            }
            pick   = (Pick)ILOG.J2CsMapping.Collections.Collections.Get(map, "$root");
            target = IBM.ICU.Charset.Pick.Target.Make(pick, random, quoter);
            // TODO remove temp collections
            return(this);
        }