diff --git a/HtmlFile2/htmlfile2.cpp b/HtmlFile2/htmlfile2.cpp index 64d5c7f799..62abb7c57f 100644 --- a/HtmlFile2/htmlfile2.cpp +++ b/HtmlFile2/htmlfile2.cpp @@ -1104,31 +1104,19 @@ private: std::vector::iterator it2 = std::find_if(mTable.begin(), mTable.end(), [j] (const CTc& item){ return item.i == 0 && item.j == j; }); while(it1 != mTable.end() || it2 != mTable.end()) { - oXml->WriteString(L""); + oXml->WriteString(L""); oXml->WriteString(!sBorders.empty() ? sBorders : L""); oXml->WriteString(L"sGridSpan : it2->sGridSpan); oXml->WriteString(sCol); - oXml->WriteString(L"\"/>"); + oXml->WriteString(L"\"/>"); j += stoi(sCol); it1 = std::find_if(mTable.begin(), mTable.end(), [i, j](const CTc& item){ return item.i == i && item.j == j; }); it2 = std::find_if(mTable.begin(), mTable.end(), [j] (const CTc& item){ return item.i == 0 && item.j == j; }); } GetSubClass(oXml, sSelectors); - oXml->WriteString(L""); - oXml->WriteString(!sBorders.empty() ? sBorders : L""); - oXml->WriteString(L""); - if(nRowspan != 1) - { - oXml->WriteString(L""); - std::wstring sColspan = std::to_wstring(nColspan); - if(nRowspan == 0) - mTable.push_back({0, j, sColspan}); - else - for(int k = i + 1; k < i + nRowspan; k++) - mTable.push_back({k, j, sColspan}); - } + oXml->WriteString(L""); NSCSS::CCompiledStyle oStyleSetting = m_oStylesCalculator.GetCompiledStyle({sSelectors.back()}, true); NSCSS::CCompiledStyle oStyle = m_oStylesCalculator.GetCompiledStyle({sSelectors.back()}, false); @@ -1138,7 +1126,7 @@ private: int nWidth = oStyle.m_pDisplay.GetWidth(); std::wstring wsType = L"dxa"; - //Если ширина указана в %, то используем тип dxa, если же в других ндтнтцах измерения, то в pct + //Если ширина указана в %, то используем тип dxa, если же в других единицах измерения, то в pct #if 1 // проблема с regex в старом gcc (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52719) boost::wregex oWidthRegex(L"((width)+)[\\s]*:[\\s]*(.+%)"); @@ -1173,12 +1161,26 @@ private: j += nColspan - 1; } + oXml->WriteString(L""); + oXml->WriteString(!sBorders.empty() ? sBorders : L""); + oXml->WriteString(L""); + if(nRowspan != 1) + { + oXml->WriteString(L""); + std::wstring sColspan = std::to_wstring(nColspan); + if(nRowspan == 0) + mTable.push_back({0, j, sColspan}); + else + for(int k = i + 1; k < i + nRowspan; k++) + mTable.push_back({k, j, sColspan}); + } + std::wstring wsVerticalAlign = oStyle.m_pDisplay.GetVerticalAlign(); if (!wsVerticalAlign.empty()) oXml->WriteString(L""); - oXml->WriteString(L""); + oXml->WriteString(L""); size_t nEmpty = oXml->GetCurSize(); m_bWasPStyle = false; @@ -1213,12 +1215,12 @@ private: it2 = std::find_if(mTable.begin(), mTable.end(), [j] (const CTc& item){ return item.i == 0 && item.j == j; }); while(it1 != mTable.end() || it2 != mTable.end()) { - oXml->WriteString(L""); + oXml->WriteString(L""); oXml->WriteString(!sBorders.empty() ? sBorders : L""); oXml->WriteString(L"sGridSpan : it2->sGridSpan); oXml->WriteString(sCol); - oXml->WriteString(L"\"/>"); + oXml->WriteString(L"\"/>"); j += stoi(sCol); it1 = std::find_if(mTable.begin(), mTable.end(), [i, j](const CTc& item){ return item.i == i && item.j == j; }); it2 = std::find_if(mTable.begin(), mTable.end(), [j] (const CTc& item){ return item.i == 0 && item.j == j; }); @@ -1240,8 +1242,9 @@ private: NSCSS::CCompiledStyle oStyle = m_oStylesCalculator.GetCompiledStyle(sSelectors, false); - //if (oXml->GetSubData(oXml->GetCurSize() - 6) != L"") - // oXml->WriteString(L""); + if (oXml->GetSubData(oXml->GetCurSize() - 6) != L"") + oXml->WriteString(L""); + m_bWasSpace = false; // Начало таблицы std::wstring wsTable = L"";