Ejemplo n.º 1
0
        private static EscapingOptions GetCsvEscapingOptions(CsvParams csvParams)
        {
            var    ret            = new EscapingOptions();
            string quoteCharRegex = Regex.Escape(new string(csvParams.QuoteChar, 1));
            var    escapeFmt      =
                "CSV_UNESCAPE({0}, '"
                + (csvParams.QuoteChar == '\'' ? @"\'" : ("" + csvParams.QuoteChar))
                + "')";

            if (csvParams.Quoting == CsvParams.QuotingMode.Always)
            {
                ret.QuoteRegex     = string.Format("{1}{0} # quoting always", quoteCharRegex, Environment.NewLine);
                ret.EscapingFormat = escapeFmt;
            }
            else if (csvParams.Quoting == CsvParams.QuotingMode.Auto)
            {
                ret.QuoteRegex     = string.Format("{1}{0}? # possible quoting", quoteCharRegex, Environment.NewLine);
                ret.EscapingFormat = escapeFmt;
            }
            else
            {
                ret.QuoteRegex     = "";
                ret.EscapingFormat = "{0}";
            }
            return(ret);
        }
Ejemplo n.º 2
0
        private static string GetThreadCode(List <CapturedNodeRegex> threadRegexps, ImportLog log, EscapingOptions escaping)
        {
            Func <bool, CapturedNodeRegex[]> findThreads = (isConditional) =>
                                                           threadRegexps.Where(re => ((re.Regex.Flags & SyntaxAnalysis.NodeRegexFlags.IsConditional) != 0) == isConditional).ToArray();

            Func <CapturedNodeRegex, string> getCode = re =>
                                                       string.Format("if ({2}.Length > 0) return {1};{0}", Environment.NewLine, string.Format(escaping.EscapingFormat, re.CaptureName), re.CaptureName);

            var concreteThreads    = findThreads(false);
            var conditionalThreads = findThreads(true);


            StringBuilder threadCode = new StringBuilder();

            if (concreteThreads.Length > 0)
            {
                threadCode.AppendFormat("{0}return StringSlice.Empty;", getCode(concreteThreads[0]));
                ReportRendererUsage(concreteThreads[0], "thread", log);
            }
            else
            {
                foreach (var re in conditionalThreads)
                {
                    ReportRendererUsage(re, "thread", log);
                    threadCode.Append(getCode(re));
                }
                threadCode.Append("return StringSlice.Empty;");
            }

            return(threadCode.ToString());
        }
Ejemplo n.º 3
0
        private static string GetBodyCode(List <CapturedNodeRegex> otherRegexps, ImportLog log, EscapingOptions escaping)
        {
            StringBuilder bodyCode = new StringBuilder();

            bodyCode.AppendFormat(escaping.EscapingFormat, "body");
            foreach (var otherRe in otherRegexps.SkipWhile(IsSkipableBodyRe).Reverse <CapturedNodeRegex>())
            {
                bodyCode.Insert(0, "CONCAT(" + string.Format(escaping.EscapingFormat, otherRe.CaptureName) + ", ");
                bodyCode.Append(")");
            }
            return(bodyCode.ToString());
        }
Ejemplo n.º 4
0
 public ConfigBuilder(ImportLog log, EscapingOptions escaping)
 {
     this.log      = log;
     this.escaping = escaping;
 }