Exemplo n.º 1
0
        /// <inheritdoc />
        public override void Visit(DOM.Parameter parameter)
        {
            var aliasContext = GetAliasContextForParameter((Parameter)parameter);

            if (aliasContext == null)
            {
                return;
            }
            var oldModuleMember = CurrentModuleMember;

            CurrentModuleMember = aliasContext.Alias.AliasDefinition;
            if (parameter.Name == "_") //Default parameter. Value is passed in the body of the alias
            {
                Visit(aliasContext.Alias.Entities.Where(e => !(e is Attribute) && !(e is DOM.Comment)));
                CurrentModuleMember = oldModuleMember;
                return;
            }

            var argument = aliasContext.Alias.Arguments.FirstOrDefault(a => a.Name == parameter.Name);

            if (argument != null)
            {
                CurrentModuleMember = aliasContext.ModuleMember;
            }

            Visit(argument?.Entities.Where(e => !(e is DOM.Attribute)) ??
                  parameter.Entities.Where(e => !(e is DOM.Attribute)));
            CurrentModuleMember = oldModuleMember;
        }
Exemplo n.º 2
0
        public override void OnDocument(DOM.Document document)
        {
            _currentDocument     = (Document)document;
            _currentModuleMember = document;
            _choiceStack.Push(_currentDocument.ChoiceInfo);
            Encoding encoding = Encoding.UTF8;

            if (_generateComments)
            {
                encoding = GetEncoding(document);
            }
            //Generate XML file
            using (_xmlTextWriter = _writerDelegate(document.Name, encoding))
            {
                WriteStartDocument(document);
                _rootElementAdded = false;
                LocationMap       = new List <LexicalInfo>();
                base.OnDocument(document);
                _xmlTextWriter.WriteEndDocument();
            }

            //Validate XML file
            var validator = new SourceMappedXmlValidator(LocationMap, Context.Parameters.XmlSchemaSet, _readerDelegate);

            validator.ValidationErrorEvent += error => Context.Errors.Add(error);

            //var fileName = Path.Combine(_context.Parameters.OutputDirectory, node.Name + ".xml");
            validator.ValidateGeneratedFile(document.Name);

            _currentDocument     = null;
            _currentModuleMember = null;
        }
Exemplo n.º 3
0
 private void WriteGlobalBlock(ModuleMember module)
 {
     if (module.GloalBlock != null)
     {
         JavaScriptStatementWriter.WriteStatementLine(_code, module.GloalBlock);
     }
 }
Exemplo n.º 4
0
 private void WriteImports(ModuleMember module)
 {
     foreach (var import in module.Imports)
     {
         JavaScriptImportWriter.WriteImport(_code, import);
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Resolves literal value of <see cref="Alias"/>.
        /// </summary>
        /// <param name="alias">Instance of <see cref="Alias"/>.</param>
        /// <param name="valueType">Value type of the resolved literal.</param>
        /// <returns>String representing literal value of the <see cref="Alias"/>.</returns>
        protected string ResolveValueAlias(Alias alias, out ValueType valueType)
        {
            var aliasDef = alias.AliasDefinition;

            AliasContext.Push(new AliasContextInfo(alias, CurrentModuleMember));
            CurrentModuleMember = aliasDef;

            string result;

            if (aliasDef.ValueType == ValueType.LiteralChoice)
            {
                result = ResolveChoiceValue(alias, out valueType);
            }
            else
            {
                result = aliasDef.PairValue == null
                    ? ResolveValue(aliasDef, out valueType)
                    : ResolvePairValue(aliasDef.PairValue, out valueType);
            }


            CurrentModuleMember = AliasContext.Pop().ModuleMember;

            return(result);
        }
Exemplo n.º 6
0
        public void FROM(ModuleMember module)
        {
            Directive.From = new ImportDirective.ModuleSpecifier {
                Module = module
            };

            FlushImportDirective();
        }
Exemplo n.º 7
0
        public void MODULE(ModuleMember module)
        {
            Directive.What = new ImportDirective.ModuleSpecifier {
                Module = module
            };

            FlushImportDirective();
        }
Exemplo n.º 8
0
 private void WriteMembers(ModuleMember module)
 {
     foreach (var member in module.Members)
     {
         _code.WriteLine();
         JavaScriptMemberWriter.WriteMember(_code, member);
     }
 }
Exemplo n.º 9
0
        private NsInfo ResolveAliasesInAliasDefinition(DOM.AliasDefinition aliasDef)
        {
            _currentModuleMember = aliasDef;
            var aliasDefNsInfo = CurrentModuleMemberNsInfo;

            if (aliasDefNsInfo.AliasesResolved)
            {
                return(aliasDefNsInfo);
            }

            return(ResolveAliasesInAliasDefinition(aliasDefNsInfo));
        }
Exemplo n.º 10
0
        /// <inheritdoc />
        public override void Visit(DOM.Alias alias)
        {
            var aliasDef = ((Alias)alias).AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }
            AliasContext.Push(new AliasContextInfo((Alias)alias, CurrentModuleMember));
            CurrentModuleMember = aliasDef;
            Visit(aliasDef.Entities.Where(e => !(e is Attribute)));
            CurrentModuleMember = AliasContext.Pop().ModuleMember;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Resolves attributes in <see cref="Alias"/>. Elements are ignored.
        /// </summary>
        /// <param name="alias">Instance of <see cref="Alias"/>.</param>
        protected void ResolveAttributesInAlias(Alias alias)
        {
            var aliasDef = alias.AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }

            AliasContext.Push(new AliasContextInfo(alias, CurrentModuleMember));
            CurrentModuleMember = aliasDef;
            ResolveAttributes(aliasDef.Entities);
            CurrentModuleMember = AliasContext.Pop().ModuleMember;
        }
Exemplo n.º 12
0
        /// <summary>
        /// Resolves namespace and prefix for <see cref="INsNode"/>.
        /// </summary>
        /// <param name="node">Target <see cref="INsNode"/>.</param>
        /// <param name="document">Current <see cref="Document"/>.</param>
        /// <param name="currentModuleMember">Current module member.</param>
        /// <param name="scope">Current <see cref="Scope"/>.</param>
        /// <param name="prefix">Output namespace prefix parameter.</param>
        /// <param name="ns">Output namespace parameter.</param>
        public void GetPrefixAndNs(INsNode node, DOM.Document document, ModuleMember currentModuleMember, Scope scope, out string prefix,
                                   out string ns)
        {
            prefix = null;
            ns     = null;

            var nsPrefix = node.NsPrefix;

            if (nsPrefix == null)
            {
                if (scope == null)
                {
                    return;
                }
                nsPrefix = scope.NsPrefix;
            }
            GetPrefixAndNs(nsPrefix, node, document, currentModuleMember, out prefix, out ns);
        }
Exemplo n.º 13
0
        public override void OnAlias(Alias alias)
        {
            var aliasDef = ((DOM.Mapped.Alias)alias).AliasDefinition;
            var prevCurrentModuleMember = _currentModuleMember;

            _currentModuleMember = aliasDef;
            if (aliasDef.IsValueNode)
            {
                ValueType valueType;
                OnValue(ResolveValueAlias((DOM.Mapped.Alias)alias, out valueType), valueType);
            }
            AliasContext.Push(new AliasContext()
            {
                AliasDefinition = aliasDef, Alias = (DOM.Mapped.Alias)alias, AliasNsInfo = GetContextNsInfo()
            });
            if (!EnterChoiceContainer((DOM.Mapped.Alias)alias, aliasDef.Entities, aliasDef))
            {
                Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
            }
            AliasContext.Pop();
            _currentModuleMember = prevCurrentModuleMember;
        }
Exemplo n.º 14
0
        public void WriteModule(ModuleMember module, bool privateScope = false)
        {
            _code = new CodeTextBuilder(_output.TextOptions);

            WriteImports(module);

            if (privateScope)
            {
                _code.WriteLine("(function() {");
                _code.Indent(1);
            }

            WriteMembers(module);
            WriteGlobalBlock(module);

            if (privateScope)
            {
                _code.Indent(-1);
                _code.WriteLine("}());");
            }

            _output.AddSourceFile(module.FolderPath, $"{module.Name.ToString(CasingStyle.Kebab)}.js", _code.ToString());
        }
Exemplo n.º 15
0
        public static ModuleMember MODULE(string[] folderPath, IdentifierName name, Action body)
        {
            var context = GetContextOrThrow();
            var module  = new ModuleMember()
            {
                FolderPath = folderPath ?? new string[0],
                Name       = name,
                Status     = MemberStatus.Incomplete,
                Visibility = MemberVisibility.Public,
                GloalBlock = new BlockStatement()
            };

            using (context.PushState(module))
            {
                using (context.PushState(new BlockContext(module.GloalBlock)))
                {
                    body?.Invoke();
                }
            }

            module.Status = MemberStatus.Generator;
            return(module);
        }
Exemplo n.º 16
0
 public void EnterAliasDef(DOM.Antlr.AliasDefinition node)
 {
     _currentModuleMember       = node;
     _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember);
     ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo);
 }
Exemplo n.º 17
0
 /// <summary>
 /// Sets current <see cref="Module"/>.
 /// Method should be called from the visitor.
 /// </summary>
 /// <param name="module">Current <see cref="Module"/>.</param>
 public void EnterModule(DOM.Module module)
 {
     _currentModule       = module;
     _currentModuleMember = null;
 }
Exemplo n.º 18
0
 /// <summary>
 /// Sets current <see cref="ModuleMember"/>.
 /// Method should be called from the visitor.
 /// </summary>
 /// <param name="aliasDefinition">Current <see cref="AliasDefinition"/>.</param>
 public void EnterAliasDef(AliasDefinition aliasDefinition)
 {
     _currentModuleMember       = aliasDefinition;
     _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember);
     ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo);
 }
Exemplo n.º 19
0
 /// <summary>
 /// Sets current <see cref="ModuleMember"/>.
 /// Method should be called from the visitor.
 /// </summary>
 /// <param name="document">Current <see cref="Document"/>.</param>
 public void EnterDocument(Document document)
 {
     _currentModuleMember       = document;
     _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember);
     ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo);
 }
Exemplo n.º 20
0
 public NsInfo GetNsInfo(ModuleMember document)
 {
     return(ModuleMembersNsInfo.FirstOrDefault(n => n.ModuleMember == document));
 }
Exemplo n.º 21
0
 /// <summary>
 /// Finds <see cref="NsInfo"/> related to the <see cref="ModuleMember"/>.
 /// </summary>
 /// <param name="moduleMember">Target <see cref="ModuleMember"/>.</param>
 /// <returns>Instance of <see cref="NsInfo"/>.</returns>
 public NsInfo GetNsInfo(ModuleMember moduleMember)
 {
     return(ModuleMembersNsInfo.FirstOrDefault(n => n.ModuleMember == moduleMember));
 }
Exemplo n.º 22
0
 /// <summary>
 /// Creates instance of the class.
 /// </summary>
 /// <param name="alias">Current alias.</param>
 /// <param name="currentModuleMember">Current module member.</param>
 public AliasContextInfo(Alias alias, ModuleMember currentModuleMember)
 {
     Alias        = alias;
     ModuleMember = currentModuleMember;
 }
Exemplo n.º 23
0
        /// <summary>
        /// Resolves namespace and prefix for <see cref="INsNode"/>.
        /// </summary>
        /// <param name="nsPrefix">Effective namespace prefix of the node. Could be different than the actual prefix.</param>
        /// <param name="node">Target <see cref="INsNode"/>.</param>
        /// <param name="document">Current <see cref="Document"/>.</param>
        /// <param name="currentModuleMember"></param>
        /// <param name="prefix">Output namespace prefix parameter.</param>
        /// <param name="ns">Output namespace parameter.</param>
        public void GetPrefixAndNs(string nsPrefix, INsNode node, DOM.Document document, ModuleMember currentModuleMember, out string prefix,
                                   out string ns)
        {
            prefix = null;
            ns     = null;

            //Getting namespace info for the generated document.
            var targetNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == document);
            var moduleMember = currentModuleMember;// GetModuleMember((Pair)node); _

            if (moduleMember is ModuleMember member)
            {
                //Resolving namespace first using aliasDef context NsInfo
                var contextNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == moduleMember);
                var domNamespace  = contextNsInfo.Namespaces.FirstOrDefault(n => n.Name == nsPrefix);

                if (domNamespace == null)
                {
                    //Prefix was defined in the module. Looking up in the module.
                    var moduleNamespace = member.Module.NamespaceDefinitions.FirstOrDefault(n => n.Name == nsPrefix);
                    if (moduleNamespace != null)
                    {
                        ns = moduleNamespace.Value;
                    }
                }
                else
                {
                    ns = domNamespace.Value;
                }
                //Resolving prefix using Document's NsInfo
                if (ns != null)
                {
                    var ns1 = ns;
                    prefix = targetNsInfo.Namespaces.First(n => n.Value == ns1).Name;
                }
            }
        }
Exemplo n.º 24
0
 public void EnterModule(Module node)
 {
     _currentModule       = node;
     _currentModuleMember = null;
 }
Exemplo n.º 25
0
 public NsInfo(ModuleMember currentDocument)
 {
     ModuleMember = currentDocument;
 }
Exemplo n.º 26
0
 /// <inheritdoc />
 public override void Visit(DOM.Module module)
 {
     CurrentModuleMember = null;
     base.Visit(module);
 }
Exemplo n.º 27
0
 /// <inheritdoc />
 public override void Visit(DOM.Document document)
 {
     CurrentModuleMember = document;
     base.Visit(document);
 }
Exemplo n.º 28
0
 public void EnterDocument(DOM.Antlr.Document node)
 {
     _currentModuleMember       = node;
     _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember);
     ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo);
 }