diff options
author | mihaylov <mihaylov@epfl.ch> | 2007-06-11 09:05:15 +0000 |
---|---|---|
committer | mihaylov <mihaylov@epfl.ch> | 2007-06-11 09:05:15 +0000 |
commit | 908decebd0f890068221ff586ebd7b3492f37c0f (patch) | |
tree | 7a06ff1249f693e16c93c22868b936ac165a510f /src/library | |
parent | 80d1c7de2a1562592bbbe15ba12c6985bab39274 (diff) | |
download | scala-908decebd0f890068221ff586ebd7b3492f37c0f.tar.gz scala-908decebd0f890068221ff586ebd7b3492f37c0f.tar.bz2 scala-908decebd0f890068221ff586ebd7b3492f37c0f.zip |
Improved interface of scala.compat.StringBuilder
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/compat/StringBuilder.scala | 82 | ||||
-rw-r--r-- | src/library/scala/xml/PrettyPrinter.scala | 16 | ||||
-rw-r--r-- | src/library/scala/xml/TextBuffer.scala | 4 | ||||
-rw-r--r-- | src/library/scala/xml/Utility.scala | 14 | ||||
-rw-r--r-- | src/library/scala/xml/parsing/ExternalSources.scala | 4 | ||||
-rw-r--r-- | src/library/scala/xml/parsing/MarkupParser.scala | 34 |
6 files changed, 83 insertions, 71 deletions
diff --git a/src/library/scala/compat/StringBuilder.scala b/src/library/scala/compat/StringBuilder.scala index ddc80d82cc..ce49bc4cb9 100644 --- a/src/library/scala/compat/StringBuilder.scala +++ b/src/library/scala/compat/StringBuilder.scala @@ -11,49 +11,61 @@ package scala.compat + import java.lang.{String, StringBuffer} -final class StringBuilder(str: StringBuffer) { + +/** Consult the documentation of java.lang.StringBuffer for more details + */ +final class StringBuilder(val self: StringBuffer) extends (Int => Char) with Proxy { def this() = this(new StringBuffer()) def this(n: Int) = this(new StringBuffer(n)) def this(s: String) = this(new StringBuffer(s)) - def charAt(i: Int): Char = str.charAt(i) - - def setCharAt(index: Int, c: Char): Unit = str.setCharAt(index, c) - - def append(x: Any): StringBuilder = { str.append(x); this } - def append(x: Boolean): StringBuilder = { str.append(x); this } - def append(x: Byte): StringBuilder = { str.append(x); this } - def append(x: Short): StringBuilder = { str.append(x); this } - def append(x: Char): StringBuilder = { str.append(x); this } - def append(x: Int): StringBuilder = { str.append(x); this } - def append(x: Long): StringBuilder = { str.append(x); this } - def append(x: Float): StringBuilder = { str.append(x); this } - def append(x: Double): StringBuilder = { str.append(x); this } - def append(x: String): StringBuilder = { str.append(x); this } - def append(x: Array[Char]): StringBuilder = { str.append(x); this } - def append(x: Array[Char], start: Int, length: Int): StringBuilder = - { str.append(x, start, length); this } - - def insert(at: Int, x: Any): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Boolean): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Byte): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Short): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Char): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Int): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Long): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Float): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Double): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: String): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Array[Char]): StringBuilder = { str.insert(at, x); this } - def insert(at: Int, x: Array[Char], start: Int, length: Int): StringBuilder = - { str.insert(at, x, start, length); this } + def length: Int = self.length() + def length_=(n: Int) { self.setLength(n) } + def setLength(n: Int) { self.setLength(n) } + + def capacity: Int = self.capacity + def capacity_=(n: Int) { self.ensureCapacity(n) } + def ensureCapacity(n: Int) { self.ensureCapacity(n) } - def length(): Int = str.length() + def charAt(i: Int): Char = self.charAt(i) + def apply(i: Int): Char = self.charAt(i) - def setLength(i: Int) = str.setLength(i) + def setCharAt(index: Int, c: Char): Unit = self.setCharAt(index, c) + def update(i: Int, c: Char) { self.setCharAt(i, c)} + + def substring(i: Int): String = self.substring(i) + def substring(i: Int, j: Int): String = self.substring(i, j) + + def append(x: Any): StringBuilder = { self.append(x); this } + def append(x: Boolean): StringBuilder = { self.append(x); this } + def append(x: Byte): StringBuilder = { self.append(x); this } + def append(x: Short): StringBuilder = { self.append(x); this } + def append(x: Char): StringBuilder = { self.append(x); this } + def append(x: Int): StringBuilder = { self.append(x); this } + def append(x: Long): StringBuilder = { self.append(x); this } + def append(x: Float): StringBuilder = { self.append(x); this } + def append(x: Double): StringBuilder = { self.append(x); this } + def append(x: String): StringBuilder = { self.append(x); this } + def append(x: Array[Char]): StringBuilder = { self.append(x); this } + def append(x: Array[Char], start: Int, length: Int): StringBuilder = + { self.append(x, start, length); this } + + def insert(at: Int, x: Any): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Boolean): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Byte): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Short): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Char): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Int): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Long): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Float): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Double): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: String): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Array[Char]): StringBuilder = { self.insert(at, x); this } + def insert(at: Int, x: Array[Char], start: Int, length: Int): StringBuilder = + { self.insert(at, x, start, length); this } - override def toString() = str.toString() } diff --git a/src/library/scala/xml/PrettyPrinter.scala b/src/library/scala/xml/PrettyPrinter.scala index 8f92149c18..73d8fb54ac 100644 --- a/src/library/scala/xml/PrettyPrinter.scala +++ b/src/library/scala/xml/PrettyPrinter.scala @@ -53,7 +53,7 @@ class PrettyPrinter( width:Int, step:Int ) { */ protected def cut(s: String, ind: Int): List[Item] = { val tmp = width - cur - if (s.length() < tmp) + if (s.length < tmp) return List(Box(ind, s)) val sb = new StringBuilder() var i = s.indexOf(' ') @@ -68,7 +68,7 @@ class PrettyPrinter( width:Int, step:Int ) { while (Nil != last) try { val b = Box(ind, s.substring(0, last.head)) cur = ind - res = b :: Break :: cut(s.substring(last.head, s.length()), ind) + res = b :: Break :: cut(s.substring(last.head, s.length), ind) // backtrack } catch { case _:BrokenException => last = last.tail @@ -85,9 +85,9 @@ class PrettyPrinter( width:Int, step:Int ) { protected def makeBox(ind: Int, s: String) = { if (cur < ind) cur == ind - if (cur + s.length() > width) { // fits in this line + if (cur + s.length > width) { // fits in this line items = Box(ind, s) :: items - cur += s.length() + cur += s.length } else try { for (b <- cut(s, ind).elements) // break it up items = b :: items @@ -125,7 +125,7 @@ class PrettyPrinter( width:Int, step:Int ) { protected def startTag(n: Node, pscope: NamespaceBinding): (String, Int) = { val sb = new StringBuilder("<") n.nameToString(sb) //Utility.appendPrefixedName( n.prefix, n.label, pmap, sb ); - val i = sb.length() + 1 + val i = sb.length + 1 n.attributes.toString(sb) n.scope.toString(sb, pscope) sb.append('>') @@ -151,7 +151,7 @@ class PrettyPrinter( width:Int, step:Int ) { } protected def fits(test: String) = - test.length() < width - cur + test.length < width - cur /** @param tail: what we'd like to sqeeze in */ protected def traverse(node: Node, pscope: NamespaceBinding, ind: Int): Unit = node match { @@ -174,7 +174,7 @@ class PrettyPrinter( width:Int, step:Int ) { } else { val (stg, len2) = startTag(node, pscope) val etg = endTag(node) - if (stg.length() < width - cur) { // start tag fits + if (stg.length < width - cur) { // start tag fits makeBox(ind, stg) makeBreak() traverse(node.child.elements, node.scope, ind + step) @@ -192,7 +192,7 @@ class PrettyPrinter( width:Int, step:Int ) { makeBreak() } }*/ - makeBox(ind, stg.substring(len2, stg.length())) + makeBox(ind, stg.substring(len2, stg.length)) makeBreak() traverse(node.child.elements, node.scope, ind + step) makeBox(cur, etg) diff --git a/src/library/scala/xml/TextBuffer.scala b/src/library/scala/xml/TextBuffer.scala index bc39b3514d..32383aea53 100644 --- a/src/library/scala/xml/TextBuffer.scala +++ b/src/library/scala/xml/TextBuffer.scala @@ -45,12 +45,12 @@ class TextBuffer { * @return the text without whitespaces. */ def toText: Seq[Text] = { - var len = sb.length() /* invariant */ + var len = sb.length /* invariant */ if (len == 0) return Nil if (Utility.isSpace(sb.charAt(len - 1))) { len -= 1 - sb.setLength(len) + sb.length = len } if (len == 0) return Nil diff --git a/src/library/scala/xml/Utility.scala b/src/library/scala/xml/Utility.scala index 229f580bcc..fc7c024eca 100644 --- a/src/library/scala/xml/Utility.scala +++ b/src/library/scala/xml/Utility.scala @@ -348,10 +348,10 @@ object Utility extends AnyRef with parsing.TokenTests { def getName(s: String, index: Int): String = { var i = index; val sb = new StringBuilder(); - if (i < s.length()) { + if (i < s.length) { var c = s.charAt(i); if (isNameStart(s.charAt(i))) - while (i < s.length() && { c = s.charAt(i); isNameChar(c)}) { + while (i < s.length && { c = s.charAt(i); isNameChar(c)}) { sb.append(c) i = i + 1 } @@ -368,7 +368,7 @@ object Utility extends AnyRef with parsing.TokenTests { */ def checkAttributeValue(value: String): String = { var i = 0 - while (i < value.length()) { + while (i < value.length) { value.charAt(i) match { case '<' => return "< not allowed in attribute value"; @@ -376,8 +376,8 @@ object Utility extends AnyRef with parsing.TokenTests { val n = getName(value, i+1) if (n eq null) return "malformed entity reference in attribute value ["+value+"]"; - i = i + n.length() + 1 - if (i >= value.length() || value.charAt(i) != ';') + i = i + n.length + 1 + if (i >= value.length || value.charAt(i) != ';') return "malformed entity reference in attribute value ["+value+"]"; case _ => } @@ -420,7 +420,7 @@ object Utility extends AnyRef with parsing.TokenTests { rfb.setLength(0) unescape(ref,sb) match { case null => - if (sb.length() > 0) { // flush buffer + if (sb.length > 0) { // flush buffer nb += Text(sb.toString()) sb.setLength(0) } @@ -432,7 +432,7 @@ object Utility extends AnyRef with parsing.TokenTests { sb.append(x) } } - if (sb.length() > 0) { // flush buffer + if (sb.length > 0) { // flush buffer val x = Text(sb.toString()) if (nb.length == 0) return x diff --git a/src/library/scala/xml/parsing/ExternalSources.scala b/src/library/scala/xml/parsing/ExternalSources.scala index 699946be88..c9893beaa6 100644 --- a/src/library/scala/xml/parsing/ExternalSources.scala +++ b/src/library/scala/xml/parsing/ExternalSources.scala @@ -41,7 +41,7 @@ trait ExternalSources { self: ExternalSources with MarkupParser with MarkupHandl def newIter = new Iterator[Char] { var i = -1; - private val len = str.length()-1; + private val len = str.length-1; def hasNext = i < len; def next = { i = i + 1; @@ -68,7 +68,7 @@ trait ExternalSources { self: ExternalSources with MarkupParser with MarkupHandl var fileStr = input.descr; if(input.descr.startsWith("file:")) { - fileStr = input.descr.substring(5, input.descr.length()); + fileStr = input.descr.substring(5, input.descr.length); } else fileStr = fileStr.substring(0, fileStr.lastIndexOf(java.io.File.separator)+1); diff --git a/src/library/scala/xml/parsing/MarkupParser.scala b/src/library/scala/xml/parsing/MarkupParser.scala index 0dc0c03fa2..68eccf5261 100644 --- a/src/library/scala/xml/parsing/MarkupParser.scala +++ b/src/library/scala/xml/parsing/MarkupParser.scala @@ -216,7 +216,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar case _:EntityRef => // todo: fix entities, shouldn't be "special" reportSyntaxError("no entity references alllowed here"); case s:SpecialNode => - if (s.toString().trim().length() > 0) //non-empty text nodes not allowed + if (s.toString().trim().length > 0) //non-empty text nodes not allowed elemCount = elemCount + 2; case m:Node => elemCount = elemCount + 1; @@ -289,11 +289,11 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar Utility.prefix(qname) match { case Some("xmlns") => - val prefix = qname.substring(6 /*xmlns:*/ , qname.length()); + val prefix = qname.substring(6 /*xmlns:*/ , qname.length); scope = new NamespaceBinding(prefix, value, scope); case Some(prefix) => - val key = qname.substring(prefix.length()+1, qname.length()); + val key = qname.substring(prefix.length+1, qname.length); aMap = new PrefixedAttribute(prefix, key, value, aMap); case _ => @@ -328,7 +328,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar } nextch val str = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 // well-formedness constraint normalizeAttributeValue(str) @@ -347,7 +347,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar } nextch val str = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 str } @@ -392,7 +392,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar if (ch==']' && { sb.append(ch); nextch; ch == ']' } && { sb.append(ch); nextch; ch == '>' } ) { - sb.setLength(sb.length() - 2); + sb.length = sb.length - 2 nextch; return handle.text( pos1, sb.toString() ); } else sb.append( ch ); @@ -443,7 +443,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar xToken('-') while (true) { if (ch == '-' && { sb.append(ch); nextch; ch == '-' }) { - sb.setLength(sb.length() - 1) + sb.length = sb.length - 1 nextch xToken('>') return handle.comment(pos, sb.toString()) @@ -666,7 +666,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar val pos = this.pos val Tuple3(qname, aMap, scope) = xTag(pscope) val Tuple2(pre, local) = Utility.prefix(qname) match { - case Some(p) => (p,qname.substring(p.length()+1, qname.length())) + case Some(p) => (p,qname.substring(p.length+1, qname.length)) case _ => (null,qname) } val ts = { @@ -702,7 +702,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar nextch } val n = cbuf.toString().intern() - cbuf.setLength(0) + cbuf.length = 0 n } else { reportSyntaxError("name expected") @@ -732,7 +732,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar xSpace while (true) { if (ch == '?' && { sb.append( ch ); nextch; ch == '>' }) { - sb.setLength(sb.length() - 1); + sb.length = sb.length - 1; nextch; return handle.procInstr(tmppos, n.toString(), sb.toString()); } else @@ -768,7 +768,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar exit = eof || /*{ nextch; xCheckEmbeddedBlock }||*/( ch == '<' ) || ( ch == '&' ); } val str = cbuf.toString(); - cbuf.setLength(0); + cbuf.length = 0; str /*}*/ } @@ -788,7 +788,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar } nextch val str = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 str } @@ -808,7 +808,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar } nextch val str = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 str } @@ -971,7 +971,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar //Console.println("END["+ch+"]") nextch val cmstr = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 handle.elemDecl(n, cmstr) } @@ -996,7 +996,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar nextch; } val atpe = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 //Console.println("attr type: "+atpe); ch match { case '\'' | '"' => @@ -1020,7 +1020,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar xSpaceOpt attList = AttrDecl(aname, atpe, defdecl) :: attList - cbuf.setLength(0) + cbuf.length = 0 } nextch handle.attListDecl(n, attList.reverse) @@ -1207,7 +1207,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar } } val name = cbuf.toString() - cbuf.setLength(0) + cbuf.length = 0 name } |