From 182dca56c87d0a3f3da153956cad9229f4fc9088 Mon Sep 17 00:00:00 2001 From: Keith Alcock Date: Fri, 8 May 2026 08:57:46 -0700 Subject: [PATCH] Use ai.lum.common.Interval This is an alternative strategy, more compatible with the original. --- build.sbt | 5 +- .../scala/ai/lum/nxmlreader/Interval.scala | 100 ------------------ .../ai/lum/nxmlreader/NxmlDocument.scala | 1 + .../ai/lum/nxmlreader/standoff/Tree.scala | 2 +- 4 files changed, 5 insertions(+), 103 deletions(-) delete mode 100644 src/main/scala/ai/lum/nxmlreader/Interval.scala diff --git a/build.sbt b/build.sbt index d83522f..a37ebbd 100644 --- a/build.sbt +++ b/build.sbt @@ -56,11 +56,12 @@ libraryDependencies ++= { } Seq( + "ai.lum" %% "common" % "0.2.1", + "org.scala-lang.modules" %% "scala-xml" % scalaXmlVersion, // 3.2.20 of below depends on scala3-library 3.1.3, so use this one for cross-compilation. "org.scalatest" %% "scalatest" % "3.2.20" % "test", // 2.9.0 of below depends on scala3-library 3.1.3, so use this one for cross-compilation. - "org.scala-lang.modules" %% "scala-collection-compat" % "2.9.0" % "test", - "org.scala-lang.modules" %% "scala-xml" % scalaXmlVersion + "org.scala-lang.modules" %% "scala-collection-compat" % "2.9.0" % "test" ) } diff --git a/src/main/scala/ai/lum/nxmlreader/Interval.scala b/src/main/scala/ai/lum/nxmlreader/Interval.scala deleted file mode 100644 index 3d3c24a..0000000 --- a/src/main/scala/ai/lum/nxmlreader/Interval.scala +++ /dev/null @@ -1,100 +0,0 @@ -package ai.lum.nxmlreader - -class Interval private (val start: Int, val end: Int) extends Ordered[Interval] { - - override def toString: String = { - if (isEmpty) "{}" - else if (length == 1) s"{$start}" - else s"[$start, $end)" - } - - // Since Intervals will be used as keys in a map, - // both equals and hashCode are necessary. - override def equals(that: Any): Boolean = that match { - case that: Interval => that.canEqual(this) && { - if (this.isEmpty) that.isEmpty - else { - // Since this is not empty, it will not match - // an empty that. - this.start == that.start && - this.end == that.end - } - } - case _ => false - } - - def canEqual(that: Any): Boolean = that.isInstanceOf[Interval] - - override def hashCode: Int = { - start * 23 + end - } - - def length = end - start - - def isEmpty: Boolean = length <= 0 - - def intersects(that: Interval): Boolean = { - if (this.isEmpty || that.isEmpty) - false - else if (this.start < that.start) - this.end > that.start - else if (that.start < this.start) - that.end > this.start - else - true - } - - def borders(that: Interval): Boolean = { - if (this.isEmpty || that.isEmpty) false - else { - this.start == that.end || - that.start == this.end - } - } - - override def compare(that: Interval): Int = { - if (this.start > that.start) 1 - else if (this.start < that.start) -1 - else this.length - that.length - } - - def union(that: Interval): Interval = { - if (this.isEmpty) that - else if (that.isEmpty) this - else { - require(this.borders(that) || this.intersects(that)) - Interval.open( - math.min(this.start, that.start), - math.max(this.end, that.end) - ) - } - } -} - -object Interval { - val emptyInterval = new Interval(0, 0) - - def apply(start: Int, end: Int): Interval = { - require(start <= end, s"end < start: $end < $start") - if (start < end) new Interval(start, end) - else emptyInterval - } - - def singleton(i: Int): Interval = apply(i, i + 1) - - def open(start: Int, end: Int): Interval = apply(start, end) - - def ofLength(start: Int, length: Int): Interval = open(start, start + length) - - def union(col: Seq[Interval]): Interval = { - val sorted = col.sorted - - try { - sorted.reduceLeft(_.union(_)) - } - catch { - case _: IllegalArgumentException => - throw new IllegalArgumentException("gap in intervals: " + sorted) - } - } -} diff --git a/src/main/scala/ai/lum/nxmlreader/NxmlDocument.scala b/src/main/scala/ai/lum/nxmlreader/NxmlDocument.scala index 30e1648..c42742c 100644 --- a/src/main/scala/ai/lum/nxmlreader/NxmlDocument.scala +++ b/src/main/scala/ai/lum/nxmlreader/NxmlDocument.scala @@ -1,5 +1,6 @@ package ai.lum.nxmlreader +import ai.lum.common.Interval import ai.lum.nxmlreader.standoff._ import scala.annotation.tailrec diff --git a/src/main/scala/ai/lum/nxmlreader/standoff/Tree.scala b/src/main/scala/ai/lum/nxmlreader/standoff/Tree.scala index 2b7e426..316d824 100644 --- a/src/main/scala/ai/lum/nxmlreader/standoff/Tree.scala +++ b/src/main/scala/ai/lum/nxmlreader/standoff/Tree.scala @@ -1,6 +1,6 @@ package ai.lum.nxmlreader.standoff -import ai.lum.nxmlreader.Interval +import ai.lum.common.Interval sealed trait Tree {