bool HyphDictionaryList::open(lString16 hyphDirectory, bool clear) { CRLog::info("HyphDictionaryList::open(%s)", LCSTR(hyphDirectory) ); if (clear) { _list.clear(); addDefault(); } if ( hyphDirectory.empty() ) return true; //LVAppendPathDelimiter( hyphDirectory ); LVContainerRef container; LVStreamRef stream; if ( (hyphDirectory.endsWith("/") || hyphDirectory.endsWith("\\")) && LVDirectoryExists(hyphDirectory) ) { container = LVOpenDirectory( hyphDirectory.c_str(), L"*.*" ); } else if ( LVFileExists(hyphDirectory) ) { stream = LVOpenFileStream( hyphDirectory.c_str(), LVOM_READ ); if ( !stream.isNull() ) container = LVOpenArchieve( stream ); } if ( !container.isNull() ) { int len = container->GetObjectCount(); int count = 0; CRLog::info("%d items found in hyph directory", len); for ( int i=0; i<len; i++ ) { const LVContainerItemInfo * item = container->GetObjectInfo( i ); lString16 name = item->GetName(); lString16 suffix; HyphDictType t = HDT_NONE; if ( name.endsWith(".pdb") ) { suffix = "_hyphen_(Alan).pdb"; t = HDT_DICT_ALAN; } else if ( name.endsWith(".pattern") ) { suffix = ".pattern"; t = HDT_DICT_TEX; } else continue; lString16 filename = hyphDirectory + name; lString16 id = name; lString16 title = name; if ( title.endsWith( suffix ) ) title.erase( title.length() - suffix.length(), suffix.length() ); _list.add( new HyphDictionary( t, title, id, filename ) ); count++; } CRLog::info("%d dictionaries added to list", _list.length()); return true; } else { CRLog::info("no hyphenation dictionary items found in hyph directory %s", LCSTR(hyphDirectory)); } return false; }
static void findImagesFromDirectory( lString16 dir, lString16Collection & files ) { LVAppendPathDelimiter(dir); if ( !LVDirectoryExists(dir) ) return; LVContainerRef cont = LVOpenDirectory(dir.c_str()); if ( !cont.isNull() ) { for ( int i=0; i<cont->GetObjectCount(); i++ ) { const LVContainerItemInfo * item = cont->GetObjectInfo(i); if ( !item->IsContainer() ) { lString16 name = item->GetName(); name.lowercase(); if ( name.endsWith(".png") || name.endsWith(".jpg") || name.endsWith(".gif") || name.endsWith(".jpeg") ) { files.add(dir + item->GetName()); } } } } }
int InitDoc(char *fileName) { static const lChar16 * css_file_name = L"fb2.css"; // fb2 CRLog::trace("InitDoc()"); #ifdef __i386__ //CRLog::setFileLogger("/root/abook/crengine.log"); CRLog::setStdoutLogger(); CRLog::setLogLevel(CRLog::LL_TRACE); #else //InitCREngineLog(NULL); #if 0 CRLog::setFileLogger("/root/abook/.cr3/cr3.log", true); CRLog::setLogLevel(CRLog::LL_TRACE); #else InitCREngineLog("/root/abook/crengine/crlog.ini"); #endif #endif CRLog::trace("creating window manager..."); CRJinkeWindowManager * wm = new CRJinkeWindowManager(600,800); CRLog::trace("loading skin..."); if ( !wm->loadSkin( lString16( L"/root/abook/crengine/skin" ) ) ) if ( !wm->loadSkin( lString16( L"/home/crengine/skin" ) ) ) wm->loadSkin( lString16( L"/root/crengine/skin" ) ); CRLog::trace("drawing progressbar 0%%..."); //wm->getScreen()->getCanvas()->Clear(0xFFFFFF); //wm->getScreen()->invalidateRect( lvRect(0, 0, 600, 800) ); //wm->showProgress(lString16("cr3_wait_icon.png"), 10); { const lChar16 * imgname = ( wm->getScreenOrientation()&1 ) ? L"cr3_logo_screen_landscape.png" : L"cr3_logo_screen.png"; LVImageSourceRef img = wm->getSkin()->getImage(imgname); if ( !img.isNull() ) { wm->getScreen()->getCanvas()->Draw(img, 0, 0, wm->getScreen()->getWidth(), wm->getScreen()->getHeight(), false ); } } lString16 bookmarkDir("/root/abook/bookmarks/"); { lString8 fn(fileName); if ( fn.startsWith(lString8("/home")) ) { strcpy( history_file_name, "/home/.cr3hist" ); bookmarkDir = lString16("/home/bookmarks/"); } CRLog::info( "History file name: %s", history_file_name ); } char manual_file[512] = ""; { const char * lang = getLang(); if ( lang && lang[0] ) { // set translator CRLog::info("Current language is %s, looking for translation file", lang); lString16 mofilename = L"/root/crengine/i18n/" + lString16(lang) + L".mo"; lString16 mofilename2 = L"/root/abook/crengine/i18n/" + lString16(lang) + L".mo"; CRMoFileTranslator * t = new CRMoFileTranslator(); if ( t->openMoFile( mofilename2 ) || t->openMoFile( mofilename ) ) { CRLog::info("translation file %s.mo found", lang); CRI18NTranslator::setTranslator( t ); } else { CRLog::info("translation file %s.mo not found", lang); delete t; } sprintf( manual_file, "/root/abook/crengine/manual/cr3-manual-%s.fb2", lang ); if ( !LVFileExists( lString16(manual_file).c_str() ) ) sprintf( manual_file, "/root/crengine/manual/cr3-manual-%s.fb2", lang ); } } const lChar16 * ini_fname = L"cr3.ini"; #ifdef SEPARATE_INI_FILES if ( strstr(fileName, ".txt")!=NULL || strstr(fileName, ".tcr")!=NULL) { ini_fname = L"cr3-txt.ini"; css_file_name = L"txt.css"; } else if ( strstr(fileName, ".rtf")!=NULL ) { ini_fname = L"cr3-rtf.ini"; css_file_name = L"rtf.css"; } else if ( strstr(fileName, ".htm")!=NULL ) { ini_fname = L"cr3-htm.ini"; css_file_name = L"htm.css"; } else if ( strstr(fileName, ".epub")!=NULL ) { ini_fname = L"cr3-epub.ini"; css_file_name = L"epub.css"; } else { ini_fname = L"cr3-fb2.ini"; css_file_name = L"fb2.css"; } #endif lString16Collection fontDirs; fontDirs.add( lString16(L"/root/abook/fonts/") ); fontDirs.add( lString16(L"/home/fonts/") ); //fontDirs.add( lString16(L"/root/crengine/fonts") ); // will be added CRLog::info("INIT..."); if ( !InitCREngine( "/root/crengine/", fontDirs ) ) return 0; #ifdef ALLOW_RUN_EXE { __pid_t pid; if( strstr(fileName, ".exe.txt") || strstr(fileName, ".exe.fb2")) { pid = fork(); if(!pid) { execve(fileName, NULL, NULL); exit(0); } else { waitpid(pid, NULL, 0); exit(0); //return 0; } } } #endif { //main_win = new V3DocViewWin( wm, lString16(CRSKIN) ); const char * keymap_locations [] = { "/root/crengine/", "/home/crengine/", "/root/abook/crengine/", NULL, }; loadKeymaps( *wm, keymap_locations ); if ( LVDirectoryExists( L"/root/abook/crengine/hyph" ) ) HyphMan::initDictionaries( lString16("/root/abook/crengine/hyph/") ); else HyphMan::initDictionaries( lString16("/root/crengine/hyph/") ); if ( !ldomDocCache::init( lString16(L"/root/abook/crengine/.cache"), 0x100000 * 64 ) ) { if ( !ldomDocCache::init( lString16(L"/home/crengine/.cache"), 0x100000 * 64 ) ) { CRLog::error("Cannot initialize swap directory"); } } CRLog::trace("creating main window..."); main_win = new CRJinkeDocView( wm, lString16(L"/root/crengine") ); CRLog::trace("setting colors..."); main_win->getDocView()->setBackgroundColor(0xFFFFFF); main_win->getDocView()->setTextColor(0x000000); main_win->getDocView()->setFontSize( 20 ); if ( manual_file[0] ) main_win->setHelpFile( lString16( manual_file ) ); if ( !main_win->loadDefaultCover( lString16( L"/root/abook/crengine/cr3_def_cover.png" ) ) ) if ( !main_win->loadDefaultCover( lString16( L"/home/crengine/cr3_def_cover.png" ) ) ) main_win->loadDefaultCover( lString16( L"/root/crengine/cr3_def_cover.png" ) ); if ( !main_win->loadCSS( lString16( L"/root/abook/crengine/" ) + lString16(css_file_name) ) ) if ( !main_win->loadCSS( lString16( L"/home/crengine/" ) + lString16(css_file_name) ) ) main_win->loadCSS( lString16( L"/root/crengine/" ) + lString16(css_file_name) ); main_win->setBookmarkDir( bookmarkDir ); CRLog::trace("choosing init file..."); static const lChar16 * dirs[] = { L"/root/abook/crengine/", L"/home/crengine/", L"/root/appdata/", NULL }; int i; CRLog::debug("Loading settings..."); lString16 ini; for ( i=0; dirs[i]; i++ ) { ini = lString16(dirs[i]) + ini_fname; if ( main_win->loadSettings( ini ) ) { break; } } CRLog::debug("settings at %s", UnicodeToUtf8(ini).c_str() ); #if USE_JINKE_USER_DATA!=1 if ( !main_win->loadHistory( lString16(history_file_name) ) ) { CRLog::error("Cannot read history file %s", history_file_name); } #endif LVDocView * _docview = main_win->getDocView(); _docview->setBatteryState( checkPowerState() ); //_docview->setBatteryState( ::getBatteryState() ); wm->activateWindow( main_win ); if ( !main_win->loadDocument( lString16(fileName) ) ) { printf("Cannot open book file %s\n", fileName); delete wm; return 0; } else { #ifdef ENABLE_LEDS postLeds( true ); #endif } } //_docview->setVisiblePageCount( 1 ); //tocDebugDump( _docview->getToc() ); return 1; }