OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) { Object obj1; GooString *s; int i; xref = xrefA; title = NULL; action = NULL; kids = NULL; if (dict->lookup("Title", &obj1)->isString()) { s = obj1.getString(); if ((s->getChar(0) & 0xff) == 0xfe && (s->getChar(1) & 0xff) == 0xff) { titleLen = (s->getLength() - 2) / 2; title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); for (i = 0; i < titleLen; ++i) { title[i] = ((s->getChar(2 + 2*i) & 0xff) << 8) | (s->getChar(3 + 2*i) & 0xff); } } else { titleLen = s->getLength(); title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); for (i = 0; i < titleLen; ++i) { title[i] = pdfDocEncoding[s->getChar(i) & 0xff]; } } } else { titleLen = 0; } obj1.free(); if (!dict->lookup("Dest", &obj1)->isNull()) { action = LinkAction::parseDest(&obj1); } else { obj1.free(); if (!dict->lookup("A", &obj1)->isNull()) { action = LinkAction::parseAction(&obj1); } } obj1.free(); dict->lookupNF("First", &firstRef); dict->lookupNF("Last", &lastRef); dict->lookupNF("Next", &nextRef); startsOpen = gFalse; if (dict->lookup("Count", &obj1)->isInt()) { if (obj1.getInt() > 0) { startsOpen = gTrue; } } obj1.free(); }
void JPXStream::init() { Object oLen; if (getDict()) getDict()->lookup("Length", &oLen); int bufSize = BUFFER_INCREASE; if (oLen.isInt()) bufSize = oLen.getInt(); oLen.free(); unsigned char *buf = (unsigned char*)gmallocn(bufSize, sizeof(unsigned char)); int index = 0; str->reset(); int c = str->getChar(); while(c != EOF) { if (index >= bufSize) { bufSize += BUFFER_INCREASE; buf = (unsigned char*)greallocn(buf, bufSize, sizeof(unsigned char)); } buf[index] = c; ++index; c = str->getChar(); } init2(buf, index, CODEC_JP2); free(buf); counter = 0; inited = gTrue; }
SplashState::SplashState(SplashState *state) { memcpy(matrix, state->matrix, 6 * sizeof(SplashCoord)); strokePattern = state->strokePattern->copy(); fillPattern = state->fillPattern->copy(); screen = state->screen->copy(); blendFunc = state->blendFunc; strokeAlpha = state->strokeAlpha; fillAlpha = state->fillAlpha; lineWidth = state->lineWidth; lineCap = state->lineCap; lineJoin = state->lineJoin; miterLimit = state->miterLimit; flatness = state->flatness; if (state->lineDash) { lineDashLength = state->lineDashLength; lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord)); memcpy(lineDash, state->lineDash, lineDashLength * sizeof(SplashCoord)); } else { lineDash = NULL; lineDashLength = 0; } lineDashPhase = state->lineDashPhase; strokeAdjust = state->strokeAdjust; clip = state->clip->copy(); softMask = state->softMask; deleteSoftMask = gFalse; inNonIsolatedGroup = state->inNonIsolatedGroup; next = NULL; }
NameToCharCode::NameToCharCode() { int i; size = 31; len = 0; tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); for (i = 0; i < size; ++i) { tab[i].name = NULL; } }
void SplashState::setLineDash(SplashCoord *lineDashA, int lineDashLengthA, SplashCoord lineDashPhaseA) { gfree(lineDash); lineDashLength = lineDashLengthA; if (lineDashLength > 0) { lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord)); memcpy(lineDash, lineDashA, lineDashLength * sizeof(SplashCoord)); } else { lineDash = NULL; } lineDashPhase = lineDashPhaseA; }
void NameToCharCode::add(char *name, CharCode c) { NameToCharCodeEntry *oldTab; int h, i, oldSize; // expand the table if necessary if (len >= size / 2) { oldSize = size; oldTab = tab; size = 2*size + 1; tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); for (h = 0; h < size; ++h) { tab[h].name = NULL; } for (i = 0; i < oldSize; ++i) { if (oldTab[i].name) { h = hash(oldTab[i].name); while (tab[h].name) { if (++h == size) { h = 0; } } tab[h] = oldTab[i]; } } gfree(oldTab); } // add the new name h = hash(name); while (tab[h].name && strcmp(tab[h].name, name)) { if (++h == size) { h = 0; } } if (!tab[h].name) { tab[h].name = copyString(name); } tab[h].c = c; ++len; }
GooList::GooList(int sizeA) { size = sizeA; data = (void **)gmallocn(size, sizeof(void*)); length = 0; inc = 0; }
GooList::GooList() { size = 8; data = (void **)gmallocn(size, sizeof(void*)); length = 0; inc = 0; }
Eina_List * epdf_page_text_find (const Epdf_Page *page, const char *text, unsigned char is_case_sensitive) { Epdf_Rectangle *match; TextOutputDev *output_dev; Eina_List *matches = NULL; double xMin, yMin, xMax, yMax; int length; int height; if (!page || !text) return NULL; GooString tmp (text); Unicode *s; { length = tmp.getLength(); s = (Unicode *)gmallocn(length, sizeof(Unicode)); bool anyNonEncoded = false; for (int j = 0; j < length && !anyNonEncoded; ++j) { s[j] = pdfDocEncoding[tmp.getChar(j) & 0xff]; if (!s[j]) anyNonEncoded = true; } if ( anyNonEncoded ) { for (int j = 0; j < length; ++j) { s[j] = tmp.getChar(j); } } } length = strlen (text); output_dev = new TextOutputDev (NULL, 1, 0, 0); epdf_page_size_get (page, NULL, &height); page->page->display (output_dev, 72, 72, 0, false, true, false, page->doc->pdfdoc->getCatalog()); xMin = 0; yMin = 0; #warning you probably want to add backwards as parameters while (output_dev->findText (s, tmp.getLength (), 0, 1, // startAtTop, stopAtBottom 1, 0, // startAtLast, stopAtLast is_case_sensitive, 0, // caseSensitive, backwards &xMin, &yMin, &xMax, &yMax)) { match = (Epdf_Rectangle *)malloc (sizeof (Epdf_Rectangle)); match->x1 = xMin; match->y1 = yMin;//height - yMax; match->x2 = xMax; match->y2 = yMax;//height - yMin; matches = eina_list_append (matches, match); } delete output_dev; return matches; }