position.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 70 行

SCALA
70
字号
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2006-2007, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */package scala.util.parsing.input/** <p> *    <code>Position</code> is the base trait for objects describing a *    position in a ``document''. *  </p> *  <p> *    It provides functionality for: *  </p><ul> *    <li> generating a visual representation of this position (`longString'); *    <li> comparing two positions (`<'). *  </ul> *  <p>  *    To use this class for a concrete kind of ``document'', implement the *    <code>lineContents</code> method. *  </p> * * @author Martin Odersky, Adriaan Moors */trait Position {  /** The line number referred to by the position; line numbers start at 1 */  def line: Int  /** The column number referred to by the position; column numbers start at 1 */  def column: Int  /** The contents of the line numbered `lnum' (must not contain a new-line character).   *    * @param lnum a 1-based integer index into the `document'   * @return the line at `lnum' (not including a newline)   */  protected def lineContents: String    /** Returns a string representation of the `Position', of the form `line.column' */  override def toString = ""+line+"."+column  /** Returns a more ``visual'' representation of this position.   *  More precisely, the resulting string consists of two lines: <ol>   *    <li> the line in the document referred to by this position </li>   *    <li>a caret indicating the column</li></ol>   *   *  Example:   *   *<pre>    List(this, is, a, line, from, the, document)   *                  ^</pre>   */  def longString = lineContents+"\n"+(" " * (column - 1))+"^"  /** Compare this position to another, by first comparing their line numbers,   * and then -- if necessary -- using the columns to break a tie.   *   * @param `that' a `Position' to compare to this `Position'   * @return true if this position's line or (in case of a tie wrt. line numbers)   *         its column is smaller than the corresponding components of `that'   */  def <(that: Position) = {    this.line < that.line ||     this.line == that.line && this.column < that.column  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?