Commit 85c01f94 authored by GoshaZotov's avatar GoshaZotov

set start position for mso-list

parent 00810e9f
......@@ -4879,11 +4879,7 @@ PasteProcessor.prototype =
if(pNoHtmlPr['mso-list'])
{
//get listId and level from mso-list property
var msoListIgnoreSymbol = this._getMsoListSymbol(node);
var num = this._getTypeMsoListSymbol(msoListIgnoreSymbol);
{
var level = 0;
var listId = null;
var startIndex;
......@@ -4902,6 +4898,12 @@ PasteProcessor.prototype =
NumId = this.msoListMap[listId];
}
//get listId and level from mso-list property
var msoListIgnoreSymbol = this._getMsoListSymbol(node);
var listObj = this._getTypeMsoListSymbol(msoListIgnoreSymbol, (null === NumId));
var num = listObj.type;
var startPos = listObj.startPos;
if(null == NumId && this.pasteInExcel !== true)//create new NumId
{
// Создаем нумерацию
......@@ -4951,9 +4953,15 @@ PasteProcessor.prototype =
case numbering_numfmt_UpperLetter: AbstractNum.Set_Lvl_Numbered_6(level);break;
}
//проставляем начальную позицию
if(null !== startPos)
{
AbstractNum.Set_Lvl_Start(level, startPos);
}
//setListTextPr(AbstractNum);
}
else
/*else
{
var AbstractNum = this.oLogicDocument.Numbering.Get_AbstractNum(NumId);
......@@ -4965,7 +4973,7 @@ PasteProcessor.prototype =
case numbering_numfmt_LowerLetter: AbstractNum.Set_Lvl_Numbered_8(level);break;
case numbering_numfmt_UpperLetter: AbstractNum.Set_Lvl_Numbered_6(level);break;
}
}
}*/
//put into map listId
......@@ -5407,40 +5415,131 @@ PasteProcessor.prototype =
}
}
},
_getTypeMsoListSymbol: function(str)
_getTypeMsoListSymbol: function(str, getStartPosition)
{
var symbolsArr = [
"ivxlcdm",
"IVXLCDM",
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
];
//TODO пересмотреть функцию перевода из римских чисел
var romanToIndex = function(text)
{
var arab_number = [1,4,5,9,10,40,50,90,100,400,500,900,1000,4000,5000,9000,10000];
var rom_number = ["I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M", "Mↁ","ↁ","ↁↂ","ↂ"];
var text = text.toUpperCase();
var result = 0;
var pos = 0;
var i = arab_number.length - 1;
while (i >= 0 && pos < text.length)
{
if (text.substr(pos, rom_number[i].length) == rom_number[i])
{
result += arab_number[i];
pos += rom_number[i].length;
}
else
{
i--;
}
}
return result;
};
var latinToIndex = function(text)
{
var text = text.toUpperCase();
var index = 0;
for(var i = 0; i < text.length; i++)
{
index += symbolsArr[3].indexOf(text[i]) + 1;
}
return index;
};
var getFullListIndex = function(indexStr, str)
{
var fullListIndex = "";
for(var i = 0; i < str.length; i++)
{
var symbol = str[i];
if(-1 !== indexStr.indexOf(symbol))
{
fullListIndex += symbol;
}
else
{
break;
}
}
return fullListIndex;
};
//TODO пока делаю так, пересмотреть регулярные выражения
var res = numbering_numfmt_Bullet;
var resType = numbering_numfmt_Bullet;
var number = parseInt(str);
var startPos = null, fullListIndex;
if(!isNaN(number))
{
res = numbering_numfmt_Decimal;
resType = numbering_numfmt_Decimal;
startPos = number;
}
else if(1 === str.length && -1 !== str.indexOf("o"))
{
res = numbering_numfmt_Bullet;
resType = numbering_numfmt_Bullet;
}
else
{
if(str.match(/^[I,X,V]/))
//1)смотрим на первый символ в строке
//2)ищем все символы, соответсвующие данному типу
//3)находим порядковый номер этих символов
var firstSymbol = str[0];
if(-1 !== symbolsArr[0].indexOf(firstSymbol))
{
res = numbering_numfmt_UpperRoman;
if(getStartPosition)
{
fullListIndex = getFullListIndex(symbolsArr[0], str);
startPos = romanToIndex(fullListIndex);
}
resType = numbering_numfmt_LowerRoman;
}
else if(str.match(/^[i,x,v]/))
else if(-1 !== symbolsArr[1].indexOf(firstSymbol))
{
res = numbering_numfmt_LowerRoman;
if(getStartPosition)
{
fullListIndex = getFullListIndex(symbolsArr[1], str);
startPos = romanToIndex(fullListIndex);
}
resType = numbering_numfmt_UpperRoman;
}
else if(str.match(/^[A-Z]/))
else if(-1 !== symbolsArr[2].indexOf(firstSymbol))
{
res = numbering_numfmt_UpperLetter;
if(getStartPosition)
{
fullListIndex = getFullListIndex(symbolsArr[2], str);
startPos = latinToIndex(fullListIndex);
}
resType = numbering_numfmt_LowerLetter;
}
else if(str.match(/^[a-z]/))
else if(-1 !== symbolsArr[3].indexOf(firstSymbol))
{
res = numbering_numfmt_LowerLetter;
if(getStartPosition)
{
fullListIndex = getFullListIndex(symbolsArr[3], str);
startPos = latinToIndex(fullListIndex);
}
resType = numbering_numfmt_UpperLetter;
}
}
return res;
return {type: resType, startPos: startPos};
},
_AddNextPrevToContent : function(oDoc)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment