123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Reflection;
- #if NETSTANDARD || NETCOREAPP
- using FastReport.Code.CodeDom.Compiler;
- using FastReport.Code.VisualBasic;
- #else
- using System.CodeDom.Compiler;
- using Microsoft.VisualBasic;
- #endif
- using FastReport.Utils;
- using FastReport.Data;
- namespace FastReport.Code
- {
- internal partial class VbCodeHelper : CodeHelperBase
- {
- #region Private Methods
- private string GetEquivalentKeyword(string s)
- {
- if (s.EndsWith("[]"))
- return GetEquivalentKeyword1(s.Substring(0, s.Length - 2)) + "()";
- return GetEquivalentKeyword1(s);
- }
- private string GetEquivalentKeyword1(string s)
- {
- switch (s)
- {
- case "DateTime":
- return "Date";
- case "Int16":
- return "Short";
- case "UInt16":
- return "UShort";
- case "Int32":
- return "Integer";
- case "UInt32":
- return "UInteger";
- case "Int64":
- return "Long";
- case "UInt64":
- return "ULong";
- }
- return s;
- }
- #endregion
- #region Protected Methods
- protected override string GetTypeDeclaration(Type type)
- {
- if (type.IsGenericType)
- {
- string result = type.Name;
- result = result.Substring(0, result.IndexOf('`'));
- result += "(Of ";
- foreach (Type elementType in type.GetGenericArguments())
- {
- result += GetTypeDeclaration(elementType) + ",";
- }
- result = result.Substring(0, result.Length - 1) + ")";
- return result;
- }
- else
- {
- string typeName = type.Name;
- typeName = typeName.Replace("[]", "()");
- return typeName;
- }
- }
- #endregion
- #region Public Methods
- public override string EmptyScript()
- {
- return "Imports System\r\nImports System.Collections\r\nImports System.Collections.Generic\r\n" +
- "Imports System.ComponentModel\r\nImports System.Windows.Forms\r\nImports System.Drawing\r\n" +
- "Imports Microsoft.VisualBasic\r\n" +
- "Imports FastReport\r\nImports FastReport.Data\r\nImports FastReport.Dialog\r\nImports FastReport.Table\r\n" +
- "Imports FastReport.Barcode\r\nImports FastReport.Utils\r\n\r\nNamespace FastReport\r\n" +
- " Public Class ReportScript\r\n\r\n End Class\r\nEnd Namespace\r\n";
- }
- public override int GetPositionToInsertOwnItems(string scriptText)
- {
- int pos = scriptText.IndexOf("Public Class ReportScript");
- if (pos == -1)
- return -1;
- return scriptText.IndexOf('\n', pos) + 1;
- }
- public override string AddField(Type type, string name)
- {
- name = name.Replace(" ", "_");
- return " Public " + name + " as Global." + type.FullName + "\r\n";
- }
- public override string BeginCalcExpression()
- {
- return " Private Function CalcExpression(ByVal expression As String, ByVal Value as Global.FastReport.Variant) As Object\r\n ";
- }
- public override string AddExpression(string expr, string value)
- {
- expr = expr.Replace("\"", "\"\"");
- return "If expression = \"" + expr + "\" Then\r\n Return " + value + "\r\n End If\r\n ";
- }
- public override string EndCalcExpression()
- {
- return "Return Nothing\r\n End Function\r\n\r\n";
- }
- public override string ReplaceColumnName(string name, Type type)
- {
- string typeName = GetTypeDeclaration(type);
- string result = "CType(Report.GetColumnValue(\"" + name + "\"";
- result += "), " + typeName + ")";
- return result;
- }
- public override string ReplaceParameterName(Parameter parameter)
- {
- string typeName = GetTypeDeclaration(parameter.DataType);
- return "CType(Report.GetParameterValue(\"" + parameter.FullName + "\"), " + typeName + ")";
- }
- public override string ReplaceVariableName(Parameter parameter)
- {
- string typeName = GetTypeDeclaration(parameter.DataType);
- return "CType(Report.GetVariableValue(\"" + parameter.FullName + "\"), " + typeName + ")";
- }
- public override string ReplaceTotalName(string name)
- {
- return "Report.GetTotalValue(\"" + name + "\")";
- }
- public override string GenerateInitializeMethod()
- {
- Hashtable events = new Hashtable();
- string reportString = StripEventHandlers(events);
- string result = " Private Sub InitializeComponent\r\n ";
- // form the reportString
- result += "Dim reportString As String = _\r\n ";
- int totalLength = 0;
- while (reportString.Length > 0)
- {
- string part = "";
- if (reportString.Length > 80)
- {
- part = reportString.Substring(0, 80);
- reportString = reportString.Substring(80);
- }
- else
- {
- part = reportString;
- reportString = "";
- }
- part = "\"" + part.Replace("\"", "\"\"").Replace("\u201c", "\"\"").Replace("\u201d", "\"\"") + "\"";
- part = part.Replace("\r\n", "\" + ChrW(13) + ChrW(10) + \"");
- part = part.Replace("\r", "\" + ChrW(13) + \"");
- part = part.Replace("\n", "\" + ChrW(10) + \"");
- result += part;
- if (reportString != "")
- {
- if (totalLength > 1024)
- {
- totalLength = 0;
- result += "\r\n reportString = reportString + ";
- }
- else
- result += " + _\r\n ";
- totalLength += part.Length;
- }
- else
- {
- result += "\r\n ";
- }
- }
- result += "LoadFromString(reportString)\r\n ";
- result += "InternalInit()\r\n ";
- // form objects' event handlers
- foreach (DictionaryEntry de in events)
- {
- result += "AddHandler " + de.Key.ToString() + ", AddressOf " +
- de.Value.ToString() + "\r\n ";
- }
- result += "\r\n End Sub\r\n\r\n";
- result += " Public Sub New()\r\n InitializeComponent()\r\n End Sub\r\n";
- return result;
- }
- public override string ReplaceClassName(string scriptText, string className)
- {
- // replace the first occurence of "ReportScript"
- string replace = "Class ReportScript";
- int index = scriptText.IndexOf(replace);
- scriptText = scriptText.Remove(index, replace.Length);
- scriptText = scriptText.Insert(index, "Class " + className + "\r\n Inherits Report");
- // replace other items
- return scriptText.Replace("Private Function CalcExpression", "Protected Overrides Function CalcExpression");
- }
- public override string GetMethodSignature(MethodInfo info, bool fullForm)
- {
- string result = info.Name + "(";
- string fontBegin = "<font color=\"Blue\">";
- string fontEnd = "</font>";
- System.Reflection.ParameterInfo[] pars = info.GetParameters();
- foreach (System.Reflection.ParameterInfo par in pars)
- {
- // special case - skip "thisReport" parameter
- if (par.Name == "thisReport")
- continue;
- string modifier = "ByVal";
- if (par.IsOptional)
- modifier = "Optional " + modifier;
- object[] attr = par.GetCustomAttributes(typeof(ParamArrayAttribute), false);
- if (attr.Length > 0)
- modifier += " ParamArray";
- result += fullForm ? fontBegin + modifier + fontEnd + " " + par.Name + " " + fontBegin + "As" + fontEnd + " " : "";
- result += (fullForm ? fontBegin : "") + GetEquivalentKeyword(par.ParameterType.Name) + (fullForm ? fontEnd : "");
- #if DOTNET_4
- if (par.IsOptional && fullForm)
- result += CodeUtils.GetOptionalParameter(par, CodeUtils.Language.Vb);
- #endif
- result += ", ";
- }
- if (result.EndsWith(", "))
- result = result.Substring(0, result.Length - 2);
- result += ")";
- if (fullForm)
- result += " " + fontBegin + "As " + info.ReturnType.Name + fontEnd;
- return result;
- }
- public override string GetMethodSignatureAndBody(MethodInfo info)
- {
- string result = info.Name + "(";
- result = " Private Function " + result;
- System.Reflection.ParameterInfo[] pars = info.GetParameters();
- foreach (System.Reflection.ParameterInfo par in pars)
- {
- // special case - skip "thisReport" parameter
- if (par.Name == "thisReport")
- continue;
- string parName = "_" + par.Name;
- string modifier = "ByVal";
- if (par.IsOptional)
- modifier = "Optional " + modifier;
- object[] attr = par.GetCustomAttributes(typeof(ParamArrayAttribute), false);
- if (attr.Length > 0)
- modifier += " ParamArray";
- result += modifier + " " + parName + " As ";
- result += GetTypeDeclaration(par.ParameterType);
- #if DOTNET_4
- if (par.IsOptional)
- result += CodeUtils.GetOptionalParameter(par, CodeUtils.Language.Vb);
- #endif
- result += ", ";
- }
- if (result.EndsWith(", "))
- result = result.Substring(0, result.Length - 2);
- result += ")";
- result += " As " + GetTypeDeclaration(info.ReturnType);
- result += "\r\n";
- result += " Return Global." + info.ReflectedType.Namespace + "." +
- info.ReflectedType.Name + "." + info.Name + "(";
- foreach (System.Reflection.ParameterInfo par in pars)
- {
- string parName = "_" + par.Name;
- // special case - handle "thisReport" parameter
- if (parName == "_thisReport")
- parName = "Report";
- result += parName + ", ";
- }
- if (result.EndsWith(", "))
- result = result.Substring(0, result.Length - 2);
- result += ")\r\n";
- result += " End Function\r\n";
- result += "\r\n";
- return result;
- }
- public override CodeDomProvider GetCodeProvider()
- {
- return new VBCodeProvider();
- }
- #endregion
- public VbCodeHelper(Report report) : base(report)
- {
- }
- }
- }
|