public static void GeneratePublication(
DocProject docProject,
string path,
Dictionary<long, SEntity> instances,
Dictionary<string, DocObject> mapEntity,
Dictionary<string, string> mapSchema,
DocPublication docPublication,
BackgroundWorker worker,
FormProgress formProgress)
{
instances.Clear(); // clear out old state from mvdxml export
docPublication.ErrorLog.Clear();
DiagramFormat diagramformat = DiagramFormat.ExpressG;
if(docPublication.UML)
{
diagramformat = DiagramFormat.UML;
}
DocModelView[] views = docPublication.Views.ToArray();
string[] locales = docPublication.Locales.ToArray();
List<DocXsdFormat> xsdFormatBase = docProject.BuildXsdFormatList();
string xmlns = "http://www.buildingsmart-tech.org/ifcXML/IFC4/final";
// for now these are paired; in future they may be split
Dictionary<DocFormatSchemaEnum, IFormatExtension> mapFormatSchema = new Dictionary<DocFormatSchemaEnum, IFormatExtension>();
Dictionary<DocFormatSchemaEnum, IFormatData> mapFormatData = new Dictionary<DocFormatSchemaEnum, IFormatData>();
foreach (DocFormat docFormat in docPublication.Formats)
{
switch(docFormat.FormatType)
{
case DocFormatSchemaEnum.OWL:
mapFormatSchema.Add(docFormat.FormatType, new FormatOWL());
mapFormatData.Add(docFormat.FormatType, new FormatTTL_Stream());
break;
case DocFormatSchemaEnum.SQL:
mapFormatSchema.Add(docFormat.FormatType, new FormatSQL());
mapFormatData.Add(docFormat.FormatType, new FormatSQL());
break;
case DocFormatSchemaEnum.CS:
mapFormatSchema.Add(docFormat.FormatType, new FormatCSC());
break;
case DocFormatSchemaEnum.JSON:
mapFormatSchema.Add(docFormat.FormatType, new FormatJAV());
mapFormatData.Add(docFormat.FormatType, new FormatJSN(xsdFormatBase, xmlns, docPublication.Code));
break;
case DocFormatSchemaEnum.XML:
mapFormatSchema.Add(docFormat.FormatType, new FormatXSD(null));
mapFormatData.Add(docFormat.FormatType, new FormatSML(new System.IO.MemoryStream(), xsdFormatBase, xmlns, docPublication.Code));
break;
}
}
// copy over static content * if it doesn't already exist *
string pathContent = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (pathContent.EndsWith(@"bin\x86\Debug") || pathContent.EndsWith(@"bin\x64\Debug")) // debugging
{
pathContent = System.IO.Path.GetDirectoryName(pathContent);
pathContent = System.IO.Path.GetDirectoryName(pathContent);
pathContent = System.IO.Path.GetDirectoryName(pathContent);
}
pathContent = System.IO.Path.Combine(pathContent, "content");
if(!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
CopyFiles(pathContent, path);
System.IO.Directory.CreateDirectory(path + "\\diagrams");
Dictionary<string, DocPropertyEnumeration> mapPropEnum = new Dictionary<string, DocPropertyEnumeration>();
foreach (DocSection docSection in docProject.Sections)
{
foreach (DocSchema docSchema in docSection.Schemas)
{
foreach (DocPropertyEnumeration docEnum in docSchema.PropertyEnums)
{
mapPropEnum.Add(docEnum.Name, docEnum);
}
}
}
Dictionary<DocObject, string> mapNumber = new Dictionary<DocObject, string>(); // map items to section (e.g. "1.1.1.1")
string pathSchema = path + @"\schema";
// count progress
int progressTotal = docProject.Sections.Count + docProject.Annexes.Count + 2;
formProgress.SetProgressTotal(progressTotal);
worker.ReportProgress(0, "================================================================================");
worker.ReportProgress(0, docPublication);
int progressCurrent = 0;
// build list of locales in use
SortedList<string, string> listLocale = new SortedList<string, string>();
foreach (DocObject eachobj in mapEntity.Values)
{
if (eachobj.Localization != null)
{
foreach (DocLocalization doclocal in eachobj.Localization)
{
// only deal with languages, not regions
if (doclocal.Locale != null && doclocal.Locale.Length >= 2)
{
string language = doclocal.Locale.Substring(0, 2);
if (!listLocale.ContainsKey(language))
{
listLocale.Add(language, doclocal.Locale);
}
}
}
}
}
// build filter
Dictionary<DocObject, bool> included = null;
if (views != null)
{
included = new Dictionary<DocObject, bool>();
foreach (DocModelView docEachView in views)
{
docProject.RegisterObjectsInScope(docEachView, included);
}
}
Dictionary<DocObject, bool>[] dictionaryViews = new Dictionary<DocObject, bool>[docProject.ModelViews.Count];
for (int i = 0; i < docProject.ModelViews.Count; i++)
{
DocModelView docView = docProject.ModelViews[i];
if (included != null && included.ContainsKey(docView))
{
dictionaryViews[i] = new Dictionary<DocObject, bool>();
docProject.RegisterObjectsInScope(docProject.ModelViews[i], dictionaryViews[i]);
}
}
DocEntity docEntityRoot = docProject.GetDefinition("IfcRoot") as DocEntity;
// upper contents page
string pathHeaderFrame = path + "\\content.htm";
using (FormatHTM htmProp = new FormatHTM(pathHeaderFrame, mapEntity, mapSchema, included))
{
string projectname = docPublication.Name;// Code;
if (!String.IsNullOrEmpty(docPublication.Version))
{
projectname += " - " + docPublication.Version;
}
if (!String.IsNullOrEmpty(docPublication.Status))
{
projectname += " [" + docPublication.Status + "]";
}
string projectcopy = docPublication.Copyright;
htmProp.Write(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n" +
"<html lang=\"en\">" +
"<head>" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\">" +
"<link rel=\"STYLESHEET\" href=\"./ifc-styles.css\" type=\"text/css\">" +
"</head>" +
"<body class=\"image\">" +
"<div class=\"content\">" +
"<table summary=\"title\" class=\"content\" frameborder=\"0\">" +
"<tr>" +
"<td>" +
"<p class=\"td\">" +
"<b>" + projectname + "</b>" +
"</p>" +
"</td>" +
"<td>" +
"<p class=\"td right\">" +
"<b>" + projectcopy + "</b>" +
"</p>" +
"</td>" +
"</tr>" +
"</table>" +
"<table summary=\"short table of content\" class=\"content\">" +
"<col width=\"15%\">" +
"<col width=\"25%\">" +
"<col width=\"20%\">" +
"<col width=\"25%\">" +
"<col width=\"15%\">" +
"<tr>" +
"<td class=\"content\">" +
"<ol class=\"td none\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"cover.htm\" target=\"info\">Cover</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"toc.htm\" target=\"info\">Contents</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"foreword.htm\" target=\"info\">" + docPublication.Annotations[0].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"introduction.htm\" target=\"info\">" + docPublication.Annotations[1].Name + "</a></li>" +
"</ol>" +
"</td>" +
"<td class=\"content\">" +
"<ol class=\"td num\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-1.htm\" target=\"info\">" + docProject.Sections[0].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-2.htm\" target=\"info\">" + docProject.Sections[1].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-3.htm\" target=\"info\">" + docProject.Sections[2].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-4.htm\" target=\"info\">" + docProject.Sections[3].Name + "</a></li>" +
"</ol>" +
"</td>" +
"<td class=\"content\">" +
"<ol class=\"td num\" start=\"5\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-5.htm\" target=\"info\">" + docProject.Sections[4].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-6.htm\" target=\"info\">" + docProject.Sections[5].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-7.htm\" target=\"info\">" + docProject.Sections[6].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"schema/chapter-8.htm\" target=\"info\">" + docProject.Sections[7].Name + "</a></li>" +
"</ol>" +
"</td>" +
"<td class=\"content\">" +
"<ol class=\"td alpha\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-a.htm\" target=\"info\">" + docProject.Annexes[0].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-b.htm\" target=\"info\">" + docProject.Annexes[1].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-c.htm\" target=\"info\">" + docProject.Annexes[2].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-d.htm\" target=\"info\">" + docProject.Annexes[3].Name + "</a></li>" +
"</ol>" +
"</td>" +
"<td class=\"content\">" +
"<ol class=\"td alpha\" start=\"5\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-e.htm\" target=\"info\">" + docProject.Annexes[4].Name + "</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"annex/annex-f.htm\" target=\"info\">" + docProject.Annexes[5].Name + "</a></li>" +
"</ol>" +
"<ol class=\"td none\">" +
"<li class=\"std\"><a class=\"listing-link\" href=\"bibliography.htm\" target=\"info\">Bibliography</a></li>" +
"<li class=\"std\"><a class=\"listing-link\" href=\"doc_index.htm\" target=\"info\">Index</a></li>" +
"</ol>" +
"</td>" +
"</tr>" +
"</table>" +
"</div>" +
"</body>" +
"</html>");
}
// cover
using (FormatHTM htmSection = new FormatHTM(path + "\\cover.htm", mapEntity, mapSchema, included))
{
htmSection.WriteHeader(docPublication.Name, 0, docPublication.Header);
htmSection.Write(
"\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
" parent.index.location.replace(\"credits.htm\");\r\n" +
"//-->\r\n" +
"</script>\r\n");
htmSection.WriteLine(docPublication.Documentation);
htmSection.WriteFooter(docPublication.Footer);
}
using (FormatHTM htmSection = new FormatHTM(path + "\\foreword.htm", mapEntity, mapSchema, included))
{
DocAnnotation docAnnotation = docPublication.Annotations[0];
htmSection.WriteHeader(docAnnotation.Name, 0, docPublication.Header);
htmSection.Write(
"\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
" parent.index.location.replace(\"blank.htm\");\r\n" +
"//-->\r\n" +
"</script>\r\n");
htmSection.WriteLine(" <h1 class=\"std\">" + docAnnotation.Name + "</h1>");
htmSection.WriteLine(docAnnotation.Documentation);
htmSection.WriteLinkTo("foreword", 0);
htmSection.WriteFooter(docPublication.Footer);
}
using (FormatHTM htmLink = new FormatHTM(path + "/link/foreword.htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../foreword.htm", docPublication);
}
using (FormatHTM htmSection = new FormatHTM(path + "\\introduction.htm", mapEntity, mapSchema, included))
{
DocAnnotation docAnnotation = docPublication.Annotations[1];
htmSection.WriteHeader(docAnnotation.Name, 0, docPublication.Header);
htmSection.Write(
"\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
" parent.index.location.replace(\"blank.htm\");\r\n" +
"//-->\r\n" +
"</script>\r\n");
htmSection.WriteLine(" <h1 class=\"std\">" + docAnnotation.Name + "</h1>");
htmSection.WriteLine(docAnnotation.Documentation);
htmSection.WriteLinkTo("introduction", 0);
htmSection.WriteFooter(docPublication.Footer);
}
using (FormatHTM htmLink = new FormatHTM(path + "/link/introduction.htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../introduction.htm", docPublication);
}
// NEW: property set index -- build index
SortedList<string, SortedList<string, DocPropertySet>> mapProperty = new SortedList<string, SortedList<string, DocPropertySet>>();
foreach (DocSection docSection in docProject.Sections)
{
foreach (DocSchema docSchema in docSection.Schemas)
{
foreach (DocPropertySet docPset in docSchema.PropertySets)
{
if (included == null || included.ContainsKey(docPset))
{
// include locales
foreach (DocLocalization doclocal in docPset.Localization)
{
// only deal with languages, not regions
if (doclocal.Locale != null && doclocal.Locale.Length >= 2)
{
string language = doclocal.Locale.Substring(0, 2);
if (!listLocale.ContainsKey(language))
{
listLocale.Add(language, doclocal.Locale);
}
}
}
foreach (DocProperty docProp in docPset.Properties)
{
string datatype = docProp.PrimaryDataType;
if (datatype == null)
{
datatype = "IfcLabel"; // enumerations
}
string match = docProp.Name + " (" + docProp.PropertyType.ToString() + "/" + datatype.ToString() + ")";
SortedList<string, DocPropertySet> mapPset = null;
if (!mapProperty.TryGetValue(match, out mapPset))
{
mapPset = new SortedList<string, DocPropertySet>();
mapProperty.Add(match, mapPset);
}
mapPset.Add(docPset.Name, docPset);
// include locales
foreach (DocLocalization doclocal in docProp.Localization)
{
// only deal with languages, not regions
if (doclocal.Locale != null && doclocal.Locale.Length >= 2)
{
string language = doclocal.Locale.Substring(0, 2);
if (!listLocale.ContainsKey(language))
{
listLocale.Add(language, doclocal.Locale);
}
}
}
}
}
}
}
}
// now format listing of properties
StringBuilder sbProperties = new StringBuilder();
foreach (string nameProp in mapProperty.Keys)
{
sbProperties.Append("<li>");
sbProperties.Append(nameProp);
sbProperties.Append("<ul>");
SortedList<string, DocPropertySet> mapPset = mapProperty[nameProp];
foreach (DocPropertySet pset in mapPset.Values)
{
string proplinkurl = "../../schema/" + mapSchema[pset.Name].ToLower() + "/pset/" + pset.Name.ToLower() + ".htm";
sbProperties.Append(" ");
sbProperties.Append("<a class=\"listing-link\" href=\"");
sbProperties.Append(proplinkurl);
sbProperties.Append("\">");
sbProperties.Append(pset.Name);
sbProperties.Append("</a><br/>");
}
sbProperties.Append("</ul></li>");
}
string pathProps = path + @"/annex/annex-b/alphabeticalorder_properties.htm";
using (FormatHTM htmProp = new FormatHTM(pathProps, mapEntity, mapSchema, included))
{
htmProp.WriteHeader("Properties", 2, docPublication.Header);
htmProp.WriteLine("<h2 class=\"annex\">Individual Properties (" + mapProperty.Count + ")</h2>");
htmProp.WriteLine("<ul class=\"std\">");
htmProp.WriteLine(sbProperties.ToString());
htmProp.WriteLine("</ul>");
htmProp.WriteFooter(docPublication.Footer);
}
// capture figures and tables
List<ContentRef> listFigures = new List<ContentRef>();
List<ContentRef> listTables = new List<ContentRef>();
// NEW: section 4 templates
int iTemplate = 0;
foreach (DocTemplateDefinition docTemplate in docProject.Templates)
{
if (included == null || included.ContainsKey(docTemplate))
{
iTemplate++;
int[] indexpath = new int[] { 4, iTemplate };
GenerateTemplate(docProject, docTemplate, mapEntity, mapSchema, included, indexpath, listFigures, listTables, docPublication, path);
}
}
// NEW: model view definitions
int iView = 0;
if (true)//Properties.Settings.Default.ConceptTables)
{
foreach (DocModelView docProjectModelView in docProject.ModelViews)
{
if (included == null || included.ContainsKey(docProjectModelView))
{
iView++;
string pathTemplate = pathSchema + @"\views\" + docProjectModelView.Name.Replace(' ', '-').ToLower() + "\\index.htm";
using (FormatHTM htmTemplate = new FormatHTM(pathTemplate, mapEntity, mapSchema, included))
{
htmTemplate.WriteHeader(docProjectModelView.Name, 1, iView, 0, 0, docPublication.Header);
htmTemplate.WriteScript(1, iView, 0, 0);
{
string indexer = "1." + iView.ToString();
string tag = "h3";
string id = docProjectModelView.Name.ToLower();
htmTemplate.WriteLine("<" + tag + "><a id=\"" + id + "\" name=\"" + id + "\">" + indexer + " " + docProjectModelView.Name + "</a></" + tag + ">");
// write table of status for MVD
htmTemplate.WriteLine("<table class=\"gridtable\">");
htmTemplate.WriteLine("<tr><th>Code</th><th>Version</th><th>Status</th><th>Author</th><th>Copyright</th></tr>");
htmTemplate.WriteLine("<tr><td>" + docProjectModelView.Code + "</td><td>" + docProjectModelView.Version + "</td><td>" + docProjectModelView.Status + "</td><td>" + docProjectModelView.Author + "</td><td>" + docProjectModelView.Copyright + "</td></tr>");
htmTemplate.WriteLine("</table>");
string viewtable = FormatView(docProject, docProjectModelView, mapEntity, mapSchema);
htmTemplate.WriteDocumentationMarkup(viewtable, docProjectModelView, docPublication);
}
htmTemplate.WriteFooter(docPublication.Footer);
}
// icon for view
if(docProjectModelView.Icon != null)
{
string pathIcon = path + @"\img\view-" + MakeLinkName(docProjectModelView) + ".png";
try
{
string pathIconDir = System.IO.Path.GetDirectoryName(pathIcon);
if (!System.IO.Directory.Exists(pathIconDir))
{
System.IO.Directory.CreateDirectory(pathIconDir);
}
using (System.IO.FileStream fs = new System.IO.FileStream(pathIcon, System.IO.FileMode.Create))
{
fs.Write(docProjectModelView.Icon, 0, docProjectModelView.Icon.Length);
fs.Close();
}
}
catch
{
}
}
// each exchange... (or sub-page?)
if (true)//Properties.Settings.Default.Requirement)
{
for (int iExchange = 0; iExchange < docProjectModelView.Exchanges.Count; iExchange++)
{
DocExchangeDefinition docExchange = docProjectModelView.Exchanges[iExchange];
string pathExchange = pathSchema + @"\views\" + MakeLinkName(docProjectModelView) + "\\" + MakeLinkName(docExchange) + ".htm";
using (FormatHTM htmExchange = new FormatHTM(pathExchange, mapEntity, mapSchema, included))
{
htmExchange.WriteHeader(docExchange.Name, 1, iView, 0, 0, docPublication.Header);
htmExchange.WriteScript(1, iView, iExchange + 1, 0);
string indexer = "1." + iView.ToString() + "." + (iExchange + 1).ToString();
string tag = "h4";
string id = docExchange.Name.ToLower();
htmExchange.WriteLine("<" + tag + "><a id=\"" + id + "\" name=\"" + id + "\">" + indexer + " " + docExchange.Name + "</a></" + tag + ">");
htmExchange.WriteLine("<p class=\"std\">");
string exchangedoc = FormatExchange(docProject, docProjectModelView, docExchange, mapEntity, mapSchema, docPublication);
htmExchange.WriteDocumentationMarkup(exchangedoc, docExchange, docPublication);
htmExchange.WriteLine("</p>");
}
// icons for each exchange
if (docExchange.Icon != null)
{
string pathIcon = path + @"\img\mvd-" + MakeLinkName(docExchange) + ".png";
try
{
using (System.IO.FileStream fs = new System.IO.FileStream(pathIcon, System.IO.FileMode.Create))
{
fs.Write(docExchange.Icon, 0, docExchange.Icon.Length);
fs.Close();
}
}
catch
{
}
}
}
}
}
}
}
string pathTOC = path + @"\toc.htm";
using (FormatHTM htmTOC = new FormatHTM(pathTOC, mapEntity, mapSchema, included))
{
htmTOC.WriteHeader("Contents", 0, docPublication.Header);
htmTOC.WriteLine(" <script type=\"text/javascript\">");
htmTOC.WriteLine(" <!--");
htmTOC.WriteLine(" parent.index.location = \"blank.htm\";");
htmTOC.WriteLine(" parent.menu.location = \"content.htm\"");
htmTOC.WriteLine(" -->");
htmTOC.WriteLine(" </script>");
htmTOC.WriteLine(" <h1 class=\"std\">Contents</h1>");
htmTOC.WriteLine("<p>");
// each section
int iSection = 0;
foreach (DocSection section in docProject.Sections)
{
worker.ReportProgress(++progressCurrent, section);
if (worker.CancellationPending)
return;
iSection++;
using (FormatHTM htmSectionTOC = new FormatHTM(pathSchema + @"\toc-" + iSection.ToString() + ".htm", mapEntity, mapSchema, included))
{
htmSectionTOC.WriteLine(
"<html> \r\n" +
"<head> \r\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> \r\n" +
"<link rel=\"stylesheet\" type=\"text/css\" href=\"../ifc-styles.css\"> \r\n" +
"<title>Section Contents</title> \r\n" +
"</head> \r\n" +
"<body class=\"image\"> \r\n" +
"<div class=\"menu\">\r\n" +
"<table class=\"menu\" summary=\"Table of Contents\">\r\n");
htmTOC.WriteTOC(0, "<a class=\"listing-link\" href=\"schema/chapter-" + iSection.ToString() + ".htm\">" + iSection.ToString() + ". " + section.Name + "</a>");
mapNumber.Add(section, iSection.ToString() + ".");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection + ". <a class=\"listing-link\" href=\"chapter-" + iSection + ".htm\" target=\"info\" >" + section.Name + "</a></td></tr>\r\n");
// write the section page
using (FormatHTM htmSection = new FormatHTM(pathSchema + @"\chapter-" + iSection.ToString() + @".htm", mapEntity, mapSchema, included))
{
htmSection.WriteHeader(section.Name, iSection - 1, 0, 0, 0, docPublication.Header);
htmSection.WriteScript(iSection, 0, 0, 0);
htmSection.WriteLine("<h1 class=\"num\" id=\"scope\">" + section.Name + "</h1>");
section.Documentation = UpdateNumbering(section.Documentation, listFigures, listTables, section);
htmSection.WriteDocumentationMarkup(section.Documentation, section, docPublication);
if (iSection == 1)
{
if (true)//Properties.Settings.Default.ConceptTables)
{
int iModel = 0;
foreach (DocModelView docModelView in docProject.ModelViews)
{
if (included == null || included.ContainsKey(docModelView))
{
iModel++;
string htmllink = "<a class=\"listing-link\" href=\"views/" + MakeLinkName(docModelView) + "/index.htm\" target=\"info\">" +
iSection.ToString() + "." + iModel.ToString() + " " + docModelView.Name + "</a>";
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"schema/views/" + MakeLinkName(docModelView) + "/index.htm\" >" +
iSection.ToString() + "." + iModel.ToString() + " " + docModelView.Name + "</a>");
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + htmllink + "</td></tr>");
if (docPublication.Exchanges)
{
int iExchange = 0;
foreach (DocExchangeDefinition docExchange in docModelView.Exchanges)
{
iExchange++;
htmllink = "<a class=\"listing-link\" href=\"views/" + MakeLinkName(docModelView) + "/" + MakeLinkName(docExchange) + ".htm\" target=\"info\">" +
iSection.ToString() + "." + iModel.ToString() + "." + iExchange.ToString() + " " + docExchange.Name + "</a>";
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"schema/views/" + MakeLinkName(docModelView) + "/" + MakeLinkName(docExchange) + ".htm\" >" +
iSection.ToString() + "." + iModel.ToString() + "." + iExchange.ToString() + " " + docExchange.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + htmllink + "</td></tr>");
}
}
}
}
}
}
else if (iSection == 2)
{
htmSection.WriteLine("<dl>");
if (docProject.NormativeReferences != null)
{
foreach (DocReference docRef in docProject.NormativeReferences)
{
htmSection.WriteLine("<dt class=\"normativereference\"><a id=\"" + MakeLinkName(docRef) + "\">" + docRef.Name + "</a>, <i>" + docRef.Documentation + "</i></dt>");
htmSection.WriteLine("<dd> </dd>");
}
}
htmSection.WriteLine("</dl>");
}
else if (iSection == 3)
{
htmTOC.WriteTOC(0, "<a class=\"listing-link\" href=\"schema/chapter-3.htm#terms\">3.1 Terms and definitions</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">3.1 <a class=\"listing-link\" href=\"chapter-3.htm#terms\" target=\"info\" >Terms and definitions</a></td></tr>\r\n");
htmTOC.WriteTOC(0, "<a class=\"listing-link\" href=\"schema/chapter-3.htm#abbreviated\">3.2 Abbreviated terms</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">3.2 <a class=\"listing-link\" href=\"chapter-3.htm#abbreviated\" target=\"info\" >Abbreviated terms</a></td></tr>\r\n");
htmSection.WriteLine("<a id=\"terms\"/>");
htmSection.WriteLine("<h2>3.1 Terms and definitions</h2>");
htmSection.WriteLine("<dl>");
if (docProject.Terms != null)
{
foreach(DocTerm docTerm in docProject.Terms)
{
htmSection.WriteTerm(docTerm);
}
}
htmSection.WriteLine("</dl>");
htmSection.WriteLine("<a id=\"abbreviated\"/>");
htmSection.WriteLine("<h2>3.2 Abbreviated terms</h2>");
htmSection.WriteLine("<table class=\"abbreviatedterms\">");
if (docProject.Abbreviations != null)
{
SortedList<string, DocAbbreviation> sl = new SortedList<string, DocAbbreviation>();
foreach (DocAbbreviation docRef in docProject.Abbreviations)
{
sl.Add(docRef.Name, docRef);
}
foreach (string s in sl.Keys)
{
DocAbbreviation docRef = sl[s];
htmSection.WriteLine("<tr><td class=\"abbreviatedterm\" id=\"" + MakeLinkName(docRef) + "\">" + docRef.Name + "</td>");
htmSection.WriteLine("<td class=\"abbrebiatedterm\">" + docRef.Documentation + "</td></tr>");
}
}
htmSection.WriteLine("</table>");
}
else if (iSection == 4)
{
FormatHTM.WriteTOCforTemplates(docProject.Templates, 1, iSection.ToString(), htmTOC, htmSectionTOC, included);
htmSection.WriteLine("<table class=\"gridtable\">");
htmSection.WriteLine("<tr><th>Template</th>");
for (int i = 0; i < docProject.ModelViews.Count; i++)
{
DocModelView docView = docProject.ModelViews[i];
if (included != null && included.ContainsKey(docView))
{
htmSection.WriteLine("<th>" + docProject.ModelViews[i].Name + "</th>");
}
}
htmSection.WriteLine("</tr>");
foreach (DocTemplateDefinition docTemplateDefinition in docProject.Templates)
{
htmSection.WriteTemplateTable(docProject, docTemplateDefinition, 0, dictionaryViews);
}
htmSection.WriteLine("</table>");
}
htmSection.WriteLine("<p>");
int iListSchema = 0;
foreach (DocSchema schema in section.Schemas)
{
if (included == null || included.ContainsKey(schema))
{
iListSchema++;
htmSection.WriteLine("<a class=\"listing-link\" href=\"" + schema.Name.ToLower() + "/content.htm\">" + iSection.ToString() + "." + iListSchema.ToString() + " " + schema.Name + "</a><br>");
}
}
htmSection.WriteLine("</p>");
htmSection.WriteLinkTo("chapter-" + iSection, 1);
htmSection.WriteFooter(docPublication.Footer);
}
// each schema
int iSchema = 0;
foreach (DocSchema schema in section.Schemas)
{
if (worker.CancellationPending)
return;
if (included == null || included.ContainsKey(schema))
{
iSchema++;
// ensure directory exists
System.IO.Directory.CreateDirectory(pathSchema + @"\" + schema.Name.ToLower() + @"\lexical\");
// create schema document
using (FormatHTM htmSchema = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + @"\content.htm", mapEntity, mapSchema, included))
{
{
mapNumber.Add(schema, iSection.ToString() + "." + iSchema.ToString());
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"schema/" + schema.Name.ToLower() + "/content.htm\">" + iSection.ToString() + "." + iSchema.ToString() + " " + schema.Name + "</a>");
// extra line between each schema
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + iSection.ToString() + "." + iSchema.ToString() + "\">" + iSection.ToString() + "." + iSchema.ToString() + "</a> <a class=\"listing-link\" href=\"" + schema.Name.ToLower() + "/content.htm\" target=\"info\">" + schema.Name + "</a></td></tr>\r\n");
htmSchema.WriteHeader(schema.Name, iSection, iSchema, 0, 0, docPublication.Header);
htmSchema.WriteScript(iSection, iSchema, 0, 0);
htmSchema.WriteLine("<h2 class=\"std\">" + iSection.ToString() + "." + iSchema.ToString() + " " + schema.Name + "</h2>");
int iSubSection = 1; // first subsection for schema semantic definition
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Schema Definition");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Schema Definition</td></tr>\r\n");
htmSchema.WriteLine("<h3 class=\"std\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Schema Definition</h3>");
schema.Documentation = UpdateNumbering(schema.Documentation, listFigures, listTables, schema);
htmSchema.WriteDocumentationMarkup(schema.Documentation, schema, docPublication);
// each type
if (schema.Types.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Types");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Types</td></tr>\r\n");
int iType = 0;
foreach (DocType type in schema.Types)
{
if (worker.CancellationPending)
return;
if (type.Name.Equals("IfcNullStyle", StringComparison.OrdinalIgnoreCase) && schema.Name.Equals("IfcConstructionMgmtDomain", StringComparison.OrdinalIgnoreCase))
{
// bug -- exclude
}
else if (included == null || included.ContainsKey(type))
{
iType++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iType.ToString();
mapNumber.Add(type, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[type.Name].ToLower() + "/lexical/" + type.Name.ToLower() + ".htm\">" + formatnum.ToString() + " " + type.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iType.ToString() + "</a> <a class=\"listing-link\" href=\"" + mapSchema[type.Name].ToLower() + "/lexical/" + type.Name.ToLower() + ".htm\" target=\"info\">" + type.Name + "</a><td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\lexical\\" + type.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(type.Name, iSection, iSchema, iSubSection, iType, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iType);
htmDef.WriteLine("<h4 class=\"num\">" + type.Name + "</h4>");
htmDef.WriteViewIcons(type, docProject, dictionaryViews, path);
htmDef.WriteLocalizedNames(type);
htmDef.WriteChangeLog(type, docProject);
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Semantic definitions at the type</h5>");
if (type.Documentation != null)
{
type.Documentation = UpdateNumbering(type.Documentation, listFigures, listTables, type);
}
htmDef.WriteSummaryHeader("Type definition", true);
htmDef.WriteDocumentationMarkup(type.Documentation, type, docPublication);
htmDef.WriteSummaryFooter();
if(type is DocEnumeration)
{
DocEnumeration docEnumeration = (DocEnumeration)type;
htmDef.WriteSummaryHeader("Enumeration definition", true);
htmDef.WriteLine("<table class=\"attributes\">");
htmDef.WriteLine("<tr><th>Constant</th><th>Description</th></tr>");
foreach (DocConstant docConstant in docEnumeration.Constants)
{
htmDef.Write("<tr><td>");
htmDef.Write(docConstant.Name);
htmDef.Write("</td><td>");
htmDef.Write(docConstant.Documentation);
htmDef.Write("</td></tr>");
}
htmDef.WriteLine("</table>");
htmDef.WriteSummaryFooter();
}
else if (type is DocSelect)
{
DocSelect docSelect = (DocSelect)type;
htmDef.WriteSummaryHeader("Select definition", true);
htmDef.WriteLine("<table class=\"attributes\">");
htmDef.WriteLine("<tr><th>Type</th><th>Description</th></tr>");
foreach (DocSelectItem docSelectItem in docSelect.Selects)
{
DocObject docRef = null;
if (mapEntity.TryGetValue(docSelectItem.Name, out docRef))
{
if (included == null || included.ContainsKey(docRef))
{
htmDef.Write("<tr><td>");
htmDef.WriteDefinition(docSelectItem.Name);
//htmDef.Write(docSelectItem.Name);
htmDef.Write("</td><td>");
htmDef.Write(docSelectItem.Documentation);
htmDef.Write("</td></tr>");
}
}
}
htmDef.WriteLine("</table>");
htmDef.WriteSummaryFooter();
}
htmDef.WriteLine("</section>");
// where rules (for defined types)
if (type is DocDefined && ((DocDefined)type).WhereRules != null && ((DocDefined)type).WhereRules.Count > 0)
{
DocDefined entity = (DocDefined)type;
// formal propositions
htmDef.WriteSummaryHeader("Formal Propositions", true);
htmDef.WriteLine("<table class=\"propositions\">");
htmDef.WriteLine("<tr><th>Rule</th><th>Description</th></tr>");
foreach (DocWhereRule docAttr in entity.WhereRules)
{
htmDef.Write("<tr><td>");
htmDef.Write(docAttr.Name);
htmDef.Write("</td><td>");
if (docAttr.Documentation != null)
{
htmDef.WriteDocumentationMarkup(docAttr.Documentation, entity, docPublication);
}
htmDef.WriteLine("</td></tr>");
}
htmDef.WriteLine("</table>\r\n");
htmDef.WriteSummaryFooter();
}
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Formal representations</h5>");
foreach (DocFormat docFormat in docPublication.Formats)
{
if (docFormat.FormatOptions != DocFormatOptionEnum.None)
{
// future: componentize all formats
IFormatExtension formatext = null;
mapFormatSchema.TryGetValue(docFormat.FormatType, out formatext);
switch (docFormat.FormatType)
{
case DocFormatSchemaEnum.STEP:
htmDef.WriteExpressTypeAndDocumentation(type, !docPublication.HideHistory, docPublication.ISO);
break;
default:
if (formatext != null)
{
string output = null;
if (type is DocSelect)
{
output = formatext.FormatSelect((DocSelect)type, mapEntity, included);
}
else if (type is DocEnumeration)
{
output = formatext.FormatEnumeration((DocEnumeration)type);
}
else if (type is DocDefined)
{
output = formatext.FormatDefined((DocDefined)type);
}
if (output != null)
{
htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false);
htmDef.Write("<div class=\"xsd\"><code class=\"xsd\">");
htmDef.WriteExpression(output);
htmDef.Write("</code></div>");
htmDef.WriteSummaryFooter();
}
}
break;
}
}
}
htmDef.WriteLine("</section>");
// write url for incoming page link
htmDef.WriteLinkTo(type);
htmDef.WriteFooter(docPublication.Footer);
}
}
}
}
// each entity
if (schema.Entities.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Entities");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Entities</td></tr>\r\n");
int iEntity = 0;
foreach (DocEntity entity in schema.Entities)
{
if (worker.CancellationPending)
return;
if (included == null || included.ContainsKey(entity))
{
iEntity++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString() + "</a> <a class=\"listing-link\" href=\"" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\lexical\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iEntity, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iEntity);
htmDef.WriteLine("<h4 class=\"num\">" + entity.Name + "</h4>");
htmDef.WriteViewIcons(entity, docProject, dictionaryViews, path);
htmDef.WriteLocalizedNames(entity);
htmDef.WriteChangeLog(entity, docProject);
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Semantic definitions at the entity</h5>");
string entitydocumentation = FormatEntityDescription(docProject, entity, listFigures, listTables);
htmDef.WriteSummaryHeader("Entity definition", true);
htmDef.WriteDocumentationMarkup(entitydocumentation, entity, docPublication);
htmDef.WriteSummaryFooter();
if (entity.Attributes != null && entity.Attributes.Count > 0)
{
htmDef.WriteSummaryHeader("Attribute definitions", true);
htmDef.WriteLine("<table class=\"attributes\">");
htmDef.WriteLine("<tr><th>#</th><th>Attribute</th><th>Type</th><th>Cardinality</th><th>Description</th>");
if (views != null)
{
foreach (DocModelView docViewHeader in views)
{
htmDef.Write("<th>");
htmDef.Write(docViewHeader.Name.Substring(0, 1));
htmDef.Write("</th>");
}
}
htmDef.WriteLine("</tr>");
int sequence = 0;
// count direct attributes of base classes
DocEntity docEntBase = entity;
DocObject docBase = null;
while(!String.IsNullOrEmpty(docEntBase.BaseDefinition) && mapEntity.TryGetValue(docEntBase.BaseDefinition, out docBase))
{
docEntBase = (DocEntity)docBase;
foreach(DocAttribute docAttrBase in docEntBase.Attributes)
{
if (docAttrBase.Inverse == null && docAttrBase.Derived == null)
{
sequence++;
}
}
}
htmDef.WriteEntityAttributes(entity, entity, views, dictionaryViews, docPublication, ref sequence);
htmDef.WriteLine("</table>");
htmDef.WriteSummaryFooter();
}
if (entity.WhereRules != null && entity.WhereRules.Count > 0)
{
// avoid attributes without descriptions
int cDescs = 0;
foreach (DocWhereRule docAttr in entity.WhereRules)
{
if (docAttr.Documentation != null)
{
cDescs++;
}
}
if (cDescs > 0)
{
// formal propositions
htmDef.WriteSummaryHeader("Formal Propositions", true);
htmDef.WriteLine("<table class=\"propositions\">");
htmDef.WriteLine("<tr><th>Rule</th><th>Description</th></tr>");
foreach (DocWhereRule docAttr in entity.WhereRules)
{
htmDef.Write("<tr><td>");
htmDef.Write(docAttr.Name);
htmDef.Write("</td><td>");
if (docAttr.Documentation != null)
{
htmDef.WriteDocumentationMarkup(docAttr.Documentation, entity, docPublication);
}
htmDef.WriteLine("</td></tr>");
}
htmDef.WriteLine("</table>\r\n");
htmDef.WriteSummaryFooter();
}
}
htmDef.WriteLine("</section>");
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Inherited definitions from supertypes</h5>");
Dictionary<Rectangle, DocEntity> map = new Dictionary<Rectangle, DocEntity>();
using (Font font = new Font(FontFamily.GenericSansSerif, 8.0f))
{
using (Image img = FormatPNG.CreateInheritanceDiagramForEntity(docProject, included, entity, font, map))
{
try
{
img.Save(path + "\\diagrams\\" + entity.Name.ToLower() + ".png", System.Drawing.Imaging.ImageFormat.Png);
}
catch
{
img.ToString();
}
}
}
htmDef.WriteSummaryHeader("Entity inheritance", true);
htmDef.WriteLine("<img src=\"../../../diagrams/" + entity.Name.ToLower() + ".png\" usemap=\"#f\"/>");
htmDef.WriteLine("<map name=\"f\">");
foreach (Rectangle rc in map.Keys)
{
DocEntity docEntref = map[rc];
DocSchema docEntsch = docProject.GetSchemaOfDefinition(docEntref);
string hyperlink = "../../../schema/" + docEntsch.Name.ToLower() + "/lexical/" + docEntref.Name.ToLower() + ".htm";
htmDef.WriteLine("<area shape=\"rect\" coords=\"" + rc.Left + "," + rc.Top + "," + rc.Right + "," + rc.Bottom + "\" href=\"" + hyperlink + "\" alt=\"" + docEntref.Name + "\" />");
}
htmDef.WriteLine("</map>");
htmDef.WriteSummaryFooter();
htmDef.WriteSummaryHeader("Attribute inheritance", false);
htmDef.WriteLine("<table class=\"attributes\">");
htmDef.Write("<tr><th>#</th><th>Attribute</th><th>Type</th><th>Cardinality</th><th>Description</th>");
if(views != null)
{
foreach(DocModelView docViewHeader in views)
{
htmDef.Write("<th>");
htmDef.Write(docViewHeader.Name.Substring(0, 1));
htmDef.Write("</th>");
}
}
htmDef.WriteLine("</tr>");
int sequenceX = 0;
htmDef.WriteEntityInheritance(entity, entity, views, dictionaryViews, docPublication, ref sequenceX);
htmDef.WriteLine("</table>");
htmDef.WriteSummaryFooter();
string conceptdocumentation = FormatEntityConcepts(docProject, entity, mapEntity, mapSchema, included, listFigures, listTables, path, docPublication);
//htmDef.WriteLine(conceptdocumentation);
htmDef.WriteDocumentationMarkup(conceptdocumentation, entity, docPublication);
if (docProject.Examples != null)
{
List<DocExample> listExample = new List<DocExample>();
foreach (DocExample docExample in docProject.Examples)
{
BuildExampleList(listExample, docExample, entity, included);
}
if (listExample.Count > 0)
{
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Examples</h5>");
htmDef.WriteLine("<ul>");
foreach (DocExample docExample in listExample)
{
if (docExample.Name != null)
{
htmDef.Write("<li><a href=\"../../../annex/annex-e/");
htmDef.Write(docExample.Name.Replace(' ', '-').ToLower());
htmDef.Write(".htm\">");
htmDef.Write(docExample.Name);
htmDef.Write("</a></li>");
htmDef.WriteLine("");
}
}
htmDef.WriteLine("</ul>");
htmDef.WriteLine("</section>");
}
}
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Formal representations</h5>");
foreach(DocFormat docFormat in docPublication.Formats)
{
if(docFormat.FormatOptions != DocFormatOptionEnum.None)
{
// future: componentize all formats
IFormatExtension formatext = null;
mapFormatSchema.TryGetValue(docFormat.FormatType, out formatext);
switch(docFormat.FormatType)
{
case DocFormatSchemaEnum.STEP:
htmDef.WriteExpressEntitySpecification(entity, !docPublication.HideHistory, docPublication.ISO);
break;
default:
if(formatext != null)
{
string output = formatext.FormatEntity(entity, mapEntity, included);
if (output != null)
{
htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false);
htmDef.Write("<div class=\"xsd\"><code class=\"xsd\">");
htmDef.WriteExpression(output);
htmDef.Write("</code></div>");
htmDef.WriteSummaryFooter();
}
}
break;
}
}
}
htmDef.WriteLine("</section>");
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
}
}
}
// functions
if (schema.Functions.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Functions");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Functions</td></tr>\r\n");
int iEntity = 0;
foreach (DocFunction entity in schema.Functions)
{
if (included == null || included.ContainsKey(entity))
{
iEntity++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString() + "</a> <a class=\"listing-link\" href=\"" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\lexical\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iEntity, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iEntity);
htmDef.WriteLine("<h4 class=\"num\">" + entity.Name + "</h4>");
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Semantic definitions at the function</h5>");
htmDef.WriteSummaryHeader("Function Definition", true);
htmDef.WriteLine("<p>");
htmDef.WriteDocumentationMarkup(entity.Documentation, entity, docPublication);
htmDef.WriteLine("</p>");
htmDef.WriteSummaryFooter();
htmDef.WriteLine("</section>");
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Formal representations</h5>");
htmDef.WriteSummaryHeader("EXPRESS Specification", true);
htmDef.Write("<div class=\"xsd\"><code class=\"xsd\">");
htmDef.WriteExpressFunction(entity);
htmDef.Write("</code></div>");
htmDef.WriteSummaryFooter();
htmDef.WriteLine("</section>");
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
}
}
}
// rules
if (schema.GlobalRules.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Rules");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Rules</td></tr>\r\n");
int iEntity = 0;
foreach (DocGlobalRule entity in schema.GlobalRules)
{
if (included == null || included.ContainsKey(entity))
{
iEntity++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iEntity.ToString() + "</a> <a href=\"" + mapSchema[entity.Name].ToLower() + "/lexical/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\lexical\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iEntity, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iEntity);
htmDef.WriteLine("<h4 class=\"num\">" + entity.Name + "</h4>");
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Semantic definitions at the global rule</h5>");
htmDef.WriteSummaryHeader("Global Rule Definition", true);
htmDef.WriteLine("<p>");
htmDef.WriteDocumentationMarkup(entity.Documentation, entity, docPublication);
htmDef.WriteLine("</p>");
htmDef.WriteSummaryFooter();
htmDef.WriteLine("</section>");
htmDef.WriteLine("<section>");
htmDef.WriteLine("<h5 class=\"num\">Formal representations</h5>");
htmDef.WriteSummaryHeader("EXPRESS Specification", true);
htmDef.WriteLine("<span class=\"express\">\r\n");
htmDef.WriteExpressGlobalRule(entity);
htmDef.WriteLine("</span>\r\n");
htmDef.WriteSummaryFooter();
htmDef.WriteLine("</section>");
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
}
}
}
// property sets
if (schema.PropertySets.Count > 0 || schema.PropertyEnums.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Property Sets");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Property Sets</td></tr>\r\n");
int iPset = 0;
foreach (DocPropertySet entity in schema.PropertySets)
{
if (worker.CancellationPending)
return;
if (included == null || included.ContainsKey(entity))
{
iPset++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/pset/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + formatnum + "</a> <a class=\"listing-link\" href=\"" + mapSchema[entity.Name].ToLower() + "/pset/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\pset\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iPset, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iPset);
htmDef.WriteLine("<h4 class=\"std\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "</h4>");
if (!String.IsNullOrEmpty(entity.ApplicableType))
{
htmDef.Write("<p>");
htmDef.WriteDefinition(entity.PropertySetType);
htmDef.WriteLine("/");
if (entity.ApplicableType != null && entity.ApplicableType.Contains("/"))
{
// break out, e.g. "IfcSensor/TEMPERATURESENSOR"
string[] applicableparts = entity.ApplicableType.Split('/');
for (int iapppart = 0; iapppart < applicableparts.Length; iapppart++)
{
if (iapppart > 0)
{
htmDef.Write(" / ");
}
htmDef.WriteDefinition(applicableparts[iapppart]);
}
}
else
{
htmDef.WriteDefinition(entity.ApplicableType);
}
htmDef.Write("</p>");
}
// english by default
htmDef.WriteLine("<table>");
entity.Localization.Sort(); // ensure sorted
foreach (DocLocalization doclocal in entity.Localization)
{
string localname = doclocal.Name;
string localdesc = doclocal.Documentation;
string localid = doclocal.Locale.Substring(0, 2).ToLower();
if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null)
{
localdesc = entity.Documentation;
}
htmDef.WriteLine("<tr><td><img src=\"../../../img/locale-" + localid + ".png\" /></td><td><b> " + localname + ":</b> " + localdesc + "</td></tr>");
}
htmDef.WriteLine("</table>");
if (true)//!Properties.Settings.Default.NoXml)
{
////htmDef.WriteLine("<p><a href=\"http://lookup.bsdd.buildingsmart.com/api/4.0/IfdPSet/search/" + entity.Name + "\" target=\"ifd\"><img src=\"../../../img/external.png\" title=\"Link to IFD\"/> buildingSMART Data Dictionary</a></p>\r\n");
//http://lookup.bsdd.buildingsmart.com/api/4.0/IfdPSet/search/Pset_ActionRequest
// use guid
string guid = IfcGloballyUniqueId.Format(entity.Uuid);
htmDef.WriteLine("<p><a href=\"http://lookup.bsdd.buildingsmart.com/api/4.0/IfdPSet/" + guid + "/ifcVersion/2x4\" target=\"ifd\"><img border=\"0\" src=\"../../../img/external.png\" title=\"Link to IFD\"/> buildingSMART Data Dictionary</a></p>\r\n");
htmDef.WriteLine("<p><a href=\"../../../psd/" + entity.Name + ".xml\"><img border=\"0\" src=\"../../../img/diagram.png\" title=\"Link to PSD-XML\"/> PSD-XML</a></p>\r\n");
}
// write diagram if it exists
htmDef.WriteLine(FormatFigure(docProject, entity, null, entity.Name, listFigures, path));
htmDef.WriteProperties(entity.Properties);
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
// generate PSD listing
using (FormatXML formatPSD = new FormatXML(path + @"\psd\" + entity.Name + ".xml", typeof(PropertySetDef)))//, PropertySetDef.DefaultNamespace)) // full casing for compatibility with original files
{
formatPSD.Instance = Program.ExportPsd(entity, mapPropEnum);
formatPSD.Save();
}
}
}
foreach (DocPropertyEnumeration entity in schema.PropertyEnums)
{
if (worker.CancellationPending)
return;
if (included == null || included.ContainsKey(entity))
{
iPset++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/pset/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + formatnum + "</a> <a class=\"listing-link\" href=\"" + mapSchema[entity.Name].ToLower() + "/pset/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\pset\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iPset, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iPset);
htmDef.WriteLine("<h4 class=\"std\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "</h4>");
// english by default
htmDef.WriteLine("<table>");
entity.Localization.Sort(); // ensure sorted
foreach (DocLocalization doclocal in entity.Localization)
{
if (doclocal.Locale != null && doclocal.Locale.Length > 2)
{
string localname = doclocal.Name;
string localdesc = doclocal.Documentation;
string localid = doclocal.Locale.Substring(0, 2).ToLower();
if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null)
{
localdesc = entity.Documentation;
}
htmDef.WriteLine("<tr><td><img src=\"../../../img/locale-" + localid + ".png\" /></td><td><b> " + localname + ":</b> " + localdesc + "</td></tr>");
}
}
htmDef.WriteLine("</table>");
htmDef.WriteLine("<table class=\"gridtable\">");
htmDef.WriteLine("<tr><th>Name</th><th>Description</th></tr>");
bool showdefaultdesc = true;
foreach (DocPropertyConstant docprop in entity.Constants)
{
htmDef.WriteLine("<tr><td>" + docprop.Name + "</td><td>");
if (docprop.Localization.Count > 0)
{
htmDef.WriteLine("<table class=\"gridtable\">");
docprop.Localization.Sort();
foreach (DocLocalization doclocal in docprop.Localization)
{
string localname = doclocal.Name;
string localdesc = doclocal.Documentation;
string localid = doclocal.Locale.Substring(0, 2).ToLower();
if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null)
{
localdesc = docprop.Documentation;
showdefaultdesc = false;
}
htmDef.WriteLine("<tr><td><img src=\"../../../img/locale-" + localid + ".png\" /></td><td><b>" + localname + "</b></td><td>" + localdesc + "</td></tr>");
}
htmDef.WriteLine("</table>");
}
if(showdefaultdesc)
{
htmDef.WriteLine(docprop.Documentation);
}
htmDef.WriteLine("</td></tr>");
}
htmDef.WriteLine("</table>");
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
}
}
}
// quantity sets (assume properties always exist for such schemas so always section 4)
if (schema.QuantitySets.Count > 0)
{
iSubSection++;
htmTOC.WriteTOC(2, iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Quantity Sets");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + " Quantity Sets</td></tr>\r\n");
int iPset = 0;
foreach (DocQuantitySet entity in schema.QuantitySets)
{
if (worker.CancellationPending)
return;
if (included == null || included.ContainsKey(entity))
{
iPset++;
string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString();
mapNumber.Add(entity, formatnum);
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"schema/" + mapSchema[entity.Name].ToLower() + "/qset/" + entity.Name.ToLower() + ".htm\">" + formatnum + " " + entity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a id=\"" + formatnum + "\">" + formatnum + "</a> <a class=\"listing-link\" href=\"" + mapSchema[entity.Name].ToLower() + "/qset/" + entity.Name.ToLower() + ".htm\" target=\"info\">" + entity.Name + "</a></td></tr>\r\n");
using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\qset\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iPset, docPublication.Header);
htmDef.WriteScript(iSection, iSchema, iSubSection, iPset);
htmDef.WriteLine("<h4 class=\"std\">" + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "</h4>");
if (!String.IsNullOrEmpty(entity.ApplicableType))
{
htmDef.Write("<p>");
htmDef.WriteDefinition("QTO_TYPEDRIVENOVERRIDE");
htmDef.WriteLine("/");
htmDef.WriteDefinition(entity.ApplicableType);
htmDef.Write("</p>");
}
// english by default
htmDef.WriteLine("<table>");
entity.Localization.Sort(); // ensure sorted
foreach (DocLocalization doclocal in entity.Localization)
{
string localname = doclocal.Name;
string localdesc = doclocal.Documentation;
string localid = doclocal.Locale.Substring(0, 2).ToLower();
if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null)
{
localdesc = entity.Documentation;
}
htmDef.WriteLine("<tr valign=\"top\"><td><img src=\"../../../img/locale-" + localid + ".png\" title=\"Link to XML\"/></td><td><b>" + localname + "</b>: " + localdesc + "</td></tr>");
}
htmDef.WriteLine("</table>");
if (true)//!Properties.Settings.Default.NoXml)
{
htmDef.WriteLine("<p><a href=\"../../../qto/" + entity.Name + ".xml\"><img border=\"0\" src=\"../../../img/diagram.png\" title=\"Link to QTO-XML\"/> QTO-XML</a></p>\r\n");
}
// write each quantity
htmDef.WriteLine("<table class=\"gridtable\">");
htmDef.WriteLine("<tr><th>Name</th><th>Type</th><th>Description</th>");
foreach (DocQuantity docprop in entity.Quantities)
{
htmDef.WriteLine("<tr><td>" + docprop.Name + "</td><td>");
htmDef.WriteDefinition(docprop.QuantityType.ToString());
htmDef.WriteLine("</td><td>");
bool showdefaultdesc = false;
if(docprop.Localization.Count > 0)
{
htmDef.WriteLine("<table class=\"gridtable\">");
docprop.Localization.Sort();
foreach (DocLocalization doclocal in docprop.Localization)
{
string localname = doclocal.Name;
string localdesc = doclocal.Documentation;
string localid = doclocal.Locale.Substring(0, 2).ToLower();
if (String.IsNullOrEmpty(localdesc) && localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null)
{
localdesc = docprop.Documentation;
showdefaultdesc = false;
}
htmDef.WriteLine("<tr><td><img src=\"../../../img/locale-" + localid + ".png\" /></td><td><b>" + localname + "</b></td><td>" + localdesc + "</td></tr>");
}
htmDef.WriteLine("</table>");
}
if(showdefaultdesc)
{
htmDef.WriteLine(docprop.Documentation);
}
htmDef.WriteLine("</td></tr>");
}
htmDef.WriteLine("</table>");
// write url for incoming page link
htmDef.WriteLinkTo(entity);
htmDef.WriteFooter(docPublication.Footer);
}
// generate PSD listing
using (FormatXML formatPSD = new FormatXML(path + @"\qto\" + entity.Name + ".xml", typeof(QtoSetDef), QtoSetDef.DefaultNamespace)) // full casing for compatibility with original files
{
formatPSD.Instance = Program.ExportQto(entity);
formatPSD.Save();
}
}
}
}
}
// v1.8: write links to express-g
htmSchema.WriteLine(
"<p><a href=\"../../annex/annex-d/" + MakeLinkName(schema) + "/index.htm\" ><img src=\"../../img/diagram.png\" style=\"border: 0px\" title=\"Link to EXPRESS-G diagram\" alt=\"Link to EXPRESS-G diagram\"> EXPRESS-G diagram</a></p>");
// link to this page
htmSchema.WriteLinkTo(schema);
htmSchema.WriteFooter(docPublication.Footer);
}
}
}
htmSectionTOC.WriteLine(
"</table>\r\n" +
"</div>\r\n" +
"</body>\r\n" +
"</html>\r\n");
}
}
int iAnnex = 0;
char chAnnex = 'A';
foreach (DocAnnex docannex in docProject.Annexes)
{
worker.ReportProgress(++progressCurrent, docannex);
iAnnex--;
htmTOC.WriteTOC(0, "<a class=\"listing-link\" href=\"annex/annex-" + chAnnex.ToString().ToLower() + ".htm\">Annex " + chAnnex.ToString() + ". " + docannex.Name + "</a>");
// write the section page
using (FormatHTM htmSection = new FormatHTM(path + @"\annex\annex-" + chAnnex.ToString().ToLower() + @".htm", mapEntity, mapSchema, included))
{
htmSection.WriteHeader(docannex.Name, iAnnex, 0, 0, 0, docPublication.Header);
htmSection.WriteScript(iAnnex, 0, 0, 0);
htmSection.WriteLine("<h1 class=\"annex\">Annex " + chAnnex.ToString() + "</h1>");
if (chAnnex == 'A')
{
htmSection.WriteLine("<div align=\"center\">(normative)</div>");
}
else
{
htmSection.WriteLine("<div align=\"center\">(informative)</div>");
}
htmSection.WriteLine("<h1 class=\"annex\">" + docannex.Name + "</h1>");
// no numbering for annex currently... docannex.Documentation = UpdateNumbering(section.Documentation, ref iFigure, ref iTable);
htmSection.WriteDocumentationMarkup(docannex.Documentation, docannex, docPublication);
// write listing of schemas
if (chAnnex == 'A')
{
// create page for model view
//htmSection.WriteComputerListing("IFC4", "ifc4", 0);
/*
DoExport(docProject, path + @"\annex\annex-a\default\ifc4.exp", null, null, instances, true);
DoExport(docProject, path + @"\annex\annex-a\default\ifcXML4.xsd", null, null, instances, true);
DoExport(docProject, path + @"\annex\annex-a\default\ifc4.ifc", null, null, instances, true);
DoExport(docProject, path + @"\annex\annex-a\default\ifc4.ifcxml", null, null, instances, true);
using (FormatHTM htmExpress = new FormatHTM(path + @"\annex\annex-a\default\ifc4.exp.htm", mapEntity, mapSchema, included))
{
htmExpress.UseAnchors = true;
htmExpress.WriteHeader("EXPRESS", 3);
htmExpress.WriteExpressSchema(docProject);
htmExpress.WriteFooter("");
}
using (FormatHTM htmXSD = new FormatHTM(path + @"\annex\annex-a\default\ifcXML4.xsd.htm", mapEntity, mapSchema, included))
{
string xsdcontent = null;
using (System.IO.StreamReader reader = new System.IO.StreamReader(path + @"\annex\annex-a\default\ifcXML4.xsd.txt"))
{
xsdcontent = reader.ReadToEnd();
}
htmXSD.UseAnchors = false;
htmXSD.WriteHeader("XSD", 3);
htmXSD.Write("<span class=\"express\">");
htmXSD.WriteFormatted(xsdcontent);
htmXSD.Write("</span>");
htmXSD.WriteFooter("");
}
*/
}
else if(chAnnex == 'C')
{
htmSection.WriteInheritanceMapping(docProject, views, docPublication);
}
htmSection.WriteLinkTo("annex-" + chAnnex.ToString().ToLower(), 1);
htmSection.WriteFooter(docPublication.Footer);
}
using (FormatHTM htmSectionTOC = new FormatHTM(path + @"\annex\toc-" + chAnnex.ToString().ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmSectionTOC.WriteLine(
"<html> \r\n" +
"<head> \r\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> \r\n" +
"<link rel=\"stylesheet\" type=\"text/css\" href=\"../ifc-styles.css\"> \r\n" +
"<title>Section Contents</title> \r\n" +
"</head> \r\n" +
"<body class=\"image\"> \r\n" +
"<div class=\"menu\">\r\n" +
"<table class=\"menu\" summary=\"Table of Contents\">\r\n");
// top level
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">" + chAnnex + ". <a class=\"listing-link\" href=\"annex-" + chAnnex.ToString().ToLower() + ".htm\" target=\"info\" >" + docannex.Name + "</a></td></tr>\r\n");
switch (chAnnex)
{
case 'A':
// each MVD has specific schema
//if (Properties.Settings.Default.ConceptTables)
{
int iCodeView = 0;
foreach (DocModelView docModelView in docProject.ModelViews)
{
if ((included == null || included.ContainsKey(docModelView)) && !String.IsNullOrEmpty(docModelView.Code))
{
iCodeView++;
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-a/" + MakeLinkName(docModelView) + "/index.htm\" >A." + iCodeView.ToString() + " " + docModelView.Name + "</a>");
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">A." + iCodeView.ToString() + " <a href=\"annex-a/" + MakeLinkName(docModelView) + "/index.htm\" target=\"info\" >" + docModelView.Name + "</a></td></tr>");
// create page for model view
string pathRoot = path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\index.htm";
using (FormatHTM htmRoot = new FormatHTM(pathRoot, mapEntity, mapSchema, included))
{
htmRoot.WriteComputerListing(docModelView.Name, docModelView.Code, iCodeView, docPublication);
}
// show filtered schemas for model views only if exchanges defined
DocModelView[] modelviews = docProject.GetViewInheritance(docModelView);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".exp", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".xsd", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".ifc", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
//DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".ifcxml", modelviews, locales, instances);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".xml", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "-psd.zip", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "-qto.zip", modelviews, locales, DocDefinitionScopeEnum.Default, instances);
if (docPublication.GetFormatOption(DocFormatSchemaEnum.STEP) != DocFormatOptionEnum.None)
{
using (FormatHTM htmExpress = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".exp.htm", mapEntity, mapSchema, included))
{
htmExpress.UseAnchors = true;
htmExpress.WriteHeader("EXPRESS", 3, docPublication.Header);
htmExpress.WriteExpressSchema(docProject);
htmExpress.WriteFooter("");
}
}
DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".mvdxml", new DocModelView[] { docModelView }, locales, DocDefinitionScopeEnum.Default, instances);
foreach(DocFormat docFormat in docPublication.Formats)
{
IFormatExtension formatextension = null;
if (docFormat.FormatOptions != DocFormatOptionEnum.None && mapFormatSchema.TryGetValue(docFormat.FormatType, out formatextension))
{
string content = formatextension.FormatDefinitions(docProject, mapEntity, included);
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "." + docFormat.ExtensionSchema, false))
{
writer.Write(content);
}
// write formatted
using(FormatHTM htmFormat = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "." + docFormat.ExtensionSchema + ".htm", mapEntity, mapSchema, included))
{
htmFormat.UseAnchors = false;
htmFormat.WriteHeader(docFormat.ExtensionSchema, 3, docPublication.Header);
htmFormat.WriteExpression(content);
htmFormat.WriteFooter("");
}
}
}
}
}
}
break;
case 'B':
// alphabetical listings
htmTOC.WriteTOC(1, "B.1 Definitions");
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1 Definitions</td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_definedtypes.htm\" >B.1.1 Defined types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.1 <a href=\"annex-b/alphabeticalorder_definedtypes.htm\" target=\"info\" >Defined types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_enumtypes.htm\" >B.1.2 Enumeration types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.2 <a href=\"annex-b/alphabeticalorder_enumtypes.htm\" target=\"info\" >Enumeration types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_selecttypes.htm\" >B.1.3 Select types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.3 <a href=\"annex-b/alphabeticalorder_selecttypes.htm\" target=\"info\" >Select types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_entities.htm\" >B.1.4 Entities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.4 <a href=\"annex-b/alphabeticalorder_entities.htm\" target=\"info\" >Entities</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_functions.htm\" >B.1.5 Functions</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.5 <a href=\"annex-b/alphabeticalorder_functions.htm\" target=\"info\" >Functions</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_rules.htm\" >B.1.6 Rules</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.6 <a href=\"annex-b/alphabeticalorder_rules.htm\" target=\"info\" >Rules</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_psets.htm\" >B.1.7 Property sets</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.7 <a href=\"annex-b/alphabeticalorder_psets.htm\" target=\"info\" >Property sets</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_qsets.htm\" >B.1.8 Quantity sets</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.8 <a href=\"annex-b/alphabeticalorder_qsets.htm\" target=\"info\" >Quantity sets</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/alphabeticalorder_psets.htm\" >B.1.9 Individual properties</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B.1.9 <a href=\"annex-b/alphabeticalorder_properties.htm\" target=\"info\" >Individual properties</a></td></tr>");
// locales
int indexb = 1;
foreach (string locale in listLocale.Keys)
{
indexb++;
string localeheader = locale.ToUpper();
if (locale == "zh")
{
localeheader += " [Chinese]"; // no language-generic info available
}
else
{
try
{
System.Globalization.CultureInfo cultureinfo = System.Globalization.CultureInfo.GetCultureInfo(locale);
if (cultureinfo != null)
{
localeheader += " [" + cultureinfo.EnglishName + "]";
}
}
catch
{
}
}
// each locale
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmTOC.WriteTOC(1, "B." + indexb.ToString() + " " + localeheader);
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + " " + localeheader + "</td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_definedtypes.htm\" >B." + indexb.ToString() + ".1 Defined types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".1 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_definedtypes.htm\" target=\"info\" >Defined types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_enumtypes.htm\" >B." + indexb.ToString() + ".2 Enumeration types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".2 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_enumtypes.htm\" target=\"info\" >Enumeration types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_selecttypes.htm\" >B." + indexb.ToString() + ".3 Select types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".3 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_selecttypes.htm\" target=\"info\" >Select types</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_entities.htm\" >B." + indexb.ToString() + ".4 Entities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".4 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_entities.htm\" target=\"info\" >Entities</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_functions.htm\" >B." + indexb.ToString() + ".5 Functions</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".5 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_functions.htm\" target=\"info\" >Functions</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_rules.htm\" >B." + indexb.ToString() + ".6 Rules</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">B." + indexb.ToString() + ".6 <a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_rules.htm\" target=\"info\" >Rules</a></td></tr>");
/* no translations currently -- enable in future
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_psets.htm\" >B." + indexb.ToString() + ".7 Property sets</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_psets.htm\" target=\"info\" >B." + indexb.ToString() + ".7 Property sets</a></td></tr>");
htmTOC.WriteTOC(2, "<a class=\"listing-link\" href=\"annex/annex-b/" + locale.ToLower() + "/alphabeticalorder_qsets.htm\" >B." + indexb.ToString() + ".8 Quantity sets</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a href=\"annex-b/" + locale.ToLower() + "/alphabeticalorder_qsets.htm\" target=\"info\" >B." + indexb.ToString() + ".8 Quantity sets</a></td></tr>");
*/
}
// generate alphabetical listings
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocDefined>("Defined Types", path, "definedtypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocEnumeration>("Enumeration Types", path, "enumtypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocSelect>("Select Types", path, "selecttypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_entities.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocEntity>("Entities", path, "entities", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_functions.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocFunction>("Functions", path, "functions", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_rules.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocGlobalRule>("Rules", path, "rules", docPublication);
}
// no translations currently -- enable in future
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_psets.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocPropertySet>("Property Sets", path, "psets", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteAlphabeticalListing<DocQuantitySet>("Quantity Sets", path, "qsets", docPublication);
}
// generate localized listings
foreach (string locale in listLocale.Keys)
{
string code = listLocale[locale]; // null for default
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocDefined>("Defined Types", code, path, "definedtypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocEnumeration>("Enumeration Types", code, path, "enumtypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocSelect>("Select Types", code, path, "selecttypes", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_entities.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocEntity>("Entities", code, path, "entities", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_functions.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocFunction>("Functions", code, path, "functions", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_rules.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocGlobalRule>("Rules", code, path, "rules", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_psets.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocPropertySet>("Property Sets", code, path, "psets", docPublication);
}
using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included))
{
htmAlpha1.WriteLocalizedListing<DocQuantitySet>("Quantity Sets", code, path, "qsets", docPublication);
}
}
break;
case 'C':
// Inheritance listings
if (docProject.ModelViews != null)
{
iView = 0;
foreach (DocModelView docView in docProject.ModelViews)
{
if (included == null || included.ContainsKey(docView))
{
iView++;
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-c/" + MakeLinkName(docView) + "/index.htm\" >C." + iView + " " + docView.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">C." + iView + " <a href=\"annex-c/" + MakeLinkName(docView) + "/index.htm\" target=\"info\" >" + docView.Name + "</a></td></tr>");
// diagram for view
//if (!Properties.Settings.Default.SkipDiagrams)
{
Dictionary<DocObject, bool> viewinclude = new Dictionary<DocObject, bool>();
Dictionary<Rectangle, DocEntity> mapRectangle = new Dictionary<Rectangle, DocEntity>();
docProject.RegisterObjectsInScope(docView, viewinclude);
using (Image imgDiagram = FormatPNG.CreateInheritanceDiagram(docProject, viewinclude, docEntityRoot, null, new Font(FontFamily.GenericSansSerif, 8.0f), mapRectangle))
{
using (FormatHTM htmCover = new FormatHTM(path + @"\annex\annex-c\" + MakeLinkName(docView) + @"\index.htm", mapEntity, mapSchema, included))
{
htmCover.WriteHeader(docView.Name, 3, docPublication.Header);
htmCover.WriteLine("<h2 class=\"std\">C." + iView + " " + docView.Name + " Inheritance</h2>");
htmCover.WriteLine("<img src=\"cover.png\" usemap=\"#f\"/>");
htmCover.WriteLine("<map name=\"f\">");
foreach (Rectangle rc in mapRectangle.Keys)
{
DocEntity docEntref = mapRectangle[rc];
DocSchema docEntsch = docProject.GetSchemaOfDefinition(docEntref);
string hyperlink = "../../../schema/" + docEntsch.Name.ToLower() + "/lexical/" + docEntref.Name.ToLower() + ".htm";
htmCover.WriteLine("<area shape=\"rect\" coords=\"" + rc.Left + "," + rc.Top + "," + rc.Right + "," + rc.Bottom + "\" href=\"" + hyperlink + "\" alt=\"" + docEntref.Name + "\" />");
}
htmCover.WriteLine("</map>");
htmCover.WriteLinkTo("inheritance-" + MakeLinkName(docView), 3);
htmCover.WriteFooter(String.Empty);
using (FormatHTM htmLink = new FormatHTM(path + "/link/inheritance-" + MakeLinkName(docView) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-c/" + DocumentationISO.MakeLinkName(docView) + "/index.htm", docPublication);
}
}
// create image after (depends on directory being created first)
try
{
imgDiagram.Save(path + @"\annex\annex-c\" + MakeLinkName(docView) + @"\cover.png");
}
catch
{
}
}
}
// all entities
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-c/" + MakeLinkName(docView) + "/all.htm\" >C." + iView + ".1 All entities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">C." + iView + ".1 <a href=\"annex-c/" + MakeLinkName(docView) + "/all.htm\" target=\"info\" >All entities</a></td></tr>");
using (FormatHTM htmInheritAll = new FormatHTM(path + "/annex/annex-c/" + MakeLinkName(docView) + "/all.htm", mapEntity, mapSchema, included))
{
htmInheritAll.WriteInheritanceListing(null, false, "All entities", docView, path, "all", docPublication);
}
// specific inheritance
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-c/" + MakeLinkName(docView) + "/roots.htm\" >C." + iView + ".2 Rooted entities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">C." + iView + ".2 <a href=\"annex-c/" + MakeLinkName(docView) + "/roots.htm\" target=\"info\" >Rooted entities</a></td></tr>");
using (FormatHTM htmInheritAll = new FormatHTM(path + "/annex/annex-c/" + MakeLinkName(docView) + "/roots.htm", mapEntity, mapSchema, included))
{
htmInheritAll.WriteInheritanceListing("IfcRoot", false, "Rooted entities", docView, path, "roots", docPublication);
}
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-c/" + MakeLinkName(docView) + "/types.htm\" >C." + iView + ".3 Object types</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">C." + iView + ".3 <a href=\"annex-c/" + MakeLinkName(docView) + "/types.htm\" target=\"info\" >Object types</a></td></tr>");
using (FormatHTM htmInheritAll = new FormatHTM(path + "/annex/annex-c/" + MakeLinkName(docView) + "/types.htm", mapEntity, mapSchema, included))
{
htmInheritAll.WriteInheritanceListing("IfcObject", true, "Object types", docView, path, "types", docPublication);
}
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
}
}
}
break;
case 'D':
// Diagrams
// Express-G diagrams
htmTOC.WriteTOC(1, "D.1 Schema diagrams");
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.1 Schema diagrams</td></tr>");
for (int iSchemaSection = 5; iSchemaSection <= 8; iSchemaSection++)
{
DocSection docSection = docProject.Sections[iSchemaSection - 1];
int iDiagramSection = iSchemaSection - 4;
htmTOC.WriteTOC(2, "D.1." + iDiagramSection + " " + docSection.Name);
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.1." + iDiagramSection + " " + docSection.Name + "</td></tr>");
int iSchema = 0;
for (int iSchemaIndex = 1; iSchemaIndex <= docSection.Schemas.Count; iSchemaIndex++)
{
DocSchema docSchema = docSection.Schemas[iSchemaIndex - 1];
if (included == null || included.ContainsKey(docSchema))
{
iSchema++;
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"annex/annex-d/" + MakeLinkName(docSchema) + "/index.htm\" >D.1." + iDiagramSection + "." + iSchema + " " + docSchema.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.1." + iDiagramSection + "." + iSchema + " <a href=\"annex-d/" + MakeLinkName(docSchema) + "/index.htm\" target=\"info\" >" + docSchema.Name + "</a></td></tr>");
// determine number of diagrams
int iLastDiagram = docSchema.UpdateDiagramPageNumbers();
// generate diagrams
//if (!Properties.Settings.Default.SkipDiagrams)
{
Image imageSchema = FormatPNG.CreateSchemaDiagram(docSchema, mapEntity, diagramformat);
using (FormatHTM htmSchemaDiagram = new FormatHTM(path + "/annex/annex-d/" + MakeLinkName(docSchema) + "/index.htm", mapEntity, mapSchema, included))
{
int iSub = 1;
htmSchemaDiagram.WriteHeader(docSection.Name, 3, docPublication.Header);
htmSchemaDiagram.WriteScript(iAnnex, iSub, iSection, 0);
htmSchemaDiagram.WriteLine("<h4 class=\"std\">D.1." + iDiagramSection + "." + iSchema + " " + docSchema.Name + "</h4>");
htmSchemaDiagram.WriteLine("<p>");
// write thumbnail links for each diagram
for (int iDiagram = 1; iDiagram <= iLastDiagram; iDiagram++)
{
string formatnumber = iDiagram.ToString("D4"); // 0001
htmSchemaDiagram.WriteLine("<a href=\"diagram_" + formatnumber + ".htm\">" +
"<img src=\"diagram_" + formatnumber + ".png\" width=\"300\" height=\"444\" /></a>"); // width=\"150\" height=\"222\">
// generate EXPRESS-G diagram
if (docSchema.DiagramPagesHorz != 0)
{
int pageY = (iDiagram - 1) / docSchema.DiagramPagesHorz;
int pageX = (iDiagram - 1) % docSchema.DiagramPagesHorz;
int pagePixelCX = CtlExpressG.PageX;
int pagePixelCY = CtlExpressG.PageY;
using (Image imagePage = new Bitmap(pagePixelCX, pagePixelCY))
{
using (Graphics g = Graphics.FromImage(imagePage))
{
g.DrawImage(imageSchema, new Rectangle(0, 0, pagePixelCX, pagePixelCY), new Rectangle(pagePixelCX * pageX, pagePixelCY * pageY, pagePixelCX, pagePixelCY), GraphicsUnit.Pixel);
}
imagePage.Save(path + "/annex/annex-d/" + MakeLinkName(docSchema) + "/diagram_" + formatnumber + ".png");
}
}
}
htmSchemaDiagram.WriteLine("</p>");
htmSchemaDiagram.WriteFooter(docPublication.Footer);
}
double scale = 0.375; // hard-coded for now -- read from SCHEMATA.scale
double pageCX = 1600; // hard-coded for now -- read from SCHEMATA.settings.page.width
double pageCY = 2370; // hard-coded for now -- read from SCHEMATA.settings.page.height
for (int iDiagram = 1; iDiagram <= iLastDiagram; iDiagram++)
{
string formatnumber = iDiagram.ToString("D4");
using (FormatHTM htmSchema = new FormatHTM(path + "/annex/annex-d/" + MakeLinkName(docSchema) + "/diagram_" + formatnumber + ".htm", mapEntity, mapSchema, included))
{
htmSchema.WriteHeader(docSchema.Name, 3, docPublication.Header);
htmSchema.WriteScript(iAnnex, 1, iDiagramSection, iDiagram);
htmSchema.WriteLine("<h4 class=\"std\">");
if (iDiagram > 1)
{
htmSchema.Write("<a href=\"diagram_" + (iDiagram - 1).ToString("D4") + ".htm\"><img src=\"../../../img/navleft.png\" style=\"border: 0px\" /></a>");
}
else
{
// disabled
htmSchema.Write("<img src=\"../../../img/navleft.png\" style=\"border: 0px\" />");
}
if (iDiagram < iLastDiagram)
{
htmSchema.Write("<a href=\"diagram_" + (iDiagram + 1).ToString("D4") + ".htm\"><img src=\"../../../img/navright.png\" style=\"border: 0px\" /></a>");
}
else
{
// disabled
htmSchema.Write("<img src=\"../../../img/navright.png\" style=\"border: 0px\" />");
}
htmSchema.Write(" " + docSchema.Name + " (" + iDiagram + "/" + iLastDiagram + ")");
htmSchema.WriteLine("</h4>");
htmSchema.WriteLine("<img src=\"diagram_" + formatnumber + ".png\" usemap=\"#diagram\" >");
htmSchema.WriteLine(" <map name=\"diagram\" >");
foreach (DocType docType in docSchema.Types)
{
if ((included == null || included.ContainsKey(docType)) && docType.DiagramNumber == iDiagram && docType.DiagramRectangle != null)
{
double x0 = docType.DiagramRectangle.X % pageCX * scale;
double y0 = docType.DiagramRectangle.Y % pageCY * scale;
double x1 = docType.DiagramRectangle.X % pageCX * scale + docType.DiagramRectangle.Width % pageCX * scale;
double y1 = docType.DiagramRectangle.Y % pageCY * scale + docType.DiagramRectangle.Height % pageCY * scale;
string link = "../../../schema/" + mapSchema[docType.Name].ToLower() + "/lexical/" + docType.Name.ToLower() + ".htm";
htmSchema.WriteLine(" <area shape=\"rect\" coords=\"" + x0 + ", " + y0 + ", " + x1 + ", " + y1 + "\" alt=\"Navigate\" href=\"" + link + "\" />");
}
}
foreach (DocEntity docType in docSchema.Entities)
{
if ((included == null || included.ContainsKey(docType)) && docType.DiagramNumber == iDiagram && docType.DiagramRectangle != null)
{
double x0 = docType.DiagramRectangle.X % pageCX * scale;
double y0 = docType.DiagramRectangle.Y % pageCY * scale;
double x1 = docType.DiagramRectangle.X % pageCX * scale + docType.DiagramRectangle.Width % pageCX * scale;
double y1 = docType.DiagramRectangle.Y % pageCY * scale + docType.DiagramRectangle.Height % pageCY * scale;
string link = "../../../schema/" + mapSchema[docType.Name].ToLower() + "/lexical/" + docType.Name.ToLower() + ".htm";
htmSchema.WriteLine(" <area shape=\"rect\" coords=\"" + x0 + ", " + y0 + ", " + x1 + ", " + y1 + "\" alt=\"Navigate\" href=\"" + link + "\" />");
}
}
if (docSchema.PageTargets != null)
{
foreach (DocPageTarget docPageTarget in docSchema.PageTargets)
{
foreach (DocPageSource docPageSource in docPageTarget.Sources)
{
if (docPageSource.DiagramNumber == iDiagram && docPageSource.DiagramRectangle != null)
{
double x0 = docPageSource.DiagramRectangle.X % pageCX * scale;
double y0 = docPageSource.DiagramRectangle.Y % pageCY * scale;
double x1 = docPageSource.DiagramRectangle.X % pageCX * scale + docPageSource.DiagramRectangle.Width % pageCX * scale;
double y1 = docPageSource.DiagramRectangle.Y % pageCY * scale + docPageSource.DiagramRectangle.Height % pageCY * scale;
string link = "diagram_" + docPageTarget.DiagramNumber.ToString("D4") + ".htm";
htmSchema.WriteLine(" <area shape=\"rect\" coords=\"" + x0 + ", " + y0 + ", " + x1 + ", " + y1 + "\" alt=\"Navigate\" href=\"" + link + "\" />");
}
}
}
}
if (docSchema.SchemaRefs != null)
{
foreach (DocSchemaRef docSchemaRef in docSchema.SchemaRefs)
{
foreach (DocDefinitionRef docDefinitionRef in docSchemaRef.Definitions)
{
if (docDefinitionRef.DiagramNumber == iDiagram && docDefinitionRef.DiagramRectangle != null)
{
double x0 = docDefinitionRef.DiagramRectangle.X % pageCX * scale;
double y0 = docDefinitionRef.DiagramRectangle.Y % pageCY * scale;
double x1 = docDefinitionRef.DiagramRectangle.X % pageCX * scale + docDefinitionRef.DiagramRectangle.Width % pageCX * scale;
double y1 = docDefinitionRef.DiagramRectangle.Y % pageCY * scale + docDefinitionRef.DiagramRectangle.Height % pageCY * scale;
if (mapSchema.ContainsKey(docDefinitionRef.Name))
{
DocDefinition docDef = mapEntity[docDefinitionRef.Name] as DocDefinition;
if (included == null || included.ContainsKey(docDef))
{
string link = "../../../schema/" + mapSchema[docDefinitionRef.Name].ToLower() + "/lexical/" + docDefinitionRef.Name.ToLower() + ".htm";
htmSchema.WriteLine(" <area shape=\"rect\" coords=\"" + x0 + ", " + y0 + ", " + x1 + ", " + y1 + "\" alt=\"Navigate\" href=\"" + link + "\" />");
}
}
}
}
}
}
htmSchema.WriteLine(" </map>");
htmSchema.WriteLine("</img>");
htmSchema.WriteFooter(docPublication.Footer);
}
}
}
}
}
}
// Instance diagrams
htmTOC.WriteTOC(1, "D.2 Instance diagrams");
htmSectionTOC.WriteLine("<tr><td> </td></tr>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.2 Instance diagrams</td></tr>");
// D.1 -- schema diagrams - express-G
// D.1.1 -- core layer
// D.1.2 -- shared layer
// D.1.3 -- domain layer
// D.1.4 -- resource layer
// D.1.4.1~ schema
// D.2 -- instance diagrams
// D.2.1~ model view
// D.2.1.1~ entity
if (docProject.ModelViews != null)
{
iView = 0;
foreach (DocModelView docView in docProject.ModelViews)
{
if (included == null || included.ContainsKey(docView))
{
iView++;
htmTOC.WriteTOC(2, "D.2." + iView.ToString() + " " + docView.Name);
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.2." + iView.ToString() + "<a href=\"annex-d/" + MakeLinkName(docView) + "/cover.htm\" target=\"info\"> " + docView.Name + "</a></td></tr>");
Dictionary<DocObject, bool> viewinclude = new Dictionary<DocObject, bool>();
Dictionary<Rectangle, DocEntity> mapRectangle = new Dictionary<Rectangle, DocEntity>();
docProject.RegisterObjectsInScope(docView, viewinclude);
using (FormatHTM htmCover = new FormatHTM(path + @"\annex\annex-d\" + MakeLinkName(docView) + @"\cover.htm", mapEntity, mapSchema, included))
{
htmCover.WriteHeader(docView.Name, 3, docPublication.Header);
htmCover.WriteLine("<h3 class=\"std\">D.2." + iView + " " + docView.Name + " Diagrams</h3>");
htmCover.WriteFooter(String.Empty);
}
// sort by entity name
SortedList<string, DocConceptRoot> listEntity = new SortedList<string, DocConceptRoot>();
foreach (DocConceptRoot docRoot in docView.ConceptRoots)
{
if (docRoot.ApplicableEntity != null)
{
if (!listEntity.ContainsKey(docRoot.ApplicableEntity.Name)) // only one concept root per entity per view currently supported
{
listEntity.Add(docRoot.ApplicableEntity.Name, docRoot);
}
}
}
// now generate
int iRoot = 0;
foreach (DocConceptRoot docRoot in listEntity.Values)
{
iRoot++;
htmTOC.WriteTOC(3, "<a class=\"listing-link\" href=\"annex/annex-d/" + MakeLinkName(docView) + "/" + MakeLinkName(docRoot.ApplicableEntity) + ".htm\" >D.2." + iView.ToString() + "." + iRoot.ToString() + " " + docRoot.ApplicableEntity.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">D.2." + iView.ToString() + "." + iRoot.ToString() + " <a href=\"annex-d/" + MakeLinkName(docView) + "/" + MakeLinkName(docRoot.ApplicableEntity) + ".htm\" target=\"info\">" + docRoot.ApplicableEntity.Name + "</a></td></tr>");
string pathRoot = path + @"\annex\annex-d\" + MakeLinkName(docView) + @"\" + MakeLinkName(docRoot.ApplicableEntity) + ".htm";
using (FormatHTM htmRoot = new FormatHTM(pathRoot, mapEntity, mapSchema, included))
{
htmRoot.WriteHeader(docRoot.ApplicableEntity.Name, iAnnex, 2, 0, iView, docPublication.Header);
htmRoot.WriteScript(iAnnex, 2, iView, iRoot);
htmRoot.WriteLine("<h3 class=\"std\">D.2." + iView.ToString() + "." + iRoot.ToString() + " " + docRoot.ApplicableEntity.Name + "</h3>");
string diagram = FormatDiagram(docProject, docRoot.ApplicableEntity, docView, listFigures, mapEntity, mapSchema, path);
htmRoot.WriteLine(diagram);
htmRoot.WriteFooter(docPublication.Footer);
}
}
}
}
}
break;
case 'E':
if (docProject.Examples != null && !Properties.Settings.Default.SkipDiagrams)
{
List<int> indexpath = new List<int>();
indexpath.Add(0);
foreach(DocExample docExample in docProject.Examples)
{
Dictionary<string, Type> typemap = new Dictionary<string, Type>();
Compiler compiler = new Compiler(docProject, docExample.Views.ToArray(), null);
System.Reflection.Emit.AssemblyBuilder assembly = compiler.Assembly;
try
{
Type[] types = assembly.GetTypes();
foreach (Type t in types)
{
typemap.Add(t.Name.ToUpper(), t);
}
}
catch(System.Reflection.ReflectionTypeLoadException)
{
// schema could not be compiled according to definition
}
List<DocXsdFormat> listFormats = new List<DocXsdFormat>(xsdFormatBase);
if (docExample.Views.Count > 0)
{
foreach (DocXsdFormat customformat in docExample.Views[0].XsdFormats)
{
listFormats.Add(customformat);
}
}
GenerateExample(docProject, docPublication, docExample, listFormats, path, indexpath, included, mapEntity, mapSchema, typemap, listFigures, listTables, htmTOC, htmSectionTOC, mapFormatData, null, null);
}
}
break;
case 'F':
if (docProject.ChangeSets != null)
{
for (int iChangeset = 1; iChangeset <= docProject.ChangeSets.Count; iChangeset++)
{
DocChangeSet docChangeSet = docProject.ChangeSets[iChangeset - 1];
// what's new page
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-f/" + MakeLinkName(docChangeSet) + "/index.htm\" >F." + iChangeset + " " + docChangeSet.Name + "</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\">F." + iChangeset + " <a href=\"annex-f/" + MakeLinkName(docChangeSet) + "/index.htm\" target=\"info\" >" + docChangeSet.Name + "</a></td></tr>");
using (FormatHTM htmWhatsnew = new FormatHTM(path + @"\annex\annex-f\" + MakeLinkName(docChangeSet) + @"\index.htm", mapEntity, mapSchema, included))
{
htmWhatsnew.WriteHeader(docChangeSet.Name, 3, docPublication.Header);
htmWhatsnew.WriteScript(iAnnex, iChangeset, 0, 0);
htmWhatsnew.WriteLine("<h4 class=\"std\">F." + iChangeset + " " + docChangeSet.Name + "</h4>");
htmWhatsnew.WriteDocumentationMarkup(docChangeSet.Documentation, docChangeSet, docPublication);
htmWhatsnew.WriteLinkTo(MakeLinkName(docChangeSet), 3);
htmWhatsnew.WriteFooter(docPublication.Footer);
}
// change log for entities
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-f/" + MakeLinkName(docChangeSet) + "/changelog.htm\" >F." + iChangeset + ".1 Entities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a href=\"annex-f/" + MakeLinkName(docChangeSet) + "/changelog.htm\" target=\"info\" >F." + iChangeset + ".1 Entities</a></td></tr>");
string pathChange = path + @"\annex\annex-f\" + MakeLinkName(docChangeSet) + @"\changelog.htm";
using (FormatHTM htmChange = new FormatHTM(pathChange, mapEntity, mapSchema, included))
{
htmChange.WriteHeader(docChangeSet.Name, 3, docPublication.Header);
htmChange.WriteScript(iAnnex, iChangeset, 1, 0);
htmChange.WriteLine("<h4 class=\"std\">F." + iChangeset + ".1 Entities</h4>");
htmChange.WriteLine("<table class=\"gridtable\">");
htmChange.WriteLine("<tr>" +
"<th>Item</th>" +
"<th>SPF</th>" +
"<th>XML</th>" +
"<th>Change</th>" +
"<th>Description</th>" +
"</tr>");
foreach (DocChangeAction docChangeItem in docChangeSet.ChangesEntities)
{
htmChange.WriteChangeItem(docChangeItem, 0);
}
htmChange.WriteLine("</table>");
htmChange.WriteLinkTo(MakeLinkName(docChangeSet) + "-changelog", 3);
htmChange.WriteFooter(docPublication.Footer);
}
// change log for properties
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-f/" + MakeLinkName(docChangeSet) + "/properties.htm\" >F." + iChangeset + ".2 Properties</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a href=\"annex-f/" + MakeLinkName(docChangeSet) + "/properties.htm\" target=\"info\" >F." + iChangeset + ".1 Properties</a></td></tr>");
pathChange = path + @"\annex\annex-f\" + MakeLinkName(docChangeSet) + @"\properties.htm";
using (FormatHTM htmChange = new FormatHTM(pathChange, mapEntity, mapSchema, included))
{
htmChange.WriteHeader(docChangeSet.Name, 3, docPublication.Header);
htmChange.WriteScript(iAnnex, iChangeset, 1, 0);
htmChange.WriteLine("<h4 class=\"std\">F." + iChangeset + ".2 Properties</h4>");
htmChange.WriteLine("<table class=\"gridtable\">");
htmChange.WriteLine("<tr>" +
"<th>Item</th>" +
"<th>SPF</th>" +
"<th>XML</th>" +
"<th>Change</th>" +
"<th>Description</th>" +
"</tr>");
if (docChangeSet.ChangesProperties != null)
{
foreach (DocChangeAction docChangeItem in docChangeSet.ChangesProperties)
{
htmChange.WriteChangeItem(docChangeItem, 0);
}
}
htmChange.WriteLine("</table>");
htmChange.WriteLinkTo(MakeLinkName(docChangeSet) + "-properties", 3);
htmChange.WriteFooter(docPublication.Footer);
}
// change log for quantities
htmTOC.WriteTOC(1, "<a class=\"listing-link\" href=\"annex/annex-f/" + MakeLinkName(docChangeSet) + "/quantities.htm\" >F." + iChangeset + ".3 Quantities</a>");
htmSectionTOC.WriteLine("<tr class=\"std\"><td class=\"menu\"><a href=\"annex-f/" + MakeLinkName(docChangeSet) + "/quantities.htm\" target=\"info\" >F." + iChangeset + ".3 Quantities</a></td></tr>");
pathChange = path + @"\annex\annex-f\" + MakeLinkName(docChangeSet) + @"\quantities.htm";
using (FormatHTM htmChange = new FormatHTM(pathChange, mapEntity, mapSchema, included))
{
htmChange.WriteHeader(docChangeSet.Name, 3, docPublication.Header);
htmChange.WriteScript(iAnnex, iChangeset, 1, 0);
htmChange.WriteLine("<h4 class=\"std\">F." + iChangeset + ".3 Quantities</h4>");
htmChange.WriteLine("<table class=\"gridtable\">");
htmChange.WriteLine("<tr>" +
"<th>Item</th>" +
"<th>SPF</th>" +
"<th>XML</th>" +
"<th>Change</th>" +
"<th>Description</th>" +
"</tr>");
if (docChangeSet.ChangesQuantities != null)
{
foreach (DocChangeAction docChangeItem in docChangeSet.ChangesQuantities)
{
htmChange.WriteChangeItem(docChangeItem, 0);
}
}
htmChange.WriteLine("</table>");
htmChange.WriteLinkTo(MakeLinkName(docChangeSet) + "-quantities", 3);
htmChange.WriteFooter(docPublication.Footer);
}
}
}
break;
}
htmSectionTOC.WriteLine(
"</table>\r\n" +
"</div>\r\n" +
"</body>\r\n" +
"</html>\r\n");
}
chAnnex++;
}
// bibliography
try
{
using (FormatHTM htmSection = new FormatHTM(path + @"\bibliography.htm", mapEntity, mapSchema, included))
{
htmSection.WriteHeader("Bibliography", 0, docPublication.Header);
htmSection.Write(
"\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
" parent.index.location.replace(\"blank.htm\");\r\n" +
"//-->\r\n" +
"</script>\r\n");
htmSection.WriteLine("<h1>Bibliography</h1>");
htmSection.WriteLine("<dl>");
if (docProject.InformativeReferences != null)
{
foreach (DocReference docRef in docProject.InformativeReferences)
{
htmSection.WriteLine("<dt class=\"bibliographyreference\"><a id=\"" + MakeLinkName(docRef) + "\" id=\"" + MakeLinkName(docRef) + "\">" + docRef.Name + "</a>, <i>" + docRef.Documentation + "</i></dt>");
htmSection.WriteLine("<dd> </dd>");
}
}
htmSection.WriteLine("</dl>");
htmSection.WriteFooter(docPublication.Footer);
}
}
catch
{
htmTOC.ToString();
}
htmTOC.WriteLine("</p>");
// write figures
htmTOC.WriteLine("<h1 class=\"std\">Figures</h1>");
htmTOC.WriteLine("<p>");
htmTOC.WriteContentRefs(listFigures, "Figure");
htmTOC.WriteLine("</p>");
htmTOC.WriteLine("<p></p>");
// write tables
htmTOC.WriteLine("<h1 class=\"std\">Tables</h1>");
htmTOC.WriteLine("<p>");
htmTOC.WriteContentRefs(listTables, "Table");
htmTOC.WriteLine("</p>");
htmTOC.WriteFooter(docPublication.Footer);
}
worker.ReportProgress(++progressCurrent, "Index");
if (worker.CancellationPending)
return;
// generate index -- takes very long, so only run when changing
SortedList<string, DocObject> listIndex = new SortedList<string, DocObject>();
foreach (string key in mapEntity.Keys)
{
listIndex.Add(key, mapEntity[key]);
}
using (FormatHTM htmIndex = new FormatHTM(path + "/doc_index.htm", mapEntity, mapSchema, included)) // file name "doc_index" required by ISO
{
htmIndex.WriteHeader("Index", 0, docPublication.Header);
htmIndex.Write(
"\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
" parent.index.location.replace(\"blank.htm\");\r\n" +
"//-->\r\n" +
"</script>\r\n");
htmIndex.WriteLine(
"<div class=\"not-numbered\">\r\n" +
"<h1 class=\"std\">Index</h1>\r\n" +
"<p class=\"std\">\r\n");
foreach (string key in listIndex.Keys)
{
DocObject obj = mapEntity[key];
if (included == null || included.ContainsKey(obj))
{
htmIndex.WriteLine("<b>" + key + "</b> ");
// build ordered list of references in documentation
SortedDictionary<string, string> mapRefs = new SortedDictionary<string, string>();
foreach (string refkey1 in listIndex.Keys)
{
string doc = mapEntity[refkey1].Documentation;
if (doc != null)// && key != refkey) // also include main ref for ISO
{
if (refkey1 == key || doc.Contains(key))
{
DocObject refobj = (DocObject)mapEntity[refkey1];
string refnumber = null;
if (mapNumber != null && mapNumber.TryGetValue(refobj, out refnumber))
{
mapRefs.Add(refnumber, refkey1);
}
}
}
}
// search references of terms in documentation
string comma = "";
foreach (string refnumber in mapRefs.Keys)
{
string refkey = mapRefs[refnumber];
DocObject refobj = (DocObject)mapEntity[refkey];
string display = refobj.Name;//refnumber; // new: use names for bSI; numbers for ISO
if (refobj is DocPropertySet || refobj is DocPropertyEnumeration)
{
htmIndex.Write(comma + "<a class=\"listing-link\" title=\"" + refobj.Name + "\" href=\"schema/" + mapSchema[refkey].ToLower() + "/pset/" + refobj.Name.ToLower() + ".htm\">" + display + "</a>");
}
else if (refobj is DocQuantitySet)
{
htmIndex.Write(comma + "<a class=\"listing-link\" title=\"" + refobj.Name + "\" href=\"schema/" + mapSchema[refkey].ToLower() + "/qset/" + refobj.Name.ToLower() + ".htm\">" + display + "</a>");
}
else
{
htmIndex.Write(comma + "<a class=\"listing-link\" title=\"" + refobj.Name + "\" href=\"schema/" + mapSchema[refkey].ToLower() + "/lexical/" + refobj.Name.ToLower() + ".htm\">" + display + "</a>");
}
comma = ", ";
}
htmIndex.WriteLine("<br />\r\n");
}
}
worker.ReportProgress(++progressCurrent, "Links");
if (worker.CancellationPending)
return;
// new: incoming links
foreach(DocSection docLinkSection in docProject.Sections)
{
int iSection = docProject.Sections.IndexOf(docLinkSection) + 1;
using (FormatHTM htmLink = new FormatHTM(path + "/link/chapter-" + iSection.ToString() + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/chapter-" + iSection.ToString() + ".htm", docPublication);
}
foreach (DocSchema docLinkSchema in docLinkSection.Schemas)
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkSchema) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/content.htm", docPublication);
}
foreach (DocEntity docLinkObj in docLinkSchema.Entities)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/lexical/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach(DocType docLinkObj in docLinkSchema.Types)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/lexical/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach (DocFunction docLinkObj in docLinkSchema.Functions)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/lexical/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach (DocGlobalRule docLinkObj in docLinkSchema.GlobalRules)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/lexical/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach (DocPropertySet docLinkObj in docLinkSchema.PropertySets)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/pset/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach (DocPropertyEnumeration docLinkObj in docLinkSchema.PropertyEnums)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/pset/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
foreach (DocQuantitySet docLinkObj in docLinkSchema.QuantitySets)
{
if (included == null || included.ContainsKey(docLinkObj))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/qset/" + MakeLinkName(docLinkObj) + ".htm", docPublication);
}
}
}
}
}
char chAnnex = 'a';
foreach(DocAnnex docAnnex in docProject.Annexes)
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/annex-" + chAnnex + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-" + chAnnex + ".htm", docPublication);
}
chAnnex++;
}
foreach(DocAnnotation docAnnot in docProject.Annotations)
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docAnnot) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../" + MakeLinkName(docAnnot) + ".htm", docPublication);
}
}
foreach(DocChangeSet docChange in docProject.ChangeSets)
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docChange) + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-f/" + MakeLinkName(docChange) + "/index.htm", docPublication);
}
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docChange) + "-changelog.htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-f/" + MakeLinkName(docChange) + "/changelog.htm", docPublication);
}
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docChange) + "-properties.htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-f/" + MakeLinkName(docChange) + "/properties.htm", docPublication);
}
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docChange) + "-quantities.htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-f/" + MakeLinkName(docChange) + "/quantities.htm", docPublication);
}
}
foreach(DocModelView docView in docProject.ModelViews)
{
if (docView.Code != null)
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/listing-" + docView.Code.ToLower() + ".htm", mapEntity, mapSchema, included))
{
htmLink.WriteLinkPage("../annex/annex-a/" + MakeLinkName(docView) + "/index.htm", docPublication);
}
}
}
#if false
foreach (string key in listIndex.Keys)
{
DocObject obj = mapEntity[key];
if (included == null || included.ContainsKey(obj))
{
string schemaname = null;
if (mapSchema.TryGetValue(obj.Name, out schemaname))
{
using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(obj) + ".htm", mapEntity, mapSchema, included))
{
string linkurl = "../schema/" + schemaname.ToLower() + "/lexical/" + MakeLinkName(obj) + ".htm";
if (obj is DocPropertySet || obj is DocPropertyEnumeration)
{
linkurl = "../schema/" + schemaname.ToLower() + "/pset/" + MakeLinkName(obj) + ".htm";
}
else if (obj is DocQuantitySet)
{
linkurl = "../schema/" + schemaname.ToLower() + "/qset/" + MakeLinkName(obj) + ".htm";
}
htmLink.WriteLinkPage(linkurl);
}
}
}
}
#endif
// write links for each concept template recursively
List<DocTemplateDefinition> listLink = new List<DocTemplateDefinition>();
foreach (DocTemplateDefinition docTemplate in docProject.Templates)
{
listLink.Add(docTemplate);
GenerateTemplateLink(listLink, mapEntity, mapSchema, included, docPublication, path);
listLink.Clear();
}
// write links for each example recursively
List<DocExample> listLinkExample = new List<DocExample>();
if (docProject.Examples != null)
{
foreach (DocExample docTemplate in docProject.Examples)
{
listLinkExample.Add(docTemplate);
GenerateExampleLink(listLinkExample, mapEntity, mapSchema, included, docPublication, path);
listLinkExample.Clear();
}
}
htmIndex.WriteLine("</p>");
htmIndex.WriteFooter(docPublication.Footer);
}
}