http://code.google.com/p/pharo/issues/detail?id=6807 Stef
A total number of lines in string should be: one + number of line separators found.
Explanation: a 'String cr/ crlf' stands for 'line separator'. By definition, a separator, is thing which separates two others.. i mean, there is no way how you can use 'separator' term without having TWO things which it separates.
The problem is that #lines does not follows common sense:
(String empty, String cr, String empty) lines size 1
so, our line separator "separates" one thing :) It means that we overload the definition: - a line separator separates two lines unless it is at the end of text.
But think , how dearly this 'unless' will costs in terms of implementation! Everywhere where you may need to handle text, you should put this extra rule, and if you forget it, you will be punished..
Here what various #lines produces:
( 'A' ) lines size 1 ( 'A', String cr ) lines size 1 !!oops!!.
( String cr, 'A' ) lines size 2 ( 'A', String cr, 'A' ) lines size 2
( 'A', String cr, 'A', String cr ) lines size 2 ( 'A', String cr, 'A', String cr ) lines size 2 !!oops!!
You may think this is fine, but lets look at the problem from another angle:
self assert: (string1, String cr, string2) lineCount >= 2
The 'string1, String cr, string2' above is an insertion operation. We inserting a line separator between two arbitrary strings. Now, in what universe the total number of lines may not get increased after such insertion?
So, it is simply inconsistent. Or maybe you happy to put extra code everywhere where you handling text, to do a special handling if last character is line separator? But we can avoid all that mess it in a first place, if we obey to common sense.
-- Best regards, Igor Stasenko.