~ubuntu-branches/ubuntu/wily/apvlv/wily

« back to all changes in this revision

Viewing changes to src/ApvlvInfo.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michael Biebl
  • Date: 2011-06-01 22:18:49 UTC
  • mfrom: (10.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20110601221849-niibd5p5i7avemy4
Tags: 0.1.1-1.1
* Non-maintainer upload.
* Add support for poppler >= 0.15. Patch by Pino Toscano. (Closes: #627609)

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
20
*
21
21
*/
22
 
/* @CFILE ApvlvInfo.cpp 
 
22
/* @CFILE ApvlvInfo.cpp
23
23
*
24
24
*  Author: Alf <naihe2010@gmail.com>
25
25
*/
27
27
 
28
28
#include "ApvlvInfo.hpp"
29
29
 
30
 
#include <stdlib.h>
31
 
#include <string.h>
32
 
 
 
30
#include <cstdlib>
 
31
#include <cstring>
33
32
#include <fstream>
34
33
#include <sstream>
35
34
 
36
35
namespace apvlv
37
 
{
 
36
  {
38
37
  ApvlvInfo *gInfo = NULL;
39
38
 
40
 
    ApvlvInfo::ApvlvInfo (const char *filename)
 
39
  ApvlvInfo::ApvlvInfo (const char *filename)
41
40
  {
42
41
    mFileName = filename;
43
42
 
47
46
    ifstream is (mFileName.c_str (), ios::in);
48
47
    if (is.is_open ())
49
48
      {
50
 
        string line;
51
 
        const char *p;
52
 
 
53
 
        while (getline (is, line))
54
 
          {
55
 
            p = line.c_str ();
56
 
 
57
 
            if (*p != '\''      /* the ' */
58
 
                || !isdigit (*(p + 1))) /* the digit */
59
 
              {
60
 
                continue;
61
 
              }
62
 
 
63
 
            ini_add_position (p);
64
 
          }
65
 
 
66
 
        mFileHead = g_slist_reverse (mFileHead);
67
 
 
68
 
        is.close ();
 
49
        string line;
 
50
        const char *p;
 
51
 
 
52
        while (getline (is, line))
 
53
          {
 
54
            p = line.c_str ();
 
55
 
 
56
            if (*p != '\''      /* the ' */
 
57
                || !isdigit (*(p + 1))) /* the digit */
 
58
              {
 
59
                continue;
 
60
              }
 
61
 
 
62
            ini_add_position (p);
 
63
          }
 
64
 
 
65
        mFileHead = g_slist_reverse (mFileHead);
 
66
 
 
67
        is.close ();
69
68
      }
70
69
  }
71
70
 
72
71
  ApvlvInfo::~ApvlvInfo ()
73
72
  {
74
 
    while (mFileHead != NULL)
 
73
    for (GSList *list = mFileHead;
 
74
         list != NULL;
 
75
         list = g_slist_next (list))
75
76
      {
76
 
        infofile *fp = (infofile *) (mFileHead->data);
77
 
        delete fp;
78
 
        mFileHead = g_slist_next (mFileHead);
 
77
        infofile *fp = (infofile *) (list->data);
 
78
        delete fp;
79
79
      }
80
80
    g_slist_free (mFileHead);
81
81
  }
85
85
    ofstream os (mFileName.c_str (), ios::out);
86
86
    if (!os.is_open ())
87
87
      {
88
 
        return false;
 
88
        return false;
89
89
      }
90
90
 
91
91
    int i;
92
92
    GSList *lfp;
93
93
    infofile *fp;
94
94
    for (i = 0, lfp = mFileHead;
95
 
         i < mFileMax && lfp != NULL; ++i, lfp = g_slist_next (lfp))
 
95
         i < mFileMax && lfp != NULL; ++i, lfp = g_slist_next (lfp))
96
96
      {
97
 
        fp = (infofile *) (lfp->data);
98
 
        if (fp)
99
 
          {
100
 
            os << "'" << i << "\t";
101
 
            os << fp->page << "\t";
102
 
            os << fp->rate << "\t";
103
 
            os << fp->file << endl;
104
 
          }
 
97
        fp = (infofile *) (lfp->data);
 
98
        if (fp)
 
99
          {
 
100
            os << "'" << i << "\t";
 
101
            os << fp->page << ':' << fp->skip << "\t";
 
102
            os << fp->rate << "\t";
 
103
            os << fp->file << endl;
 
104
          }
105
105
      }
106
106
 
107
107
    os.close ();
121
121
 
122
122
    for (lfp = mFileHead; lfp != NULL; lfp = g_slist_next (lfp))
123
123
      {
124
 
        fp = (infofile *) (lfp->data);
125
 
        if (fp->file == filename)
126
 
          {
127
 
            break;
128
 
          }
 
124
        fp = (infofile *) (lfp->data);
 
125
        if (fp->file == filename)
 
126
          {
 
127
            break;
 
128
          }
129
129
      }
130
130
 
131
131
    if (lfp == NULL)
132
132
      {
133
 
        fp = new infofile;
134
 
        fp->page = 0;
135
 
        fp->rate = 0.0;
136
 
        fp->file = filename;
137
 
        mFileHead = g_slist_insert_before (mFileHead, mFileHead, fp);
 
133
        fp = new infofile;
 
134
        fp->page = 0;
 
135
        fp->skip = 0;
 
136
        fp->rate = 0.0;
 
137
        fp->file = filename;
 
138
        mFileHead = g_slist_insert_before (mFileHead, mFileHead, fp);
138
139
      }
139
140
    else
140
141
      {
141
 
        mFileHead = g_slist_remove (mFileHead, fp);
142
 
        mFileHead = g_slist_insert_before (mFileHead, mFileHead, fp);
 
142
        mFileHead = g_slist_remove (mFileHead, fp);
 
143
        mFileHead = g_slist_insert_before (mFileHead, mFileHead, fp);
143
144
      }
144
145
 
145
146
    return fp;
146
147
  }
147
148
 
148
 
  bool ApvlvInfo::file (int page, double rate, const char *filename)
 
149
  bool ApvlvInfo::file (int page, double rate, const char *filename, int skip)
149
150
  {
150
151
    infofile *fp;
151
152
 
152
153
    fp = file (filename);
153
154
    if (fp == NULL)
154
155
      {
155
 
        return false;
 
156
        return false;
156
157
      }
157
158
 
158
159
    fp->page = page;
159
160
    fp->rate = rate;
 
161
    fp->skip = skip;
160
162
    update ();
161
163
 
162
164
    return true;
164
166
 
165
167
  bool ApvlvInfo::ini_add_position (const char *str)
166
168
  {
167
 
    const char *p;
 
169
    const char *p, *s;
168
170
 
169
171
    p = strchr (str + 2, '\t'); /* Skip the ' and the digit */
170
172
    if (p == NULL)
171
173
      {
172
 
        return false;
 
174
        return false;
173
175
      }
174
176
 
175
177
    while (*p != '\0' && !isdigit (*p))
176
178
      {
177
 
        p++;
 
179
        p++;
178
180
      }
179
181
    int page = atoi (p);
 
182
    int skip;
 
183
 
 
184
    s = strchr (p, ':');
 
185
    for (;s && p < s; ++p)
 
186
      {
 
187
        if (!isdigit (*p))
 
188
          {
 
189
            break;
 
190
          }
 
191
      }
 
192
    if (p == s)
 
193
      {
 
194
        ++ p;
 
195
        skip = atoi (p);
 
196
      }
 
197
    else
 
198
      {
 
199
        skip = 0;
 
200
      }
180
201
 
181
202
    p = strchr (p, '\t');
182
203
    if (p == NULL)
183
204
      {
184
 
        return false;
 
205
        return false;
185
206
      }
186
207
 
187
208
    while (*p != '\0' && !isdigit (*p))
188
209
      {
189
 
        p++;
 
210
        p++;
190
211
      }
191
212
    double rate = atof (p);
192
213
 
193
214
    p = strchr (p, '\t');
194
215
    if (p == NULL)
195
216
      {
196
 
        return false;
 
217
        return false;
197
218
      }
198
219
 
199
220
    while (*p != '\0' && isspace (*p))
200
221
      {
201
 
        p++;
 
222
        p++;
202
223
      }
203
224
    if (*p == '\0')
204
225
      {
205
 
        return false;
 
226
        return false;
206
227
      }
207
228
 
208
229
    infofile *fp = new infofile;
209
230
    fp->page = page;
210
231
    fp->rate = rate;
 
232
    fp->skip = skip;
211
233
    fp->file = p;
212
234
    mFileHead = g_slist_insert_before (mFileHead, mFileHead, fp);
213
235
    return true;