source: trunk/poppler/mypoppler/poppler/UGooString.cc @ 134

Last change on this file since 134 was 134, checked in by Eugene Romanenko, 15 years ago

poppler updated to version 0.5.4

File size: 1.9 KB
Line 
1//========================================================================
2//
3// UGooString.cc
4//
5// Unicode string
6//
7// Copyright 2005 Albert Astals Cid <aacid@kde.org>
8//
9//========================================================================
10
11#include <string.h>
12
13#include "goo/gmem.h"
14#include "goo/GooString.h"
15#include "PDFDocEncoding.h"
16#include "UGooString.h"
17
18UGooString::UGooString(Unicode *u, int l)
19{
20  s = u;
21  length = l;
22}
23
24UGooString::UGooString(GooString &str)
25{
26  if ((str.getChar(0) & 0xff) == 0xfe && (str.getChar(1) & 0xff) == 0xff)
27  {
28    length = (str.getLength() - 2) / 2;
29    s = (Unicode *)gmallocn(length, sizeof(Unicode));
30    for (int j = 0; j < length; ++j) {
31      s[j] = ((str.getChar(2 + 2*j) & 0xff) << 8) | (str.getChar(3 + 2*j) & 0xff);
32    }
33  } else
34    initChar(str);
35}
36
37UGooString::UGooString(const UGooString &str)
38{
39  length = str.length;
40  s = (Unicode *)gmallocn(length, sizeof(Unicode));
41  memcpy(s, str.s, length * sizeof(Unicode));
42}
43
44UGooString::UGooString(const char *str)
45{
46  GooString aux(str);
47  initChar(aux);
48}
49
50void UGooString::initChar(GooString &str)
51{
52  length = str.getLength();
53  s = (Unicode *)gmallocn(length, sizeof(Unicode));
54  bool anyNonEncoded = false;
55  for (int j = 0; j < length && !anyNonEncoded; ++j) {
56    s[j] = pdfDocEncoding[str.getChar(j) & 0xff];
57    if (!s[j]) anyNonEncoded = true;
58  }
59  if ( anyNonEncoded )
60  {
61    for (int j = 0; j < length; ++j) {
62      s[j] = str.getChar(j);
63    }
64  }
65}
66
67UGooString::~UGooString()
68{
69  gfree(s);
70}
71
72int UGooString::cmp(UGooString *str) const
73{
74  int n1, n2, i, x;
75  Unicode *p1, *p2;
76
77  n1 = length;
78  n2 = str->length;
79  for (i = 0, p1 = s, p2 = str->s; i < n1 && i < n2; ++i, ++p1, ++p2) {
80    x = *p1 - *p2;
81    if (x != 0) {
82      return x;
83    }
84  }
85  return n1 - n2;
86}
87
88char *UGooString::getCString() const
89{
90  char *res = new char[length + 1];
91  for (int i = 0; i < length; i++) res[i] = s[i];
92  res[length] = '\0';
93  return res;
94}
Note: See TracBrowser for help on using the repository browser.