725 fun unenclose str = String.substring (str, 1, size str - 2); |
725 fun unenclose str = String.substring (str, 1, size str - 2); |
726 |
726 |
727 (*simple quoting (does not escape special chars)*) |
727 (*simple quoting (does not escape special chars)*) |
728 val quote = enclose "\"" "\""; |
728 val quote = enclose "\"" "\""; |
729 |
729 |
730 (*space_implode "..." (Symbol.explode "hello") = "h...e...l...l...o"*) |
|
731 fun space_implode a bs = implode (separate a bs); |
730 fun space_implode a bs = implode (separate a bs); |
732 |
731 |
733 val commas = space_implode ", "; |
732 val commas = space_implode ", "; |
734 val commas_quote = commas o map quote; |
733 val commas_quote = commas o map quote; |
735 |
734 |
736 (*concatenate messages, one per line, into a string*) |
|
737 val cat_lines = space_implode "\n"; |
735 val cat_lines = space_implode "\n"; |
738 |
736 |
739 (*space_explode "." "h.e..l.lo" = ["h", "e", "", "l", "lo"]*) |
737 (*space_explode "." "h.e..l.lo" = ["h", "e", "", "l", "lo"]*) |
740 fun space_explode _ "" = [] |
738 fun space_explode _ "" = [] |
741 | space_explode sep s = String.fields (fn c => str c = sep) s; |
739 | space_explode sep s = String.fields (fn c => str c = sep) s; |