コード例 #1
0
		/// <summary>
		/// 	Writes the file.
		/// </summary>
		/// <param name="filename"> The filename. </param>
		/// <param name="e"> The e. </param>
		/// <remarks>
		/// </remarks>
		protected override void WriteFile(string filename, XElement e) {
			filename += ".bxl";
			var opts = new BxlGeneratorOptions();

			opts.InlineAlwaysAttributes =
				new[] {"id", "code", "name", "_file", "_line", "role", "ecoprocess", "idx"}.Union(Context.Project.InlineAttributes).
					ToArray();
			var content = _bxl.Generate(e, opts);
			File.WriteAllText(filename, content);
		}
コード例 #2
0
		/// <summary>
		/// 	generates single bxl string from assembly manifests
		/// </summary>
		/// <param name="assemblies"> </param>
		/// <param name="options"> </param>
		/// <returns> </returns>
		public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null) {
			if (assemblies == null) {
				throw new ArgumentNullException("assemblies");
			}
			if (0 == assemblies.Length) {
				throw new ArgumentException("no assemblies given");
			}
			var gen = new BxlGenerator();
			var genopts = new BxlGeneratorOptions
				{
					NoRootElement = true,
					UseTrippleQuotOnValues = false,
					InlineAlwaysAttributes = new[] {"code", "name", "priority"}
				};
			options = options ?? new ManifestBxlGeneratorOptions();
			var xml = new XElement("root");
			IList<IComponentDefinition> componentsToGenerate = new List<IComponentDefinition>();
			foreach (var assembly in assemblies.Distinct()) {
				Console.WriteLine("Enter: " + assembly.GetName().Name);
				var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute);

				if (def.Descriptor != null) {
					Console.WriteLine("IsConfigurable: " + assembly.GetName().Name);
					foreach (var classDefinition in def.ComponentDefinitions) {
						componentsToGenerate.Add(classDefinition.GetComponent());
					}
				}
			}
			var useshortnames = false;
			if (options.UseShortNames) {
				useshortnames = CanUseShortNames(componentsToGenerate);
			}
			if (useshortnames) {
				foreach (var assembly in assemblies) {
					var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute);
					if (def.Descriptor != null) {
						xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name)));
					}
				}
				var namespaces =
					componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType))
						.Distinct().Select(x => x.Namespace).Distinct();
				foreach (var ns in namespaces) {
					xml.Add(new XElement("using", new XAttribute("code", ns)));
				}
			}
			foreach (var definition in componentsToGenerate) {
				var elementname = definition.Lifestyle.ToString().ToLowerInvariant();
				var value = GetTypeName(definition.ServiceType, useshortnames);
				var e = new XElement(elementname, value);
				if (definition.Name.IsEmpty()) {
					e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames)));
				}
				else {
					e.Add(new XAttribute("code", definition.Name));
					e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames)));
				}
				e.Add(new XAttribute("priority", definition.Priority));
				if (definition.Role.IsNotEmpty()) {
					e.Add(new XAttribute("role", definition.Role));
				}
				if (definition.Help.IsNotEmpty()) {
					e.Add(new XAttribute("help", definition.Help));
				}
				xml.Add(e);
			}

			var result = gen.Convert(xml, genopts);
			return result;
		}
コード例 #3
0
        /// <summary>
        ///     generates single bxl string from assembly manifests
        /// </summary>
        /// <param name="assemblies"> </param>
        /// <param name="options"> </param>
        /// <returns> </returns>
        public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null)
        {
            if (assemblies == null)
            {
                throw new ArgumentNullException("assemblies");
            }
            if (0 == assemblies.Length)
            {
                throw new ArgumentException("no assemblies given");
            }
            var gen     = new BxlGenerator();
            var genopts = new BxlGeneratorOptions
            {
                NoRootElement          = true,
                UseTrippleQuotOnValues = false,
                InlineAlwaysAttributes = new[] { "code", "name", "priority" }
            };

            options = options ?? new ManifestBxlGeneratorOptions();
            var xml = new XElement("root");
            IList <IComponentDefinition> componentsToGenerate = new List <IComponentDefinition>();

            foreach (var assembly in assemblies.Distinct())
            {
                Console.WriteLine("Enter: " + assembly.GetName().Name);
                var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute);

                if (def.Descriptor != null)
                {
                    Console.WriteLine("IsConfigurable: " + assembly.GetName().Name);
                    foreach (var classDefinition in def.ComponentDefinitions)
                    {
                        componentsToGenerate.Add(classDefinition.GetComponent());
                    }
                }
            }
            var useshortnames = false;

            if (options.UseShortNames)
            {
                useshortnames = CanUseShortNames(componentsToGenerate);
            }
            if (useshortnames)
            {
                foreach (var assembly in assemblies)
                {
                    var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute);
                    if (def.Descriptor != null)
                    {
                        xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name)));
                    }
                }
                var namespaces =
                    componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType))
                    .Distinct().Select(x => x.Namespace).Distinct();
                foreach (var ns in namespaces)
                {
                    xml.Add(new XElement("using", new XAttribute("code", ns)));
                }
            }
            foreach (var definition in componentsToGenerate)
            {
                var elementname = definition.Lifestyle.ToString().ToLowerInvariant();
                var value       = GetTypeName(definition.ServiceType, useshortnames);
                var e           = new XElement(elementname, value);
                if (definition.Name.IsEmpty())
                {
                    e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames)));
                }
                else
                {
                    e.Add(new XAttribute("code", definition.Name));
                    e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames)));
                }
                e.Add(new XAttribute("priority", definition.Priority));
                if (definition.Role.IsNotEmpty())
                {
                    e.Add(new XAttribute("role", definition.Role));
                }
                if (definition.Help.IsNotEmpty())
                {
                    e.Add(new XAttribute("help", definition.Help));
                }
                xml.Add(e);
            }

            var result = gen.Convert(xml, genopts);

            return(result);
        }
コード例 #4
0
		protected override void Save(XElement x, string file) {
			var c = new BxlGenerator();
			var opts = new BxlGeneratorOptions {SkipAttributes = new[] {"_line", "_file"}, NoRootElement = true};
			File.WriteAllText(file, c.Convert(x));
		}
コード例 #5
0
ファイル: MyBxl.cs プロジェクト: Qorpent/qorpent.sys
		/// <summary>
		/// 	Converts given Xml file to BXL code
		/// </summary>
		/// <param name="filename"> xml file to convert (default FileResolver will be used) </param>
		/// <param name="options"> </param>
		/// <returns> BXL code representing given data </returns>
		/// <remarks>
		/// 	Uses default BXL generation settings, if you need more complex generation, use <see cref="BxlGenerator" /> direcly
		/// </remarks>
		public static string ConvertFile(string filename, BxlGeneratorOptions options = null) {
			return new BxlGenerator().Convert(XElement.Load(filename), options);
		}
コード例 #6
0
ファイル: MyBxl.cs プロジェクト: Qorpent/qorpent.sys
		/// <summary>
		/// 	Converts given XElement to BXL code
		/// </summary>
		/// <param name="data"> xml to convert </param>
		/// <param name="options"> </param>
		/// <returns> BXL code representing given data </returns>
		/// <remarks>
		/// 	Uses default BXL generation settings, if you need more complex generation, use <see cref="BxlGenerator" /> direcly
		/// </remarks>
		public static string Convert(XElement data, BxlGeneratorOptions options = null) {
			return new BxlGenerator().Convert(data, options);
		}