/// <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; }
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; }
private void WriteGlobalBlock(ModuleMember module) { if (module.GloalBlock != null) { JavaScriptStatementWriter.WriteStatementLine(_code, module.GloalBlock); } }
private void WriteImports(ModuleMember module) { foreach (var import in module.Imports) { JavaScriptImportWriter.WriteImport(_code, import); } }
/// <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); }
public void FROM(ModuleMember module) { Directive.From = new ImportDirective.ModuleSpecifier { Module = module }; FlushImportDirective(); }
public void MODULE(ModuleMember module) { Directive.What = new ImportDirective.ModuleSpecifier { Module = module }; FlushImportDirective(); }
private void WriteMembers(ModuleMember module) { foreach (var member in module.Members) { _code.WriteLine(); JavaScriptMemberWriter.WriteMember(_code, member); } }
private NsInfo ResolveAliasesInAliasDefinition(DOM.AliasDefinition aliasDef) { _currentModuleMember = aliasDef; var aliasDefNsInfo = CurrentModuleMemberNsInfo; if (aliasDefNsInfo.AliasesResolved) { return(aliasDefNsInfo); } return(ResolveAliasesInAliasDefinition(aliasDefNsInfo)); }
/// <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; }
/// <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; }
/// <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); }
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; }
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()); }
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); }
public void EnterAliasDef(DOM.Antlr.AliasDefinition node) { _currentModuleMember = node; _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember); ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo); }
/// <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; }
/// <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); }
/// <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); }
public NsInfo GetNsInfo(ModuleMember document) { return(ModuleMembersNsInfo.FirstOrDefault(n => n.ModuleMember == document)); }
/// <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)); }
/// <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; }
/// <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; } } }
public void EnterModule(Module node) { _currentModule = node; _currentModuleMember = null; }
public NsInfo(ModuleMember currentDocument) { ModuleMember = currentDocument; }
/// <inheritdoc /> public override void Visit(DOM.Module module) { CurrentModuleMember = null; base.Visit(module); }
/// <inheritdoc /> public override void Visit(DOM.Document document) { CurrentModuleMember = document; base.Visit(document); }
public void EnterDocument(DOM.Antlr.Document node) { _currentModuleMember = node; _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember); ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo); }