All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jaskell.parsec.Text.scala Maven / Gradle / Ivy

package jaskell.parsec

import scala.util.{Failure, Success, Try}

/**
 * TODO
 *
 * @author mars
 * @version 1.0.0
 */
class Text(val text: String, val caseSensitive: Boolean = true) extends Parsec[Char, String]:
  val content: String = if (caseSensitive) text else text.toLowerCase

  def apply(s: State[Char]): Try[String] = 
    var idx = 0
    val sb: StringBuilder = new StringBuilder
    for(c <- this.text) {
      s.next() match {
        case Success(data) =>
          val dataChar = if (caseSensitive) data else data.toLower
          if (c != dataChar) {
            return s.trap(s"Expect $c of $text [$idx] (case sensitive $caseSensitive) at ${s.status} but get $data")
          }
          idx += 1
          sb += data
        case Failure(error) =>
          return Failure(error)
      }
    }
    Success(sb.toString())

object Text:
  def apply(text: String, caseSensitive: Boolean): Text = new Text(text, caseSensitive)
  def apply(text: String): Text = new Text(text, true)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy