Commit 689d746d authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander.Trofimov

Bug 24535 - Теряются параграфы в таблице при выборе пресета таблицы

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@56439 954022d7-b5bf-4e40-9824-e11837661b57
parent 361a6475
......@@ -948,7 +948,9 @@ function BinaryStyleTableWriter(memory, doc, oNumIdMap, oUsedStyleMap)
{
var style = styles[styleId];
var bDefault = false;
if(styleId == oDefault.Paragraph)
if(styleId == oDefault.Character)
bDefault = true;
else if(styleId == oDefault.Paragraph)
bDefault = true;
else if(styleId == oDefault.Numbering)
bDefault = true;
......@@ -4820,6 +4822,10 @@ function BinaryFileReader(doc, openParams)
}
var styles = this.Document.Styles.Style;
var stDefault = this.Document.Styles.Default;
if(g_nCurFileVersion < 2){
for(var i in this.oReadResult.styles)
this.oReadResult.styles[i].style.qFormat = true;
}
//запоминаем имена стилей, которые были изначально в нашем документе, чтобы потом подменить их
var aStartDocStylesNames = {};
for(var stId in styles)
......@@ -4828,16 +4834,32 @@ function BinaryFileReader(doc, openParams)
if(style && style.Name)
aStartDocStylesNames[style.Name.toLowerCase().replace(/\s/g,"")] = style;
}
//запоминаем стили которые надо заменить
//запоминаем default стили имена или id которых совпали с стилями открываемого документа и ссылки на них надо подменить
var oIdRenameMap = {};
//Удаляем стили с тем же именем
for(var i in this.oReadResult.styles)
{
var elem = this.oReadResult.styles[i];
var oNewStyle = elem.style;
var oNewId = elem.param;
//такой код для сранения имен есть в DrawingDocument.js
// как только меняется DrawingDocument - меняется и код здесь.
var sNewStyleName = oNewStyle.Name.toLowerCase().replace(/\s/g,"");
var oStartDocStyle = aStartDocStylesNames[sNewStyleName];
if(oStartDocStyle)
{
var stId = oStartDocStyle.Get_Id();
oNewStyle.Set_Name(oStartDocStyle.Name);
oIdRenameMap[stId] = {id: oNewId.id, def: oNewId.def, type: oNewStyle.Type, newName: sNewStyleName};
delete styles[stId];
}
}
//заменяем id стилей по умолчанию если они, если они совпали со стилями открываемого документа
for(var i in this.oReadResult.styles)
{
var elem = this.oReadResult.styles[i];
var oNewStyle = elem.style;
var oNewId = elem.param;
if(g_nCurFileVersion < 2)
oNewStyle.qFormat = true;
var oCollisionStyle = styles[oNewId.id];
if(oCollisionStyle)
{
......@@ -4851,43 +4873,13 @@ function BinaryFileReader(doc, openParams)
}
var oNewId = {id: sNewId, def: false, type: oCollisionStyle.Type, newName: oCollisionStyle.Name.toLowerCase().replace(/\s/g,"")};
oIdRenameMap[sOldId] = oNewId;
if(stDefault.Numbering == sOldId || stDefault.Paragraph == sOldId || stDefault.Table == sOldId)
if(stDefault.Character == sOldId || stDefault.Numbering == sOldId || stDefault.Paragraph == sOldId || stDefault.Table == sOldId)
oNewId.def = true;
oCollisionStyle.Set_Id(sNewId);
delete styles[sOldId];
styles[sNewId] = oCollisionStyle;
}
}
//Удаляем стили с тем же именем
for(var i in this.oReadResult.styles)
{
var elem = this.oReadResult.styles[i];
var oNewStyle = elem.style;
var oNewId = elem.param;
//такой код для сранения имен есть в DrawingDocument.js
// как только меняется DrawingDocument - меняется и код здесь.
var sNewStyleName = oNewStyle.Name.toLowerCase().replace(/\s/g,"");
var oStartDocStyle = aStartDocStylesNames[sNewStyleName];
if(oStartDocStyle)
{
var stId = oStartDocStyle.Get_Id();
oNewStyle.Set_Name(oStartDocStyle.Name);
oIdRenameMap[stId] = {id: oNewId.id, def: oNewId.def, type: oNewStyle.Type, newName: sNewStyleName};
delete styles[stId];
}
}
//уменьшаем oIdRenameMap за счет последовательных ссылок
for(var stId in oIdRenameMap){
var oNewId = oIdRenameMap[stId];
while(null != oNewId && oNewId.id != stId){
var oNewId2 = oIdRenameMap[oNewId.id];
if(null != oNewId2){
delete oIdRenameMap[oNewId.id];
oIdRenameMap[stId] = oNewId2;
}
oNewId = oNewId2;
}
}
//меняем BasedOn и Next
for(var stId in styles)
{
......@@ -4918,6 +4910,8 @@ function BinaryFileReader(doc, openParams)
var oNewId = oIdRenameMap[sOldId];
var sNewStyleName = oNewId.newName;
var stId = sOldId;
if(stDefault.Character == stId)
stDefault.Character = null;
if(stDefault.Paragraph == stId)
stDefault.Paragraph = null;
if(stDefault.Numbering == stId)
......@@ -4936,7 +4930,7 @@ function BinaryFileReader(doc, openParams)
{
switch(oNewId.type)
{
case styletype_Character:break;
case styletype_Character:stDefault.Character = oNewId.id;break;
case styletype_Numbering:stDefault.Numbering = oNewId.id;break;
case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break;
case styletype_Table:stDefault.Table = oNewId.id;break;
......@@ -4954,7 +4948,7 @@ function BinaryFileReader(doc, openParams)
{
switch(oNewStyle.Type)
{
case styletype_Character:break;
case styletype_Character:stDefault.Character = oNewId.id;break;
case styletype_Numbering:stDefault.Numbering = oNewId.id;break;
case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break;
case styletype_Table:stDefault.Table = oNewId.id;break;
......@@ -4989,6 +4983,14 @@ function BinaryFileReader(doc, openParams)
fParseStyle(this.oReadResult.tableStyles, styles, oStyleTypes.table);
fParseStyle(this.oReadResult.lvlStyles, styles, oStyleTypes.lvl);
var nStId = styles.length;
if(null == stDefault.Character)
{
var oNewStyle = new CStyle( "GenStyleDefChar", null, null, styletype_Character );
//oNewStyle.Create_Default_Character();
stDefault.Character = nStId.toString();
styles[nStId] = oNewStyle;
nStId++;
}
if(null == stDefault.Numbering)
{
var oNewStyle = new CStyle( "GenStyleDefNum", null, null, styletype_Numbering );
......
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