Ignore:
Timestamp:
Jan 3, 2010, 7:13:32 PM (11 years ago)
Author:
rbri
Message:

DJVU plugin: djvulibre updated to version 3.5.22

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libdjvu/DjVuDocEditor.cpp

    r206 r280  
    5454//C- +------------------------------------------------------------------
    5555//
    56 // $Id: DjVuDocEditor.cpp,v 1.15 2007/03/25 20:48:30 leonb Exp $
    57 // $Name: release_3_5_19 $
     56// $Id: DjVuDocEditor.cpp,v 1.23 2008/09/28 12:46:14 leonb Exp $
     57// $Name: release_3_5_22 $
    5858
    5959#ifdef HAVE_CONFIG_H
     
    7878
    7979#include <ctype.h>
    80 
    8180
    8281#ifdef HAVE_NAMESPACES
     
    135134DjVuDocEditor::~DjVuDocEditor(void)
    136135{
    137    if (!tmp_doc_url.is_empty())
    138    {
    139      tmp_doc_url.deletefile();
    140    }
    141 
    142136   GCriticalSectionLock lock(&thumb_lock);
    143137   thumb_map.empty();
     
    193187       orig_doc_type==SINGLE_PAGE)
    194188   {
    195          // Suxx. I need to convert it NOW.
    196          // We will unlink this file in the destructor
    197       tmp_doc_url=GURL::Filename::Native(tmpnam(0));
    198       const GP<ByteStream> gstr(ByteStream::create(tmp_doc_url, "wb"));
    199       tmp_doc->write(gstr, true);        // Force DJVM format
    200       gstr->flush();
    201       doc_pool=DataPool::create(tmp_doc_url);
     189     // Suxx. I need to convert it now.
     190     GP<ByteStream> gstr = ByteStream::create();  // Convert in memory.
     191     tmp_doc->write(gstr, true);  // Force DJVM format
     192     gstr->seek(0);                     
     193     doc_pool=DataPool::create(gstr);
    202194   }
    203195
    204196      // OK. Now doc_pool contains data of the document in one of the
    205197      // new formats. It will be a lot easier to insert/delete pages now.
    206 
    207198      // 'doc_url' below of course doesn't refer to the file with the converted
    208199      // data, but we will take care of it by redirecting the request_data().
     
    11631154DjVuDocEditor::move_page(int page_num, int new_page_num)
    11641155{
    1165    DEBUG_MSG("DjVuDocEditor::move_page(): page_num=" << page_num <<
    1166              ", new_page_num=" << new_page_num << "\n");
    1167    DEBUG_MAKE_INDENT(3);
    1168 
    1169    if (page_num==new_page_num) return;
    1170 
    1171    int pages_num=get_pages_num();
    1172    if (page_num<0 || page_num>=pages_num)
    1173       G_THROW( ERR_MSG("DjVuDocEditor.bad_page") "\t"+GUTF8String(page_num));
    1174 
    1175    const GUTF8String id(page_to_id(page_num));
    1176    int file_pos=-1;
    1177    if (new_page_num>=0 && new_page_num<pages_num)
     1156  DEBUG_MSG("DjVuDocEditor::move_page(): page_num=" << page_num <<
     1157            ", new_page_num=" << new_page_num << "\n");
     1158  DEBUG_MAKE_INDENT(3);
     1159
     1160  if (page_num==new_page_num) return;
     1161
     1162  int pages_num=get_pages_num();
     1163  if (page_num<0 || page_num>=pages_num)
     1164    G_THROW( ERR_MSG("DjVuDocEditor.bad_page") "\t"+GUTF8String(page_num));
     1165
     1166  const GUTF8String id(page_to_id(page_num));
     1167  int file_pos=-1;
     1168  if (new_page_num>=0 && new_page_num<pages_num)
     1169    {
    11781170      if (new_page_num>page_num)        // Moving toward the end
    1179       {
    1180          if (new_page_num<pages_num-1)
    1181             file_pos=djvm_dir->get_page_pos(new_page_num+1)-1;
    1182       } else
    1183          file_pos=djvm_dir->get_page_pos(new_page_num);
    1184 
    1185    GMap<GUTF8String, void *> map;
    1186    move_file(id, file_pos, map);
    1187 }
     1171        {
     1172          if (new_page_num<pages_num-1)
     1173            file_pos=djvm_dir->get_page_pos(new_page_num+1)-1;
     1174        }
     1175      else
     1176        file_pos=djvm_dir->get_page_pos(new_page_num);
     1177    }
     1178
     1179  GMap<GUTF8String, void *> map;
     1180  move_file(id, file_pos, map);
     1181}
     1182
    11881183#ifdef _WIN32_WCE_EMULATION         // Work around odd behavior under WCE Emulation
    11891184#define CALLINGCONVENTION __cdecl
     
    19311926         // Assume, that we just want to 'save'. Check, that it's possible
    19321927         // and proceed.
    1933       bool can_be_saved_bundled=orig_doc_type==BUNDLED ||
    1934                                 orig_doc_type==OLD_BUNDLED ||
    1935                                 orig_doc_type==SINGLE_PAGE ||
    1936                                 orig_doc_type==OLD_INDEXED && orig_doc_pages==1;
     1928      bool can_be_saved_bundled =
     1929        orig_doc_type==BUNDLED ||
     1930        orig_doc_type==OLD_BUNDLED ||
     1931        orig_doc_type==SINGLE_PAGE ||
     1932        (orig_doc_type==OLD_INDEXED && orig_doc_pages==1);
    19371933      if ((bundled ^ can_be_saved_bundled)!=0)
    19381934         G_THROW( ERR_MSG("DjVuDocEditor.cant_save2") );
     
    19701966   }else
    19711967   {
    1972      if (djvm_dir->get_files_num()==1)
     1968     if (djvm_dir->get_files_num()==1 && !djvm_nav)
    19731969     {
    19741970       // Here 'bundled' has no effect: we will save it as one page.
     
    20512047       djvm_dir->encode(giff->get_bytestream());
    20522048       iff.close_chunk();
     2049       if (djvm_nav)
     2050         {
     2051           iff.put_chunk("NAVM");
     2052           djvm_nav->encode(iff.get_bytestream());
     2053           iff.close_chunk();
     2054         }
    20532055       iff.close_chunk();
    20542056       iff.flush();
     
    20952097        // of file url composition.
    20962098     for(GPosition pos=files_map;pos;)
    2097      {
    2098         const GP<File> file_rec(files_map[pos]);
    2099         file_rec->pool=0;
    2100         if (file_rec->file==0)
    2101         {
    2102          GPosition this_pos=pos;
    2103          ++pos;
    2104          files_map.del(this_pos);
    2105         } else
    2106         {
    2107             // Change the file's url;
    2108          if (doc_url!=save_doc_url ||
    2109              orig_doc_type!=save_doc_type)
    2110             if (save_doc_type==BUNDLED)
    2111                file_rec->file->move(save_doc_url);
    2112             else file_rec->file->move(save_doc_url.base());
    2113          ++pos;
    2114         }
    2115      }
    2116 
     2099       {
     2100         const GP<File> file_rec(files_map[pos]);
     2101         file_rec->pool=0;
     2102         if (file_rec->file==0)
     2103           {
     2104             GPosition this_pos=pos;
     2105             ++pos;
     2106             files_map.del(this_pos);
     2107           } else
     2108           {
     2109             // Change the file's url;
     2110             if (doc_url!=save_doc_url ||
     2111                 orig_doc_type!=save_doc_type)
     2112               {
     2113                 if (save_doc_type==BUNDLED)
     2114                   file_rec->file->move(save_doc_url);
     2115                 else
     2116                   file_rec->file->move(save_doc_url.base());
     2117               }
     2118             ++pos;
     2119           }
     2120       }
    21172121   }
    21182122   orig_doc_type=save_doc_type;
Note: See TracChangeset for help on using the changeset viewer.