Commit 0770d113 authored by Alexey.Musinov's avatar Alexey.Musinov

Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop

* 'develop' of https://github.com/ONLYOFFICE/core:
  _T"" -> L""
  fix bug 33326
  OdfFormat..
  remove base.h dependency
  fix bug 33323
  bug with disable hinting after first symbol
parents 7eb4f5d0 f9795a5d
......@@ -49,9 +49,9 @@ namespace DocFileFormat
_brcRight = NULL;
_brcBottom = NULL;
_tcPr = new XMLTools::XMLElement<wchar_t>(_T("w:tcPr"));
_tcMar = new XMLTools::XMLElement<wchar_t>(_T("w:tcMar"));
_tcBorders = new XMLTools::XMLElement<wchar_t>(_T("w:tcBorders"));
_tcPr = new XMLTools::XMLElement<wchar_t>(L"w:tcPr");
_tcMar = new XMLTools::XMLElement<wchar_t>(L"w:tcMar");
_tcBorders = new XMLTools::XMLElement<wchar_t>(L"w:tcBorders");
_ftsWidth = Global::nil;
}
......@@ -89,27 +89,27 @@ namespace DocFileFormat
_tGrid = tdef.rgdxaCenter;
_tcDef = tdef.rgTc80[(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1)]; // NOTE: fix for crash
appendValueElement( _tcPr, _T( "textDirection" ), FormatUtils::MapValueToWideString( _tcDef.textFlow, &Global::TextFlowMap[0][0], 6, 6 ).c_str(), false );
appendValueElement( _tcPr, L"textDirection", FormatUtils::MapValueToWideString( _tcDef.textFlow, &Global::TextFlowMap[0][0], 6, 6 ).c_str(), false );
if ( _tcDef.vertMerge == Global::fvmMerge )
{
appendValueElement( _tcPr, _T( "vMerge" ), _T( "continue" ), false );
appendValueElement( _tcPr, L"vMerge", L"continue", false );
}
else if ( _tcDef.vertMerge == Global::fvmRestart )
{
appendValueElement( _tcPr, _T( "vMerge" ), _T( "restart" ), false );
appendValueElement( _tcPr, L"vMerge", L"restart", false );
}
appendValueElement( _tcPr, _T( "vAlign" ), FormatUtils::MapValueToWideString( _tcDef.vertAlign, &Global::VerticalAlignMap[0][0], 3, 7 ).c_str(), false );
appendValueElement( _tcPr, L"vAlign", FormatUtils::MapValueToWideString( _tcDef.vertAlign, &Global::VerticalAlignMap[0][0], 3, 7 ).c_str(), false );
if ( _tcDef.fFitText )
{
appendValueElement( _tcPr, _T( "tcFitText" ), _T( "" ), false );
appendValueElement( _tcPr, L"tcFitText", L"", false );
}
if ( _tcDef.fNoWrap )
{
appendValueElement( _tcPr, _T( "noWrap" ), _T( "" ), true );
appendValueElement( _tcPr, L"noWrap", L"", true );
}
nComputedCellWidth = (short)( tdef.rgdxaCenter[(size_t)(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1) + 1] -
......@@ -145,22 +145,22 @@ namespace DocFileFormat
{
if ( FormatUtils::GetBitFromInt( iter->Arguments[2], 0 ) == true )
{
appendDxaElement( _tcMar, _T( "top" ), FormatUtils::IntToWideString( wMargin ).c_str(), true );
appendDxaElement( _tcMar, L"top", FormatUtils::IntToWideString( wMargin ).c_str(), true );
}
if ( FormatUtils::GetBitFromInt( iter->Arguments[2], 1 ) == true )
{
appendDxaElement( _tcMar, _T( "left" ), FormatUtils::IntToWideString( wMargin ).c_str(), true );
appendDxaElement( _tcMar, L"left", FormatUtils::IntToWideString( wMargin ).c_str(), true );
}
if ( FormatUtils::GetBitFromInt( iter->Arguments[2], 2 ) == true )
{
appendDxaElement( _tcMar, _T( "bottom" ), FormatUtils::IntToWideString( wMargin ).c_str(), true );
appendDxaElement( _tcMar, L"bottom", FormatUtils::IntToWideString( wMargin ).c_str(), true );
}
if ( FormatUtils::GetBitFromInt( iter->Arguments[2], 3 ) == true )
{
appendDxaElement( _tcMar, _T( "right" ), FormatUtils::IntToWideString( wMargin ).c_str(), true );
appendDxaElement( _tcMar, L"right", FormatUtils::IntToWideString( wMargin ).c_str(), true );
}
}
}
......@@ -210,7 +210,7 @@ namespace DocFileFormat
if ((_cellIndex >= first) && (_cellIndex < lim))
{
appendValueElement(_tcPr, _T( "vAlign" ), FormatUtils::MapValueToWideString( (VerticalCellAlignment)iter->Arguments[2], &VerticalCellAlignmentMap[0][0], 3, 7 ).c_str(), true );
appendValueElement(_tcPr, L"vAlign", FormatUtils::MapValueToWideString( (VerticalCellAlignment)iter->Arguments[2], &VerticalCellAlignmentMap[0][0], 3, 7 ).c_str(), true );
}
}
break;
......@@ -222,7 +222,7 @@ namespace DocFileFormat
if ( ( _cellIndex >= first ) && ( _cellIndex < lim ) )
{
appendValueElement( _tcPr, _T( "tcFitText" ), FormatUtils::IntToWideString( iter->Arguments[2] ).c_str(), true );
appendValueElement( _tcPr, L"tcFitText", FormatUtils::IntToWideString( iter->Arguments[2] ).c_str(), true );
}
}
break;
......@@ -271,9 +271,9 @@ namespace DocFileFormat
}
//width
XMLTools::XMLElement<wchar_t> tcW( _T( "w:tcW" ) );
XMLTools::XMLAttribute<wchar_t> tcWType( _T( "w:type" ), FormatUtils::MapValueToWideString( _ftsWidth, &Global::CellWidthTypeMap[0][0], 4, 5 ).c_str() );
XMLTools::XMLAttribute<wchar_t> tcWVal( _T( "w:w" ), FormatUtils::IntToWideString( _width ).c_str() );
XMLTools::XMLElement<wchar_t> tcW( L"w:tcW" );
XMLTools::XMLAttribute<wchar_t> tcWType( L"w:type", FormatUtils::MapValueToWideString( _ftsWidth, &Global::CellWidthTypeMap[0][0], 4, 5 ).c_str() );
XMLTools::XMLAttribute<wchar_t> tcWVal( L"w:w", FormatUtils::IntToWideString( _width ).c_str() );
tcW.AppendAttribute( tcWType );
tcW.AppendAttribute( tcWVal );
_tcPr->AppendChild( tcW );
......@@ -298,7 +298,7 @@ namespace DocFileFormat
}
}
appendValueElement( _tcPr, _T( "gridSpan" ), FormatUtils::IntToWideString( _gridSpan ).c_str(), true );
appendValueElement( _tcPr, L"gridSpan", FormatUtils::IntToWideString( _gridSpan ).c_str(), true );
}
//append margins
......@@ -310,28 +310,28 @@ namespace DocFileFormat
//append borders
if (_brcTop)
{
XMLTools::XMLElement<wchar_t> topBorder(_T("w:top"));
XMLTools::XMLElement<wchar_t> topBorder( L"w:top" );
appendBorderAttributes(_brcTop, &topBorder);
addOrSetBorder(_tcBorders, &topBorder );
}
if (_brcLeft )
{
XMLTools::XMLElement<wchar_t> leftBorder(_T("w:left"));
XMLTools::XMLElement<wchar_t> leftBorder( L"w:left" );
appendBorderAttributes(_brcLeft, &leftBorder);
addOrSetBorder(_tcBorders, &leftBorder);
}
if (_brcBottom)
{
XMLTools::XMLElement<wchar_t> bottomBorder(_T("w:bottom"));
XMLTools::XMLElement<wchar_t> bottomBorder( L"w:bottom" );
appendBorderAttributes(_brcBottom, &bottomBorder);
addOrSetBorder(_tcBorders, &bottomBorder);
}
if (_brcRight)
{
XMLTools::XMLElement<wchar_t> rightBorder( _T( "w:right" ) );
XMLTools::XMLElement<wchar_t> rightBorder( L"w:right" );
appendBorderAttributes( _brcRight, &rightBorder );
addOrSetBorder( _tcBorders, &rightBorder );
}
......
......@@ -48,9 +48,9 @@ namespace DocFileFormat
static const wchar_t VerticalCellAlignmentMap[3][7] =
{
_T( "top" ),
_T( "center" ),
_T( "bottom" )
L"top",
L"center",
L"bottom"
};
class TableCellPropertiesMapping : public PropertiesMapping, public IMapping
......
......@@ -44,10 +44,10 @@ namespace DocFileFormat
{
static const wchar_t WidthType[4][5] =
{
_T( "nil" ),
_T( "auto" ),
_T( "pct" ),
_T( "dxa" )
L"nil",
L"auto",
L"pct",
L"dxa"
};
struct FtsWWidth_Indent
......
......@@ -37,9 +37,9 @@ namespace DocFileFormat
{
TableRowPropertiesMapping::TableRowPropertiesMapping (XMLTools::CStringXmlWriter* pWriter, CharacterPropertyExceptions* rowEndChpx) : PropertiesMapping(pWriter), _trPr(NULL), _tblPrEx(NULL), _rowEndChpx(NULL)
{
_trPr = new XMLTools::XMLElement<wchar_t>(_T( "w:trPr"));
_tblPrEx = new XMLTools::XMLElement<wchar_t>(_T( "w:tblPrEx"));
//_tblBorders = new XMLTools::XMLElement<wchar_t>(_T( "w:tblBorders"));
_trPr = new XMLTools::XMLElement<wchar_t>(L"w:trPr");
_tblPrEx = new XMLTools::XMLElement<wchar_t>(L"w:tblPrEx");
//_tblBorders = new XMLTools::XMLElement<wchar_t>(L"w:tblBorders");
_rowEndChpx = rowEndChpx;
}
......@@ -58,7 +58,7 @@ namespace DocFileFormat
if ( ( _rowEndChpx != NULL ) && ( rev.Type == Deleted ) )
{
XMLTools::XMLElement<wchar_t> del( _T( "w:del" ) );
XMLTools::XMLElement<wchar_t> del( L"w:del" );
_trPr->AppendChild( del );
}
......@@ -81,7 +81,7 @@ namespace DocFileFormat
if ( fHeader )
{
XMLTools::XMLElement<wchar_t> header( _T( "w:tblHeader" ) );
XMLTools::XMLElement<wchar_t> header( L"w:tblHeader" );
_trPr->AppendChild( header );
}
}
......@@ -89,11 +89,11 @@ namespace DocFileFormat
case sprmTWidthAfter:
{ //width after
XMLTools::XMLElement<wchar_t> wAfter( _T( "w:wAfter" ) );
XMLTools::XMLAttribute<wchar_t> wAfterValue( _T( "w:w" ), FormatUtils::IntToWideString( FormatUtils::BytesToInt16( iter->Arguments, 1, iter->argumentsSize ) ).c_str() );
XMLTools::XMLElement<wchar_t> wAfter( L"w:wAfter" );
XMLTools::XMLAttribute<wchar_t> wAfterValue( L"w:w", FormatUtils::IntToWideString( FormatUtils::BytesToInt16( iter->Arguments, 1, iter->argumentsSize ) ).c_str() );
wAfter.AppendAttribute( wAfterValue );
XMLTools::XMLAttribute<wchar_t> wAfterType( _T( "w:type" ), _T( "dxa" ) );
XMLTools::XMLAttribute<wchar_t> wAfterType( L"w:type", L"dxa" );
wAfter.AppendAttribute( wAfterType );
_trPr->AppendChild( wAfter, true );
}
......@@ -105,11 +105,11 @@ namespace DocFileFormat
if ( before != 0 )
{
XMLTools::XMLElement<wchar_t> wBefore( _T( "w:wBefore" ) );
XMLTools::XMLAttribute<wchar_t> wBeforeValue( _T( "w:w" ), FormatUtils::IntToWideString( before ).c_str() );
XMLTools::XMLElement<wchar_t> wBefore( L"w:wBefore" );
XMLTools::XMLAttribute<wchar_t> wBeforeValue( L"w:w", FormatUtils::IntToWideString( before ).c_str() );
wBefore.AppendAttribute( wBeforeValue );
XMLTools::XMLAttribute<wchar_t> wBeforeType( _T( "w:type" ), _T( "dxa" ) );
XMLTools::XMLAttribute<wchar_t> wBeforeType( L"w:type", L"dxa" );
wBefore.AppendAttribute( wBeforeType );
_trPr->AppendChild( wBefore, true );
}
......@@ -119,25 +119,25 @@ namespace DocFileFormat
case sprmOldTDyaRowHeight:
case sprmTDyaRowHeight:
{ //row height
XMLTools::XMLElement<wchar_t> rowHeight( _T( "w:trHeight" ) );
XMLTools::XMLAttribute<wchar_t> rowHeightVal( _T( "w:val" ) );
XMLTools::XMLAttribute<wchar_t> rowHeightRule( _T( "w:hRule" ) );
XMLTools::XMLElement<wchar_t> rowHeight( L"w:trHeight" );
XMLTools::XMLAttribute<wchar_t> rowHeightVal( L"w:val" );
XMLTools::XMLAttribute<wchar_t> rowHeightRule( L"w:hRule" );
short rH = FormatUtils::BytesToInt16( iter->Arguments, 0, iter->argumentsSize );
if ( rH > 0 )
{
rowHeightRule.SetValue( _T( "atLeast" ) );
rowHeightRule.SetValue( L"atLeast" );
rowHeightVal.SetValue( FormatUtils::IntToWideString( rH ).c_str() );
rowHeight.AppendAttribute( rowHeightVal );
}
else if( rH == 0 )
{
rowHeightRule.SetValue( _T("auto") );
rowHeightRule.SetValue( L"auto" );
}
else
{
rowHeightRule.SetValue( _T( "exact" ) );
rowHeightRule.SetValue( L"exact" );
rH *= -1;
rowHeightVal.SetValue( FormatUtils::IntToWideString( rH ).c_str() );
rowHeight.AppendAttribute( rowHeightVal );
......@@ -152,13 +152,13 @@ namespace DocFileFormat
case sprmTFCantSplit:
case sprmTFCantSplit90:
{ //can't split
appendFlagElement( _trPr, *iter, _T( "cantSplit" ), true );
appendFlagElement( _trPr, *iter, L"cantSplit", true );
}break;
//div id
case sprmTIpgp:
{
appendValueElement( _trPr, _T( "divId" ), FormatUtils::IntToWideString( FormatUtils::BytesToInt32( iter->Arguments, 0, iter->argumentsSize ) ).c_str(), true );
appendValueElement( _trPr, L"divId", FormatUtils::IntToWideString( FormatUtils::BytesToInt32( iter->Arguments, 0, iter->argumentsSize ) ).c_str(), true );
}break;
//borders 80 exceptions
......
......@@ -44,6 +44,7 @@
#include "../odf/odfcontext.h"
#include "../odf/style_paragraph_properties.h"
#include "../odf/style_text_properties.h"
#include "../odf/style_table_properties.h"
#include "../odf/style_graphic_properties.h"
#include "../odf/datatypes/style_ref.h"
......@@ -1301,6 +1302,8 @@ void docx_conversion_context::start_changes()
text_tracked_context_.dumpPPr_.clear();
text_tracked_context_.dumpRPr_.clear();
text_tracked_context_.dumpRPrInsDel_.clear();
text_tracked_context_.dumpTcPr_.clear();
text_tracked_context_.dumpTblPr_.clear();
for (map_changes_iterator it = map_current_changes_.begin(); it != map_current_changes_.end(); it++)
{
......@@ -1329,45 +1332,63 @@ void docx_conversion_context::start_changes()
odf_reader::style_instance * styleInst = root()->odf_context().styleContainer().style_by_name(state.style_name, odf_types::style_family::Paragraph, false);
if (styleInst)
{
odf_reader::style_paragraph_properties * props = NULL;
props = styleInst->content()->get_style_paragraph_properties();
odf_reader::style_paragraph_properties * props = styleInst->content()->get_style_paragraph_properties();
odf_reader::style_text_properties * props_text = styleInst->content()->get_style_text_properties();
text_tracked_context_.dumpPPr_ += L"<w:pPrChange" + change_attr;
if (props)
{
props->docx_convert(*this);
odf_reader::style_text_properties * t_props = NULL;
t_props = styleInst->content()->get_style_text_properties();
if (t_props)
props->docx_convert(*this);
std::wstring attr = get_styles_context().paragraph_attr().str();
text_tracked_context_.dumpPPr_ += get_styles_context().paragraph_attr().str();
}
text_tracked_context_.dumpPPr_ += L">";
text_tracked_context_.dumpPPr_ += L"<w:pPrChange" + change_attr + (attr.empty() ? L">" : (L" " + attr + L">"));
text_tracked_context_.dumpPPr_ += get_styles_context().paragraph_nodes().str();
if (t_props)
if (props) text_tracked_context_.dumpPPr_ += get_styles_context().paragraph_nodes().str();
if (props_text)
{
props_text->docx_convert(*this);
text_tracked_context_.dumpPPr_ += L"<w:rPr>";
text_tracked_context_.dumpPPr_ += get_styles_context().text_style().str();
text_tracked_context_.dumpPPr_ += L"</w:rPr>";
}
text_tracked_context_.dumpPPr_ += L"</w:pPrChange>";
}
else
text_tracked_context_.dumpPPr_ = L"<w:pPrChange/>";
}
else if (styleInst = root()->odf_context().styleContainer().style_by_name(state.style_name, odf_types::style_family::Text, false))
{
text_tracked_context_.dumpRPr_ = L"<w:rPrChange" + change_attr + L">";
odf_reader::style_text_properties * props = NULL;
props = styleInst->content()->get_style_text_properties();
if (props)
{
props->docx_convert(*this);
text_tracked_context_.dumpRPr_ = L"<w:rPrChange" + change_attr + L">";
text_tracked_context_.dumpRPr_ += get_styles_context().text_style().str();
}
text_tracked_context_.dumpRPr_ += L"</w:rPrChange>";
}else
text_tracked_context_.dumpRPr_ = L"<w:rPrChange/>";
}
else
else if (styleInst = root()->odf_context().styleContainer().style_by_name(state.style_name, odf_types::style_family::Table, false))
{
text_tracked_context_.dumpTblPr_ = L"<w:TblPrChange" + change_attr + L">";
odf_reader::style_table_properties * props = styleInst->content()->get_style_table_properties();
odf_reader::style_table_cell_properties * props_cell = styleInst->content()->get_style_table_cell_properties();
if (props)
{
props->docx_convert(*this);
text_tracked_context_.dumpTblPr_ += get_styles_context().table_style().str();
}
text_tracked_context_.dumpTblPr_ += L"</w:TblPrChange>";
}
else if (styleInst = root()->odf_context().styleContainer().style_by_name(state.style_name, odf_types::style_family::TableCell, false))
{
text_tracked_context_.dumpTcPr_ = L"<w:TcPrChange" + change_attr + L">";
odf_reader::style_table_cell_properties * props = styleInst->content()->get_style_table_cell_properties();
if (props)
{
props->docx_convert(*this);
text_tracked_context_.dumpTcPr_ += get_styles_context().table_style().str();
}
text_tracked_context_.dumpTcPr_ += L"</w:TcPrChange>";
}
}
}
......@@ -1386,6 +1407,8 @@ void docx_conversion_context::end_changes()
// if (state.type == 2) output_stream() << L"</w:del>";
//}
text_tracked_context_.dumpTcPr_.clear();
text_tracked_context_.dumpTblPr_.clear();
text_tracked_context_.dumpRPrInsDel_.clear();
text_tracked_context_.dumpPPr_.clear();
text_tracked_context_.dumpRPr_.clear();
......
......@@ -509,6 +509,8 @@ public:
std::wstring dumpPPr_;
std::wstring dumpRPr_;
std::wstring dumpRPrInsDel_;
std::wstring dumpTblPr_;
std::wstring dumpTcPr_;
text_tracked_context(docx_conversion_context & context);
......@@ -719,6 +721,9 @@ public:
bool delayed_converting_;
bool convert_delayed_enabled_;
void start_changes();
void end_changes();
private:
std::wstringstream document_xml_;
std::wstringstream styles_xml_;
......@@ -791,10 +796,6 @@ private:
// цепочки переименований нумераций
boost::unordered_map<std::wstring, std::wstring> list_style_renames_;
void start_changes();
void end_changes();
};
}
......
......@@ -124,7 +124,7 @@ void styles_context::docx_serialize_text_style(std::wostream & strm, std::wstrin
}
}
void styles_context::docx_serialize_table_style(std::wostream & strm)
void styles_context::docx_serialize_table_style(std::wostream & strm, std::wstring & strChange)
{
if (!table_style_.str().empty())
{
......@@ -133,6 +133,11 @@ void styles_context::docx_serialize_table_style(std::wostream & strm)
CP_XML_NODE(L"w:tblPr")
{
CP_XML_STREAM() << table_style_.str();
if (!strChange.empty())//tblPrChange
{
CP_XML_STREAM() << strChange;
strChange.clear();
}
}
}
}
......
......@@ -58,10 +58,10 @@ public:
std::wstringstream & table_style();
std::wstringstream & list_style();
void docx_serialize_text_style(std::wostream & strm, std::wstring parenStyleId, std::wstring & strChange);
void docx_serialize_table_style(std::wostream & strm);
void docx_serialize_text_style (std::wostream & strm, std::wstring parenStyleId, std::wstring & strChange);
void docx_serialize_table_style (std::wostream & strm, std::wstring & strChange);
void pptx_serialize_table_style(std::wostream & strm);
void pptx_serialize_table_style (std::wostream & strm);
std::wstring & extern_node(){return extern_node_;}
std::wstring & hlinkClick(){return hlinkClick_;}
......
......@@ -154,6 +154,8 @@ void table_table::docx_convert(oox::docx_conversion_context & Context)
_Wostream << L"<w:tbl>";
Context.start_changes(); //TblPrChange
Context.get_table_context().start_table(tableStyleName);
style_instance * inst =
......@@ -164,7 +166,8 @@ void table_table::docx_convert(oox::docx_conversion_context & Context)
if (inst && inst->content())
inst->content()->docx_convert(Context);
Context.get_styles_context().docx_serialize_table_style(_Wostream);
Context.get_styles_context().docx_serialize_table_style(_Wostream, Context.get_text_tracked_context().dumpTblPr_);
_Wostream << L"<w:tblGrid>";
table_columns_and_groups_.docx_convert(Context);
......
......@@ -441,17 +441,20 @@ void DocxConverter::convert(OOX::Logic::CParagraph *oox_paragraph)
{
//удаление знака абзаца - объединение со следующим - в либре нету
//id = convert(oox_paragraph->m_oParagraphProperty->m_oRPr->m_oDel.GetPointer(), 2);
//if (id >= 0) id_change_properties.push_back(std::pair<int, int> (2, id));
//if (id >= 0)
// id_change_properties.push_back(std::pair<int, int> (2, id));
//вставка знака абзаца - разделение текущего параграфа - в либре нету
//if (oox_paragraph->m_arrItems.size() < 2)//только для пустых
{
id = convert(oox_paragraph->m_oParagraphProperty->m_oRPr->m_oIns.GetPointer(), 1);
if (id >= 0) id_change_properties.push_back(std::pair<int, int> (1, id));
if (id >= 0)
id_change_properties.push_back(std::pair<int, int> (1, id));
}
id = convert(oox_paragraph->m_oParagraphProperty->m_oRPr->m_oRPrChange.GetPointer());
if (id >= 0) id_change_properties.push_back(std::pair<int, int> (3, id));
if (id >= 0)
id_change_properties.push_back(std::pair<int, int> (3, id));
}
//if (oox_paragraph->m_oParagraphProperty->m_oSectPr.IsInit())
......@@ -461,7 +464,8 @@ void DocxConverter::convert(OOX::Logic::CParagraph *oox_paragraph)
//}
id = convert(oox_paragraph->m_oParagraphProperty->m_oPPrChange.GetPointer());
if (id >= 0) id_change_properties.push_back(std::pair<int, int> (3, id));
if (id >= 0)
id_change_properties.push_back(std::pair<int, int> (3, id));
}
//---------------------------------------------------------------------------------------------------------------------
if(oox_paragraph->m_oParagraphProperty && odt_context->text_context()->get_list_item_state() == false)
......@@ -885,7 +889,6 @@ int DocxConverter::convert(OOX::Logic::CSectPrChange *oox_sect_prop_change)
{
convert(oox_sect_prop_change->m_pSecPr.GetPointer());
//odt_context->end_change(id, 3); в конце секции
return id;
}
return -1;
......@@ -943,7 +946,6 @@ int DocxConverter::convert(OOX::Logic::CPPrChange *oox_para_prop_change)
}
if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
//odt_context->end_change(id, 3); в конце параграфа
return id;
}
int DocxConverter::convert(OOX::Logic::CRPrChange *oox_run_prop_change)
......@@ -958,7 +960,7 @@ int DocxConverter::convert(OOX::Logic::CRPrChange *oox_run_prop_change)
if (oox_run_prop_change->m_pRunPr.IsInit())
{
odt_context->styles_context()->create_style(L"",odf_types::style_family::Text, true, false, -1);
odt_context->styles_context()->create_style(L"", odf_types::style_family::Text, true, false, -1);
odf_writer::style_text_properties * text_properties = odt_context->styles_context()->last_state()->get_text_properties();
convert(oox_run_prop_change->m_pRunPr.GetPointer(), text_properties);
......@@ -969,7 +971,6 @@ int DocxConverter::convert(OOX::Logic::CRPrChange *oox_run_prop_change)
}
if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
//odt_context->end_change(id, 3); в конце run
return id;
}
int DocxConverter::convert(OOX::Logic::CTrPrChange *oox_tr_prop_change)
......@@ -980,6 +981,11 @@ int DocxConverter::convert(OOX::Logic::CTrPrChange *oox_tr_prop_change)
std::wstring userId = oox_tr_prop_change->m_sUserId.IsInit() ? oox_tr_prop_change->m_sUserId.get2() : L"";
int id = oox_tr_prop_change->m_oId.IsInit() ? oox_tr_prop_change->m_oId->GetValue() : -1;
std::wstring date = oox_tr_prop_change->m_oDate.IsInit() ? oox_tr_prop_change->m_oDate->GetValue() : L"";
std::wstring style_name;
odf_writer::odf_style_state_ptr style_state = odt_context->styles_context()->last_state(style_family::Text);
if (style_state)
style_name = style_state->get_name();
if (odt_context->start_change(id, 3, author, userId, date))
{
......@@ -987,7 +993,8 @@ int DocxConverter::convert(OOX::Logic::CTrPrChange *oox_tr_prop_change)
//odt_context->end_change(id, 3); в конце row
return id;
}
return -1;
if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
return id;
}
int DocxConverter::convert(OOX::Logic::CTcPrChange *oox_tc_prop_change)
{
......@@ -997,14 +1004,19 @@ int DocxConverter::convert(OOX::Logic::CTcPrChange *oox_tc_prop_change)
std::wstring userId = oox_tc_prop_change->m_sUserId.IsInit() ? oox_tc_prop_change->m_sUserId.get2() : L"";
int id = oox_tc_prop_change->m_oId.IsInit() ? oox_tc_prop_change->m_oId->GetValue() : -1;
std::wstring date = oox_tc_prop_change->m_oDate.IsInit() ? oox_tc_prop_change->m_oDate->GetValue() : L"";
std::wstring style_name;
if (odt_context->start_change(id, 3, author, userId, date))
if (oox_tc_prop_change->m_pTcPr.IsInit())
{
convert(oox_tc_prop_change->m_pTcPr.GetPointer());
//odt_context->end_change(id, 3); в конце cell
return id;
odf_writer::odf_style_state_ptr style_state = odt_context->styles_context()->last_state(style_family::TableCell);
if (style_state)
style_name = style_state->get_name();
}
return -1;
if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
return id;
}
int DocxConverter::convert(OOX::Logic::CTblPrChange *oox_table_prop_change)
{
......@@ -1014,14 +1026,28 @@ int DocxConverter::convert(OOX::Logic::CTblPrChange *oox_table_prop_change)
std::wstring userId = oox_table_prop_change->m_sUserId.IsInit() ? oox_table_prop_change->m_sUserId.get2() : L"";
int id = oox_table_prop_change->m_oId.IsInit() ? oox_table_prop_change->m_oId->GetValue() : -1;
std::wstring date = oox_table_prop_change->m_oDate.IsInit() ? oox_table_prop_change->m_oDate->GetValue() : L"";
std::wstring style_name;
if (odt_context->start_change(id, 3, author, userId, date))
if (oox_table_prop_change->m_pTblPr.IsInit())
{
convert(oox_table_prop_change->m_pTblPr.GetPointer());
//odt_context->end_change(id, 3); в конце таблицы
return id;
bool table_styled = false;
if (oox_table_prop_change->m_pTblPr->m_oTblStyle.IsInit() && oox_table_prop_change->m_pTblPr->m_oTblStyle->m_sVal.IsInit())
{//настройка предустановленного стиля
std::wstring base_style_name = string2std_string(*oox_table_prop_change->m_pTblPr->m_oTblStyle->m_sVal);
table_styled = odt_context->styles_context()->table_styles().start_table(base_style_name);
}
return -1;
convert(oox_table_prop_change->m_pTblPr.GetPointer(), table_styled);
odf_writer::odf_style_state_ptr style_state = odt_context->styles_context()->last_state(style_family::Table);
if (style_state)
style_name = style_state->get_name();
}
if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
return id;
}
void DocxConverter::convert(OOX::Logic::CDel *oox_del)
{
......@@ -1818,12 +1844,12 @@ void DocxConverter::convert(OOX::Logic::CPBdr *oox_border, odf_writer::style_par
paragraph_properties->content().common_border_attlist_.fo_border_ = boost::none;
if (bottom.length() >0 )paragraph_properties->content().common_border_attlist_.fo_border_bottom_ = bottom;
if (top.length() >0 ) paragraph_properties->content().common_border_attlist_.fo_border_top_ = top;
if (left.length() >0 ) paragraph_properties->content().common_border_attlist_.fo_border_left_ = left;
if (right.length() >0 ) paragraph_properties->content().common_border_attlist_.fo_border_right_ = right;
if (bottom.length() > 0 ) paragraph_properties->content().common_border_attlist_.fo_border_bottom_ = bottom;
if (top.length() > 0 ) paragraph_properties->content().common_border_attlist_.fo_border_top_ = top;
if (left.length() > 0 ) paragraph_properties->content().common_border_attlist_.fo_border_left_ = left;
if (right.length() > 0 ) paragraph_properties->content().common_border_attlist_.fo_border_right_ = right;
}
bool shadow = false;
bool shadow = false;//в либре только одна тень (
if (oox_border->m_oBottom.IsInit() && oox_border->m_oBottom->m_oShadow.IsInit() && oox_border->m_oBottom->m_oShadow->ToBool()) shadow = true;
if (oox_border->m_oTop.IsInit() && oox_border->m_oTop->m_oShadow.IsInit() && oox_border->m_oTop->m_oShadow->ToBool()) shadow = true;
if (oox_border->m_oLeft.IsInit() && oox_border->m_oLeft->m_oShadow.IsInit() && oox_border->m_oLeft->m_oShadow->ToBool()) shadow = true;
......@@ -3844,6 +3870,7 @@ void DocxConverter::convert_hdr_ftr (CString sId)
}
oox_current_child_document = NULL;
}
void DocxConverter::convert(OOX::Logic::CTbl *oox_table)
{
if (oox_table == NULL) return;
......@@ -3860,6 +3887,11 @@ void DocxConverter::convert(OOX::Logic::CTbl *oox_table)
bool styled_table = false;
bool in_frame = false;
int in_frame_anchor = odf_types::anchor_type::Paragraph;
int id_change_properties = -1;
if (oox_table->m_oTableProperties)
id_change_properties = convert(oox_table->m_oTableProperties->m_oTblPrChange.GetPointer());
if (oox_table->m_oTableProperties && (oox_table->m_oTableProperties->m_oTblStyle.IsInit() && oox_table->m_oTableProperties->m_oTblStyle->m_sVal.IsInit()))
{//настройка предустановленного стиля
......@@ -4003,8 +4035,7 @@ void DocxConverter::convert(OOX::Logic::CTbl *oox_table)
odt_context->table_context()->set_table_inside_h(border_inside_h);
int count_rows = oox_table->m_nCountRow;
int count_columns = 0;
if (oox_table->m_oTblGrid.IsInit())count_columns = oox_table->m_oTblGrid->m_arrGridCol.size();
int count_columns = oox_table->m_oTblGrid.IsInit() ? oox_table->m_oTblGrid->m_arrGridCol.size() : 0;
odt_context->styles_context()->table_styles().set_current_dimension(count_columns, count_rows);
odt_context->table_context()->count_rows(count_rows);
......@@ -4049,13 +4080,19 @@ void DocxConverter::convert(OOX::Logic::CTbl *oox_table)
odt_context->text_context()->set_KeepNextParagraph(true);
}
if (id_change_properties >= 0)
odt_context->end_change(id_change_properties, 3);
}
void DocxConverter::convert(OOX::Logic::CTblGrid *oox_table_grid)
{
if (oox_table_grid == NULL) return;
int id_change_properties = convert(oox_table_grid->m_oTblGridChange.GetPointer());
odt_context->start_table_columns();
//nullable<OOX::Logic::CTblGridChange > m_oTblGridChange;
for (int i =0 ; i < oox_table_grid->m_arrGridCol.size(); i++)
{
if (oox_table_grid->m_arrGridCol[i] == NULL) continue;
......@@ -4076,7 +4113,26 @@ void DocxConverter::convert(OOX::Logic::CTblGrid *oox_table_grid)
}
odt_context->end_table_columns();
if (id_change_properties >= 0)
odt_context->end_change(id_change_properties, 3);
}
int DocxConverter::convert(OOX::Logic::CTblGridChange *oox_table_grid_prop_change)
{
if (!oox_table_grid_prop_change) return -1;
int id = oox_table_grid_prop_change->m_oId.IsInit() ? oox_table_grid_prop_change->m_oId->GetValue() : -1;
//std::wstring author = oox_table_grid_prop_change->m_sAuthor.IsInit() ? oox_table_grid_prop_change->m_sAuthor.get2() : L"";
//std::wstring userId = oox_table_grid_prop_change->m_sUserId.IsInit() ? oox_table_grid_prop_change->m_sUserId.get2() : L"";
//std::wstring date = oox_table_grid_prop_change->m_oDate.IsInit() ? oox_table_grid_prop_change->m_oDate->GetValue() : L"";
/// ( нету в либре подходящей схемы
//if (!odt_context->start_change(id, 3, author, userId, date, style_name)) return -1;
//return id;
return -1;
}
void DocxConverter::convert(OOX::Logic::CTr *oox_table_row)
{
if (oox_table_row == NULL) return;
......@@ -4084,6 +4140,16 @@ void DocxConverter::convert(OOX::Logic::CTr *oox_table_row)
bool styled = oox_table_row->m_oTableRowProperties ? true : false;
bool is_header = false;
int id_insert_row = -1;
int id_delete_row = -1;
if (oox_table_row->m_oTableRowProperties)
{//+ Format ???
//id_insert_row = convert(oox_table_row->m_oTableRowProperties->m_oIns.GetPointer(), 1);
//id_delete_row = convert(oox_table_row->m_oTableRowProperties->m_oDel.GetPointer(), 2);
//??? как в электороных таблицах? или ваще нету?
}
if (styled && oox_table_row->m_oTableRowProperties->m_oTblHeader.IsInit()
&& oox_table_row->m_oTableRowProperties->m_oTblHeader->m_oVal.ToBool() )is_header = true;
......@@ -4108,15 +4174,27 @@ void DocxConverter::convert(OOX::Logic::CTr *oox_table_row)
odt_context->end_table_row();
if (is_header)odt_context->end_table_header_rows();
if (id_insert_row >= 0)
odt_context->end_change(id_insert_row, 1);
if (id_delete_row >= 0)
odt_context->end_change(id_delete_row, 2);
}
void DocxConverter::convert(OOX::Logic::CTc *oox_table_cell)
{
if (oox_table_cell == NULL) return;
bool covered = false;
int id_change_properties = -1;
if (oox_table_cell->m_oTableCellProperties)
{
//id_change_properties = convert(oox_table_cell->m_oTableCellProperties->m_oCellIns.GetPointer()); ??
//id_change_properties = convert(oox_table_cell->m_oTableCellProperties->m_oCellDel.GetPointer()); ??
//id_change_properties = convert(oox_table_cell->m_oTableCellProperties->m_oTcPrChange.GetPointer());
//??? как в электороных таблицах? или ваще нету?
if (oox_table_cell->m_oTableCellProperties->m_oVMerge.IsInit())
{
if (!(oox_table_cell->m_oTableCellProperties->m_oVMerge->m_oVal.IsInit() &&
......@@ -4154,6 +4232,9 @@ void DocxConverter::convert(OOX::Logic::CTc *oox_table_cell)
}
}
odt_context->end_table_cell();
if (id_change_properties >= 0)
odt_context->end_change(id_change_properties, 3);
}
bool DocxConverter::convert(OOX::Logic::CTableProperty *oox_table_pr, odf_writer::style_table_properties * table_properties )
{
......@@ -4234,7 +4315,6 @@ bool DocxConverter::convert(OOX::Logic::CTableProperty *oox_table_pr, odf_writer
//nullable<ComplexTypes::Word::CString_ > m_oTblDescription;
//nullable<ComplexTypes::Word::CTblLayoutType > m_oTblLayout;
//nullable<ComplexTypes::Word::CTblOverlap > m_oTblOverlap;
//nullable<OOX::Logic::CTblPrChange > m_oTblPrChange;
return true;
}
......
......@@ -56,6 +56,7 @@ namespace OOX
class CTrPrChange;
class CTcPrChange;
class CTblPrChange;
class CTblGridChange;
class CParagraph;
class CParagraphProperty;
class CPTab;
......@@ -208,6 +209,7 @@ namespace Oox2Odf
int convert(OOX::Logic::CTrPrChange *oox_tr_prop_change);
int convert(OOX::Logic::CTcPrChange *oox_tc_prop_change);
int convert(OOX::Logic::CTblPrChange *oox_table_prop_change);
int convert(OOX::Logic::CTblGridChange *oox_table_grid_prop_change);
void convert(OOX::Logic::CAlternateContent *oox_alt_content);
void convert(OOX::Logic::CDrawing *oox_drawing);
......
......@@ -30,7 +30,6 @@
*
*/
#pragma once
#include "Base.h"
#include "../../../../DesktopEditor/common/Types.h"
namespace NSCommon
......@@ -64,7 +63,7 @@ namespace NSCommon
Release();
}
AVSINLINE void Release()
inline void Release()
{
if (!IsInit() || (NULL == m_pCountRef))
return;
......@@ -78,7 +77,7 @@ namespace NSCommon
m_pData = NULL;
m_pCountRef = NULL;
}
AVSINLINE void AddRef()
inline void AddRef()
{
if (!IsInit() || (NULL == m_pCountRef))
return;
......@@ -118,42 +117,42 @@ namespace NSCommon
public:
AVSINLINE bool IsInit() const
inline bool IsInit() const
{
return (NULL != m_pData);
}
AVSINLINE bool is_init() const
inline bool is_init() const
{
return IsInit();
}
template<class T> AVSINLINE const bool is()const
template<class T> inline const bool is()const
{
if (!IsInit())
return false;
T* pResult = dynamic_cast<T*>(const_cast<Type*>(m_pData));
return (NULL != pResult);
}
template<class T> AVSINLINE const T& as()const
template<class T> inline const T& as()const
{
T* pResult = dynamic_cast<T*>(const_cast<Type*>(m_pData));
return *pResult;
}
template<class T> AVSINLINE T& as()
template<class T> inline T& as()
{
T* pResult = dynamic_cast<T*>(const_cast<Type*>(m_pData));
return *pResult;
}
template <typename T>
AVSINLINE void Attach(T* pCast, const LONG* pCountRef)
inline void Attach(T* pCast, const LONG* pCountRef)
{
m_pData = pCast;
m_pCountRef = const_cast<LONG*>(pCountRef);
}
template<typename T>
AVSINLINE smart_ptr<T> smart_dynamic_cast()const
inline smart_ptr<T> smart_dynamic_cast()const
{
smart_ptr<T> new_type;
......@@ -172,22 +171,22 @@ namespace NSCommon
return new_type;
}
AVSINLINE Type& operator*() { return *m_pData; }
AVSINLINE Type* operator->() { return m_pData; }
inline Type& operator*() { return *m_pData; }
inline Type* operator->() { return m_pData; }
AVSINLINE const Type& operator*() const { return *m_pData; }
AVSINLINE const Type* operator->() const { return m_pData; }
inline const Type& operator*() const { return *m_pData; }
inline const Type* operator->() const { return m_pData; }
AVSINLINE const Type& get() { return *m_pData; } const
inline const Type& get() { return *m_pData; } const
AVSINLINE void reset(Type* pPointer = NULL)
inline void reset(Type* pPointer = NULL)
{
*this = pPointer;
}
};
template <typename T>
static AVSINLINE void normalize_value(T& value, const T& min, const T& max)
static inline void normalize_value(T& value, const T& min, const T& max)
{
if (value < min)
value = min;
......
......@@ -3,122 +3,26 @@ CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
CONFIG += c++11
CORE_ROOT_DIR = $$PWD/../..
PWD_ROOT_DIR = $$PWD
include($$CORE_ROOT_DIR/Common/base.pri)
############### destination path ###############
DESTDIR = $$PWD/../../build/bin/AllFontsGen
# WINDOWS
win32:contains(QMAKE_TARGET.arch, x86_64):{
TARGET = win_64
}
win32:!contains(QMAKE_TARGET.arch, x86_64):{
TARGET = win_32
}
linux-g++{
linux-g++:contains(QMAKE_HOST.arch, x86_64):{
TARGET = linux_64
}
linux-g++:!contains(QMAKE_HOST.arch, x86_64):{
TARGET = linux_32
}
}
linux-g++-64{
TARGET = linux_64
}
linux-g++-32{
TARGET = linux_32
}
mac {
TARGET = mac_64
}
################################################
################# dependencies #################
DESTINATION_SDK_PATH = $$PWD/../../build/lib
win32:contains(QMAKE_TARGET.arch, x86_64):{
CONFIG(debug, debug|release) {
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/win_64/DEBUG
} else {
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/win_64
}
}
win32:!contains(QMAKE_TARGET.arch, x86_64):{
CONFIG(debug, debug|release) {
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/win_32/DEBUG
} else {
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/win_32
}
}
linux-g++{
linux-g++:contains(QMAKE_HOST.arch, x86_64):{
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/linux_64
}
linux-g++:!contains(QMAKE_HOST.arch, x86_64):{
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/linux_32
}
}
linux-g++-64{
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/linux_64
}
linux-g++-32{
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/linux_32
}
TARGET = $$CORE_BUILDS_PLATFORM_PREFIX
mac {
DESTINATION_SDK_PATH = $$DESTINATION_SDK_PATH/mac_64
}
LIBS += -L$$DESTINATION_SDK_PATH -lgraphics
LIBS += -L$$DESTINATION_SDK_PATH -lOfficeUtils
linux-g++ | linux-g++-64 | linux-g++-32 {
LIBS += -lz
}
################################################
LIBS += -L$$CORE_BUILDS_LIBRARIES_PATH -lgraphics -lOfficeUtils
DEFINES += \
_QT \
FT2_BUILD_LIBRARY \
EXCLUDE_JPG_SUPPORT \
MNG_SUPPORT_DISPLAY \
MNG_SUPPORT_READ \
MNG_SUPPORT_WRITE \
MNG_ACCESS_CHUNKS \
MNG_STORE_CHUNKS\
MNG_ERROR_TELLTALE
linux-g++ | linux-g++-64 | linux-g++-32 {
DEFINES += \
HAVE_UNISTD_H \
LINUX \
_LINUX \
_LINUX_QT
message(linux)
FT2_BUILD_LIBRARY
QMAKE_CXXFLAGS += -std=c++0x -pthread
LIBS += -pthread
}
mac {
DEFINES += \
HAVE_UNISTD_H \
_LINUX \
_LINUX_QT \
_MAC \
QT_MAC
message(mac)
}
INCLUDEPATH += \
../agg-2.4/include \
../freetype-2.5.2/include
win32 {
core_windows {
DEFINES += \
JAS_WIN_MSVC_BUILD \
WIN32
......@@ -134,8 +38,8 @@ win32 {
LIBS += -lUser32
}
SOURCES += main.cpp
core_linux {
LIBS += -lz
}
INCLUDEPATH += \
../agg-2.4/include \
../freetype-2.5.2/include
SOURCES += main.cpp
......@@ -70,7 +70,7 @@ FT_Error FT_Load_Glyph_Wrapper( FT_Face face,
FT_Err_Invalid_Stream_Handle = 0x28;
*/
if ((bHintsSupport == TRUE) && (nErr < 0x10 || nErr > 0x28))
if ((bHintsSupport == TRUE) && (nErr > 0x10 && nErr < 0x28))
{
int nErr2 = FT_Load_Glyph(face, glyph_index, 40970);
......
......@@ -2319,7 +2319,7 @@ namespace NExtractTools
RELEASEOBJECT(pReader);
}
}
else if(AVS_OFFICESTUDIO_FILE_CANVAS_WORD == nFormatTo)
else if(0 != (AVS_OFFICESTUDIO_FILE_CANVAS & nFormatTo))
{
std::wstring sToDir = NSSystemPath::GetDirectoryName(sTo);
if(!params.getDontSaveAdditional())
......
......@@ -209,6 +209,8 @@ namespace CSVWriter
if (pCell->isInitRef())
{
pCell->getRowCol(nRowTmp, nCol);
nRowTmp++;
nCol++;
}
else
{
......
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