[Turn off line numbering]1: arg text; 2: var word, out, escaped, token, i, pre_count, open_form, str; 3: 4: // break text into a list of tokens. 5: if (type(text) == 'string) 6: text = [text]; 7: out = []; 8: word = ""; 9: escaped = 0; 10: 11: // pre_count is 0, except inside pre, when it counts the {}'s 12: pre_count = 0; 13: open_form = 0; 14: for str in (text) { 15: str = str.explode(" ", 1); 16: for token in (str) { 17: refresh(); 18: if (!token && !pre_count) 19: continue; 20: while ((i = token.match_regexp("[][{}=\:]"))) { 21: refresh(); 22: i = i[1][1]; 23: if (escaped) { 24: escaped = 0; 25: word = word + "\" + token.subrange(1, i); 26: } else if (pre_count) { 27: if (token[i] == "{") { 28: pre_count++; 29: word += token.subrange(1, i); 30: } else if (token[i] == "}") { 31: pre_count--; 32: if (pre_count) { 33: word += token.subrange(1, i); 34: } else { 35: word += token.subrange(1, i - 1); 36: out = word ? out + [word, token[i]] : out + [token[i]]; 37: word = ""; 38: } 39: } else { 40: word += token.subrange(1, i); 41: } 42: } else { 43: word += token.subrange(1, i - 1); 44: open_form = token[i] == "{"; 45: if (token[i] == "\") { 46: escaped = 1; 47: } else { 48: out = word ? out + [word, token[i]] : out + [token[i]]; 49: word = ""; 50: } 51: } 52: token = token.subrange(i + 1); 53: } 54: if (open_form && token == "quote") { 55: pre_count = 1; 56: open_form = 0; 57: out += [token]; 58: token = ""; 59: continue; 60: } 61: word += token; 62: if (escaped || pre_count) { 63: escaped = 0; 64: word += " "; 65: } else { 66: out = word ? out + [word, " "] : out + [" "]; 67: word = ""; 68: } 69: } 70: if (pre_count) 71: word = word ? word.subrange(1, word.length() - 1) + " " : " "; 72: } 73: if (word) 74: out += [word]; 75: if (out) { 76: if (out.last() == " ") 77: out = out.subrange(1, out.length() - 1); 78: else 79: out = out.replace(out.length(), out.last().subrange(out.last().length() - 1)); 80: } 81: return out;
// Created 17-Jul-1996 as a part of ColdCore, see: @help Credit