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 "../include/fsdk_define.h" | 7 #include "../include/fsdk_define.h" |
8 #include "../include/fsdk_mgr.h" | 8 #include "../include/fsdk_mgr.h" |
9 #include "../include/fpdfview.h" | 9 #include "../include/fpdfview.h" |
10 #include "../include/fsdk_rendercontext.h" | 10 #include "../include/fsdk_rendercontext.h" |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
781 CFX_ByteString duplex = viewRef.Duplex(); | 781 CFX_ByteString duplex = viewRef.Duplex(); |
782 if (FX_BSTRC("Simplex") == duplex) | 782 if (FX_BSTRC("Simplex") == duplex) |
783 return Simplex; | 783 return Simplex; |
784 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) | 784 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) |
785 return DuplexFlipShortEdge; | 785 return DuplexFlipShortEdge; |
786 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) | 786 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) |
787 return DuplexFlipLongEdge; | 787 return DuplexFlipLongEdge; |
788 return DuplexUndefined; | 788 return DuplexUndefined; |
789 } | 789 } |
790 | 790 |
791 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) | |
792 { | |
793 if (!document) return 0; | |
794 CPDF_Document* pDoc = (CPDF_Document*)document; | |
Tom Sepez
2015/01/01 01:10:08
nit: blank line here if you want to use one-line i
Bo Xu
2015/01/05 22:46:52
Done.
| |
795 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | |
796 if (!pRoot) return 0; | |
797 | |
798 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); | |
799 int count = nameTree.GetCount(); | |
800 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); | |
801 if (pDest) | |
802 count += pDest->GetCount(); | |
803 return count; | |
804 } | |
805 | |
791 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,FPDF_ BYTESTRING name) | 806 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,FPDF_ BYTESTRING name) |
792 { | 807 { |
793 if (document == NULL) | 808 if (document == NULL) |
794 return NULL; | 809 return NULL; |
795 if (name == NULL || name[0] == 0) | 810 if (name == NULL || name[0] == 0) |
796 return NULL; | 811 return NULL; |
797 | 812 |
798 CPDF_Document* pDoc = (CPDF_Document*)document; | 813 CPDF_Document* pDoc = (CPDF_Document*)document; |
799 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); | 814 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); |
800 return name_tree.LookupNamedDest(pDoc, name); | 815 return name_tree.LookupNamedDest(pDoc, name); |
801 } | 816 } |
817 | |
818 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, int index, std::string& name) | |
819 { | |
820 if (!document || index < 0) return NULL; | |
821 CPDF_Document* pDoc = (CPDF_Document*)document; | |
Tom Sepez
2015/01/01 01:10:08
nit: blank line.
Bo Xu
2015/01/05 22:46:52
Done.
| |
822 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | |
823 if (!pRoot) return NULL; | |
824 | |
825 CPDF_Object* pDestObj = NULL; | |
826 CFX_ByteString bsName; | |
827 | |
Tom Sepez
2015/01/01 01:10:08
nit: no blank line
Bo Xu
2015/01/05 22:46:52
Done.
| |
828 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); | |
829 int count = nameTree.GetCount(); | |
830 if (index >= count) { | |
831 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); | |
832 if (!pDest) return NULL; | |
833 if (index >= count + pDest->GetCount()) | |
834 return NULL; | |
835 index -= count; | |
836 FX_POSITION pos = pDest->GetStartPos(); | |
837 int i = 0; | |
838 while (pos) { | |
839 pDestObj = pDest->GetNextElement(pos, bsName); | |
840 if (!pDestObj) continue; | |
841 if (i == index) break; | |
842 i++; | |
843 } | |
844 } else { | |
845 pDestObj = nameTree.LookupValue(index, bsName); | |
846 } | |
847 if (!pDestObj) return NULL; | |
848 if (pDestObj->GetType() == PDFOBJ_DICTIONARY) | |
849 pDestObj = ((CPDF_Dictionary*)pDestObj)->GetArray(FX_BSTRC("D")); | |
850 if (pDestObj->GetType() != PDFOBJ_ARRAY) return NULL; | |
851 CFX_WideString wsName = PDF_DecodeText(bsName); | |
852 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); | |
853 name = utf16Name.c_str(); | |
854 return (FPDF_DEST)pDestObj; | |
855 } | |
OLD | NEW |