Exemplo n.º 1
0
        private void GenerateLookupForLocaleImpl(
            Dictionary <string, NamespaceReferenceTemplate> lookup,
            Locale locale,
            NamespaceTreeNode node,
            string namespaceBuilder)
        {
            string    localizedName  = null;
            Namespace representative = null;

            foreach (Namespace ns in node.OriginalDefinitions)
            {
                if (ns.NamesByLocale.ContainsKey(locale))
                {
                    string newLocalizedName = ns.NamesByLocale[locale][node.OffsetFromRoot - ns.NestDepth];

                    if (localizedName != null && newLocalizedName != localizedName)
                    {
                        // TODO: this error message is not very helpful
                        // https://github.com/blakeohare/crayon/issues/304
                        throw new ParserException(ns, "This namespace definition has a different localized name somewhere else.");
                    }
                    localizedName  = newLocalizedName;
                    representative = ns;
                }
            }

            if (node.LeafName != "*")
            {
                if (localizedName == null)
                {
                    localizedName = node.LeafName;
                }
                namespaceBuilder = namespaceBuilder == null ? localizedName : (namespaceBuilder + "." + localizedName);
            }

            if (namespaceBuilder != null)
            {
                lookup[namespaceBuilder] = new NamespaceReferenceTemplate()
                {
                    Name = namespaceBuilder,
                    OriginalNamespace = representative ?? node.OriginalDefinitions[0],
                    OriginalNamespaceDepthClipping = namespaceBuilder.Split('.').Length,
                };
            }

            foreach (NamespaceTreeNode child in node.Children.Values)
            {
                this.GenerateLookupForLocaleImpl(lookup, locale, child, namespaceBuilder);
            }
        }
Exemplo n.º 2
0
        private void GenerateLookupForLocaleImpl(
            Dictionary <string, NamespaceReferenceTemplate> lookup,
            Locale locale,
            NamespaceTreeNode node,
            string namespaceBuilder)
        {
            string    localizedName  = null;
            Namespace representative = null;

            foreach (Namespace ns in node.OriginalDefinitions)
            {
                if (ns.NamesByLocale.ContainsKey(locale))
                {
                    string newLocalizedName = ns.NamesByLocale[locale][node.OffsetFromRoot - ns.NestDepth];

                    if (localizedName != null && newLocalizedName != localizedName)
                    {
                        TODO.ThisErrorMessageIsNotVeryHelpeful();
                        throw new ParserException(ns.FirstToken, "This namespace definition has a different localized name somewhere else.");
                    }
                    localizedName  = newLocalizedName;
                    representative = ns;
                }
            }

            if (node.LeafName != "*")
            {
                if (localizedName == null)
                {
                    localizedName = node.LeafName;
                }
                namespaceBuilder = namespaceBuilder == null ? localizedName : (namespaceBuilder + "." + localizedName);
            }

            if (namespaceBuilder != null)
            {
                lookup[namespaceBuilder] = new NamespaceReferenceTemplate()
                {
                    Name = namespaceBuilder,
                    OriginalNamespace = representative ?? node.OriginalDefinitions[0],
                };
            }

            foreach (NamespaceTreeNode child in node.Children.Values)
            {
                this.GenerateLookupForLocaleImpl(lookup, locale, child, namespaceBuilder);
            }
        }