def delimRegexParseDelim()

in daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/DFDLDelimiter.scala [210:268]


  def delimRegexParseDelim(delimiterBuf: Array[DelimBase] = delimBuf): String = {
    val sb: StringBuilder = new StringBuilder
    delimiterBuf.foreach { delim =>
      {
        delim match {
          case nl: NLDelim => {
            sb.append(
              "(?>" + // Eliminates needles backtracking. Atomic group of
                "(\\r\\n)|" + // CRLF
                "((?<!\\r)\\n)|" + // LF not preceded by CR
                "(\\r(?!\\n))|" + // CR not followed by LF
                "\\u0085|\\u2028)"
            )
          }
          case wsp: WSPDelim => {
            sb.append(
              "(\\s|\\u0020|\\u0009|\\u000A|\\u000B|\\u000C|\\u000D|\\u0085" +
                "|\\u00A0|\\u1680|\\u180E|\\u2000|\\u2001|\\u2002|\\u2003|\\u2004|\\u2005|\\u2006|" +
                "\\u2007|\\u2008|\\u2009|\\u200A|\\u2028|\\u2029|\\u202F|\\u205F|\\u3000)"
            )
          } // Single space
          case wsp: WSPPlusDelim => {
            sb.append(
              "(\\s|\\u0020|\\u0009|\\u000A|\\u000B|\\u000C|\\u000D|\\u0085" +
                "|\\u00A0|\\u1680|\\u180E|\\u2000|\\u2001|\\u2002|\\u2003|\\u2004|\\u2005|\\u2006|" +
                "\\u2007|\\u2008|\\u2009|\\u200A|\\u2028|\\u2029|\\u202F|\\u205F|\\u3000)+"
            )
          } // One or more spaces
          case wsp: WSPStarDelim => {
            sb.append(
              "(\\s|\\u0020|\\u0009|\\u000A|\\u000B|\\u000C|\\u000D|\\u0085" +
                "|\\u00A0|\\u1680|\\u180E|\\u2000|\\u2001|\\u2002|\\u2003|\\u2004|\\u2005|\\u2006|" +
                "\\u2007|\\u2008|\\u2009|\\u200A|\\u2028|\\u2029|\\u202F|\\u205F|\\u3000)*"
            )
          } // None or more spaces
          case ws: ESDelim => // noop
          case char: CharDelim => { // Some character
            char.char match {
              case '[' => sb.append("\\[")
              case '\\' => sb.append("\\\\")
              case '^' => sb.append("\\^")
              case '$' => sb.append("\\$")
              case '.' => sb.append("\\.")
              case '|' => sb.append("\\|")
              case '?' => sb.append("\\?")
              case '*' => sb.append("\\*")
              case '+' => sb.append("\\+")
              case '(' => sb.append("\\(")
              case ')' => sb.append("\\)")
              case '{' => sb.append("\\{")
              case '}' => sb.append("\\}")
              case x => sb.append(x)
            }
          }
        }
      }
    }
    sb.toString()
  }