// Dependências: (nenhuma).
//
// Rotinas para tratamento de 'strings'.

// Retorna 'str' com exactamente 'l' caractéres e alinhado à esquerda. Para isso pode 
// ter de truncar os últimos caractéres ou acrescentar-lhe um determinado nº de 'optCh'.
function alignLeft (str, l, optCh) {
	if (optCh == undefined) optCh = " ";
	str = str.toString ();
	
	var n = str.length;
	if (n > l)			// Truncar.
		str = str.substr (0, l);
	else if (n < l) {	// Acrescentar caractéres.
		var i;
		n = l - n;
		var tmp = optCh;
		for (i = 1; i < n; ++i) tmp += optCh;
		str += tmp;
	}
		
	return str;
}

// Retorna 'str' com exactamente 'l' caractéres e alinhado à direita. Para isso pode 
// ter de truncar os primeiros caractéres ou fazer um determinado nº de 'optCh' 
// precedê-los .
function alignRight (str, l, optCh) {
	if (optCh == undefined) optCh = "0";
	str = str.toString ();
	
	var i;
	var n = str.length;
	if (n > l) {			// Truncar caractéres da frente.
		i = n - l;
		str = str.substr (i, n - i);
	}
	else if (n < l) {		// Acrescentar caractéres.
		n = l - n;
		var tmp = optCh;
		for (i = 1; i < n; ++i) tmp += optCh;
		str = tmp + str;
	}
		
	return str;
}

// Retorna uma cópia de 'str' sem qualquer caractér branco no início.
function ltrim (str) {	return str.toString ().replace (/^\s+/, "")	}

// Retorna uma cópia de 'str' sem qualquer caractér branco no final.
function rtrim (str) {	return str.toString ().replace (/\s+$/, "")	}

// Retorna uma cópia de 'str' sem qualquer caractér branco no início ou no fim.
function trim (str) {	return str.toString ().replace (/^\s+/, "").replace (/\s+$/, "")	}

// Retorna 'true' se a posição 'ndx' de 'str' estiver citada.
function isQuoted (str, ndx, opt) {
	var i = ndx;
	var quoteCharCount = 0;
	while (--i >= 0 && str.charAt (i) == "\\") {
		++quoteCharCount;
	}
	
	return (quoteCharCount % 2) != 0;
}