/// <summary> /// Compiles complex appends. Returns <c>appendType</c> if it is no match for this <c>runner</c>. /// </summary> /// <param name="ins">The ins.</param> /// <remarks>OK for multimpleruns</remarks> /// <returns><c>appendType.none</c> if executed, other <c>appendType</c> if no match for this run method</returns> protected appendType runComplexInstruction(IRenderExecutionContext context, docScriptInstruction ins) { ITextRender render = outputRender; //builder.documentBuilder; switch (ins.type) { //// ****************************** External executable case appendType.exe: IExeAppend exe = (IExeAppend)ins[d.dsa_value]; exe.execute(context, render); break; /////////////////////// --------------------------------- case appendType.button: string btn_caption = (string)ins[d.dsa_title]; //.getProperString(d.dsa_title); string btn_url = (string)ins[d.dsa_url]; //.getProperString(d.dsa_url); bootstrap_color btn_color = (bootstrap_color)ins[d.dsa_styleTarget]; // ins.getProperEnum<bootstrap_color>(bootstrap_color.info, d.dsa_styleTarget); bootstrap_size btn_size = (bootstrap_size)ins[d.dsa_stylerSettings]; // ins.getProperEnum<bootstrap_size>(bootstrap_size.md, d.dsa_stylerSettings); render.AppendDirect(render.converter.GetButton(btn_caption, btn_url, btn_color.ToString(), btn_size.ToString())); break; case appendType.attachment: string att_caption = (string)ins[d.dsa_title]; //.getProperString(d.dsa_title); string att_url = (string)ins[d.dsa_url]; //.getProperString(d.dsa_url); string filename = ins[d.dsa_title].toStringSafe().getFilename(); att_url = att_url.or(filename); bootstrap_color att_color = (bootstrap_color)ins[d.dsa_styleTarget]; //.getProperEnum<bootstrap_color>(bootstrap_color.primary, d.dsa_styleTarget); bootstrap_size att_size = (bootstrap_size)ins[d.dsa_stylerSettings]; // ins.getProperEnum<bootstrap_size>(bootstrap_size.sm, d.dsa_stylerSettings); string output = ""; if (ins.containsKey(d.dsa_content)) { DataTable dt = ins[d.dsa_content] as DataTable; //.getProperObject<DataTable>(d.dsa_content); if (dt != null) { dataTableExportEnum format = (dataTableExportEnum)ins[d.dsa_format]; //>(dataTableExportEnum.excel, d.dsa_format); if (imbSciStringExtensions.isNullOrEmpty(att_url)) { att_url = dt.TableName.getFilename().getCleanPropertyName().Replace(" ", "").ToLower(); } att_url = dt.serializeDataTable(format, att_url, context.directoryScope); } else { output = ins[d.dsa_content] as string; } } if (ins.containsAllOfTypes(typeof(FileInfo))) { FileInfo fi = ins.getProperObject <FileInfo>(); att_url = fi.Name; fi.CopyTo(att_url); } att_url = att_url.removeStartsWith(context.directoryScope.FullName).Trim('\\').removeStartsWith("/"); string bootstrapButton = render.converter.GetButton(att_caption, att_url, att_color.toString(), att_size.toString()); render.AppendDirect(bootstrapButton); break; case appendType.i_chart: List <object> parameters = (List <object>)ins[d.dsa_value]; //.getProperObject<List<Object>>(d.dsa_value); string chstr = charts.chartTools.buildChart((chartTypeEnum)parameters[0], (chartFeatures)parameters[1], (DataTable)parameters[2], (chartSizeEnum)parameters[3], ins.getProperEnum <chartTypeEnum>(chartTypeEnum.none, d.dsa_format)); render.AppendDirect(chstr); break; case appendType.direct: render.AppendDirect((string)ins[d.dsa_contentLine]); break; case appendType.toFile: string toFile_outputpath = ins.getProperString(d.dsa_path); toFile_outputpath = context.directoryScope.FullName.add(toFile_outputpath, "\\"); render.AppendToFile(toFile_outputpath, ins.getProperString(d.dsa_contentLine)); break; case appendType.fromFile: string fromFile_sourcepath = ins[d.dsa_path].toStringSafe(); bool fromFile_isLocalSource = (bool)ins[d.dsa_on]; templateFieldSubcontent fromFile_key = (templateFieldSubcontent)ins[d.dsa_key]; if (fromFile_isLocalSource) { fromFile_sourcepath = context.directoryScope.FullName.add(fromFile_sourcepath, "\\"); } if (File.Exists(fromFile_sourcepath)) { render.AppendFromFile(fromFile_sourcepath, fromFile_key, fromFile_isLocalSource); } else { render.AppendLabel("File " + fromFile_sourcepath + " not found", true, bootstrap_style.style_warning); } break; case appendType.file: string file_sourcepath = ins.getProperString(d.dsa_path); string file_outputpath = ins.getProperString(d.dsa_name); bool file_isDataTemplate = (bool)ins.getProperField(d.dsa_on); bool file_isLocalSource = (bool)ins.getProperField(d.dsa_relative); file_outputpath = context.directoryScope.FullName.add(file_outputpath, "\\"); if (file_isLocalSource) { fromFile_sourcepath = context.directoryScope.FullName.add(file_sourcepath, "\\"); } string templateNeedle = ins.getProperString("none", d.dsa_styleTarget); if (templateNeedle != "none") { deliveryUnit dUnit = (deliveryUnit)context.dUnit; deliveryUnitItemContentTemplated templateItem = dUnit.findDeliveryUnitItemWithTemplate(templateNeedle); string __filecontent = openBase.openFileToString(file_sourcepath, true, false); templateItem.saveOutput(context, __filecontent, context.data, file_outputpath, file_isDataTemplate); } else { render.AppendFile(file_sourcepath, file_outputpath, file_isDataTemplate); } break; case appendType.image: diagramModel model = ins.getProperObject <diagramModel>(d.dsa_value); diagramOutputEngineEnum engine = ins.getProperEnum <diagramOutputEngineEnum>(diagramOutputEngineEnum.mermaid, d.dsa_format); if (model != null) { deliveryUnit dUnit = (deliveryUnit)context.dUnit; diagramOutputBase diaOutput = null; if (outputRender is builderForMarkdown) { diaOutput = engine.getOutputEngine(); } if (diaOutput == null) { diaOutput = new diagramMermaidOutput(); } string diaString = diaOutput.getOutput(model, dUnit.theme.palletes); render.AppendDirect(diaString); } else { render.AppendImage(ins.getProperString(d.dsa_path), ins.getProperString(d.dsa_contentLine), ins.getProperString(d.dsa_name)); } break; case appendType.math: render.AppendMath(ins.getProperString(d.dsa_contentLine), ins.getProperString(d.dsa_format)); break; case appendType.label: render.AppendLabel(ins.getProperString(d.dsa_contentLine), !ins.isHorizontal, ins.getProperString(d.dsa_styleTarget)); break; case appendType.panel: render.AppendPanel(ins.getProperString(d.dsa_contentLine), ins.getProperString(d.dsa_title), ins.getProperString(d.dsa_description), ins.getProperString(d.dsa_styleTarget)); break; case appendType.frame: render.AppendFrame(ins.getProperString(d.dsa_contentLine), ins.getProperInt32(-1, d.dsa_w), ins.getProperInt32(-1, d.dsa_h), ins.getProperString(d.dsa_title), ins.getProperString(d.dsa_description), (IEnumerable <string>)ins.getProperField(d.dsa_content)); break; case appendType.placeholder: render.AppendPlaceholder(ins.getProperField(d.dsa_name), ins.isHorizontal); break; case appendType.list: render.AppendList((IEnumerable <object>)ins.getProperField(d.dsa_content), (bool)ins.getProperField(d.dsa_on)); break; case appendType.footnote: throw new NotImplementedException("No implementation for: " + ins.type.ToString()); break; case appendType.c_line: render.AppendHorizontalLine(); break; case appendType.c_data: object dataSource = ins.getProperField(d.dsa_dataPairs, d.dsa_dataList, d.dsa_value); string _head = ins.getProperString("", d.dsa_title, d.dsa_name); string _foot = ins.getProperString("", d.dsa_footer, d.dsa_description); if (dataSource is PropertyCollection) { PropertyCollection pairs = dataSource as PropertyCollection; string sep = ins.getProperString(d.dsa_separator); if (imbSciStringExtensions.isNullOrEmpty(_foot)) { _foot = pairs.getAndRemoveProperString(d.dsa_footer, d.dsa_description); } if (imbSciStringExtensions.isNullOrEmpty(_head)) { _head = pairs.getAndRemoveProperString(d.dsa_title, d.dsa_description); } if (!imbSciStringExtensions.isNullOrEmpty(_foot)) { pairs.Add(d.dsa_footer.ToString(), _foot); } if (!imbSciStringExtensions.isNullOrEmpty(_head)) { pairs.Add(d.dsa_title.ToString(), _head); // list.Insert(0, _head); } render.AppendPairs(pairs, ins.isHorizontal, sep); // pair } else if (dataSource is IList <object> ) { IList <object> list = dataSource as IList <object>; if (!imbSciStringExtensions.isNullOrEmpty(_foot)) { list.Add(_foot); } if (!imbSciStringExtensions.isNullOrEmpty(_head)) { list.Insert(0, _head); } render.AppendList(list, false); } break; case appendType.c_pair: render.AppendPair(ins.getProperString(d.dsa_key, d.dsa_name, d.dsa_title), ins.getProperField(d.dsa_value, d.dsa_contentLine, d.dsa_dataField, d.dsa_content), true, ins.getProperString(" ", d.dsa_separator) ); break; case appendType.c_table: try { DataTable dt2 = (DataTable)ins[d.dsa_dataTable]; // .getProperObject<DataTable>(d.dsa_dataTable); if (dt2.Rows.Count == 0) { } dt2.ExtendedProperties.add(templateFieldDataTable.data_tablename, ins[d.dsa_title], true); dt2.ExtendedProperties.add(templateFieldDataTable.data_tabledesc, ins[d.dsa_description], true); dt2 = dt2.CompileTable(context as deliveryInstance, reportOutputFormatName.htmlViaMD, levelsOfNewDirectory); // <------------- privremeni hack render.AppendTable(dt2, true); } catch (Exception ex) { } break; case appendType.c_link: render.AppendLink(ins.getProperString(d.dsa_url, d.dsa_value), ins.getProperString(d.dsa_name, d.dsa_contentLine, d.dsa_key), ins.getProperString(d.dsa_title, d.dsa_description, d.dsa_footer), ins.getProperEnum <appendLinkType>(appendLinkType.link)); break; case appendType.section: render.AppendSection( ins.getProperString(d.dsa_contentLine), ins.getProperString(d.dsa_title, d.dsa_name), ins.getProperString(d.dsa_description), ins.getProperField(d.dsa_content) as IEnumerable <string>); break; case appendType.c_section: render.AppendSection( ins.getProperString(d.dsa_contentLine), ins.getProperString(d.dsa_title, d.dsa_name), ins.getProperString(d.dsa_description), ins.getProperField(d.dsa_content) as IEnumerable <string>); break; case appendType.c_open: render.open(ins.getProperString("section", d.dsa_contentLine, d.dsa_name, d.dsa_key), ins.getProperString(d.dsa_title), ins.getProperString(d.dsa_description)); break; case appendType.c_close: render.close(ins.getProperString("none", d.dsa_contentLine, d.dsa_name, d.dsa_key)); break; case appendType.source: string sourcecode = ""; List <string> scode = ins.getProperObject <List <string> >(d.dsa_content); sourcecode = scode.toCsvInLine(Environment.NewLine); string sc_name = ins.getProperString("code", d.dsa_name); string sc_desc = ins.getProperString("", d.dsa_description, d.dsa_footer); string sc_title = ins.getProperString("", d.dsa_title); string sc_typename = ins.getProperString("html", d.dsa_class_attribute); render.open(sc_name, sc_title, sc_desc); render.AppendCode(sourcecode, sc_typename); render.close(); //render.close(ins.getProperString("none", d.dsa_contentLine, d.dsa_name, d.dsa_key)); break; default: //executionError(String.Format("Instruction ({0}) not supported by runComplexInstruction() method", ins.type.ToString()), ins); return(ins.type); break; } return(appendType.none); }