| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/include/fpdfapi/fpdf_page.h" | 7 #include "core/include/fpdfapi/fpdf_page.h" |
| 8 #include "core/include/fpdfapi/fpdf_pageobj.h" | 8 #include "core/include/fpdfapi/fpdf_pageobj.h" |
| 9 #include "text_int.h" | 9 #include "text_int.h" |
| 10 | 10 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 pObj->GetItemInfo(0, &item); | 106 pObj->GetItemInfo(0, &item); |
| 107 wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); | 107 wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); |
| 108 if (wstr.GetLength()) { | 108 if (wstr.GetLength()) { |
| 109 curChar = wstr.GetAt(0); | 109 curChar = wstr.GetAt(0); |
| 110 } | 110 } |
| 111 int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont()); | 111 int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont()); |
| 112 FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000; | 112 FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000; |
| 113 this_width = FXSYS_fabs(this_width); | 113 this_width = FXSYS_fabs(this_width); |
| 114 FX_FLOAT threshold = | 114 FX_FLOAT threshold = |
| 115 last_width > this_width ? last_width / 4 : this_width / 4; | 115 last_width > this_width ? last_width / 4 : this_width / 4; |
| 116 CFX_AffineMatrix prev_matrix, prev_reverse; | 116 CFX_Matrix prev_matrix, prev_reverse; |
| 117 pPrevObj->GetTextMatrix(&prev_matrix); | 117 pPrevObj->GetTextMatrix(&prev_matrix); |
| 118 prev_reverse.SetReverse(prev_matrix); | 118 prev_reverse.SetReverse(prev_matrix); |
| 119 FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY(); | 119 FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY(); |
| 120 prev_reverse.Transform(x, y); | 120 prev_reverse.Transform(x, y); |
| 121 if (FXSYS_fabs(y) > threshold * 2) { | 121 if (FXSYS_fabs(y) > threshold * 2) { |
| 122 return 2; | 122 return 2; |
| 123 } | 123 } |
| 124 threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth); | 124 threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth); |
| 125 threshold = threshold > 400 | 125 threshold = threshold > 400 |
| 126 ? (threshold < 700 ? threshold / 4 : threshold / 5) | 126 ? (threshold < 700 ? threshold / 4 : threshold / 5) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 if (last_pos + last_width > x + this_width && curChar == L' ') { | 146 if (last_pos + last_width > x + this_width && curChar == L' ') { |
| 147 return 3; | 147 return 3; |
| 148 } | 148 } |
| 149 return 0; | 149 return 0; |
| 150 } | 150 } |
| 151 FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj, | 151 FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj, |
| 152 FX_BOOL bFirstLine) { | 152 FX_BOOL bFirstLine) { |
| 153 CPDF_Font* pFont = pObj->GetFont(); | 153 CPDF_Font* pFont = pObj->GetFont(); |
| 154 CFX_AffineMatrix matrix; | 154 CFX_Matrix matrix; |
| 155 pObj->GetTextMatrix(&matrix); | 155 pObj->GetTextMatrix(&matrix); |
| 156 int item_index = 0; | 156 int item_index = 0; |
| 157 if (m_pLastObj) { | 157 if (m_pLastObj) { |
| 158 int result = FPDFText_ProcessInterObj(m_pLastObj, pObj); | 158 int result = FPDFText_ProcessInterObj(m_pLastObj, pObj); |
| 159 if (result == 2) { | 159 if (result == 2) { |
| 160 int len = m_Buffer.GetLength(); | 160 int len = m_Buffer.GetLength(); |
| 161 if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') { | 161 if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') { |
| 162 m_Buffer.Delete(len - 1, 1); | 162 m_Buffer.Delete(len - 1, 1); |
| 163 if (m_pObjArray) { | 163 if (m_pObjArray) { |
| 164 m_pObjArray->RemoveAt((len - 1) * 2, 2); | 164 m_pObjArray->RemoveAt((len - 1) * 2, 2); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 CPDF_PageObject* pObject = page.GetNextObject(pos); | 328 CPDF_PageObject* pObject = page.GetNextObject(pos); |
| 329 if (pObject->m_Type != PDFPAGE_TEXT) { | 329 if (pObject->m_Type != PDFPAGE_TEXT) { |
| 330 continue; | 330 continue; |
| 331 } | 331 } |
| 332 if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) { | 332 if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) { |
| 333 break; | 333 break; |
| 334 } | 334 } |
| 335 } | 335 } |
| 336 return buffer.GetWideString(); | 336 return buffer.GetWideString(); |
| 337 } | 337 } |
| OLD | NEW |