[483] | 1 | define(["./fs"], function(fs){ |
---|
| 2 | var cached = {}; |
---|
| 3 | |
---|
| 4 | return function(contents, replacement){ |
---|
| 5 | var encoding = "utf8"; |
---|
| 6 | if(replacement instanceof Array){ |
---|
| 7 | // replacement is a vector of replacement instructions; maybe the first item is an encoding |
---|
| 8 | if(typeof replacement[0]=="string"){ |
---|
| 9 | encoding = replacement[0]; |
---|
| 10 | replacement = replacement.slice(1); |
---|
| 11 | } |
---|
| 12 | }else{ |
---|
| 13 | // replacement is a single replacement [search, replacement, type] triple |
---|
| 14 | replacement = [replacement]; |
---|
| 15 | } |
---|
| 16 | // at this point, encoding has been determined and replacement is a vector of [search, replacement, type] triples |
---|
| 17 | |
---|
| 18 | replacement.forEach(function(item){ |
---|
| 19 | var |
---|
| 20 | searchText = item[0], |
---|
| 21 | replacementText = item[1], |
---|
| 22 | type = item[2]; |
---|
| 23 | if(type=="file"){ |
---|
| 24 | // replacementText gives a filename that holds the replacement text |
---|
| 25 | // TODO add type AMD module |
---|
| 26 | replacementText = (cached[filename] = cached[filename] || fs.readFileSynch(replacementText, encoding)); |
---|
| 27 | } |
---|
| 28 | if(searchText instanceof RegExp){ |
---|
| 29 | contents = contents.replace(searchText, replacementText); |
---|
| 30 | }else if(typeof searchText=="function"){ |
---|
| 31 | contents = searchText(contents); |
---|
| 32 | }else{ |
---|
| 33 | // replace all occurences of searchText with replacementText |
---|
| 34 | var |
---|
| 35 | searchTextLength = searchText.length, |
---|
| 36 | replacementTextLength = replacementText.length, |
---|
| 37 | start = contents.indexOf(searchText); |
---|
| 38 | while(start!=-1){ |
---|
| 39 | contents = contents.substring(0, start) + replacementText + contents.substring(start + searchTextLength); |
---|
| 40 | start = contents.indexOf(searchText, start + replacementTextLength); |
---|
| 41 | } |
---|
| 42 | } |
---|
| 43 | }); |
---|
| 44 | return contents; |
---|
| 45 | }; |
---|
| 46 | }); |
---|
| 47 | |
---|