private void HandleTarget(BSharpBuilderWriteTarget target) { foreach (var bsClass in target.Entity.Elements()) { var bSharpClass = new XElement(BSharpBuilderDefaults.BSharpClassContainerName); var bSharpIndexSet = new XElement( BSharpBuilderDefaults.DefaultClassIndexContainerName, bSharpClass ); var writeTarget = new BSharpBuilderWriteTarget { Directory = Project.GetOutputDirectory(), Entity = bSharpIndexSet, EntityContainerName = BSharpBuilderDefaults.DefaultClassIndexContainerName, Extension = BSharpBuilderDefaults.IndexFileExtension, Filename = BSharpBuilderDefaults.IndexFileName, MergeIfExists = true }; WriteIndexAttributeIfExists(bSharpClass, bsClass,BSharpSyntax.ClassNameAttribute); WriteIndexAttributeIfExists(bSharpClass, bsClass, BSharpSyntax.ClassPrototypeAttribute); WriteIndexAttributeIfExists(bSharpClass, bsClass, BSharpSyntax.ClassRuntimeAttribute); bSharpClass.SetAttributeValue("file", target.Path.Remove(0, Project.GetOutputDirectory().Length).Replace("\\","/")); if (bsClass.Attribute(BSharpSyntax.ClassFullNameAttribute) != null) { bSharpClass.SetAttributeValue(BSharpSyntax.Namespace, BSharpBuilderClassUtils.GetNamespace(bsClass.Attribute(BSharpSyntax.ClassFullNameAttribute).Value)); } WriteManager.Add(writeTarget); } }
private void HandleTarget(BSharpBuilderWriteTarget target) { foreach (var bsClass in target.Entity.Elements()) { var bSharpClass = new XElement(BSharpBuilderDefaults.BSharpClassContainerName); var bSharpIndexSet = new XElement( BSharpBuilderDefaults.DefaultClassIndexContainerName, bSharpClass ); var writeTarget = new BSharpBuilderWriteTarget { Directory = Project.GetOutputDirectory(), Entity = bSharpIndexSet, EntityContainerName = BSharpBuilderDefaults.DefaultClassIndexContainerName, Extension = BSharpBuilderDefaults.IndexFileExtension, Filename = BSharpBuilderDefaults.IndexFileName, MergeIfExists = true }; WriteIndexAttributeIfExists(bSharpClass, bsClass, BSharpSyntax.ClassNameAttribute); WriteIndexAttributeIfExists(bSharpClass, bsClass, BSharpSyntax.ClassPrototypeAttribute); WriteIndexAttributeIfExists(bSharpClass, bsClass, BSharpSyntax.ClassRuntimeAttribute); bSharpClass.SetAttributeValue("file", target.Path.Remove(0, Project.GetOutputDirectory().Length).Replace("\\", "/")); if (bsClass.Attribute(BSharpSyntax.ClassFullNameAttribute) != null) { bSharpClass.SetAttributeValue(BSharpSyntax.Namespace, BSharpBuilderClassUtils.GetNamespace(bsClass.Attribute(BSharpSyntax.ClassFullNameAttribute).Value)); } WriteManager.Add(writeTarget); } }
/// <summary> /// Резольвинг процедуры сохранения исходя из флагов в OutputAttributes /// Метод полностью реализует логику разделения реузльтатов компиляции /// по директориям исходя из установленных флагов в OutputAttributes /// </summary> /// <param name="bSharpClass"></param> /// <returns></returns> protected virtual BSharpBuilderWriteTarget GenerateTarget(IBSharpClass bSharpClass) { var outputAttributes = Project.OutputAttributes; var target = new BSharpBuilderWriteTarget { Directory = WorkingDirectory, Extension = Project.GetOutputExtension(), Filename = BSharpBuilderClassUtils.GetClassname(bSharpClass.FullName), MergeIfExists = false }; target.Entity.Add(GenerateBSharpClasset(bSharpClass.Compiled??bSharpClass.Source)); if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.TreeNamespace)) { target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetRelativeDirByNamespace(bSharpClass.FullName) ); } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PlainNamespace)) { target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetNamespace(bSharpClass.FullName) ); } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PrototypeAlign)){ var proto = bSharpClass.Prototype; if (!string.IsNullOrWhiteSpace(proto)){ target.Directory = Path.Combine( WorkingDirectory, proto ); } else{ target.Directory = WorkingDirectory; } } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.UseFullName)) { target.Filename = bSharpClass.FullName; } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.SingleFile)) { target.Filename = BSharpBuilderDefaults.SingleModeFilename; target.MergeIfExists = true; target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetRelativeDirByNamespace(bSharpClass.FullName) ); } else { target.Entity = target.Entity.XPathSelectElement("//" + BSharpBuilderDefaults.BSharpClassContainerName); } return target; }
/// <summary> /// Резольвинг процедуры сохранения исходя из флагов в OutputAttributes /// Метод полностью реализует логику разделения реузльтатов компиляции /// по директориям исходя из установленных флагов в OutputAttributes /// </summary> /// <param name="bSharpClass"></param> /// <returns></returns> protected virtual BSharpBuilderWriteTarget GenerateTarget(IBSharpClass bSharpClass) { var outputAttributes = Project.OutputAttributes; var target = new BSharpBuilderWriteTarget { Directory = WorkingDirectory, Extension = Project.GetOutputExtension(), Filename = BSharpBuilderClassUtils.GetClassname(bSharpClass.FullName), MergeIfExists = false }; target.Entity.Add(GenerateBSharpClasset(bSharpClass.Compiled ?? bSharpClass.Source)); if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.TreeNamespace)) { target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetRelativeDirByNamespace(bSharpClass.FullName) ); } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PlainNamespace)) { target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetNamespace(bSharpClass.FullName) ); } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PrototypeAlign)) { var proto = bSharpClass.Prototype; if (!string.IsNullOrWhiteSpace(proto)) { target.Directory = Path.Combine( WorkingDirectory, proto ); } else { target.Directory = WorkingDirectory; } } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.UseFullName)) { target.Filename = bSharpClass.FullName; } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PrototypeInName)) { target.Filename = bSharpClass.Prototype + "." + target.Filename; } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.PrototypeAsExtension)) { target.Extension = bSharpClass.Prototype + ".xml"; } if (outputAttributes.HasFlag(BSharpBuilderOutputAttributes.SingleFile)) { target.Filename = BSharpBuilderDefaults.SingleModeFilename; target.MergeIfExists = true; target.Directory = Path.Combine( WorkingDirectory, BSharpBuilderClassUtils.GetRelativeDirByNamespace(bSharpClass.FullName) ); } else { if (null != Project && null != Project.SrcClass && !Project.SrcClass.Compiled.Attr("NoWrapOutput").ToBool()) { target.Entity = target.Entity.XPathSelectElement("//" + BSharpBuilderDefaults.BSharpClassContainerName); } else { target.Entity = target.Entity.Elements().First(); if (Project != null && Project.SrcClass != null && Project.SrcClass.Compiled.Attr("PrototypeAsName").ToBool()) { var proto = target.Entity.Attr("prototype"); if (!string.IsNullOrWhiteSpace(proto)) { target.Entity.Name = proto; } } } } return(target); }