File: line-break.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (19 lines) | stat: -rw-r--r-- 542 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
signature LINE_BREAK =
sig
    val lineBreak : int -> string -> string
end

structure LineBreak : LINE_BREAK =
struct
   fun lineBreak maxChars text =
   let fun loop([],_,text) = String.concat(rev text)
         | loop(s::ss,n,text) = 
           let val m = String.size s + 1
               val n' = m+n
           in  if n' > maxChars 
               then loop(ss, m, s::" "::"\n"::text)
               else loop(ss, n', s::" "::text)
           end
       val toks = String.fields (fn c => c = #" ") text
   in  loop(toks, 0, []) end
end