Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(948)

Side by Side Diff: core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp

Issue 1411833003: XFA: Manually apply changes to fpdf_text.h and fx_font.h from master (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Fix NULL comparisons. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fpdfapi/fpdf_font/fpdf_font.cpp ('k') | core/src/fpdfapi/fpdf_font/ttgsubtable.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "../../../include/fpdfapi/fpdf_module.h" 7 #include "../../../include/fpdfapi/fpdf_module.h"
8 #include "../../../include/fpdfapi/fpdf_page.h" 8 #include "../../../include/fpdfapi/fpdf_page.h"
9 #include "../../../include/fpdfapi/fpdf_resource.h" 9 #include "../../../include/fpdfapi/fpdf_resource.h"
10 #include "../../../include/fxge/fx_freetype.h" 10 #include "../../../include/fxge/fx_freetype.h"
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) { 1300 void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
1301 if (charcode < 256 && m_CharBBox[charcode].Right != -1) { 1301 if (charcode < 256 && m_CharBBox[charcode].Right != -1) {
1302 rect.bottom = m_CharBBox[charcode].Bottom; 1302 rect.bottom = m_CharBBox[charcode].Bottom;
1303 rect.left = m_CharBBox[charcode].Left; 1303 rect.left = m_CharBBox[charcode].Left;
1304 rect.right = m_CharBBox[charcode].Right; 1304 rect.right = m_CharBBox[charcode].Right;
1305 rect.top = m_CharBBox[charcode].Top; 1305 rect.top = m_CharBBox[charcode].Top;
1306 return; 1306 return;
1307 } 1307 }
1308 FX_BOOL bVert = FALSE; 1308 FX_BOOL bVert = FALSE;
1309 int glyph_index = GlyphFromCharCode(charcode, &bVert); 1309 int glyph_index = GlyphFromCharCode(charcode, &bVert);
1310 if (m_Font.m_Face == NULL) { 1310 FXFT_Face face = m_Font.GetFace();
1311 rect = FX_RECT(0, 0, 0, 0); 1311 if (face) {
1312 } else {
1313 rect.left = rect.bottom = rect.right = rect.top = 0; 1312 rect.left = rect.bottom = rect.right = rect.top = 0;
1314 FXFT_Face face = m_Font.m_Face;
1315 if (FXFT_Is_Face_Tricky(face)) { 1313 if (FXFT_Is_Face_Tricky(face)) {
1316 int err = FXFT_Load_Glyph(face, glyph_index, 1314 int err = FXFT_Load_Glyph(face, glyph_index,
1317 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH); 1315 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
1318 if (!err) { 1316 if (!err) {
1319 FXFT_BBox cbox; 1317 FXFT_BBox cbox;
1320 FXFT_Glyph glyph; 1318 FXFT_Glyph glyph;
1321 err = FXFT_Get_Glyph(((FXFT_Face)face)->glyph, &glyph); 1319 err = FXFT_Get_Glyph(((FXFT_Face)face)->glyph, &glyph);
1322 if (!err) { 1320 if (!err) {
1323 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); 1321 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
1324 int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem; 1322 int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem;
(...skipping 25 matching lines...) Expand all
1350 rect.right = TT2PDF( 1348 rect.right = TT2PDF(
1351 FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face), 1349 FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face),
1352 face); 1350 face);
1353 rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face); 1351 rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
1354 rect.top += rect.top / 64; 1352 rect.top += rect.top / 64;
1355 rect.bottom = TT2PDF( 1353 rect.bottom = TT2PDF(
1356 FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face), 1354 FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face),
1357 face); 1355 face);
1358 } 1356 }
1359 } 1357 }
1358 } else {
1359 rect = FX_RECT(0, 0, 0, 0);
1360 } 1360 }
1361 if (m_pFontFile == NULL && m_Charset == CIDSET_JAPAN1) { 1361 if (m_pFontFile == NULL && m_Charset == CIDSET_JAPAN1) {
1362 FX_WORD CID = CIDFromCharCode(charcode); 1362 FX_WORD CID = CIDFromCharCode(charcode);
1363 const uint8_t* pTransform = GetCIDTransform(CID); 1363 const uint8_t* pTransform = GetCIDTransform(CID);
1364 if (pTransform && !bVert) { 1364 if (pTransform && !bVert) {
1365 CFX_AffineMatrix matrix(CIDTransformToFloat(pTransform[0]), 1365 CFX_AffineMatrix matrix(CIDTransformToFloat(pTransform[0]),
1366 CIDTransformToFloat(pTransform[1]), 1366 CIDTransformToFloat(pTransform[1]),
1367 CIDTransformToFloat(pTransform[2]), 1367 CIDTransformToFloat(pTransform[2]),
1368 CIDTransformToFloat(pTransform[3]), 1368 CIDTransformToFloat(pTransform[3]),
1369 CIDTransformToFloat(pTransform[4]) * 1000, 1369 CIDTransformToFloat(pTransform[4]) * 1000,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 break; 1426 break;
1427 } 1427 }
1428 } 1428 }
1429 vx = (short)dwWidth / 2; 1429 vx = (short)dwWidth / 2;
1430 vy = (short)m_DefaultVY; 1430 vy = (short)m_DefaultVY;
1431 } 1431 }
1432 int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) { 1432 int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) {
1433 if (pVertGlyph) { 1433 if (pVertGlyph) {
1434 *pVertGlyph = FALSE; 1434 *pVertGlyph = FALSE;
1435 } 1435 }
1436 int index = FXFT_Get_Char_Index(m_Font.m_Face, unicode); 1436 FXFT_Face face = m_Font.GetFace();
1437 int index = FXFT_Get_Char_Index(face, unicode);
1437 if (unicode == 0x2502) { 1438 if (unicode == 0x2502) {
1438 return index; 1439 return index;
1439 } 1440 }
1440 if (index && IsVertWriting()) { 1441 if (index && IsVertWriting()) {
1441 if (m_pTTGSUBTable) { 1442 if (m_pTTGSUBTable) {
1442 TT_uint32_t vindex = 0; 1443 TT_uint32_t vindex = 0;
1443 m_pTTGSUBTable->GetVerticalGlyph(index, &vindex); 1444 m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
1444 if (vindex) { 1445 if (vindex) {
1445 index = vindex; 1446 index = vindex;
1446 if (pVertGlyph) { 1447 if (pVertGlyph) {
1447 *pVertGlyph = TRUE; 1448 *pVertGlyph = TRUE;
1448 } 1449 }
1449 } 1450 }
1450 return index; 1451 return index;
1451 } 1452 }
1452 if (NULL == m_Font.m_pGsubData) { 1453 if (!m_Font.GetSubData()) {
1453 unsigned long length = 0; 1454 unsigned long length = 0;
1454 int error = FXFT_Load_Sfnt_Table( 1455 int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
1455 m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length); 1456 NULL, &length);
1456 if (!error) { 1457 if (!error) {
1457 m_Font.m_pGsubData = FX_Alloc(uint8_t, length); 1458 m_Font.SetSubData(FX_Alloc(uint8_t, length));
1458 } 1459 }
1459 } 1460 }
1460 int error = 1461 int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
1461 FXFT_Load_Sfnt_Table(m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, 1462 m_Font.GetSubData(), NULL);
1462 m_Font.m_pGsubData, NULL); 1463 if (!error && m_Font.GetSubData()) {
1463 if (!error && m_Font.m_pGsubData) {
1464 m_pTTGSUBTable = new CFX_CTTGSUBTable; 1464 m_pTTGSUBTable = new CFX_CTTGSUBTable;
1465 m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.m_pGsubData); 1465 m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.GetSubData());
1466 TT_uint32_t vindex = 0; 1466 TT_uint32_t vindex = 0;
1467 m_pTTGSUBTable->GetVerticalGlyph(index, &vindex); 1467 m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
1468 if (vindex) { 1468 if (vindex) {
1469 index = vindex; 1469 index = vindex;
1470 if (pVertGlyph) { 1470 if (pVertGlyph) {
1471 *pVertGlyph = TRUE; 1471 *pVertGlyph = TRUE;
1472 } 1472 }
1473 } 1473 }
1474 } 1474 }
1475 return index; 1475 return index;
(...skipping 27 matching lines...) Expand all
1503 if (cid && m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded()) { 1503 if (cid && m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded()) {
1504 unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid); 1504 unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid);
1505 } 1505 }
1506 if (unicode == 0) { 1506 if (unicode == 0) {
1507 unicode = _UnicodeFromCharCode(charcode); 1507 unicode = _UnicodeFromCharCode(charcode);
1508 } 1508 }
1509 if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) { 1509 if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) {
1510 unicode = UnicodeFromCharCode(charcode).GetAt(0); 1510 unicode = UnicodeFromCharCode(charcode).GetAt(0);
1511 } 1511 }
1512 } 1512 }
1513 FXFT_Face face = m_Font.GetFace();
1513 if (unicode == 0) { 1514 if (unicode == 0) {
1514 if (!m_bAdobeCourierStd) { 1515 if (!m_bAdobeCourierStd) {
1515 return charcode == 0 ? -1 : (int)charcode; 1516 return charcode == 0 ? -1 : (int)charcode;
1516 } 1517 }
1517 charcode += 31; 1518 charcode += 31;
1518 int index = 0, iBaseEncoding; 1519 int index = 0, iBaseEncoding;
1519 FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1); 1520 FX_BOOL bMSUnicode = FT_UseTTCharmap(face, 3, 1);
1520 FX_BOOL bMacRoman = FALSE; 1521 FX_BOOL bMacRoman = FALSE;
1521 if (!bMSUnicode) { 1522 if (!bMSUnicode) {
1522 bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0); 1523 bMacRoman = FT_UseTTCharmap(face, 1, 0);
1523 } 1524 }
1524 iBaseEncoding = PDFFONT_ENCODING_STANDARD; 1525 iBaseEncoding = PDFFONT_ENCODING_STANDARD;
1525 if (bMSUnicode) { 1526 if (bMSUnicode) {
1526 iBaseEncoding = PDFFONT_ENCODING_WINANSI; 1527 iBaseEncoding = PDFFONT_ENCODING_WINANSI;
1527 } else if (bMacRoman) { 1528 } else if (bMacRoman) {
1528 iBaseEncoding = PDFFONT_ENCODING_MACROMAN; 1529 iBaseEncoding = PDFFONT_ENCODING_MACROMAN;
1529 } 1530 }
1530 const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode); 1531 const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode);
1531 if (name == NULL) { 1532 if (name == NULL) {
1532 return charcode == 0 ? -1 : (int)charcode; 1533 return charcode == 0 ? -1 : (int)charcode;
1533 } 1534 }
1534 FX_WORD unicode = PDF_UnicodeFromAdobeName(name); 1535 FX_WORD unicode = PDF_UnicodeFromAdobeName(name);
1535 if (unicode) { 1536 if (unicode) {
1536 if (bMSUnicode) { 1537 if (bMSUnicode) {
1537 index = FXFT_Get_Char_Index(m_Font.m_Face, unicode); 1538 index = FXFT_Get_Char_Index(face, unicode);
1538 } else if (bMacRoman) { 1539 } else if (bMacRoman) {
1539 FX_DWORD maccode = 1540 FX_DWORD maccode =
1540 FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode); 1541 FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode);
1541 index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char*)name) 1542 index = !maccode ? FXFT_Get_Name_Index(face, (char*)name)
1542 : FXFT_Get_Char_Index(m_Font.m_Face, maccode); 1543 : FXFT_Get_Char_Index(face, maccode);
1543 } else { 1544 } else {
1544 return FXFT_Get_Char_Index(m_Font.m_Face, unicode); 1545 return FXFT_Get_Char_Index(face, unicode);
1545 } 1546 }
1546 } else { 1547 } else {
1547 return charcode == 0 ? -1 : (int)charcode; 1548 return charcode == 0 ? -1 : (int)charcode;
1548 } 1549 }
1549 if (index == 0 || index == 0xffff) { 1550 if (index == 0 || index == 0xffff) {
1550 return charcode == 0 ? -1 : (int)charcode; 1551 return charcode == 0 ? -1 : (int)charcode;
1551 } 1552 }
1552 return index; 1553 return index;
1553 } 1554 }
1554 if (m_Charset == CIDSET_JAPAN1) { 1555 if (m_Charset == CIDSET_JAPAN1) {
1555 if (unicode == '\\') { 1556 if (unicode == '\\') {
1556 unicode = '/'; 1557 unicode = '/';
1557 } 1558 }
1558 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ 1559 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
1559 else if (unicode == 0xa5) { 1560 else if (unicode == 0xa5) {
1560 unicode = 0x5c; 1561 unicode = 0x5c;
1561 } 1562 }
1562 #endif 1563 #endif
1563 } 1564 }
1564 if (m_Font.m_Face == NULL) { 1565 if (!face)
1565 return unicode; 1566 return unicode;
1566 } 1567
1567 int err = FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE); 1568 int err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE);
1568 if (err != 0) { 1569 if (err != 0) {
1569 int i; 1570 int i;
1570 for (i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) { 1571 for (i = 0; i < FXFT_Get_Face_CharmapCount(face); i++) {
1571 FX_DWORD ret = FT_CharCodeFromUnicode( 1572 FX_DWORD ret = FT_CharCodeFromUnicode(
1572 FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]), 1573 FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i]),
1573 (FX_WCHAR)charcode); 1574 (FX_WCHAR)charcode);
1574 if (ret == 0) { 1575 if (ret == 0) {
1575 continue; 1576 continue;
1576 } 1577 }
1577 FXFT_Set_Charmap(m_Font.m_Face, 1578 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]);
1578 FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
1579 unicode = (FX_WCHAR)ret; 1579 unicode = (FX_WCHAR)ret;
1580 break; 1580 break;
1581 } 1581 }
1582 if (i == FXFT_Get_Face_CharmapCount(m_Font.m_Face) && i) { 1582 if (i == FXFT_Get_Face_CharmapCount(face) && i) {
1583 FXFT_Set_Charmap(m_Font.m_Face, 1583 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]);
1584 FXFT_Get_Face_Charmaps(m_Font.m_Face)[0]);
1585 unicode = (FX_WCHAR)charcode; 1584 unicode = (FX_WCHAR)charcode;
1586 } 1585 }
1587 } 1586 }
1588 if (FXFT_Get_Face_Charmap(m_Font.m_Face)) { 1587 if (FXFT_Get_Face_Charmap(face)) {
1589 int index = GetGlyphIndex(unicode, pVertGlyph); 1588 int index = GetGlyphIndex(unicode, pVertGlyph);
1590 if (index == 0) { 1589 if (index == 0)
1591 return -1; 1590 return -1;
1592 }
1593 return index; 1591 return index;
1594 } 1592 }
1595 return unicode; 1593 return unicode;
1596 } 1594 }
1597 if (m_Font.m_Face == NULL) { 1595 if (!m_Font.GetFace())
1598 return -1; 1596 return -1;
1599 } 1597
1600 FX_WORD cid = CIDFromCharCode(charcode); 1598 FX_WORD cid = CIDFromCharCode(charcode);
1601 if (m_bType1) { 1599 if (m_bType1) {
1602 if (NULL == m_pCIDToGIDMap) { 1600 if (!m_pCIDToGIDMap) {
1603 return cid; 1601 return cid;
1604 } 1602 }
1605 } else { 1603 } else {
1606 if (m_pCIDToGIDMap == NULL) { 1604 if (!m_pCIDToGIDMap) {
1607 if (m_pFontFile && m_pCMap->m_pMapping == NULL) { 1605 if (m_pFontFile && !m_pCMap->m_pMapping)
1606 return cid;
1607 if (m_pCMap->m_Coding == CIDCODING_UNKNOWN ||
1608 !FXFT_Get_Face_Charmap(m_Font.GetFace())) {
1608 return cid; 1609 return cid;
1609 } 1610 }
1610 if (m_pCMap->m_Coding == CIDCODING_UNKNOWN || 1611 if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFace())) ==
1611 FXFT_Get_Face_Charmap(m_Font.m_Face) == NULL) {
1612 return cid;
1613 }
1614 if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.m_Face)) ==
1615 FXFT_ENCODING_UNICODE) { 1612 FXFT_ENCODING_UNICODE) {
1616 CFX_WideString unicode_str = UnicodeFromCharCode(charcode); 1613 CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
1617 if (unicode_str.IsEmpty()) { 1614 if (unicode_str.IsEmpty()) {
1618 return -1; 1615 return -1;
1619 } 1616 }
1620 charcode = unicode_str.GetAt(0); 1617 charcode = unicode_str.GetAt(0);
1621 } 1618 }
1622 return GetGlyphIndex(charcode, pVertGlyph); 1619 return GetGlyphIndex(charcode, pVertGlyph);
1623 } 1620 }
1624 } 1621 }
1625 FX_DWORD byte_pos = cid * 2; 1622 FX_DWORD byte_pos = cid * 2;
1626 if (byte_pos + 2 > m_pCIDToGIDMap->GetSize()) { 1623 if (byte_pos + 2 > m_pCIDToGIDMap->GetSize())
1627 return -1; 1624 return -1;
1628 } 1625
1629 const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos; 1626 const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos;
1630 return pdata[0] * 256 + pdata[1]; 1627 return pdata[0] * 256 + pdata[1];
1631 } 1628 }
1632 FX_DWORD CPDF_CIDFont::GetNextChar(const FX_CHAR* pString, 1629 FX_DWORD CPDF_CIDFont::GetNextChar(const FX_CHAR* pString,
1633 int nStrLen, 1630 int nStrLen,
1634 int& offset) const { 1631 int& offset) const {
1635 return m_pCMap->GetNextChar(pString, nStrLen, offset); 1632 return m_pCMap->GetNextChar(pString, nStrLen, offset);
1636 } 1633 }
1637 int CPDF_CIDFont::GetCharSize(FX_DWORD charcode) const { 1634 int CPDF_CIDFont::GetCharSize(FX_DWORD charcode) const {
1638 return m_pCMap->GetCharSize(charcode); 1635 return m_pCMap->GetCharSize(charcode);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1744 1741
1745 const uint8_t* CPDF_CIDFont::GetCIDTransform(FX_WORD CID) const { 1742 const uint8_t* CPDF_CIDFont::GetCIDTransform(FX_WORD CID) const {
1746 if (m_Charset != CIDSET_JAPAN1 || m_pFontFile) 1743 if (m_Charset != CIDSET_JAPAN1 || m_pFontFile)
1747 return nullptr; 1744 return nullptr;
1748 1745
1749 const struct CIDTransform* found = (const struct CIDTransform*)FXSYS_bsearch( 1746 const struct CIDTransform* found = (const struct CIDTransform*)FXSYS_bsearch(
1750 &CID, g_Japan1_VertCIDs, FX_ArraySize(g_Japan1_VertCIDs), 1747 &CID, g_Japan1_VertCIDs, FX_ArraySize(g_Japan1_VertCIDs),
1751 sizeof(g_Japan1_VertCIDs[0]), CompareCIDTransform); 1748 sizeof(g_Japan1_VertCIDs[0]), CompareCIDTransform);
1752 return found ? &found->a : nullptr; 1749 return found ? &found->a : nullptr;
1753 } 1750 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_font/fpdf_font.cpp ('k') | core/src/fpdfapi/fpdf_font/ttgsubtable.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698