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);
            }
        }
Exemple #2
0
        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;
        }
Exemple #4
0
        /// <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);
        }