//Illustrator CS version/******************************* @title MergeText_AI_CS* @author Justin Putney* @info http://putney.ajarproductions.com* @version 1.0.0*******************************//********************************************	begin code for Merging Text********************************************/if(app.documents.length >= 1) {	var sortProp = "left";	var doc = app.activeDocument;	var sel  = doc.selection;	var tfs  = new Array();	var separator = "[><]";	var appversion = app.version;	var minimumversion = 13;	var aiversion = parseInt(appversion.split(".")[0]);	init();	} else {	alert("No documents open");}function init(){	collectFields();	if(tfs.length> 1) {		if(aiversion >= minimumversion) runDialog();		else run();	} else if (tfs.length == 1) {			alert("You must select more than one textfield.");	} else {			alert("No textfields selected.");	}}function collectFields() {	for(var i=0; i < sel.length; i++){		var t = sel[i];		if (t == undefined) continue;		if(t.typename == "TextFrame"){			//t.position //for text boxes			//$.writeln(t.position);			tfs.push(t);			}	}}function run () {	//position for sorting---------	if(sortProp == "right") flipFields(tfs, -100, 100);	else if(sortProp == "bottom") flipFields(tfs, 100, -100);	//-------------------------------	tfs.sort(sortFields);	//reset----------	if(sortProp == "right") flipFields(tfs, -100, 100);	else if(sortProp == "bottom") flipFields(tfs, 100, -100);	//----------------	doc.selection = tfs;	assemble(tfs);}function runDialog(){	var omd = newOminoDialog("Merge Textfields");	omd.radioButtons("Sort by","sort","top",["top","left","bottom","right"]);	omd.separator();	omd.string("Separator","separator","");	omd.boxedText(1,"\\r = return, \\t = tab");	var result = omd.run();	if(result != null) {		separator = result.separator;		separator = replace(separator, "\\r", "\r");		separator = replace(separator, "\\t", "\t");		//separator = replace(separator, "\\n", "\n");		sortProp = result.sort;		run();	}}function flipFields(arr, scaleX, scaleY) {	var g = group(arr);	g.resize(scaleX, scaleY);	var items = ungroup(g);}function assemble(arr){	var targField = arr.shift();	for (var i=0; i<arr.length; i++){		arr[i].textRange.contents = separator + arr[i].textRange.contents;		arr[i].textRange.move(targField, ElementPlacement.PLACEATEND);		arr[i].remove();	}}function sortFields(a,b) {	var tProp = sortProp;	if(tProp == "bottom") tProp = "top"; //use flipped values	else if(tProp == "right") tProp = "left"; //use flipped values	var aN = parseFloat(a[tProp]);	var bN = parseFloat(b[tProp]);	var returnVal = aN - bN;	if(returnVal == 0) {		//second level sorting		if(tProp == "top") tProp = "left";		else if(tProp == "left") tProp = "top";		aN = parseFloat(a[tProp]);		bN = parseFloat(b[tProp]);		returnVal = aN - bN;	}	if(tProp == "top") returnVal *= -1; //y is reverse	return returnVal;}function group(arr){	var g = doc.groupItems.add();	for(var i=0; i < arr.length; i++){		arr[i].move(g, ElementPlacement.INSIDE);	}	return g;}function ungroup(group){	var items = new Array();	var numItems = group.pageItems.length;	for(var i=numItems-1; i >=0; i--){		var item = group.pageItems[i].move(group.parent, ElementPlacement.INSIDE);		items.push(item);	}	group.remove();	return(items);}function replace(searchStr, findStr, replaceStr){	//fl.trace('replacing...' + findStr + '...with...' + replaceStr + '...in: ' + searchStr);	var tArr = searchStr.split(findStr);	var returnStr = tArr.join(replaceStr);	return returnStr;}//for testing onlyfunction traceFields(arr){	$.writeln("----------------");	for(var i=0; i<arr.length; i++){		$.writeln(arr[i].contents + "// 1: " + Math.round(arr[i].left) + ", 2: " + Math.round(arr[i].top) );	}	$.writeln("----------------");}/********************************************	end code for Merging Text********************************************///end file