Arc Forumnew | comments | leaders | submitlogin
Ellipsize minor bug -- and fix
2 points by zck 4993 days ago | discuss
The output of 'ellipsize is longer than the limit you give it:

    arc> (ellipsize "abcdef" 4)
    "abcd..."
If you actually want the returned string to be no more than the length you pass to it, you must subtract 3 from the length you want:

    arc> (ellipsize "abcdef" 1)
    "a..."
However, by subtracting three from the desired maximum string length, we introduce a different bug. When the input string's length is equal to the desired length, or one or two shorter than it, the string is ellipsized:

    arc> (ellipsize "abc" 1) ;; We want the output to have a maximum length
                             ;; of 4, so we subtract three from the
                             ;; 'limit argument
    "a..."
Note that the ellipsized string was actually longer than the input string!

Code to fix this:

    (def my-ellipsize (str (o limit 80))
         (if (<= (len str)
                 limit)
             str
           (+ (cut str 0
                   (max 0 ;; So we never call 'cut with a negative argument
		        (- limit 3)))
              "...")))


We don't need to subtract three from the 'limit argument to 'my-ellipsize:

    arc> (my-ellipsize "abcdef" 4)
    "a..."
And the only strings that will be ellipsized are strings that are longer than 'limit:

    arc> (my-ellipsize "abc" 4)
    "abc"
However, it looks like pg wants 'ellipsize to display 'limit characters of the input ( http://arclanguage.org/item?id=2519 ). That seems ... odd to me. I can't imagine wanting to limit the displayed input length to a certain number, while still being ok with having longer strings than that length. But it's not my language.