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) ...@@ -948,7 +948,9 @@ function BinaryStyleTableWriter(memory, doc, oNumIdMap, oUsedStyleMap)
{ {
var style = styles[styleId]; var style = styles[styleId];
var bDefault = false; var bDefault = false;
if(styleId == oDefault.Paragraph) if(styleId == oDefault.Character)
bDefault = true;
else if(styleId == oDefault.Paragraph)
bDefault = true; bDefault = true;
else if(styleId == oDefault.Numbering) else if(styleId == oDefault.Numbering)
bDefault = true; bDefault = true;
...@@ -4820,6 +4822,10 @@ function BinaryFileReader(doc, openParams) ...@@ -4820,6 +4822,10 @@ function BinaryFileReader(doc, openParams)
} }
var styles = this.Document.Styles.Style; var styles = this.Document.Styles.Style;
var stDefault = this.Document.Styles.Default; 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 = {}; var aStartDocStylesNames = {};
for(var stId in styles) for(var stId in styles)
...@@ -4828,16 +4834,32 @@ function BinaryFileReader(doc, openParams) ...@@ -4828,16 +4834,32 @@ function BinaryFileReader(doc, openParams)
if(style && style.Name) if(style && style.Name)
aStartDocStylesNames[style.Name.toLowerCase().replace(/\s/g,"")] = style; aStartDocStylesNames[style.Name.toLowerCase().replace(/\s/g,"")] = style;
} }
//запоминаем стили которые надо заменить //запоминаем default стили имена или id которых совпали с стилями открываемого документа и ссылки на них надо подменить
var oIdRenameMap = {}; 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 стилей по умолчанию если они, если они совпали со стилями открываемого документа //заменяем id стилей по умолчанию если они, если они совпали со стилями открываемого документа
for(var i in this.oReadResult.styles) for(var i in this.oReadResult.styles)
{ {
var elem = this.oReadResult.styles[i]; var elem = this.oReadResult.styles[i];
var oNewStyle = elem.style; var oNewStyle = elem.style;
var oNewId = elem.param; var oNewId = elem.param;
if(g_nCurFileVersion < 2)
oNewStyle.qFormat = true;
var oCollisionStyle = styles[oNewId.id]; var oCollisionStyle = styles[oNewId.id];
if(oCollisionStyle) if(oCollisionStyle)
{ {
...@@ -4851,43 +4873,13 @@ function BinaryFileReader(doc, openParams) ...@@ -4851,43 +4873,13 @@ function BinaryFileReader(doc, openParams)
} }
var oNewId = {id: sNewId, def: false, type: oCollisionStyle.Type, newName: oCollisionStyle.Name.toLowerCase().replace(/\s/g,"")}; var oNewId = {id: sNewId, def: false, type: oCollisionStyle.Type, newName: oCollisionStyle.Name.toLowerCase().replace(/\s/g,"")};
oIdRenameMap[sOldId] = oNewId; 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; oNewId.def = true;
oCollisionStyle.Set_Id(sNewId); oCollisionStyle.Set_Id(sNewId);
delete styles[sOldId]; delete styles[sOldId];
styles[sNewId] = oCollisionStyle; 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 //меняем BasedOn и Next
for(var stId in styles) for(var stId in styles)
{ {
...@@ -4918,6 +4910,8 @@ function BinaryFileReader(doc, openParams) ...@@ -4918,6 +4910,8 @@ function BinaryFileReader(doc, openParams)
var oNewId = oIdRenameMap[sOldId]; var oNewId = oIdRenameMap[sOldId];
var sNewStyleName = oNewId.newName; var sNewStyleName = oNewId.newName;
var stId = sOldId; var stId = sOldId;
if(stDefault.Character == stId)
stDefault.Character = null;
if(stDefault.Paragraph == stId) if(stDefault.Paragraph == stId)
stDefault.Paragraph = null; stDefault.Paragraph = null;
if(stDefault.Numbering == stId) if(stDefault.Numbering == stId)
...@@ -4936,7 +4930,7 @@ function BinaryFileReader(doc, openParams) ...@@ -4936,7 +4930,7 @@ function BinaryFileReader(doc, openParams)
{ {
switch(oNewId.type) 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_Numbering:stDefault.Numbering = oNewId.id;break;
case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break; case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break;
case styletype_Table:stDefault.Table = oNewId.id;break; case styletype_Table:stDefault.Table = oNewId.id;break;
...@@ -4954,7 +4948,7 @@ function BinaryFileReader(doc, openParams) ...@@ -4954,7 +4948,7 @@ function BinaryFileReader(doc, openParams)
{ {
switch(oNewStyle.Type) 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_Numbering:stDefault.Numbering = oNewId.id;break;
case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break; case styletype_Paragraph:stDefault.Paragraph = oNewId.id;break;
case styletype_Table:stDefault.Table = oNewId.id;break; case styletype_Table:stDefault.Table = oNewId.id;break;
...@@ -4989,6 +4983,14 @@ function BinaryFileReader(doc, openParams) ...@@ -4989,6 +4983,14 @@ function BinaryFileReader(doc, openParams)
fParseStyle(this.oReadResult.tableStyles, styles, oStyleTypes.table); fParseStyle(this.oReadResult.tableStyles, styles, oStyleTypes.table);
fParseStyle(this.oReadResult.lvlStyles, styles, oStyleTypes.lvl); fParseStyle(this.oReadResult.lvlStyles, styles, oStyleTypes.lvl);
var nStId = styles.length; 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) if(null == stDefault.Numbering)
{ {
var oNewStyle = new CStyle( "GenStyleDefNum", null, null, styletype_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