"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "xpdf/UnicodeRemapping.cc" between
xpdf-4.03.tar.gz and xpdf-4.04.tar.gz

About: Xpdf is a PDF viewer for X.

UnicodeRemapping.cc  (xpdf-4.03):UnicodeRemapping.cc  (xpdf-4.04)
skipping to change at line 86 skipping to change at line 86
} }
sMap = NULL; sMap = NULL;
sMapLen = sMapSize = 0; sMapLen = sMapSize = 0;
} }
UnicodeRemapping::~UnicodeRemapping() { UnicodeRemapping::~UnicodeRemapping() {
gfree(sMap); gfree(sMap);
} }
void UnicodeRemapping::addRemapping(Unicode in, Unicode *out, int len) { void UnicodeRemapping::addRemapping(Unicode in, Unicode *out, int len) {
int i; int i, j;
if (in < 256 && len == 1) { if (in < 256 && len == 1) {
page0[in] = out[0]; page0[in] = out[0];
} else { } else {
if (in < 256) { if (in < 256) {
page0[in] = 0xffffffff; page0[in] = 0xffffffff;
} }
if (sMapLen == sMapSize) { if (sMapLen == sMapSize) {
sMapSize += 16; sMapSize += 16;
sMap = (UnicodeRemappingString *) sMap = (UnicodeRemappingString *)
greallocn(sMap, sMapSize, sizeof(UnicodeRemappingString)); greallocn(sMap, sMapSize, sizeof(UnicodeRemappingString));
} }
sMap[sMapLen].in = in; i = findSMap(in);
for (i = 0; i < len && i < maxUnicodeString; ++i) { if (i < sMapLen) {
sMap[sMapLen].out[i] = out[i]; memmove(sMap + i + 1, sMap + i,
(sMapLen - i) * sizeof(UnicodeRemappingString));
} }
sMap[sMapLen].len = i; sMap[i].in = in;
for (j = 0; j < len && j < maxUnicodeString; ++j) {
sMap[i].out[j] = out[j];
}
sMap[i].len = j;
++sMapLen; ++sMapLen;
} }
} }
void UnicodeRemapping::parseFile(GString *fileName) { void UnicodeRemapping::parseFile(GString *fileName) {
FILE *f; FILE *f;
char buf[256]; char buf[256];
Unicode in; Unicode in;
Unicode out[maxUnicodeString]; Unicode out[maxUnicodeString];
char *tok; char *tok;
skipping to change at line 151 skipping to change at line 156
break; break;
} }
++n; ++n;
} }
addRemapping(in, out, n); addRemapping(in, out, n);
} }
fclose(f); fclose(f);
} }
// Determine the location in sMap to insert/replace the entry for [u].
int UnicodeRemapping::findSMap(Unicode u) {
int a, b, m;
a = -1;
b = sMapLen;
// invariant: sMap[a].in < u <= sMap[b].in
while (b - a > 1) {
m = (a + b) / 2;
if (sMap[m].in < u) {
a = m;
} else {
b = m;
}
}
return b;
}
int UnicodeRemapping::map(Unicode in, Unicode *out, int size) { int UnicodeRemapping::map(Unicode in, Unicode *out, int size) {
int a, b, m, i; int a, b, m, i;
if (in < 256 && page0[in] != 0xffffffff) { if (in < 256 && page0[in] != 0xffffffff) {
out[0] = page0[in]; out[0] = page0[in];
return 1; return 1;
} }
a = -1; a = -1;
b = sMapLen; b = sMapLen;
 End of changes. 4 change blocks. 
5 lines changed or deleted 28 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)