Помогите дописать парсер
Вот по этому принципу (код
FaMinor)
Для кнопки сенд нужно дописать парсер.
Принцип его такой:
Для формирования строки для отправки создается 2 массива. В первом (arr) записываюся координаты начала применения любых тегов.
Во второй (arrBI) - признак набора тегов.
Если признак = 1 - то это болд
Если признак = 2 - то это италик
Если признак = 3 - то это болд и италик
Если признак = 0 - теги были закрыты.
Останется согласно первого массива разбить весь текст на куски и согласно вторго раставить теги. При этом следует следить когда теги открываются и когда закрываются. Для этого ввести еще 2 переменные в которых фиксировать состояние тегов.
Код флешки

Код AS1/AS2:
var arr:Array = [];
var arrBI:Array = [];
var n = 0;
var m = arr.length/2-1;
Selection.setFocus("txt_txt");
Selection.setSelection(arr[n], arr[n+1]);
//
function getIndexs() {
if (Selection.getBeginIndex() != -1 && Selection.getEndIndex() != -1) {
startIndex = Selection.getBeginIndex();
endIndex = Selection.getEndIndex();
}
}
function checkFormat(val, startIndex, endIndex) {
var obj1 = txt_txt.getTextFormat(startIndex, endIndex);
return (obj1[val]);
}
function doChange(val) {
var varBoolen;
varBoolen = checkFormat(val, startIndex, endIndex) ? (false) : (true);
var obj1 = new TextFormat();
obj1[val] = varBoolen;
txt_txt.setTextFormat(startIndex, endIndex, obj1);
setSelection();
}
txt_txt.onChanged = getIndexs;
var mouseListener = new Object();
mouseListener.onMouseUp = getIndexs;
Mouse.addListener(mouseListener);
//
function calculatePositionBold_and_italic() {
arr = [];
arrBI = [];
var changing:Boolean = false;
var setFormat:Number = 0;
var setFormat1:Number = 0;
for (var i:Number = 0; i<txt_txt.text.length-1; i++) {
setFormat = 0;
var fmt:TextFormat = txt_txt.getTextFormat(i, i+1);
var fmtc = fmt.bold;
var fmti = fmt.italic;
if (fmtc) {
setFormat = 1;
}
if (fmti) {
setFormat += 2;
}
if (setFormat == 0 && changing == true) {
arr.push(i);
arrBI.push(setFormat);
changing = false;
} else if (setFormat>0 && setFormat != setFormat1) {
arr.push(i);
arrBI.push(setFormat);
changing = true;
} else if (setFormat>0 && changing == false) {
arr.push(i);
arrBI.push(setFormat);
changing = true;
}
setFormat1 = setFormat;
setFormat = 0;
}
if (changing == true) {
arr.push(txt_txt.text.length+1);
changing = false;
}
}
function calculatePositionItalic() {
arr = [];
var changing:Boolean = false;
for (var i:Number = 0; i<txt_txt.text.length; i++) {
var fmt:TextFormat = txt_txt.getTextFormat(i, i+1);
var fmtc = fmt.italic;
if (fmtc == 0 && changing == true) {
arr.push(i);
changing = false;
} else if (fmtc != 0 && changing == false) {
arr.push(i);
changing = true;
}
}
if (changing == true) {
arr.push(txt_txt.text.length+1);
changing = false;
}
}
btn.onPress = function() {
doChange("bold");
};
btni.onPress = function() {
doChange("italic");
};
mb.onPress = function() {
calculatePositionBold_and_italic();
trace(arr);
trace(arrBI);
};
function pars(ss) {
var l = arr.length;
var arr2:Array = [];
if (arr[0] != 0) {
for (i=0; i<l; i += 2) {
arr2[i] = ss.substring(i, arr[i]);
arr2[i+1] = "<b>"+ss.substring(arr[i], arr[i+1])+"</b>";
}
arr2[i] = ss.substring(arr[i-1], arr[l]);
} else {
arr2[0] = "<b>"+ss.substring(0, arr[1])+"</b>";
for (i=1; i<l-1; i += 2) {
arr2[i] = ss.substring(arr[i]+1, arr[i+1]);
arr2[i+1] = "<b>"+ss.substring(arr[i+1], arr[i+2])+"</b>";
}
arr2[i] = ss.substring(arr[i-1], arr[l]);
}
return (arr2.join(""));
}
function parsi(ss) {
var l = arr.length;
var arr2:Array = [];
if (arr[0] != 0) {
for (i=0; i<l; i += 2) {
arr2[i] = ss.substring(i, arr[i]);
arr2[i+1] = "<i>"+ss.substring(arr[i], arr[i+1])+"</i>";
}
arr2[i] = ss.substring(arr[i-1], arr[l]);
} else {
arr2[0] = "<i>"+ss.substring(0, arr[1])+"</i>";
for (i=1; i<l-1; i += 2) {
arr2[i] = ss.substring(arr[i]+1, arr[i+1]);
arr2[i+1] = "<i>"+ss.substring(arr[i+1], arr[i+2])+"</i>";
}
arr2[i] = ss.substring(arr[i-1], arr[l]);
}
return (arr2.join(""));
}