mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-14 02:57:45 +01:00
d75e68c027
windows build only
173 lines
4.5 KiB
C
173 lines
4.5 KiB
C
/*
|
|
* << Haru Free PDF Library 2.0.3 >> -- HPDF_objects.c
|
|
*
|
|
* Copyright (c) 1999-2004 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
|
|
*
|
|
* Permission to use, copy, modify, distribute and sell this software
|
|
* and its documentation for any purpose is hereby granted without fee,
|
|
* provided that the above copyright notice appear in all copies and
|
|
* that both that copyright notice and this permission notice appear
|
|
* in supporting documentation.
|
|
* It is provided "as is" without express or implied warranty.
|
|
*
|
|
*/
|
|
|
|
#include "hpdf_conf.h"
|
|
#include "hpdf_utils.h"
|
|
#include "hpdf_objects.h"
|
|
|
|
void
|
|
HPDF_Obj_Free (HPDF_MMgr mmgr,
|
|
void *obj)
|
|
{
|
|
HPDF_Obj_Header *header;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_Free\n"));
|
|
|
|
if (!obj)
|
|
return;
|
|
|
|
header = (HPDF_Obj_Header *)obj;
|
|
|
|
if (!(header->obj_id & HPDF_OTYPE_INDIRECT))
|
|
HPDF_Obj_ForceFree (mmgr, obj);
|
|
}
|
|
|
|
|
|
void
|
|
HPDF_Obj_ForceFree (HPDF_MMgr mmgr,
|
|
void *obj)
|
|
{
|
|
HPDF_Obj_Header *header;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_ForceFree\n"));
|
|
|
|
if (!obj)
|
|
return;
|
|
|
|
header = (HPDF_Obj_Header *)obj;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_ForceFree obj=0x%08X obj_id=0x%08X "
|
|
"obj_class=0x%08X\n",
|
|
(HPDF_UINT)obj, (HPDF_UINT)(header->obj_id),
|
|
(HPDF_UINT)(header->obj_class)));
|
|
|
|
switch (header->obj_class & HPDF_OCLASS_ANY) {
|
|
case HPDF_OCLASS_STRING:
|
|
HPDF_String_Free (obj);
|
|
break;
|
|
case HPDF_OCLASS_BINARY:
|
|
HPDF_Binary_Free (obj);
|
|
break;
|
|
case HPDF_OCLASS_ARRAY:
|
|
HPDF_Array_Free (obj);
|
|
break;
|
|
case HPDF_OCLASS_DICT:
|
|
HPDF_Dict_Free (obj);
|
|
break;
|
|
default:
|
|
HPDF_FreeMem (mmgr, obj);
|
|
}
|
|
}
|
|
|
|
HPDF_STATUS
|
|
HPDF_Obj_Write (void *obj,
|
|
HPDF_Stream stream,
|
|
HPDF_Encrypt e)
|
|
{
|
|
HPDF_Obj_Header *header = (HPDF_Obj_Header *)obj;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_Write\n"));
|
|
|
|
if (header->obj_id & HPDF_OTYPE_HIDDEN) {
|
|
HPDF_PTRACE(("#HPDF_Obj_Write obj=0x%08X skipped\n", (HPDF_UINT)obj));
|
|
return HPDF_OK;
|
|
}
|
|
|
|
if (header->obj_class == HPDF_OCLASS_PROXY) {
|
|
char buf[HPDF_SHORT_BUF_SIZ];
|
|
char *pbuf = buf;
|
|
char *eptr = buf + HPDF_SHORT_BUF_SIZ - 1;
|
|
HPDF_Proxy p = obj;
|
|
|
|
header = (HPDF_Obj_Header*)p->obj;
|
|
|
|
pbuf = HPDF_IToA (pbuf, header->obj_id & 0x00FFFFFF, eptr);
|
|
*pbuf++ = ' ';
|
|
pbuf = HPDF_IToA (pbuf, header->gen_no, eptr);
|
|
HPDF_StrCpy(pbuf, " R", eptr);
|
|
|
|
return HPDF_Stream_WriteStr(stream, buf);
|
|
}
|
|
|
|
return HPDF_Obj_WriteValue(obj, stream, e);
|
|
}
|
|
|
|
HPDF_STATUS
|
|
HPDF_Obj_WriteValue (void *obj,
|
|
HPDF_Stream stream,
|
|
HPDF_Encrypt e)
|
|
{
|
|
HPDF_Obj_Header *header;
|
|
HPDF_STATUS ret;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_WriteValue\n"));
|
|
|
|
header = (HPDF_Obj_Header *)obj;
|
|
|
|
HPDF_PTRACE((" HPDF_Obj_WriteValue obj=0x%08X obj_class=0x%04X\n",
|
|
(HPDF_UINT)obj, (HPDF_UINT)header->obj_class));
|
|
|
|
switch (header->obj_class & HPDF_OCLASS_ANY) {
|
|
case HPDF_OCLASS_NAME:
|
|
ret = HPDF_Name_Write (obj, stream);
|
|
break;
|
|
case HPDF_OCLASS_NUMBER:
|
|
ret = HPDF_Number_Write (obj, stream);
|
|
break;
|
|
case HPDF_OCLASS_REAL:
|
|
ret = HPDF_Real_Write (obj, stream);
|
|
break;
|
|
case HPDF_OCLASS_STRING:
|
|
ret = HPDF_String_Write (obj, stream, e);
|
|
break;
|
|
case HPDF_OCLASS_BINARY:
|
|
ret = HPDF_Binary_Write (obj, stream, e);
|
|
break;
|
|
case HPDF_OCLASS_ARRAY:
|
|
ret = HPDF_Array_Write (obj, stream, e);
|
|
break;
|
|
case HPDF_OCLASS_DICT:
|
|
ret = HPDF_Dict_Write (obj, stream, e);
|
|
break;
|
|
case HPDF_OCLASS_BOOLEAN:
|
|
ret = HPDF_Boolean_Write (obj, stream);
|
|
break;
|
|
case HPDF_OCLASS_NULL:
|
|
ret = HPDF_Stream_WriteStr (stream, "null");
|
|
break;
|
|
default:
|
|
ret = HPDF_ERR_UNKNOWN_CLASS;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
HPDF_Proxy
|
|
HPDF_Proxy_New (HPDF_MMgr mmgr,
|
|
void *obj)
|
|
{
|
|
HPDF_Proxy p = HPDF_GetMem (mmgr, sizeof(HPDF_Proxy_Rec));
|
|
|
|
HPDF_PTRACE((" HPDF_Proxy_New\n"));
|
|
|
|
if (p) {
|
|
HPDF_MemSet (&p->header, 0, sizeof(HPDF_Obj_Header));
|
|
p->header.obj_class = HPDF_OCLASS_PROXY;
|
|
p->obj = obj;
|
|
}
|
|
|
|
return p;
|
|
}
|
|
|