1 /*
2    Source File : IType1InterpreterImplementation.h
3 
4 
5    Copyright 2011 Gal Kahana PDFWriter
6 
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10 
11        http://www.apache.org/licenses/LICENSE-2.0
12 
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18 
19 
20 */
21 #pragma once
22 
23 #include "EStatusCode.h"
24 #include "IOBasicTypes.h"
25 
26 #include <list>
27 
28 
29 using namespace IOBasicTypes;
30 
31 struct Type1CharString
32 {
33 	Byte* Code;
34 	int CodeLength;
35 };
36 
37 typedef std::list<long> LongList;
38 
39 class IType1InterpreterImplementation
40 {
41 public:
42 
43 	virtual PDFHummus::EStatusCode Type1Hstem(const LongList& inOperandList) = 0;
44 	virtual PDFHummus::EStatusCode Type1Vstem(const LongList& inOperandList) = 0;
45 	virtual PDFHummus::EStatusCode Type1VMoveto(const LongList& inOperandList) = 0;
46 	virtual PDFHummus::EStatusCode Type1RLineto(const LongList& inOperandList) = 0;
47 	virtual PDFHummus::EStatusCode Type1HLineto(const LongList& inOperandList) = 0;
48 	virtual PDFHummus::EStatusCode Type1VLineto(const LongList& inOperandList) = 0;
49 	virtual PDFHummus::EStatusCode Type1RRCurveto(const LongList& inOperandList) = 0;
50 	virtual PDFHummus::EStatusCode Type1ClosePath(const LongList& inOperandList) = 0;
51 	virtual Type1CharString* GetSubr(long inSubrIndex) = 0;
52 	virtual PDFHummus::EStatusCode Type1Return(const LongList& inOperandList) = 0;
53 	virtual PDFHummus::EStatusCode Type1Hsbw(const LongList& inOperandList) = 0;
54 	virtual PDFHummus::EStatusCode Type1Endchar(const LongList& inOperandList) = 0;
55 	virtual PDFHummus::EStatusCode Type1RMoveto(const LongList& inOperandList) = 0;
56 	virtual PDFHummus::EStatusCode Type1HMoveto(const LongList& inOperandList) = 0;
57 	virtual PDFHummus::EStatusCode Type1VHCurveto(const LongList& inOperandList) = 0;
58 	virtual PDFHummus::EStatusCode Type1HVCurveto(const LongList& inOperandList) = 0;
59 	virtual PDFHummus::EStatusCode Type1DotSection(const LongList& inOperandList) = 0;
60 	virtual PDFHummus::EStatusCode Type1VStem3(const LongList& inOperandList) = 0;
61 	virtual PDFHummus::EStatusCode Type1HStem3(const LongList& inOperandList) = 0;
62 	virtual PDFHummus::EStatusCode Type1Seac(const LongList& inOperandList) = 0;
63 	virtual PDFHummus::EStatusCode Type1Sbw(const LongList& inOperandList) = 0;
64 	virtual PDFHummus::EStatusCode Type1Div(const LongList& inOperandList) = 0;
65 	virtual bool IsOtherSubrSupported(long inOtherSubrsIndex) = 0;
66 	virtual PDFHummus::EStatusCode CallOtherSubr(const LongList& inOperandList,LongList& outPostScriptOperandStack) = 0;
67 	virtual PDFHummus::EStatusCode Type1Pop(const LongList& inOperandList,const LongList& inPostScriptOperandStack) = 0;
68 	virtual PDFHummus::EStatusCode Type1SetCurrentPoint(const LongList& inOperandList) = 0;
69 	virtual PDFHummus::EStatusCode Type1InterpretNumber(long inOperand) = 0;
70 	virtual unsigned long GetLenIV() = 0;
71 
72 };
73 
74 class Type1InterpreterImplementationAdapter : public IType1InterpreterImplementation
75 {
76 public:
77 
Type1Hstem(const LongList & inOperandList)78 	virtual PDFHummus::EStatusCode Type1Hstem(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Vstem(const LongList & inOperandList)79 	virtual PDFHummus::EStatusCode Type1Vstem(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1VMoveto(const LongList & inOperandList)80 	virtual PDFHummus::EStatusCode Type1VMoveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1RLineto(const LongList & inOperandList)81 	virtual PDFHummus::EStatusCode Type1RLineto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1HLineto(const LongList & inOperandList)82 	virtual PDFHummus::EStatusCode Type1HLineto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1VLineto(const LongList & inOperandList)83 	virtual PDFHummus::EStatusCode Type1VLineto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1RRCurveto(const LongList & inOperandList)84 	virtual PDFHummus::EStatusCode Type1RRCurveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1ClosePath(const LongList & inOperandList)85 	virtual PDFHummus::EStatusCode Type1ClosePath(const LongList& inOperandList) {return PDFHummus::eSuccess;}
GetSubr(long inSubrIndex)86 	virtual Type1CharString* GetSubr(long inSubrIndex) {return NULL;}
Type1Return(const LongList & inOperandList)87 	virtual PDFHummus::EStatusCode Type1Return(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Hsbw(const LongList & inOperandList)88 	virtual PDFHummus::EStatusCode Type1Hsbw(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Endchar(const LongList & inOperandList)89 	virtual PDFHummus::EStatusCode Type1Endchar(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1RMoveto(const LongList & inOperandList)90 	virtual PDFHummus::EStatusCode Type1RMoveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1HMoveto(const LongList & inOperandList)91 	virtual PDFHummus::EStatusCode Type1HMoveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1VHCurveto(const LongList & inOperandList)92 	virtual PDFHummus::EStatusCode Type1VHCurveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1HVCurveto(const LongList & inOperandList)93 	virtual PDFHummus::EStatusCode Type1HVCurveto(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1DotSection(const LongList & inOperandList)94 	virtual PDFHummus::EStatusCode Type1DotSection(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1VStem3(const LongList & inOperandList)95 	virtual PDFHummus::EStatusCode Type1VStem3(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1HStem3(const LongList & inOperandList)96 	virtual PDFHummus::EStatusCode Type1HStem3(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Seac(const LongList & inOperandList)97 	virtual PDFHummus::EStatusCode Type1Seac(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Sbw(const LongList & inOperandList)98 	virtual PDFHummus::EStatusCode Type1Sbw(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1Div(const LongList & inOperandList)99 	virtual PDFHummus::EStatusCode Type1Div(const LongList& inOperandList) {return PDFHummus::eSuccess;}
IsOtherSubrSupported(long inOtherSubrsIndex)100 	virtual bool IsOtherSubrSupported(long inOtherSubrsIndex) {return false;}
CallOtherSubr(const LongList & inOperandList,LongList & outPostScriptOperandStack)101 	virtual PDFHummus::EStatusCode CallOtherSubr(const LongList& inOperandList,LongList& outPostScriptOperandStack) {return PDFHummus::eSuccess;}
Type1Pop(const LongList & inOperandList,const LongList & inPostScriptOperandStack)102 	virtual PDFHummus::EStatusCode Type1Pop(const LongList& inOperandList,const LongList& inPostScriptOperandStack) {return PDFHummus::eSuccess;}
Type1SetCurrentPoint(const LongList & inOperandList)103 	virtual PDFHummus::EStatusCode Type1SetCurrentPoint(const LongList& inOperandList) {return PDFHummus::eSuccess;}
Type1InterpretNumber(long inOperand)104 	virtual PDFHummus::EStatusCode Type1InterpretNumber(long inOperand) {return PDFHummus::eSuccess;}
GetLenIV()105 	virtual unsigned long GetLenIV() {return 4;}
106 };