kchmviewer-5.3/0000755000175000001440000000000011514013420012224 5ustar timuserskchmviewer-5.3/DBUS-bindings0000644000175000001440000000141311115111274014501 0ustar timuserskchmviewer supports the following DBUS bindings: Interface path: net.kchmviewer.application Bingings: // Loads a CHM file filename , and opens the URL url. Use URL "/" to open default homepage void loadHelpFile( String filename, String url ); // Opens a specific url inside the loaded CHM file void openPage( String url ); // Tries to find word in index, opening the index window and scrolling it there void guiFindInIndex( String word ); // Executes a search in GUI. query contains the complete search query. void guiSearchQuery( String query ); // Executes a search; GUI is not involved and user sees nothing. // query contains the complete search query. // Returns a list of URLs, or empty array if nothing os StringList searchQuery( String query ); kchmviewer-5.3/po/0000755000175000001440000000000011514013420012642 5ustar timuserskchmviewer-5.3/po/kchmviewer.pot0000644000175000001440000005423611513542712015556 0ustar timusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "" #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 msgid "A CHM file to show" msgstr "" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-5.3/po/kchmviewer_nl.po0000644000175000001440000007437011513542712016064 0ustar timusers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Sander Pientka , 2009. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-02-01 16:35+0100\n" "Last-Translator: Sander Pientka \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - een bladwijzer toevoegen" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Voer de naam in voor deze bladwijzer:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - de bladwijzernaam bewerken" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Bladwijzers" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 versie %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Gelicenseerd onder de GNU GPL-licentie." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Gevonden bestandsdecodering: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - chm-bestand laden mislukt" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Kan het chm-bestand %1 niet laden" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Kon het bestand %1 niet laden" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - externe koppeling geopend - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "De externe koppeling %1 wordt in het betreffende programma geopend.\n" "\n" "Wilt u doorgaan?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ja" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nee" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaScript-koppeling geopend" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "U hebt een JavaScript-koppeling geopend.\n" "Wegens veiligheidsredenen zijn javaScript-URL's uitgeschakeld in CHM-" "bestanden." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - koppeling naar een nieuw CHM-bestand aangeklikt" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "U hebt een koppeling geopend, die naar het nieuwe CHM-bestand %1 leidt.\n" "Het huidige bestand wordt gesloten.\n" "\n" "Wilt u doorgaan?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Inhoudsopgave" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Zoeken" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Gecomprimeerde gebruikershandleiding (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Een chm-bestand openen" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Gecomprimeerde gebruikershandleiding (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Laden afgebroken" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "kies een map om de CHM-inhoud op te slaan" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "CHM-inhoud uitpakken" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Bestanden uitpakken..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Afbreken" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Kon geopend onderwerp niet vinden in inhoudsopgave" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Over" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Help" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Over" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Over &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Rechts" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Links" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Zoekopdracht heeft %1 resultaten gevonden" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Zoekopdracht heeft geen resultaten gevonden" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Zoekopdracht mislukt" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Met de verbeterde zoekmachine kunt u woorden, symbolen of zinnen " "zoeken, die is ingesteld met woorden en symbolen, opgenomen in " "aanhalingstekens. Alleen de documenten die alle ingevoerde zoektermen " "bevatten, worden weergeven; er zijn geen voorvoegsels nodig.

In " "tegenstelling tot de interne zoekindex van MS CHM, indexeert deze " "zoekmachine letterlijk alles, inclusief symbolen. Zo is het mogelijk om " "tekst als $q = new ChmFile(); te vinden. Deze zoekmachine ondersteunt " "tevens de volledige Unicode-tekenset, zodat u kunt zoeken in niet-Westerse " "documenten.

Als u een citaatteken wilt zoeken, gebruik dan een " "aanhalingsteken. De zoekmachine behandelt deze hetzelfde, zodat u ze in " "zinnen kunt gebruiken." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Woordenboek lezen..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Zoekindex opbouwen..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Een wijziging van deze opties wordt pas actief, nadat het programma is " "herstart." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Uitvoerbare bestanden" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Kies een uitvoerbaar bestand van een editor" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Uitvoerbare bestanden (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Huidige pagina sluiten" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Pagina toevoegen" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Afdrukken afgebroken" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Afdrukken voltooid" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Een koppeling in een nieuw tabblad openen\tShift+Linker muisknop" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" "Een koppeling in een nieuw achtergrondtabblad openen\tCtrl+Linker muisknop" #: main.cpp:45 msgid "Perform auto testing" msgstr "Automatisch testen uitvoeren" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Verkort automatisch testen uitvoeren" #: main.cpp:47 msgid "A CHM file to show" msgstr "Een te weergeven CHM-bestand" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' geeft de te zoeken zoekopdracht, en activeert het eerste " "resultaat wanneer gevonden" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' geeft het te zoeken woord in de index, en activeert het " "eerste resultaat wanneer gevonden" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' geeft de te zoeken woorden in de TOC, en activeert het " "eerste resultaat wanneer gevonden. Wildcards zijn toegestaan." #: main.cpp:56 msgid "CHM file viewer" msgstr "Weergaveprogramma voor CHM-bestanden" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Meld bugs aan kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Instellingen voor KchmViewer " #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Algemeen gedrag" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Wanneer geen argumenten zijn meegegeven bij starten" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Open vensterdialoog 'CHM-bestand openen'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Open het &laatst geopende CHM-bestand, wanneer aanwezig" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Geschiedenis" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Bewaar geschiedenis voor" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "laatste bestanden" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Bewaart informatie over geopende bestanden. Bewaart laatst geopende pagina, " "zoekgeschiedenis, lettergrootte, bladwijzers, enzovoorts." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "&Onthoud extra informatie voor geschiedenis" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM-veiligheidsinstellingen" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Wanneer extrne koppeling geopend" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "&Altijd in externe browser openen" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Voor bevestiging vragen" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Koppeling niet openen" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Wanneer koppeling naar een nieuw CHM-bestand aangeklikt" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Nieuw CHM-bestand altijd openen" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Nieuw CHM-bestand niet openen" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Versiespecifieke instellingen" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE-versie-instellingen" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Om HTML-inhoud te weergeven, gebruik" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-gebaseerde widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-gebaseerde widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (vereist Qt 4.4 of hoger)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Beveiliging voor KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "&Verversen inschakelen" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "&Java inschakelen" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Plugins inschakelen" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Java&Script inschakelen" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Geavanceerd" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Mogelijkheid om HTML-broncode te weergeven, gebruikt" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Ingebouwde HTML-broncodeweergave" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xtern programma, hieronder opgegeven" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Extern programma:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Bladeren" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Overig" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" "Gebruik recht-naar-links tekstvolgorde (Arabische en Hebreeuwse opmaak)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, fuzzy, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "Decodering voor KHTMLPart- en WebKitbrowsers automatisch detecteren" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "KchmViewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Instellingen" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "&Bladwijzers" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "B&estand" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "Be&werken" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "&Beeld" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Vensters" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "hoofdwerkbalk" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "navigatiewerkbalk" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "actiewerkbalk" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Afdrukken..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Afdrukken" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Huidige pagina afdrukken" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Drukt de momenteel geopnde pagina af." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "A&fsluiten" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Afsluiten" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Sluit het programma af." #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "K&opiren" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Kopiëren" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Kopieert geselecteerde inhoud naar het klembord" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "&Alles selecteren" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Plakken" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Selecteert alle inhoud van het document" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "&Zoeken..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Zoeken" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Tekst zoeken in de momenteel geopende pagina" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Schakelt de 'In pagina zoeken'-modus in" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "CHM-inhoud &uitpakken..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Pakt de CHM-inhoud uit naar een map" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Pakt de CHM-archiefinhoud uit naar een map. Alle bestanden worden uitgepakt." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "&Programmainstellingen..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "De programmainstellingen wijzigen" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Bladwijzer toevoegen" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Voegt een bladwijzer voor de momenteel geopende pagina toe" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Voegt een bladwijzer voor de momenteel geopende pagina toe. Onthoudt de " "geopende pagina en scrollpositie. Bladwijzers zijn beschikbaar via het " "Bladwijzers-menu of -tabblad." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "Lettergrootte ver&groten" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Vergroot de lettergrootte" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" "Vergroot de lettergrootte van het document. De nieuwe lettergrootte wordt " "opgeslagen." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "Lettergrootte ver&kleinen" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Verkleint de lettergrootte" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" "Verkleint de lettergrootte van het document. De nieuwe lettergrootte wordt " "opgeslagen." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "HTML-bron &weergeven" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Weergeef de HTML-bron van de huidige pagina" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Weergeeft de HTML-bron van de momenteel geopende pagina" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Volledig &scherm inschakelen" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Schakelt volledig scherm in of uit" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "&Zijvenster inschakelen" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Weergeeft of verbergt zijvenster (met de tabs Inhoudsopgave, Index, Zoeken " "en Bladwijzers)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "In &inhoudsopgave opzoeken" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Zoek de momenteel geopende pagina op in de inhoudsopgave" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" "Als de momenteel geopende pagina aanwezig is in de inhoudsopgave, zoek hem " "dan daar op." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "De&codering instellen" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Wijzigt de huidige documentdecodering" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Openen..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Een CHM-bestand openen" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Opent een nieuw CHM-bestand" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Terug" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Terug bladeren" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Blader terug in de bladergeschiedenis" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Vooruit" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Vooruit bladeren" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Blader vooruit in de bladergeschiedenis" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Home" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Ga naar de homepage" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "ga naar de homepage, die opgegeven is in het document." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Vorige pagina van Inhoudsopgave" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Vorige pagina van TOC" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Ga naar de vorige pagina van de Inhoudsopgave" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Ga naar de vorige pagina in de Inhoudsopgave

Sneltoets: Ctrl" "+Linker pijltoets" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Volgende pagina van Inhoudsopgave" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Volgende pagina van TOC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Ga naar de vorige pagina van de Inhoudsopgave" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" "Ga naar de volgende pagina in de Inhoudsopgave

Sneltoets: " "Ctrl+Rechter pijltoets" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "Venster &sluiten" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Sluit het huidige venster" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Sluit het momenteel geopende venster" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Sander Pientka" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "cumulus0007@gmail.com" #~ msgid "Multiple topics" #~ msgstr "Meerdere onderwerpen" #~ msgid "Please select the topic to open:" #~ msgstr "Kies een te openen onderwerp:" #~ msgid "&Add" #~ msgstr "&Toevoegen" #~ msgid "Edi&t" #~ msgstr "&Bewerken" #~ msgid "&Del" #~ msgstr "&Verwijderen" #~ msgid "Form1" #~ msgstr "Form1" #~ msgid "1" #~ msgstr "1" #~ msgid "Type in word(s) to search for:" #~ msgstr "Voer te zoeken woorden in:" #~ msgid "
Help" #~ msgstr "Help" #~ msgid "&Go" #~ msgstr "&Zoeken" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "Location" #~ msgstr "Locatie" #~ msgid "TabbedBrowser" #~ msgstr "TabbedBrowser" #~ msgid "Untitled" #~ msgstr "Naamloos" #~ msgid "Previous" #~ msgstr "Vorige" #~ msgid "Next" #~ msgstr "Volgende" #~ msgid "Case Sensitive" #~ msgstr "Hoofdlettergevoelig" #~ msgid "Whole words" #~ msgstr "Hele woorden" #, fuzzy #~ msgid " Search wrapped" #~ msgstr " Search wrapped" kchmviewer-5.3/po/kchmviewer_fr.po0000644000175000001440000010276711513542712016064 0ustar timusers# translation of kchmviewer.po to Fr_fr # This file is put in the public domain. # # Stephan Bellegy , 2006. # Sun Wukong , 2006. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-08-18 00:31+0200\n" "Last-Translator: Sun Wukong \n" "Language-Team: Fr_fr \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - ajouter un marque-page" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Entrer le nom du marque-page :" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - modifier le nom du marque-page" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Ajouter un Marque-&Page" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - Échec lors de la lecture du fichier chm %1" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Impossible de lire le fichier chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Impossible de lire le fichier chm %1 " #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - un lien externe a été cliqué - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Un clic sur un lien externe %1 lancera l'ouverture du navigateur externe.\n" "\n" "Voulez-vous continuer ?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Oui" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Non" # Stéphan Bellegy : wrong spelling for JavaScript #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - un lien sur un JavaScript a été cliqué" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Vous avez cliqué sur un lien JavaScript.\n" "Pour des raisons de sécurité, les URL JavaScript sont désactivées dans les " "fichiers CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - un lien sur un nouveau fichier CHM a été cliqué" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Vous avez cliqué sur un lien pointant sur un nouveau fichier CHM %1.\n" "Le fichier actuel sera fermé.\n" "\n" "Voulez-vous continuer ?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Chercher" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manuel d'aide compressé (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Ouvrir un fichier " #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manuel d'aide compressé (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Chargement interrompu" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Choisir un dossier pour y sauvegarder le contenu du fichier CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extraction du contenu du fichier CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraction des fichiers..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Annuler" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "" "Impossible de trouver le sujet sélectionné dans le contenu de la fenêtre" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "A propos de %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Supprimer" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Annuler" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "A propos de &Qt" #: kchmmainwindow.cpp:1340 #, fuzzy msgid "Ctrl+1" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1346 #, fuzzy msgid "Ctrl+2" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1352 #, fuzzy msgid "Ctrl+3" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1358 #, fuzzy msgid "Ctrl+4" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 #, fuzzy msgid "Ctrl+Right" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1386 #, fuzzy msgid "Ctrl+Left" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "La recherche renvoie %1 occurrence(s)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "La recherche ne renvoie pas de résultat" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "La recherche a échoué" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Chercher dans la page" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+D" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Impression interrompue" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Impression interrompue" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Visionneur de fichiers CHM" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Visionneur de fichiers CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Paramétrage de KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportement général" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Si aucun argument n'a été spécifié au démarrage" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Ouvrir la boîte de dialogue «Ouvrir un fichier CHM»" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Ouvrir le &dernier fichier CHM s'il existe" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historique" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Mémoriser l'historique pour" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "les derniers fichiers" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Se rappelle les informations concernant les fichiers précédemment ouverts. " "Se rappelle la dernière page consultée, la dernière recherche effectuée, la " "taille de la police, les marque-pages, etc." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Se rapp&eler les informations complémentaires pour l'historique" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Paramètres de sécurité CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quand un lien externe est cliqué" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Toujours l'ouvrir dans un navigateur e&xterne" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Demander la confirmation" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Ne pas ouvrir le lien" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Lorsqu'un lien sur un fichier externe est cliqué " #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Toujours ouvrir un nouveau fichier CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Ne pas ouvrir un nouveau fichier CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Paramètres spécifiques à la version" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Paramètres spécifiques à la version de KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Pour afficher le contenu HTML, utiliser" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "un widget basé sur &QTtextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "un widget basé sur &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Sécurité pour KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Permettre le &rafraîchissement" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Activer le support &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Activer les &greffons" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+G" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Activer le support Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Paramétrage avancé" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Pour voir le source code HTML, utiliser : " #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "le visionneur intégré de code source HTML" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "Un programme e&xterne, spécifié ci-dessous" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programme externe :" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Ajouter un Marque-&Page" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titre" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Fenêtre" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Comportement général" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigation" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Imprimer un fichier" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, fuzzy, no-c-format msgid "Ctrl+P" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, fuzzy, no-c-format msgid "Ctrl+Q" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, fuzzy, no-c-format msgid "Ctrl+C" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "Tout &Sélectionner" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, fuzzy, no-c-format msgid "Ctrl+V" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, fuzzy, no-c-format msgid "Ctrl+F" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtraire le contenu du fichier CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extraction du contenu du fichier CHM" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Modifier les paramètres..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Modifier les paramètres..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Ajouter un marque-page" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, fuzzy, no-c-format msgid "Ctrl+B" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Augmenter la taille de la police de caractères" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Augmenter la taille de la police de caractères" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, fuzzy, no-c-format msgid "Ctrl++" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Diminuer la taille de la police de caractères" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Diminuer la taille de la police de caractères" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, fuzzy, no-c-format msgid "Ctrl+-" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Visionner le code source HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Pour voir le source code HTML, utiliser : " #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, fuzzy, no-c-format msgid "Ctrl+U" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "Pl&ein Écran" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Chercher dans la fenêtre des contenus" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Chercher ce sujet dans le contenu de la fenêtre" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, fuzzy, no-c-format msgid "Ctrl+" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Définir le &Codepage" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Ouvrir un fichier " #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Toujours ouvrir un nouveau fichier CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigation" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Revenir en arrière dans l'historique" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigation" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Avancer dans l'historique" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigation" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "Cliquer sur ce bouton pour aller à la page précédente de la Table des " "Matières." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Page précédente de la TdM" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "Cliquer sur ce bouton pour aller à la page précédente de la Table des " "Matières." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Page suivante de la TdM" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Page suivante de la TdM" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "Cliquer sur ce bouton pour aller à la page suivante de la Table des Matières." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Fenêtre" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "A&fficher la fenêtre des contenus" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, fuzzy, no-c-format msgid "Ctrl+W" msgstr "Contrôle+Entrée" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Paramètres spécifiques à la version de Qt" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Entrer le chemin du navigateur qui sera utilisé pour afficher les liens " #~ "externes. Un symbole %s sera remplacé par l'URL cliquée." #, fuzzy #~ msgid "Search engine to use" #~ msgstr "La recherche ne renvoie pas de résultat" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "" #~ "_: NAME OF TRANSLATORS\n" #~ "Stéphan BELLEGY" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "stephan@bellegy.org" #~ msgid "&Add" #~ msgstr "&Ajouter" #~ msgid "Topics" #~ msgstr "Thèmes" #~ msgid "Please select one of the topics below:" #~ msgstr "Choisissez l'un des thèmes suivants :" #~ msgid "&Ok" #~ msgstr "&Ok" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Ce programme est distribué selon les termes de la licence GNU GPL.\n" #~ "\n" #~ "Essayez notre autre projet, www.transientmail.com - un distributeur " #~ "d'adresses électroniques temporaires qui expirent automatiquement." #~ msgid "File Operations" #~ msgstr "Opérations sur les fichiers" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Cliquer sur ce bouton pour ouvrir un fichier CHM existant." #~ msgid "Click this button to print the current page" #~ msgstr "Cliquer sur ce bouton pour imprimer la page courante" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Cliquer sur ce bouton pour extraire le contenu entier du fichier CHM dans " #~ "un dossier" #~ msgid "&Recent files" #~ msgstr "Fichiers &récents" #~ msgid "What's &This" #~ msgstr "Qu'es&t-ce que c'est" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Cliquer sur ce bouton pour revenir en arrière dans l'historique" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Cliquer sur ce bouton pour avancer dans l'historique" #~ msgid "Go to the home page" #~ msgstr "Aller à la page d'accueil" #~ msgid "Click this button to move to the home page" #~ msgstr "Cliquer sur ce bouton pour aller à la page d'accueil" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Saisir ici le texte à rechercher dans la page courante." #~ msgid "Previous search result" #~ msgstr "Résultats de la recherche antérieure" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver les résultats de la recherche " #~ "antérieure." #~ msgid "Next search result" #~ msgstr "Résultats de la recherche suivante" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver les résultats de la recherche suivante." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver le sujet actuel dans le contenu de la " #~ "fenêtre et l'ouvrir." #~ msgid "Click this button to increase the font size." #~ msgstr "" #~ "Cliquer sur ce bouton pour augmenter la taille de la police de caractères." #~ msgid "Click this button to decrease the font size." #~ msgstr "" #~ "Cliquer sur ce bouton pour diminuer la taille de la police de caractères." #~ msgid "View HTML source" #~ msgstr "Visualiser le code source HTML" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Cliquer sur ce bouton pour ouvrir une nouvelle fenêtre contenant le code " #~ "source HTML de la page." #~ msgid "Add to bookmarks" #~ msgstr "Ajouter aux marque-pages" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "Cliquer sur ce bouton pour ajouter un marque-page." #~ msgid "&Increase font" #~ msgstr "&Augmenter la taille de la police" #~ msgid "&Decrease font" #~ msgstr "&Diminuer la taille de la police" #~ msgid "&Set language" #~ msgstr "Définir le &Langage" #~ msgid "Type in word(s) to search for:" #~ msgstr "Entrer un/des mot(s) à rechercher :" #~ msgid "Location" #~ msgstr "Position" #~ msgid "How to use search" #~ msgstr "Comment effectuer une recherche" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "L'interrogation peut contenir quelques préfixes.\n" #~ "Un ensemble de mots entre côtes signifie que l'on recherche une phrase " #~ "exacte.\n" #~ "Un mot précédé du signe moins (-) indique que ce mot doit être absent du " #~ "résultat.\n" #~ "Un mot précédé du signe plus (+) ou précédé d'aucun signe indique qu'il " #~ "doit être présent dans le résultat.\n" #~ "\n" #~ "Seuls les chiffres et les lettres sont indexés pour la recherche.\n" #~ "Il est impossible de rechercher d'autres caractères que les chiffres, les " #~ "lettres et le souligné (_). Les autres caractères seront exclus de la " #~ "recherche.\n" #~ "Par exemple, une recherche sur 'C' donnera les mêmes résultats qu'une " #~ "recherche sur 'C++'." #, fuzzy #~ msgid "Search is not available" #~ msgstr "La recherche a échoué" #~ msgid "Printing (page %1)..." #~ msgstr "Impression (page %1)..." #~ msgid "Printing completed" #~ msgstr "Impression terminée" #~ msgid "%1 - could not print" #~ msgstr "%1 - impossible d'imprimer" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Impossible d'imprimer.\n" #~ "La librairie Qt de votre système a été compilée sans la capacité à " #~ "imprimer" #~ msgid "Match similar words" #~ msgstr "Ressemble aux mots " #~ msgid "Shift+Enter" #~ msgstr "Majuscule+Entrée" kchmviewer-5.3/po/kchmviewer_zh_TW.po0000644000175000001440000007505111364464257016516 0ustar timusers# translation of zh_CN.po to # translation of kchmviewer.po to # This file is put in the public domain. # # 林俊 , 2006. msgid "" msgstr "" "Project-Id-Version: zh_TW\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-05-07 20:30-0400\n" "Last-Translator: 呂健 \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - 添加書籤" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "輸入書籤的名稱" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - 編輯書籤名稱" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "添加當前頁面為書籤(&B)" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - 載入CHM檔案失敗" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "無法載入CHM檔案%1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "無法載入檔案%1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - 點擊遠程鏈接 - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1將使用外部程式來打開遠程鏈接。 \n" "\n" "你要繼續嗎?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "是(&Y)" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "否(&N)" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - 點擊JavaScript鏈接" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "你點擊了JavaScript鏈接。\n" "為了了避免安全問題,在CHM檔案中不啟用JavaScript URLs支持。" #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - 點擊指向新的CHM檔案的鏈接。" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "你點擊了指向新的CHM檔案的鏈接%1。\n" "現在打開的檔案將被關閉。\n" "\n" "你要繼續嗎?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "索引" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "搜索" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|壓縮的幫助手冊 (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "打開檔案" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "壓縮的幫助手冊 (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "取消載入" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "選擇目錄來保存CHM目錄" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "提取CHM目錄" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "提取檔案..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "取消" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "無法在目錄窗口定位打開的主題" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "關於%1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "刪除(&D)" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "取消" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "關於QT(&Q)" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "搜索返回 %1 個結果" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "搜索沒有返回結果" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "搜索失敗" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "在頁面中搜索" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "列印被取消" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "列印被取消" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 #, fuzzy msgid "Open Link in a new tab\tShift+LMB" msgstr "在新的書籤頁打開此鏈接(&O)" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 #, fuzzy msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "在後臺書籤也打開此鏈接(&O)" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM檔案查看器" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM檔案查看器" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer設置" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "通用行為" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "如果載入時沒有參數" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "打開'打開CHM檔案'對話框" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "如果存在,打開最後使用的CHM檔案(&L)" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "歷史" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "保存歷史信息" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "最近使用的檔案" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "記錄已經打開的檔案的相關信息。 記錄最後打開的頁面,搜索記錄,字體大小,書籤等" "信息。" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "記錄歷史檔案額外信息(&E)" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM 安全設置" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "當點擊外部鏈接時" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "總在外部瀏覽器中打開(&Y)" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "請求确認" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "不打開鏈接" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "當點擊指向新的CHM檔案的鏈接時" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "總打開新的CHM檔案" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "不打開新的CHM檔案" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "版本指定設置" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE 版本設置" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "要顯示HTML目錄,使用" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "基於QTextBrowser的組件(&Q)" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "基於KHTMLPart的組件(&K)" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart 安全性" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "啟用刷新(&R)" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "啟用Java(&J)" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "啟用插件(&P)" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "啟用JavaScript(&S)" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "高級" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "查看HTML源碼使用" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "內建HTML源碼查看器" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "外部程式,在下面特別指定(&X)" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+x" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "外部程式" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "添加當前頁面為書籤(&B)" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "標題" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "通用行為" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "導航" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "列印檔案" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "選擇全部(&S)" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "提取CHM目錄(&X)" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "提取CHM目錄" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "更改設置(&C)" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "更改設置(&C)" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "添加書籤(&A)" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "增大字體大小" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "增大字體大小" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "縮小字體大小" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "縮小字體大小" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "查看HTML源碼(&V)" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "查看HTML源碼使用" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "全屏(&F)" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "目錄窗口&定位(&L)" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "在錄窗口定位主題" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "設置編碼(&S)" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "打開檔案" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "總打開新的CHM檔案" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "導航" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "在歷史中後退" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "導航" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "在歷史中前進" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "導航" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "點擊此按鈕前往目錄錶格中的前一頁" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "目錄錶格的前一頁" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "點擊此按鈕前往目錄錶格中的前一頁" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "目錄錶格的後一頁" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "目錄錶格的後一頁" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "點擊此按鈕前往目錄錶格的後一頁" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "顯示目錄窗口(&S)" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "QT 版本設置" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "輸入打開外部鏈接的瀏覽器程式的路徑。%s 符號將被點擊的URL替換。" #, fuzzy #~ msgid "Search engine to use" #~ msgstr "搜索没有返回結果" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "呂健" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "demonlinjun@163.com" #~ msgid "&Add" #~ msgstr "添加(&A)" #~ msgid "Topics" #~ msgstr "主題" #~ msgid "Please select one of the topics below:" #~ msgstr "請在下面選取一個主題" #~ msgid "&Ok" #~ msgstr "确定(&O)" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 版本 %2\n" #~ "\n" #~ "版權所有 (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "在GNU GPL授權方式下發行。\n" #~ "\n" #~ "請嚐試我們的另一個項目,www.transientmail.com - 臨時 E-Mail地址。" #~ msgid "File Operations" #~ msgstr "檔案操作" #~ msgid "Click this button to open an existing chm file." #~ msgstr "點擊此按鈕打開存在的CHM檔案" #~ msgid "Click this button to print the current page" #~ msgstr "點擊此按鈕列印當前頁面" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "點擊此按鈕提取整個CHM檔案的目錄到指定的目錄。" #~ msgid "&Recent files" #~ msgstr "最近打開的檔案(&R)" #~ msgid "What's &This" #~ msgstr "這是什麼(&T)" #~ msgid "Click this button to move backward in browser history" #~ msgstr "點擊此按鈕在瀏覽歷史中後退" #~ msgid "Click this button to move forward in browser history" #~ msgstr "點擊此按鈕在瀏覽歷史中前進" #~ msgid "Go to the home page" #~ msgstr "回到首頁" #~ msgid "Click this button to move to the home page" #~ msgstr "點擊此按钮回到主頁" #~ msgid "Enter here the text to search in the current page." #~ msgstr "輸入要在當前頁面搜索的内容" #~ msgid "Previous search result" #~ msgstr "前一個搜索的結果" #~ msgid "Click this button to find previous search result." #~ msgstr "點擊此按钮查看前一個搜索的結果" #~ msgid "Next search result" #~ msgstr "下一個搜索的結果" #~ msgid "Click this button to find next search result." #~ msgstr "點擊此按钮查看下一個搜索的結果" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "點擊此按鈕在目錄窗口定位當前主題" #~ msgid "Click this button to increase the font size." #~ msgstr "點擊此按鈕增加字體大小" #~ msgid "Click this button to decrease the font size." #~ msgstr "點擊此按鈕縮小字體大小" #~ msgid "View HTML source" #~ msgstr "查看HTML源碼" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "點擊此按鈕在独立窗口查看當前頁面的HTML源碼" #~ msgid "Add to bookmarks" #~ msgstr "添加到書籤" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "點擊此按鈕添加當前頁面到書籤列錶" #~ msgid "&Increase font" #~ msgstr "增大字體(&I)" #~ msgid "&Decrease font" #~ msgstr "縮小字體(&D)" #~ msgid "&Set language" #~ msgstr "設置語言(&S)" #~ msgid "Type in word(s) to search for:" #~ msgstr "輸入要搜索的詞" #~ msgid "Location" #~ msgstr "位置" #~ msgid "How to use search" #~ msgstr "如何使用搜索" #, fuzzy #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "搜索查詢可以包含一些技巧。\n" #~ "在引號中包含的内容意味着你要精确的搜索。\n" #~ "带有減小的字錶示在搜索結果中不應包含这個内容。\n" #~ "带有加號或什麼也不带錶示在搜索結果中應當包含这個内容。\n" #~ "\n" #~ "注意只有字母和數字被索引。\n" #~ "你不能搜索符號,这些符耗将在搜索查詢中被移除。\n" #~ "例如,搜索 'C' 和搜索 'C++' ,将返回同样的結果." #, fuzzy #~ msgid "Search is not available" #~ msgstr "搜索失敗" #~ msgid "Printing (page %1)..." #~ msgstr "正在列印 (第 %1 頁)" #~ msgid "Printing completed" #~ msgstr "列印成功" #~ msgid "%1 - could not print" #~ msgstr "%1 - 不能列印" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "不能列印。\n" #~ "你編譯QT没有加入列印支持" #~ msgid "Match similar words" #~ msgstr "匹配相似詞" kchmviewer-5.3/po/kchmviewer_it.po0000644000175000001440000010060711513542712016060 0ustar timusers# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2007-09-09 23:11+0100\n" "Last-Translator: Emilio Scalise \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - Aggiungi un bookmark" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Inserisci il nome per il bookmark:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - modifica il nome del bookmark" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Aggiungi la pagina ai &Bookmark" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - caricamento del file chm fallito" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Non riesco a caricare il file chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Non posso caricare il file %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - link remoto cliccato - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Il link remoto %1 causera' l'esecuzione di un programma esterno.\n" "\n" "Vuoi continuare?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 #, fuzzy msgid "&Yes" msgstr "&Si" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&No" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - link JavaScript cliccato" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Hai cliccato un link JavaScript.\n" " Per prevenire potenziali problemi di sicurezza le URL JavaScript sono " "disabilitate nei file CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - link ad un nuovo file chm cliccato" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Hai cliccato un link, che punta ad un altro file CHM %1.\n" "Il file corrente sara' chiuso.\n" "Vuoi continuare?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Indice" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Ricerca" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manuale Help Compresso (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Apri file" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manuale Help Compresso (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Caricamento annullato" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Scegli una directory per salvare il contenuto del CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Estrazione del contenuto del CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Estrazione dei file in corso..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Annulla" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Non posso trovare l'argomento aperto nella finestra dei contenuti" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Informazioni su %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "Cancella" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Annulla" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Informazioni su &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "La ricerca ha restituito %1 risultato(i)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "La ricerca non ha restituito risultati" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Ricerca fallita" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 #, fuzzy msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Il cambiamento delle impostazioni di visualizzazione o del motore di ricerca " "usato\n" "richiede il restart dell'applicazione per avere effetto." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Trova nella pagina" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Stampa annullata" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Stampa annullata" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "visualizzatore di file CHM" #: main.cpp:48 #, fuzzy msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' specifica la query di ricerca da cercarem e seleziona il " "primo valore se trovato" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' specifica la prima parola da trovare nell'indice, e la " "seleziona se trovata" #: main.cpp:50 #, fuzzy msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--sindex ' specifica la prima parola da trovare nell'indice, e la " "seleziona se trovata" #: main.cpp:56 msgid "CHM file viewer" msgstr "visualizzatore di file CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Settaggi di KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportamento Generale" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Se nessun parametro è stato passato all'avvio" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Arpi la finestra di dialogo 'Apri file CHM'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, fuzzy, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Apri il l'u<imo CHM file usato, se esiste" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Cronologia" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Salva la cronologia per" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "ultimi files" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Ricorda le informazioni riguardo i files che sono stati aperti. Ricorda " "l'ultima pagina visualizzata, la cronologia delle ricerche, dimensione dei " "font ecc." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, fuzzy, no-c-format msgid "R&emember extra information for history files" msgstr "Ricorda informazioni aggiuntiv&e per i files della cronologia" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Settaggi di sicurezza CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quando è cliccato un link esterno" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, fuzzy, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Apri sempre in un browser esterno" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Chiedi conferma" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Non aprire il link" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Quando si clicca un link che punta ad un file CHM aperto" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Apri sempre un nuovo file CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Non aprire un nuovo file CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Settaggi specifici della versione" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Settaggi della versione KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Per visualizzare contenuto HTML, usa" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "Componente basato su &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "Componente basato su &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Sicurezza KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Abilita &refresh" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Abilita &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Abilita $plugins" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Abilita Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avanzate" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Il comando 'vedi sorgente' usa" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "visualizzatore di sorgente HTML incorporato" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, fuzzy, no-c-format msgid "E&xternal program, specified below" msgstr "Programma esterno, specificato qui sotto" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programma esterno:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Aggiungi la pagina ai &Bookmark" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titolo" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "Finestra" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Comportamento Generale" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigazione" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Stampa file" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Scegli tutto" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "Estrai contenuto CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Estrazione del contenuto del CHM" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Cambia settaggi..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Cambia settaggi..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Aggiungi bookmark" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Aumenta la dimensione del font" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Aumenta la dimensione del font" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Diminuisci la dimensione del font" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Diminuisci la dimensione del font" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Vedi il sorgente HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Il comando 'vedi sorgente' usa" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "Schermo intero" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "Trova nella pagina dei contenuti" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Trova questo argomento nella finestra dei contenuti" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Imposta codifica" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Apri file" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Apri sempre un nuovo file CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigazione" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Vai indietro nella cronologia" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigazione" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Vai avanti nella cronologia" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigazione" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "Clicca questo bottone per andare alla pagina precedente nell'indice." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Pagina precedente nell'indice" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Clicca questo bottone per andare alla pagina precedente nell'indice." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Pagina successiva nell'indice" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Pagina successiva nell'indice" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Clicca questo bottone per andare alla pagina successiva nell'indice." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "Finestra" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Visualizza la finestra dei contenuti" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Settaggi della versione Qt" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Inserisci il path del programma che sarà usato come browser per i link " #~ "esterni. Il simbolo %s sarà sostituito dalla URL cliccata." #~ msgid "Search engine to use" #~ msgstr "Motore di ricerca da utilizzare:" #~ msgid "" #~ "Use the search based on internal CHM index. This engine cannot search for " #~ "any symbols except underscode, does not support multibyte languages, and " #~ "is not always available." #~ msgstr "" #~ "Usa il motore di ricerca basato sull'indice interno del file CHM. Questo " #~ "motore non permette di cercare simboli a parte dell'underscore, non " #~ "supporta i linguaggi multibyte, e non è sempre disponibile." #~ msgid "" #~ "Use new kchmviewer internal search engine (recommended). This engine " #~ "indexes symbols, so it is possible to search for special symbols (like \"C" #~ "++\"). All languages are supported. The index will be generated before " #~ "the first search." #~ msgstr "" #~ "Usa il nuovo motore di ricerca interno di kchviewer (raccomandato). " #~ "Questo motore indicizza tutti i simboli, affinchè sia possibile " #~ "ricercarli (es. \"C++\"). Tutte le lingue sono supportate. L'indice sarà " #~ "generato alla prima ricerca." #, fuzzy #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #, fuzzy #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgid "&Add" #~ msgstr "&Aggiungi" #~ msgid "Topics" #~ msgstr "Argomenti" #~ msgid "Please select one of the topics below:" #~ msgstr "Per favore scegli uno degli argomenti seguenti:" #~ msgid "&Ok" #~ msgstr "&Ok" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Sotto licenza GNU GPL.\n" #~ "\n" #~ "Per favore visita anche il mio progetto, http://www.transientmail.com - " #~ "indirizzi email temporanei, che scadono automaticamente." #~ msgid "File Operations" #~ msgstr "Operazioni sui file" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Clicca questo bottone per aprire un file chm esistente." #~ msgid "Click this button to print the current page" #~ msgstr "Clicca per stampare la pagina corrente" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Clicca questo bottone per estrarre tutto il contenuto del file CHM in una " #~ "directory specifica" #~ msgid "&Recent files" #~ msgstr "File &Recenti" #, fuzzy #~ msgid "What's &This" #~ msgstr "Che cos'è?" #~ msgid "Click this button to move backward in browser history" #~ msgstr "" #~ "Clicca questo bottone per tornare indietro nella cronologia del browser" #~ msgid "Click this button to move forward in browser history" #~ msgstr "" #~ "Clicca questo bottone per andare avanti nella cronologia del browser" #~ msgid "Go to the home page" #~ msgstr "Vai alla pagina iniziale." #~ msgid "Click this button to move to the home page" #~ msgstr "Clicca questo bottone per andare alla pagina iniziale" #, fuzzy #~ msgid "A closing quote character is missing." #~ msgstr "Il carattere di chiusura virgolette è mancante." #~ msgid "Enter here the text to search in the current page." #~ msgstr "Immetti qui il testo da cercare nella pagina corrente." #~ msgid "Previous search result" #~ msgstr "Risultato della ricerca precedente" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Clicca questo bottone per andare al risultato della ricerca precedente." #~ msgid "Next search result" #~ msgstr "Prossimo risultato della ricerca" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Clicca questo bottone per trovare il prossimo risultato della ricerca." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Clicca questo bottone per trovare l'argomento corrente nella finestra dei " #~ "contenuti e aprirlo." #~ msgid "Click this button to increase the font size." #~ msgstr "Clicca questo bottone per aumentare la dimensione del font." #~ msgid "Click this button to decrease the font size." #~ msgstr "Clicca questo bottone per diminuire la dimensione del font." #~ msgid "View HTML source" #~ msgstr "Vedi il sorgente HTML" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Clicca questo bottone per aprire una finestra separata con il sorgente " #~ "della pagina HTML." #~ msgid "Add to bookmarks" #~ msgstr "Aggiungi ai bookmarks" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Clicca questo bottone per aggiungere la pagina corrente alla lista dei " #~ "bookmarks." #, fuzzy #~ msgid "&Increase font" #~ msgstr "Aumenta font" #, fuzzy #~ msgid "&Decrease font" #~ msgstr "Diminuisci font" #, fuzzy #~ msgid "&Set language" #~ msgstr "Imposta lingua" #~ msgid "Type in word(s) to search for:" #~ msgstr "Scrivi delle parole da cercare:" #~ msgid "
Help" #~ msgstr "Aiuto" #~ msgid "Go" #~ msgstr "Vai" #~ msgid "Location" #~ msgstr "Posizione" #~ msgid "How to use search" #~ msgstr "Come usare la ricerca" #~ msgid "Search is not available" #~ msgstr "La ricerca non è disponibile" #~ msgid "Printing (page %1)..." #~ msgstr "Stampa in corso (pagina %1)..." #~ msgid "Printing completed" #~ msgstr "Stampa completata" #~ msgid "%1 - could not print" #~ msgstr "%1 - non posso stampare" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Non posso stampare.\n" #~ "La tua libreria Qt e' stata compilata senza supporto alla stampa" kchmviewer-5.3/po/kchmviewer_uk.po0000644000175000001440000010254611513542334016067 0ustar timusers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Yatsenko Alexandr , 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2010-06-23 19:03+0300\n" "Last-Translator: Yatsenko Alexandr \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - додати закладку" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Уведіть назву для цієї закладки:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 — зміна назви закладки" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Закладки" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 version %2

Авторські права © George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Розповсюджується згідно ліцензії GNU GPL." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Визначено кодування файлу: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 — помилка при завантаженні файлу chm" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Неможливо завантажити файл chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Не вдалося завантажити файл %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 — вибрано зовнішнє посилання - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Зовнішнє посилання %1 буде відкрито у зовнішній програмі.\n" "\n" "Бажаєте продовжити?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Так" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Ні" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - обране посилання запустить JavsScript" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Ви клацнули посилання на JavaScript \n" "Для запобігання виникненню загроз JavaScript URL заборонено у файлах CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - натиснене посилання на інший файл CHM." #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Ви натиснули на посилання, що відкриває інший файл CHM %1.\n" "Поточний файл буде закрито.\n" "\n" "Бажаєте продовжити?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Зміст" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Індекс" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Пошук" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Стиснений файл довідки - Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Відкрити файл chm" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Стиснений файл довідки - Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Завантаження перервано" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Оберіть теку для зберігання вмісту CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Витягування вмісту CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Витягування файлів..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Перервати" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Неможливо знайти відкриту тему у вікні змісту" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Про %1" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Довідка" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Про програму" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Про &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Стрілка вправо" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Стрілка вліво" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Знайдено %1 результат(ів)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Нічого не знайдено" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Помилка пошуку" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Покращений механізм пошуку дозволяє вам шукати слово, символ " "чи фразу, що є набором слів, поміщених в лапки. Буде показано " "лише ті документи, що відповідають усім умовам пошуку. Префікси не потрібні. " "

На відміну від пошуку MS CHM, мій покращений пошуковий рушій індексує " "все, " "навіть спеціальні символи. " "Тому стало можливим знаходити щось на зразок $q = new ChmFile();." "Також повністю підтримується Unicode, що означає можливість пошуку в " "документах різними мовами.

" "Якщо ви хочете знайти лапки, використайте позначення лапок замість них. " "Рушій розпізнає лапки та позначення лапок як один символ, що дозволяє " "використовувати їх у пошукових фразах." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Читання словника..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Створення пошукового індексу..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "Щоб зміни набули чинності, слід перезапустити програму" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Виконувані файли" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Оберіть виконуваний файл редактора" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Виконувані файли (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Закрити поточну сторінку" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Додати сторінку" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Друк перервано" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Друк завершено" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Відкрити посилання у новій вкладці\tShift+ЛКМ" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Відкрити посилання у фоновій вкладці\tCtrl+ЛКМ" #: main.cpp:45 msgid "Perform auto testing" msgstr "Виконати автоматичне тестування" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Виконати швидке автоматичне тестування" #: main.cpp:47 msgid "A CHM file to show" msgstr "Файл CHM для показу" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search <запит>' задає запит для пошуку та обирає " "перший знайдений результат" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex <слово>' задає слово для пошуку в індексі та показує, якщо знайде" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' задає слово(а) для пошуку в таблиці змісту, та показує " "якщо " "є знайдені. Допускаються маски." #: main.cpp:56 msgid "CHM file viewer" msgstr "Переглядач файлів довідки CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "© George Yunaev, gyunaev@ulduzsoft.com, 2004—2008" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Будь ласка, повідомляйте про помилки на kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Налаштування KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Загальна поведінка" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Якщо не задано параметрів при завантаженні" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Показати вікно відкривання CHM файлів" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Відкрити &попередній файл CHM, якщо доступний." #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Журнал" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Зберегти історію про" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "останні файли" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Запам'ятовує інформацію про файли, що були відкриті. Запам'ятовує останню " "відкриту сторінку, історію пошуку, розмір шрифту, закладки та інше." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Зберігати додатков&у інформацію до файлів журналу" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Налаштування безпеки CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Коли клацнуто зовнішнє посилання" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Завжди відкривати в зов&нішньому браузері" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Запитати підтвердження" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Не відкривати посилання" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Коли обрано посилання на інший файл CHM" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Завжди відкривати новий файл CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Не відкривати новий файл CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Налаштування даної версії" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Налаштування даної версії KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Використовувати для показу вмісту HTML" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "віджет з &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "віджет з &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (потребує Qt 4.4 або вище)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "безпека KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Дозволити о&новлення" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Увімкнути &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Увімкнути &додатки" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Увімкнути Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Додатково" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Переглядати використані команди HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Вбудований переглядач HTML коду" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "&Зовнішня програма, вказана нижче" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Зовнішня програма:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Огляд" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Інше" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "Використовувати напрямок справа вліво (Арабська мова та Іврит)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" "Автоматично визначати кодування для браузерів KHTMLPart та WebKit " "(не рекомендується)" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "kchmviewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Налаштування" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "З&акладки" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "&Файл" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "&Редагування" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "Пе&регляд" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Вікно" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "загальна панель інструментів" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "панель навігації" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "панель дій" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Друкувати..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Друкувати" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Друкувати поточну сторінку" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Друкує поточну відкриту сторінку." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "В&ийти" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Вихід" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Закриває програму" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "К&опіювати" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Копіювати" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Копіює виділений фрагмент до кишені" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "В&иділити все" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Вставити" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Виділяє весь вміст документа" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "Зн&айти..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Знайти" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Шукати текст по поточній відкритій сторінці" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Показувати знайдене у вигляді сторінки" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "&Витягти вміст CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Витягти вміст CHM до теки" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Витягує вміст CHM архіву до вказаної теки. Буде витягнуто " "всі файли." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "&Налаштування програми..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "Змінити налаштування програми" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Додати закладку" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Додає закладку на поточну відкриту сторінку" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Додає закладку на поточну відкриту сторінку. Запам'ятовує відкриту сторінку " "та позицію на екрані. Закладки доступні через меню закладок чи вкладку." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "Збільшити розмір &шрифту" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Збільшити розмір шрифту" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "Збільшує розмір шрифту в документі. Новий розмір буде збережено." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "&Зменшити розмір шрифту" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Зменшити розмір шрифту" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "Зменшує розмір шрифту в документі. Новий розмір буде збережено." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Переглянути джерело HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Переглянути джерело HTML для поточної сторінки" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Показує джерело HTML поточної відкритої сторінки" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Увімкнути повноекр&анний режим" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Увімкнути чи вимкнути повноекранний режим" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "Увімкнути бічне в&ікно" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Вмикає та вимикає бічне вікно (із змістом, індексом, пошуком та закладками)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Знайти у вікні змісту" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Знаходить поточну сторінку у вікні змісту" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "Якщо поточна сторінка наявна у змісті, показує її там." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "Встановити код&ування" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Змінює кодування відкритого документа." #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Відкрити..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Відкрити файл CHM" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Відкриває новий файл CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Назад" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Перейти назад" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Перейти назад згідно історії переходів" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Вперед" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Перейти вперед" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Перейти вперед згідно історії переходів" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Початок" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Перейти на початок" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "Перейти на початкову сторінку, визначену у документі." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Попередня сторінку із змісту" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Попередня сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Перейти на попередню сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Перейти до попередньої сторінки із таблиці змісту

" "Скорочення: " "Ctrl+Стрілка вліво" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Наступна сторінка із таблиці змісту" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Наступна сторінка із таблиці змісту" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Перейти на наступну сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" "Перейти до наступної сторінки із таблиці змісту

Скорочення: " "Ctrl+Стрілка вправо" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "&Закрити вікно" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Закрити поточне вікно" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Закриває поточне відкрите вікно" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Олександр Яценко" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "yatsenko.alexandr@gmail.com" kchmviewer-5.3/po/kchmviewer_hu.po0000644000175000001440000007500011513542712016056 0ustar timusers# translation of hu1.po to # translation of hu.po to # translation of kchmviewer.po to # This file is put in the public domain. # # Csaba Zakarias , 2006. msgid "" msgstr "" "Project-Id-Version: hu1\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-04-11 13:44+0200\n" "Last-Translator: Csaba Zakarias \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.1\n" "Plural-Forms: nplurals=1; plural=0;\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - hozzáadás a könyvjelzőhöz" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Adja meg a könyvjelző nevét:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - könyvjelző név szerkesztése" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Oldal berakása a könyvjelzőbe" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - hiba a chm fájl betöltésekor" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "%1 chm fájl nem tölthető be" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "%1 fájl nem tölthető be" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - távoli kapcsolatra kattintás - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1 távoli kapcsolat megnyitásához külső programot indít.\n" "\n" "Akarja folytatni?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Igen" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nem" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaSzkriptre kattintás" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "JavaSzkriptet akart elindítani.\n" "Biztonsági okoból a JavaSzkript le van tiltva a CHM fájlokban." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - új CHM fájlra mutató kapcsolatra kattintás" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "A %1 új CHM fájlra mutató kapcsolatra kattintott.\n" "A jelenlegi fájl bezárul.\n" "\n" "Akarja folytatni?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Keresés" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "Tömörített Súgó Kézikönyv (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Fájl megnyitása" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Tömörített Súgó Kézikönyv (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Betöltés sikertelen" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "" #: kchmmainwindow.cpp:932 #, fuzzy msgid "Abort" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Nem található a megnyitott téma a tartalom albakban" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Törlés" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "&Qt névjegye" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Keresés %1 eredményt adott" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Keresés nem adott vissza eredményt" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Keresés érvénytelen" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Keresés az oldalon" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Nyomtatás megszakítva" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Nyomtatás megszakítva" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM fájl megjelenítő" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM fájl megjelenítő" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer beállítások" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Általános beállítások" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Ha nem ad meg jellemzőt a betöltéskor" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "A 'CHM fájl megnyitása' dialógus ablak megnyitása" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "&Legutóbbi CHM fájl megnyitása, ha létezik" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Előzmények" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Előzmény információ tárolása" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "legutóbbi fájlok" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Emlékezzen a megnyitott fájlok információira. Emlékezzen az utoljára " "megnyitott oldalra, keresési előzményekre, betűméretre, könyvjelzőkre és így " "tovább." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "&Emlékezzen az előzmények fájlok különleges információira" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM biztonsági beállítások" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Külső kapcsolatra kattintáskor" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "&Mindig külső böngészőben nyissa meg" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Megerősítés kérése" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Kapcsolatot ne nyissa meg" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - új CHM fájlra mutató kapcsolatra kattintás" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Mindig nyissa meg azúj CHM fájlt" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Ne nyissa meg az új CHM fájlt" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Verzió függő beállítások" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE verzió beállítások" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "HTML tartalom megjelenítéséhez használja" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-alapú widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-alapú widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart biztonság" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "&Frissítés engedélyezése" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "&Java engedélyezése" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Beépülő modulok engedélyezése" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Java&Szkript engedélyezése" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "További" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "HTML forrás parancsok megtekintése" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Beépített HTML forrás megjelenítő" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "&Külső program, alább adaj meg" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Külső program:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Oldal berakása a könyvjelzőbe" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Cím" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, fuzzy, no-c-format msgid "&Edit" msgstr "Szerkesztő" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Általános beállítások" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigáció" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Fájl nyomtatása" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, fuzzy, no-c-format msgid "Exit" msgstr "Szerkesztő" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Minden kijelölése" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Beállítások megváltoztatása" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Beállítások megváltoztatása" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "Hozzáadás a könyvjelzőhöz" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Betűméret növelése" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Betűméret növelése" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Betűméret csökkentése" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Betűméret csökkentése" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&HTML forrás megtekintése" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "HTML forrás parancsok megtekintése" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Teljes képernyő" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "&Tartalom ablak mutatása" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Nem található a megnyitott téma a tartalom albakban" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "&Kódlap beállítása" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Fájl megnyitása" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Mindig nyissa meg azúj CHM fájlt" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigáció" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Az előzményekben hátrébb mozgatása" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigáció" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Az előzményekben előrébb mozgatása" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigáció" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "A tartalomjegyzékben az előző oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Előző oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "A tartalomjegyzékben az előző oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Következő oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Következő oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "A tartalomjegyzékben a következő oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Tartalom ablak mutatása" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Qt verzió beállítások" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Adja meg a program elérési útját a belső linkek megnyitásához egy " #~ "böngésző ablakban. %s szimbólumot lecseréljük az URL-re " #~ "kattintáskor." #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Zakariás Csaba" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "csaba.zakarias@gmail.com" #~ msgid "&Add" #~ msgstr "&Hozzáadás" #~ msgid "Topics" #~ msgstr "Témák" #~ msgid "Please select one of the topics below:" #~ msgstr "Jelölje ki az egyik alábbi témát:" #~ msgid "&Ok" #~ msgstr "&OK" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please try our another project, www.transientmail.com - temporary e-mail " #~ "address, which expires automatically." #~ msgstr "" #~ "%1 verzió %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "GNU GPL licensz.\n" #~ "\n" #~ "Kérem, próbálja ki más projektünket is, ww.transientmail.com." #~ msgid "File Operations" #~ msgstr "Fájl műveletek" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Létező chm fájl megnyitásához kattintson erre a gombra." #~ msgid "Click this button to print the current page" #~ msgstr "Az aktuális oldal kinyomtatásához kattintson erre a gombra." #~ msgid "Click this button to move backward in browser history" #~ msgstr "" #~ "A böngésző előzmények közötti visszafelé mozgáshoz kattintson erre a " #~ "gombra." #~ msgid "Click this button to move forward in browser history" #~ msgstr "" #~ "A böngésző előzmények közötti előrefelé mozgáshoz kattintson erre a " #~ "gombra." #~ msgid "Go to the home page" #~ msgstr "Alapoldalra ugrás" #~ msgid "Click this button to move to the home page" #~ msgstr "Az alapoldalra ugráshoz kattintson erre a gombra." #~ msgid "&Recent files" #~ msgstr "&Legutóbbi fájlok" #~ msgid "&Setup" #~ msgstr "&Beállítás" #~ msgid "What's &This" #~ msgstr "&Mi ez?" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Adja meg az aktuális oldalon keresendő szöveget." #~ msgid "Previous search result" #~ msgstr "Előző keresési eredmény" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Az előző keresési eredmény megjelenítéséhez kattintson erre a gombra." #~ msgid "Next search result" #~ msgstr "Következő keresési eredmény" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "A következő keresési eredmény megjelenítéséhez kattintson erre a gombra." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Kattintson a gombra a jelenlegi témának a tartalom ablakban történő " #~ "megkereséséhez és megnyitásához." #~ msgid "Click this button to increase the font size." #~ msgstr "A betűméret növeléséhez kattinson erre a gombra." #~ msgid "Click this button to decrease the font size." #~ msgstr "A betűméret csökkentéséhez kattinson erre a gombra." #~ msgid "View HTML source" #~ msgstr "HTML forrás megtekintése" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Az oldal HTML forrásának külön ablakban történő megnyitásához kattintson " #~ "erre a gombra." #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Kattintson a gomba az aktuális oldal könyvjelző listához való " #~ "hozzáadására." #~ msgid "&Increase font" #~ msgstr "&Betűméret növelése" #~ msgid "&Decrease font" #~ msgstr "&Betűméret csökkentése" #~ msgid "&Set language" #~ msgstr "&Nyelv beállítása" #~ msgid "Type in word(s) to search for:" #~ msgstr "Adja meg a keresendő szavakat:" #~ msgid "Location" #~ msgstr "Hely" #~ msgid "Match similar words" #~ msgstr "Hasonló szavak keresése" #~ msgid "How to use search" #~ msgstr "Hogyan használja a keresőt" #~ msgid "Printing (page %1)..." #~ msgstr "Nyomtatás (%1 oldal)..." #~ msgid "Printing completed" #~ msgstr "Nyomtatás kész" #~ msgid "%1 - could not print" #~ msgstr "%1 - nem nyomtatható" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Nem nyomtatható.\n" #~ "A Qt könyvtár nyomtatás támogatás nélkül lett lefordítva." kchmviewer-5.3/po/kchmviewer_cs.po0000644000175000001440000007567111513542712016065 0ustar timusers# translation of kchmviewer.po to # This file is put in the public domain. # # Hynek Fabian , 2006. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-08-31 20:54+0200\n" "Last-Translator: Hynek Fabian \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - vložení záložky" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Zadejte jméno záložky" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - změna názvu záložky" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Přidat záložku" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - načtení souboru s nápovědou se nezdařilo" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Nepovedlo se načíst soubor nápovědy %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Nelze číst soubor %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - aktivován externí odkaz - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Odkaz %1 bude otevřen v externím prohlížeči.\n" "\n" "Přejete si pokračovat?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ano" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Ne" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - aktivován JavaScript odkaz" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Kliknuli jste na JavaScriptový odkaz\n" "Z bezpečnostních důvodů je použití JavaScriptových adres v souborech " "nápovědy potlačeno." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - aktivován odkaz na CHM soubor" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Kliknuli jste na odkaz ukazující na soubor nápovědy %1.\n" "Aktuální soubor bude uzavřen.\n" "\n" "Přejete si pokračovat ?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Obsah" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Hledání" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Soubory nápovědy (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Otevřít" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Soubory nápovědy (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Načítaní přerušeno" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Zvolte cílový adresář" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Rozbaluji soubor nápovědy" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extrakce souborů..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Přerušit" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Téma nebylo nalezeno" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "O aplikaci %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "O&dstranit" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Přerušit" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "O &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Nalezeno %1 výsledků" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Hledání nevedlo k žádnému výsledku" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Hledání se nezdařilo" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Hledání na stránce" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Tisk přerušen" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Tisk přerušen" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Prohlížeč CHM souborů" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Prohlížeč CHM souborů" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Nastavení KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Běžné chovaní" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Bez parametrů při spučtení" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Ukaž dialog 'Výběr CHM souboru'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Otevři pos&lední používaný CHM soubor" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historie" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Uschovat informace o historii posledních" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "souborů" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Pamatuje si poslední otevřenou stránku, historii hledání, velikost písma, " "záložky a podobné informace o prohlížených souborech." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Pamatovat si &extra informace souborů historie" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Bezpečnostní volby" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Při kliknutí na externí odkaz" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Vžd&y otevřít v externím prohlížeči" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Vyžádat si potvrzení" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Neotevírat odkaz" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Při kliknutí na odkaz na jiný CHM soubor" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Otevřít odkazovaný CHM soubor" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Neotvírat odkazovaný soubor" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Zvláštní nastavení verzí" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Nastavení KDE verze" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "HTML obsah zobrazit pomocí" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser prvku" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart prvku" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Zabezpečení KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Povolit obnovení" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Povolit &Javu" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Povolit moduly" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Povolit Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Rozšířené nastavení" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Prohlížeč zdrojového kódu HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Zabudovaný prohlížeč zdrojového kódu" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xterní program uvedený níže" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Externí prohlížeč:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Přidat záložku" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titul" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Okno" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Běžné chovaní" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigace" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Tisk" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Vybrat vše" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "Ro&zbalit..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Rozbaluji soubor nápovědy" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Změnit nastavení" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Změnit nastavení" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "Přid&at záložku" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Zvětšit písmo" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Zvětšit písmo" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Zmenšit písmo" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Zmenšit písmo" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Zobrazit zdroj" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Prohlížeč zdrojového kódu HTML" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Celá obrazovka" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Najít v obsahu" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Vyhledej toto téma" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Vybrat &kódování" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Otevřít" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Otevřít odkazovaný CHM soubor" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigace" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Předchozí" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigace" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Vpřed" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigace" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "Přesun na obsahově předcházející stránku" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Předchozí stránka" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Přesun na obsahově předcházející stránku" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Následující stránka" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Následující stránka" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Přesun na obsahově následující stránku" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Okno" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Okno obsahu" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Nastavení Qt verze" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Cesta k externímu prohlížeči. Symbol %s bude nahrazen volanou URL." #, fuzzy #~ msgid "Search engine to use" #~ msgstr "Hledání nevedlo k žádnému výsledku" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Hynek Fabian" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "radonek@gmail.com" #~ msgid "&Add" #~ msgstr "Přid&at" #~ msgid "Topics" #~ msgstr "Témata" #~ msgid "Please select one of the topics below:" #~ msgstr "Zvolte si jedno z níže uvedených témat:" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 verze %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Licencováno GNU GPL.\n" #~ "\n" #~ "Zkuste náš další projekt, www.transientmail.com - dočasná adresa " #~ "elektronické pošty která časem sama zaniká." #~ msgid "File Operations" #~ msgstr "Práce se soubory" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Výběr existujícího souboru nápovědy k prohlížení" #~ msgid "Click this button to print the current page" #~ msgstr "Stiskem toho tlačítka vytisknete současnou stránku" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Tímto tlačítkem extrahujete obsah souboru nápovědy do zadaného adresáře" #~ msgid "&Recent files" #~ msgstr "Ot&evřít nedávný" #~ msgid "What's &This" #~ msgstr "Co je &tohle ?" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Přesun v historii o krok zpět" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Přesun v historii o krok vpřed" #~ msgid "Go to the home page" #~ msgstr "Úvodní stránka" #~ msgid "Click this button to move to the home page" #~ msgstr "Přesun na úvodní stranu" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Zde zadaný text bude vyhledán na aktuální stránce" #~ msgid "Previous search result" #~ msgstr "Předešlý výsledek hledání" #~ msgid "Click this button to find previous search result." #~ msgstr "Stiskem toho tlačítka se vrátíte předešlý nalezený výraz" #~ msgid "Next search result" #~ msgstr "Další výsledek hledání" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Stiskem tohoto tlačítka se přesunete na další výskyt hledaného výrazu" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "Stiskem tohoto tlačítka otevřete okno s obsahem na aktuálním tématu" #~ msgid "Click this button to increase the font size." #~ msgstr "Toto tlačítko zvětší velikost použitého písma" #~ msgid "Click this button to decrease the font size." #~ msgstr "Toto tlačítko zmenší velikost použítého písma" #~ msgid "View HTML source" #~ msgstr "Zobrazit zdrojový kód" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Stisknutím tohoto tlačítka otevřete okno s HTML zdrojovým kódem stránky" #~ msgid "Add to bookmarks" #~ msgstr "Přidat k záložkám" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "Tímto čudlíkem přidáte aktuální stránku mezi záložky" #~ msgid "&Increase font" #~ msgstr "Z&většit písmo" #~ msgid "&Decrease font" #~ msgstr "Z&menšit písmo" #~ msgid "&Set language" #~ msgstr "Vybrat &jazyk" #~ msgid "Type in word(s) to search for:" #~ msgstr "Zadejte hledaná slova:" #~ msgid "Location" #~ msgstr "Umístění" #~ msgid "How to use search" #~ msgstr "Jak používat vyhledávání" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "Hledaný výraz může obsahovat několik prefixů.\n" #~ "Vložení několika slov do uvozovek značí že chcete najít přesnou frázi.\n" #~ "Slovo se znaménkem minus se ve výsledku nebude vyskytovat.\n" #~ "Slovo se znaménkem plus nebo bez znaménka musí být ve výsledku přítomno.\n" #~ "\n" #~ "Hledání bere v úvahu pouze písmena, číslice a znak podtržítka.\n" #~ "Ostatní znaky budou z hledaného výrazu odstraněny.\n" #~ "Například hledání 'C' povede ke stejným výsledkům jako hledaní 'C++'." #, fuzzy #~ msgid "Search is not available" #~ msgstr "Hledání se nezdařilo" #~ msgid "Printing (page %1)..." #~ msgstr "Probíhá tisk strany %1 ..." #~ msgid "Printing completed" #~ msgstr "Tisk dokončen" #~ msgid "%1 - could not print" #~ msgstr "%1 - nelze tisknout" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Není možné tisknout.\n" #~ "Vaše knihovna Qt byla přeložena bez podpory tisku." #~ msgid "Match similar words" #~ msgstr "Podobná slova" kchmviewer-5.3/po/kchmviewer_tr.po0000644000175000001440000006355111513542712016077 0ustar timusers# translation of kchmview.pot to Turkish # This file is put in the public domain. # # Furkan Duman , 2006. # Ozan Çağlayan , 2009. msgid "" msgstr "" "Project-Id-Version: tr\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-02-11 11:03+0200\n" "Last-Translator: Ozan Çağlayan \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - yer imi ekle" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Bu yer imi için isim girin:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - yer imi adını düzenle" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Yer imleri" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 sürüm %2

Copyright (C) George Yunaev, 2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

GNU GPL " "lisansıyla lisanslanmıştır." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Tespit edilen dosya kodlaması: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - chm dosyası yüklenemedi" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "chm dosyası %1 yüklenemiyor" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "%1 dosyası yüklenemedi" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - uzak bağlantı tıklandı - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1 uzak bağlantısının açılması için harici uygulama başlatılacak.\n" "\n" "Devam etmek istiyor musunuz?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Evet" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Hayır" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaScript bağlantısı tıklandı" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Bir JavaScript bağlantısına tıkladınız.\n" "Güvenlik sorunlarını önlemek için CHM dosyalarındaki JavaScript bağları " "etkisizleştirilmiştir." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "%1 dosyasını gösteren bir bağlantıya tıkladınız.\n" "Şimdiki dosya kapatılacaktır.\n" "\n" "Devam etmek istiyor musunuz?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "İçerik" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "İndeks" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Arama" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Sıkıştırılmış Yardım El Kitabı (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Dosya Aç" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Sıkıştırılmış Yardım El Kitabı (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Yükleme iptal edildi" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "CHM içeriğini kaydetmek için bir dizin seç" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "CHM içeriği açılıyor" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Dosyalar çıkarılıyor..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "İptal et" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "%1 hakkında" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Yardım" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Hakkında" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Q&t hakkında" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Sağ" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Sol" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Arama %1 sonuç döndürdü" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Arama sonuç döndürmedi" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Arama başarısız" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Geliştirilmiş arama motoru size bir kelimeyi, sembolü ya da cümleyi " "arama olanağı verir. Sadece arama sorgusunda belirtilen tüm terimleri içeren " "belgeler görüntülenir.

MS CHM arama indeksinin tersine, bu arama motoru " "özel sembolleri de kapsayan bir indeks oluşturur. Böylece, $q = new " "ChmFile(); gibi ifadeler de aranabilir. Arama motoru tam Unicode " "desteğiyle, İngilizce olmayan dillerde de arama yapmanızı sağlar.

Bir " "alıntı sembolünü aramak istiyorsanız tırnak işareti kullanın." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Sözlük okunuyor..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Arama indeksi oluşturuluyor..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Değiştirilen ayarların etkin olması için uygulama yeniden başlatılmalıdır." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Çalıştırılabilir dosyalar" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Bir metin düzenleyici seçin" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Çalıştırılabilir dosyalar (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Şimdiki sayfayı kapat" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Sayfa ekle" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Yazdırma iptal edildi" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Yazdırma sona erdi" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Bağlantıyı yeni sekmede aç\tShift+LMB" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Bağlantıyı yeni arkaplan sekmesinde aç\tCtrl+LMB" #: main.cpp:45 msgid "Perform auto testing" msgstr "Otomatik testi etkinleştir" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Kısa otomatik testi etkinleştir" #: main.cpp:47 msgid "A CHM file to show" msgstr "Görüntülenebilecek bir CHM dosyası" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' gerçekleştirilecek arama sorgusunu belirtir ve ilk " "bulunan girdiyi etkinleştirir" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' indekste aranacak kelimeyi belirtir ve bulunursa " "etkinleştirir" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' İçindekiler bölümünde aranacak kelimeleri belirtir ve " "bulunursa etkinleştirir. Wildcard karakterleri kullanılabilir." #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM dosya görüntüleyici" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Lütfen hataları kchmviewer@ulduzsoft.com adresine bildirin" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, fuzzy, no-c-format msgid "Alt+E" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, fuzzy, no-c-format msgid "When external link clicked" msgstr "%1 - uzak bağlantı tıklandı - %2" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, fuzzy, no-c-format msgid "Alt+Y" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, fuzzy, no-c-format msgid "Do not open a new CHM file" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, fuzzy, no-c-format msgid "Alt+Q" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, fuzzy, no-c-format msgid "Alt+K" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, fuzzy, no-c-format msgid "Alt+R" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, fuzzy, no-c-format msgid "Alt+J" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, fuzzy, no-c-format msgid "Alt+P" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, fuzzy, no-c-format msgid "Alt+S" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, fuzzy, no-c-format msgid "Alt+X" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Yer imleri" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, fuzzy, no-c-format msgid "Print current page" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, fuzzy, no-c-format msgid "Ctrl+P" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, fuzzy, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, fuzzy, no-c-format msgid "Ctrl+C" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, fuzzy, no-c-format msgid "Ctrl+V" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, fuzzy, no-c-format msgid "Ctrl+F" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "CHM içeriği açılıyor" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "CHM içeriği açılıyor" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "%1 - yer imi ekle" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, fuzzy, no-c-format msgid "Ctrl+B" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, fuzzy, no-c-format msgid "Ctrl++" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, fuzzy, no-c-format msgid "Ctrl+-" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, fuzzy, no-c-format msgid "Ctrl+U" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, fuzzy, no-c-format msgid "Ctrl+" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Dosya Aç" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Dosya Aç" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, fuzzy, no-c-format msgid "Closes currently opened window" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, fuzzy, no-c-format msgid "Ctrl+W" msgstr "Ctrl+Sol" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-5.3/po/update_translations.sh0000644000175000001440000000305311115116772017275 0ustar timusers#!/bin/sh # BASEDIR="../src/" # root of translatable sources PROJECT="kchmviewer" # project name BUGADDR="kchmviewer@ulduzsoft.com" # MSGID-Bugs WDIR=`pwd` # working dir echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system # find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing rc files" # echo "Extracting messages" cd ${BASEDIR} # # see above on sorting # find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ --msgid-bugs-address="${BUGADDR}" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" # echo "Merging translations" catalogs=`find . -name '*.po'` for cat in $catalogs; do echo $cat msgmerge -o $cat.new $cat ${PROJECT}.pot mv $cat.new $cat done echo "Done merging translations" # echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" kchmviewer-5.3/po/CMakeLists.txt0000644000175000001440000000177711115117472015427 0ustar timusersFIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname kchmviewer) ADD_CUSTOM_TARGET(translations ALL) FILE(GLOB PO_FILES ${catalogname}*.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) IF( _langCode ) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND(TARGET translations COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) ENDIF( _langCode ) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) kchmviewer-5.3/po/kchmviewer_sv.po0000644000175000001440000010573211513542712016100 0ustar timusers# Swedish translation for kchmviewer. # This file is put in the public domain. # Daniel Nylander , 2008. # msgid "" msgstr "" "Project-Id-Version: kchmviewer 4.0 beta2\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2008-09-16 22:18+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - lägg till ett bokmärke" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Ange ett namn för detta bokmärke:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - redigera bokmärkets namn" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Bokmärk denna sida" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - misslyckades med att läsa in chm-filen" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Kunde inte läsa in chm-filen %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Kunde inte läsa in filen %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - fjärrlänk klickad på - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "En fjärrlänk %1 kommer att öppnas i det externa programmet.\n" "\n" "Vill du fortsätta?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ja" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nej" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavsScript-länk klickad på" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Du har klickat på en JavaScript-länk.\n" "JavaScript-URLer är inaktiverade i CHM-filer för att förhindra " "säkerhetsrelaterade problem." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - länk till en ny CHM-fil klickades på" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Du har klicka på en länk som leder till en ny CHM-fil, %1.\n" "Den aktuella filen kommer att stängas.\n" "\n" "Vill du fortsätta?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Sök" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Komprimerad hjälpmanual (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Öppna fil" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Komprimerad hjälpmanual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Inläsning avbröts" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Välj en katalog att lagra CHM-innehåll i" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extrahering av CHM-innehåll" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraherar filer..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Avbryt" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Kunde inte hitta öppnat ämne i innehållsfönstret" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Om %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Ta bort" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Avbryt" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Om &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Sökningen returnerade %1 sökträff(ar)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Sökningen returnerade inga träffar" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Sökning misslyckades" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Den förbättrade sökmotorn låter dig söka efter ett ord, symbol " "eller fras, som är en uppsättning ord och symboler inkluderade inom " "citattecken. Endast dokumenten som inkluderar alla söktermer i sökfältet " "kommer att visas; inga prefix behövs.

Till skillnad mot MS CHM interna " "sökindex indexerar min förbättrade sökmotor allting, inklusive " "specialsymboler. Därför är det möjligt att söka efter (och hitta!) någonting " "liknande $q = new ChmFile();. Denna sökning har även fullständigt " "stöd för Unicode, vilket betyder att du kan söka i icke-engelska dokument." "

Om du vill söka efter ett citattecken, använd citationstecken istället. " "Motorn behandlar ett citattecken och ett citationstecken som samma symbol, " "vilket innebär att de kan användas i fraser." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 #, fuzzy msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Ändring av visningsalternativ för webbläsare eller användning\n" "av sökmotor kräver att programmet startas om." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Sök i sida" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+E" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Utskriften avbröts" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Utskriften avbröts" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM-filvisare" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' anger sökfrågan att söka efter och aktiverar den första " "sökträffar, om hittad" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' anger ordet att söka efter i indexet och aktiverar det, om " "hittat" #: main.cpp:50 #, fuzzy msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--sindex ' anger ordet att söka efter i indexet och aktiverar det, om " "hittat" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM-filvisare" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Inställningar för KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Allmänt beteende" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Om inga argument anges vid inläsning" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Öppna dialogrutan \"Öppna CHM-fil\"" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Öppna s&enaste använda CHM-fil, om den finns" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+O" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historik" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Lagra historikinformation för" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "senast filer" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Kommer ihåg informationen om filerna, vilka som öppnades. Kommer ihåg " "senaste öppnade sida, sökhistorik, typsnittsstorlek, bokmärken och så vidare." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "K&om ihåg extra information för historikfiler" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+O" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM-säkerhetsinställningar" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "När en extern länk klickas på" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Öppna alltid den i e&xtern webbläsare" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Fråga efter bekräftelse" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Öppna inte länken" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "När en länk som pekar till en ny CHM-fil klickas på" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Öppna alltid en ny CHM-fil" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Öppna inte en ny CHM-fil" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Versionsspecifika inställningar" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE versionsinställningar" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "För att visa HTML-innehåll, använd" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-baserad widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-baserad widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart-säkerhet" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Aktivera &uppdatering" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+U" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Aktivera &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Aktivera ins&ticksmoduler" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+T" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Aktivera Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avancerat" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Visa användning av HTML-källkommandon" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Inbyggd HTML-källvisare" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xterna program, ange nedan" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Externa program:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Bokmärk denna sida" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titel" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Fönster" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Allmänt beteende" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigering" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Skriv ut fil" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Markera allt" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtrahera CHM-innehåll..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extrahering av CHM-innehåll" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Ändra inställningar..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Ändra inställningar..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Lägg till bokmärke" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Öka typsnittsstorleken" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Öka typsnittsstorleken" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Minska typsnittsstorleken" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Minska typsnittsstorleken" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Visa HTML-källa" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Visa användning av HTML-källkommandon" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Helskärm" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Hitta i innehållsfönstret" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Hitta detta ämne i innehållsfönstret" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "An&ge codepage" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Öppna fil" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Öppna alltid en ny CHM-fil" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigering" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Flytta bakåt i historiken" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigering" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Flytta framåt i historiken" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigering" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "Klicka på denna knapp för att gå till föregående sida i " "innehållsförteckningen." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Föreg sida i TOC" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "Klicka på denna knapp för att gå till föregående sida i " "innehållsförteckningen." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Nästa sida i TOC" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Nästa sida i TOC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "Klicka på denna knapp för att gå till nästa sida i innehållsförteckningen." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Fönster" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Visa innehållsfönstret" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Qt versionsinställningar" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Ange sökvägen till programmet som kommer att användas som en webbläsare " #~ "för externa länkar. En %s-symbol kommer att ersättas av den URL " #~ "som klickas på." #~ msgid "Search engine to use" #~ msgstr "Sökmotor att använda" #~ msgid "" #~ "Use the search based on internal CHM index. This engine cannot search for " #~ "any symbols except underscode, does not support multibyte languages, and " #~ "is not always available." #~ msgstr "" #~ "Använd sökningen baserade på interna CHM-indexet. Denna motor kan inte " #~ "söka efter några symboler förutom understreck, saknar stöd för multibyte-" #~ "språk och är inte alltid tillgänglig." #~ msgid "" #~ "Use new kchmviewer internal search engine (recommended). This engine " #~ "indexes symbols, so it is possible to search for special symbols (like \"C" #~ "++\"). All languages are supported. The index will be generated before " #~ "the first search." #~ msgstr "" #~ "Använd den nya interna sökmotorn i kchmviewer (rekommenderas). Denna " #~ "motor indexerar symboler så det är möjligt att söka efter specialsymboler " #~ "(som \"C++\"). Alla språk stöds. Indexet kommer att genereras innan " #~ "första sökningen." #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Daniel Nylander" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "po@danielnylander.se" #~ msgid "&Add" #~ msgstr "&Lägg till" #~ msgid "Topics" #~ msgstr "Ämnen" #~ msgid "Please select one of the topics below:" #~ msgstr "Välj en av nedanstående ämnen:" #~ msgid "&Ok" #~ msgstr "&OK" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensierad under licensen GNU GPL.\n" #~ "\n" #~ "Se även mitt andra projekt, http://www.transientmail.com - temporära e-" #~ "postadresser som går ut automatiskt." #~ msgid "File Operations" #~ msgstr "Filåtgärder" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Klicka på denna knapp för att öppna en befintlig chm-fil." #~ msgid "Click this button to print the current page" #~ msgstr "Klicka på denna knapp för att skriva ut den aktuella sidan" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Klicka på denna knapp för att extrahera hela CHM-filens innehåll till en " #~ "specifik katalog" #~ msgid "&Recent files" #~ msgstr "&Tidigare filer" #~ msgid "What's &This" #~ msgstr "Vad är det &här" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Klicka på denna knapp för att flytta bakåt i webbläsarens historik" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Klicka på denna knapp för att flytta framåt i webbläsarens historik" #~ msgid "Go to the home page" #~ msgstr "Gå till hemsidan" #~ msgid "Click this button to move to the home page" #~ msgstr "Klicka på denna knapp för att flytta till hemsidan" #~ msgid "A closing quote character is missing." #~ msgstr "Ett avslutande citattecken saknas. " #~ msgid "Enter here the text to search in the current page." #~ msgstr "Ange text att söka efter i den aktuella sidan." #~ msgid "Previous search result" #~ msgstr "Föregående sökträff" #~ msgid "Click this button to find previous search result." #~ msgstr "Klicka på denna knapp för att hitta föregående sökträff." #~ msgid "Next search result" #~ msgstr "Nästa sökträff" #~ msgid "Click this button to find next search result." #~ msgstr "Klicka på denna knapp för att hitta nästa sökträff." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Klicka på denna knapp för att hitta aktuellt ämne i innehållsfönstret och " #~ "öppna det." #~ msgid "Click this button to increase the font size." #~ msgstr "Klicka på denna knapp för att öka typsnittets storlek." #~ msgid "Click this button to decrease the font size." #~ msgstr "Klicka på denna knapp för att minska typsnittets storlek." #~ msgid "View HTML source" #~ msgstr "Visa HTML-källa" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Klicka på denna knapp för att öppna ett separat fönster med sidans HTML-" #~ "källa." #~ msgid "Add to bookmarks" #~ msgstr "Lägg till bokmärken" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Klicka på denna knapp för att lägga till aktuell sida till " #~ "bokmärkeslistan." #~ msgid "&Increase font" #~ msgstr "S&törre typsnitt" #~ msgid "&Decrease font" #~ msgstr "&Mindre typsnitt" #~ msgid "&Set language" #~ msgstr "&Ange språk" #~ msgid "Type in word(s) to search for:" #~ msgstr "Skriv in ord att söka efter:" #~ msgid "
Help" #~ msgstr "Hjälp" #~ msgid "Go" #~ msgstr "Gå" #~ msgid "Location" #~ msgstr "Plats" #~ msgid "How to use search" #~ msgstr "Hur man använder sökning" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "Sökfrågan kan innehålla ett par prefix.\n" #~ "En uppsättning ord inom citattecken betyder att du söker efter en exakt " #~ "fras.\n" #~ "Ett ord med minustecken betyder att det inte ska tas med i " #~ "sökresultatet.\n" #~ "Ett ord med plustecken eller utan betyder att det måste finnas i " #~ "sökresultatet.\n" #~ "\n" #~ "Observera att endast bokstäver och siffror indexeras.\n" #~ "Du kan inte söka efter icke-tecken-symboler andra än understreck och " #~ "dessa symboler kommer att tas bort från sökfrågan.\n" #~ "Till exempel kommer en sökning efter 'C' att ge samma resultat som en " #~ "sökning efter 'C++'." #~ msgid "Search is not available" #~ msgstr "Sökning är inte tillgänglig" #~ msgid "" #~ "

The search feature is not avaiable for this chm file.

The old search " #~ "engine depends on indexes present in chm files itself. Not every chm file " #~ "has an index; it is set up during chm file creation. Therefore if the " #~ "search index was not created during chm file creation, this makes search " #~ "impossible.

Solution: use new search engine (menu Settings/Advanced), " #~ "which generates its own index." #~ msgstr "" #~ "

Sökfunktionen är inte tillgänglig för denna chm-fil.

Den äldra " #~ "sökmotorn är beroende av index som finns i själva chm-filerna. Inte alla " #~ "chm-filer har ett index; det konfigureras under skapandet av chm-filen. " #~ "Om sökindexet inte skapades samtidigt med chm-filen gör detta att en " #~ "sökning blir omöjlig..

Lösning: använd den nya sökmotorn (under " #~ "Inställningar/Avancerat) som genererar sina egna index." #~ msgid "Printing (page %1)..." #~ msgstr "Skriver ut (sida %1)..." #~ msgid "Printing completed" #~ msgstr "Utskriften färdigställdes" #~ msgid "%1 - could not print" #~ msgstr "%1 - kunde inte skriva ut" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Kunde inte skriva ut.\n" #~ "Ditt Qt-bibliotek har kompilerats utan stöd för utskrifter" kchmviewer-5.3/po/kchmviewer_zh_CN.po0000644000175000001440000007504611513542712016455 0ustar timusers# translation of zh_CN.po to # translation of kchmviewer.po to # This file is put in the public domain. # # 林俊 , 2006. msgid "" msgstr "" "Project-Id-Version: zh_CN\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-05-07 20:30-0400\n" "Last-Translator: 林俊 \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - 添加书签" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "输入书签的名称" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - 编辑书签名称" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "添加当前页面为书签(&B)" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - 载入CHM文件失败" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "无法载入CHM文件%1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "无法载入文件%1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - 点击远程链接 - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1将使用外部程序来打开远程链接。 \n" "\n" "你要继续吗?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "是(&Y)" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "否(&N)" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - 点击JavaScript链接" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "你点击了JavaScript链接。\n" "为了避免安全问题,在CHM文件中不启用JavaScript URLs支持。" #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - 点击指向新的CHM文件的链接。" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "你点击了指向新的CHM文件的链接%1。\n" "现在打开的文件将被关闭。\n" "\n" "你要继续吗?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "索引" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "搜索" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|压缩的帮助手册 (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "打开文件" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "压缩的帮助手册 (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "取消载入" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "选择目录来保存CHM目录" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "提取CHM目录" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "提取文件..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "取消" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "无法在目录窗口定位打开的主题" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "关于%1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "删除(&D)" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "取消" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "关于QT(&Q)" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "搜索返回 %1 个结果" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "搜索没有返回结果" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "搜索失败" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "在页面中搜索" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "打印被取消" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "打印被取消" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 #, fuzzy msgid "Open Link in a new tab\tShift+LMB" msgstr "在新的标签页打开此链接(&O)" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 #, fuzzy msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "在后台标签也打开此链接(&O)" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM文件查看器" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM文件查看器" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer设置" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "通用行为" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "如果载入时没有参数" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "打开'打开CHM文件'对话框" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "如果存在,打开最后使用的CHM文件(&L)" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "历史" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "保存历史信息" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "最近使用的文件" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "记录已经打开的文件的相关信息。 记录最后打开的页面,搜索记录,字体大小,书签等" "信息。" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "记录历史文件额外信息(&E)" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM 安全设置" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "当点击外部链接时" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "总在外部浏览器中打开(&Y)" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "请求确认" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "不打开链接" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "当点击指向新的CHM文件的链接时" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "总打开新的CHM文件" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "不打开新的CHM文件" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "版本指定设置" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE 版本设置" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "要显示HTML目录,使用" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "基于QTextBrowser的组件(&Q)" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "基于KHTMLPart的组件(&K)" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart 安全性" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "启用刷新(&R)" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "启用Java(&J)" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "启用插件(&P)" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "启用JavaScript(&S)" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "高级" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "查看HTML源码使用" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "内建HTML源码查看器" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "外部程序,在下面特别指定(&X)" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+x" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "外部程序" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "添加当前页面为书签(&B)" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "标题" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "通用行为" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "导航" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "打印文件" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "选择全部(&S)" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "提取CHM目录(&X)" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "提取CHM目录" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "更改设置(&C)" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "更改设置(&C)" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "添加书签(&A)" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "增大字体大小" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "增大字体大小" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "缩小字体大小" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "缩小字体大小" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "查看HTML源码(&V)" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "查看HTML源码使用" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "全屏(&F)" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "目录窗口&定位(&L)" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "在目录窗口定位主题" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "设置编码(&S)" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "打开文件" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "总打开新的CHM文件" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "导航" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "在历史中后退" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "导航" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "在历史中前进" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "导航" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "点击此按钮前往目录表格中的前一页" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "目录表格的前一页" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "点击此按钮前往目录表格中的前一页" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "目录表格的后一页" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "目录表格的后一页" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "点击此按钮前往目录表格的后一页" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "显示目录窗口(&S)" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "QT 版本设置" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "输入打开外部链接的浏览器程序的路径。%s 符号将被点击的URL替换。" #, fuzzy #~ msgid "Search engine to use" #~ msgstr "搜索没有返回结果" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "林俊" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "demonlinjun@163.com" #~ msgid "&Add" #~ msgstr "添加(&A)" #~ msgid "Topics" #~ msgstr "主题" #~ msgid "Please select one of the topics below:" #~ msgstr "请在下面选取一个主题" #~ msgid "&Ok" #~ msgstr "确定(&O)" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 版本 %2\n" #~ "\n" #~ "版权所有 (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "在GNU GPL授权方式下发行。\n" #~ "\n" #~ "请尝试我们的另一个项目,www.transientmail.com - 临时 E-Mail地址。" #~ msgid "File Operations" #~ msgstr "文件操作" #~ msgid "Click this button to open an existing chm file." #~ msgstr "点击此按钮打开存在的CHM文件" #~ msgid "Click this button to print the current page" #~ msgstr "点击此按钮打印当前页面" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "点击此按钮提取整个CHM文件的目录到指定的目录。" #~ msgid "&Recent files" #~ msgstr "最近打开的文件(&R)" #~ msgid "What's &This" #~ msgstr "这是什么(&T)" #~ msgid "Click this button to move backward in browser history" #~ msgstr "点击此按钮在浏览历史中后退" #~ msgid "Click this button to move forward in browser history" #~ msgstr "点击此按钮在浏览历史中前进" #~ msgid "Go to the home page" #~ msgstr "回到首页" #~ msgid "Click this button to move to the home page" #~ msgstr "点击此按钮回到主页" #~ msgid "Enter here the text to search in the current page." #~ msgstr "输入要在当前页面搜索的内容" #~ msgid "Previous search result" #~ msgstr "前一个搜索的结果" #~ msgid "Click this button to find previous search result." #~ msgstr "点击此按钮查看前一个搜索的结果" #~ msgid "Next search result" #~ msgstr "下一个搜索的结果" #~ msgid "Click this button to find next search result." #~ msgstr "点击此按钮查看下一个搜索的结果" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "点击此按钮在目录窗口定位当前主题" #~ msgid "Click this button to increase the font size." #~ msgstr "点击此按钮增加字体大小" #~ msgid "Click this button to decrease the font size." #~ msgstr "点击此按钮缩小字体大小" #~ msgid "View HTML source" #~ msgstr "查看HTML源码" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "点击此按钮在独立窗口查看当前页面的HTML源码" #~ msgid "Add to bookmarks" #~ msgstr "添加到书签" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "点击此按钮添加当前页面到书签列表" #~ msgid "&Increase font" #~ msgstr "增大字体(&I)" #~ msgid "&Decrease font" #~ msgstr "缩小字体(&D)" #~ msgid "&Set language" #~ msgstr "设置语言(&S)" #~ msgid "Type in word(s) to search for:" #~ msgstr "输入要搜索的词" #~ msgid "Location" #~ msgstr "位置" #~ msgid "How to use search" #~ msgstr "如何使用搜索" #, fuzzy #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "搜索查询可以包含一些技巧。\n" #~ "在引号中包含的内容意味着你要精确的搜索。\n" #~ "带有减号的字表示在搜索结果中不应包含这个内容。\n" #~ "带有加号或什么也不带表示在搜索结果中应当包含这个内容。\n" #~ "\n" #~ "注意只有字母和数字被索引。\n" #~ "你不能搜索符号,这些符号将在搜索查询中被移除。\n" #~ "例如,搜索 'C' 和搜索 'C++' ,将返回同样的结果." #, fuzzy #~ msgid "Search is not available" #~ msgstr "搜索失败" #~ msgid "Printing (page %1)..." #~ msgstr "正在打印 (第 %1 页)" #~ msgid "Printing completed" #~ msgstr "打印成功" #~ msgid "%1 - could not print" #~ msgstr "%1 - 不能打印" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "不能打印。\n" #~ "你编译QT没有加入打印支持" #~ msgid "Match similar words" #~ msgstr "匹配相似词" kchmviewer-5.3/po/kchmviewer_ru.po0000644000175000001440000006616711513542712016106 0ustar timusers# translation of rus.po to # This file is put in the public domain. # # Ivan Bobrov , 2006. # George Yunaev , 2006. msgid "" msgstr "" "Project-Id-Version: rus\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-02-04 15:29-0800\n" "Last-Translator: George Yunaev \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.1\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - добавить закладку" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Введите имя для этой закладки" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - редактировать имя закладки" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Добавить страницу в закладки" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Кодировка файла определена автоматически: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - невозможно открыть CHM файл" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Невозможно загрузить CHM файл %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Нельзя открыть CHM файл %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - нажата внешняя ссылка - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Для показа ссылки %1 будет запущена внешняя программа.\n" "\n" "Продолжить?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "Да" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "Нет" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - нажата ссылка на JavaScript" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Вы нажали ссылку, которая вызывает JavaScript.\n" "Для обеспечения безопасности все ссылки на JavaScript отключены." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - нажата ссылка на новый CHM файл" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Вы нажали на ссылку, которая ведет в другой CHM файл %1.\n" "Он будет открыт, а текущий файл будет закрыт.\n" "\n" "Продолжить??" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Оглавление" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Индекс" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Поиск" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Открыть файл" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Загрузка отменена" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Выберите директорию для сохранения распакованного содержимого" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Распаковываем содержимое CHM файла" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Распаковываем файлы..." #: kchmmainwindow.cpp:932 #, fuzzy msgid "Abort" msgstr "О программе %1" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Невозможно найти открытую тему в окне содержания" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "О программе %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "Удалить" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "О программе %1" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "О библиотеке Qt..." #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Поиск вернул %1 результат(ов)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Поиск не нашел ничего" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Поиск не удался" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Улучшенный поиск позволяет искать слова, символы или фразу (которая " "представляет собой набор слов в кавычках). Найдены будут только те " "документы, которые содержат ВСЕ что указано в строке поиска, префиксы типа + " "или AND не нужны.

По сравнению со стандартным индексом для поиска, " "интегрированным в CHM файл, индекс встроенный в приложение индексирует все " "включая специальные символы. Это делает возможным искать и найти строки вида " "$q = new ChmFile();. Также новый поиск полностью поддерживает Юникод, " "позволяя успешно искать текст в документах на языках отличных от " "английского.

Поскольку кавычки используются поиском для обозначения фраз, " "используйте апостроф если вам нужно искать кавычку. Поиск интерпретирует " "апостроф и кавычку как одинаковый символ." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Считываем индекс поиска" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Идет генерация индекса поиска" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Чтобы сделанные изменения вступили в силу, приложение необходимо " "перезапустить." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Программы" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Выберите программу редактора" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "*|Программы" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Закрыть активную вкладку" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Добавить вкладку" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Печать отменена" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Печать завершена" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Открыть ссылку в новой вкладке\tShift+LMB" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Открыть ссылку в новой вкладке не активируя ее\tCtrl+LMB" #: main.cpp:45 msgid "Perform auto testing" msgstr "Включить режим автотестирования" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Включить режим автотестирования" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Просмотрщик CHM файлов" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Просмотрщик CHM файлов" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, fuzzy, no-c-format msgid "When external link clicked" msgstr "%1 - нажата внешняя ссылка - %2" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - нажата ссылка на новый CHM файл" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, fuzzy, no-c-format msgid "Do not open a new CHM file" msgstr "%1 - нажата ссылка на новый CHM файл" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Добавить страницу в закладки" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, fuzzy, no-c-format msgid "Print current page" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "Распаковываем содержимое CHM файла" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Распаковываем содержимое CHM файла" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "%1 - добавить закладку" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "Невозможно найти открытую тему в окне содержания" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Невозможно найти открытую тему в окне содержания" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Открыть файл" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Открыть файл" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, fuzzy, no-c-format msgid "Closes currently opened window" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Georgy Yunaev" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-5.3/po/kchmviewer_pt_BR.po0000644000175000001440000007330411513542552016457 0ustar timusers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Márcio Moraes , 2009. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-12-15 23:31-0300\n" "Last-Translator: Márcio Moraes \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Language: pt_BR\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - adicionar um marcador" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Digite o nome para este marcador:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - editar o nome do marcador" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Marcadores" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, " "2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed " "under GNU GPL license." msgstr "" "%1 versão %2

Copyright (C) George Yunaev, " "2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licenciado " "sob os termos da licença GPL GNU." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Codificação do arquivo detectado: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - falha ao carregar o arquivo chm" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Não foi possível carregar o arquivo chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Não foi possível carregar arquivo %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - link remoto clicado - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Um link remoto %1 irá iniciar o programa externo para abri-lo.\n" "\n" "Você deseja continuar?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Sim" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Não" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - Link JavsScript clicado" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Você clicou em um link JavaScript.\n" "Para evitar problemas de segurança relacionados com JavaScript, URLs são " "desativadas em arquivos CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - link para um novo arquivo CHM clicado" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Você clicou em um link, que leva a um novo arquivo CHM %1.\n" "O arquivo atual será fechado.\n" "\n" "Você deseja continuar?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Conteúdo" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Índice" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Pesquisar" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manual de Ajuda Comprimido (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Abrir um arquivo chm" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manual de Ajuda Comprimido (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Carregamento cancelado" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Escolha um diretório para armazenar o conteúdo CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extraindo o conteúdo CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraindo arquivos..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Cancelar" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Não foi possível localizar tópico aberto na janela de conteúdo" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Sobre o %1" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "A&juda" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Sobre" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Sobre o &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Direito" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Esquerdo" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "A pesquisa devolveu %1 resultado(s)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "A pesquisa não devolveu resultados" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "A pesquisa falhou" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in " "phrases." msgstr "" "

A melhor engine de busca lhe permite procurar por uma palavra, " "frase ou símbolo, que é um conjunto de palavras e símbolos incluído entre " "aspas. Apenas os documentos que incluem todos os termos especificados na " "consulta da busca são mostrados; sem prefixos necessários.

Ao contrário " "do índice de pesquisa interna MS CHM, minha melhor engine de busca indexa " "tudo, incluindo símbolos especiais. Por isso, é possível pesquisar (e " "encontrar!) algo parecido com $q = new ChmFile ();. Esta pesquisa " "também suporta completamente Unicode, o que significa que você pode " "pesquisar em documentos não-Inglês.

Se você deseja procurar por um símbolo " "de cotação, use aspas em vez disso. A engine trata uma cotação e uma aspa " "como o mesmo símbolo, o que permite usá-los em frases. " #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Lendo diretório..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Gerando índice de pesquisa..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Alterar essas opções requer a reinicialização do programa para fazer efeito." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Executáveis" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Escolha um editor executável" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Executáveis (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Fechar página atual" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Adicionar página" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Impressão cancelada" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Impressão concluída" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Abrir Link em uma nova aba\tShift+Botão esquerdo do mouse" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" "Abrir Link em uma nova aba em segundo plano\tCtrl+Botão esquerdo do mouse" #: main.cpp:45 msgid "Perform auto testing" msgstr "Realizar testes automaticamente" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Realizar testes curtos automaticamente" #: main.cpp:47 msgid "A CHM file to show" msgstr "Um arquivo CHM para mostrar" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' especifica a consulta da pesquisa, e destaca a " "primeira entrada se encontrada" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' especifica a palavra para encontrar no índice, e a " "destaca se encontrada" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' especifica a(s) palavra(s) para localizar na Tabela " "de Conteúdo, e a(s) destaca(s) se encontrada(s). Caracteres especiais são " "permitidos." #: main.cpp:56 msgid "CHM file viewer" msgstr "Visualizador de arquivos CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Por favor, relate falhas para kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Configurações do KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportamento geral" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Se não houver argumentos apresentados na carregamento" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Abrir o diálogo 'abrir arquivo CHM'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Abrir o ú<imo arquivo CHM usado, se existir" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Histórico" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Armazenar informações do histórico para" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "últimos arquivos" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Lembrar-se das informações sobre os arquivos que foram abertos. Lembrar-se " "da última página aberta, do histórico de pesquisa, do tamanho da fonte, dos " "marcadores e assim por diante." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "L&embre-se de informações adicionais para os arquivos de histórico" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Configurações de segurança CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quando clicado em um link externo" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Se&mpre abri-lo em um navegador externo" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Solicitar confirmação" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Não abrir o link" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Quando o link aponta para um novo arquivo CHM clicado" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Sempre abrir um novo arquivo CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Não abrir um novo arquivo CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Configurações específicas da versão" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Configurações da versão do KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Para mostrar o conteúdo HTML, utilize" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "Componente baseado no &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "Componente baseado no &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (requer Qt 4.4 ou superior)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Segurança KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Habilitar &atualizar automaticamente" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Habilitar &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Habilitar &plug-ins" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Habilitar Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avançado" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Exibir comandos utilizados no fonte do HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Exibir fonte do HTML embutido" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "Programa e&xterno, especificado a seguir" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programa externo:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Navegar" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Outro" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" "Utilizar a direção do layout da direita para a esquerda (layouts Hebraico e " "Árabe)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" "Detectar automaticamente a codificação para os navegadores Webkit e " "KHTMLPart (não recomendado)" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "kchmviewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Configurações" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "&Marcadores" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "&Arquivo" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "&Editar" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "&Exibir" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Janelas" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "Barra de ferramentas geral" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "Barra de ferramentas de navegação" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "Barra de ferramentas de ação" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Imprimir..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Imprimir" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Imprimir página atual" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Imprime a página aberta atualmente." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "&Sair" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Sair" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Sai do programa" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "C&opiar" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Copiar" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Copia o conteúdo selecionado para a área de transferência" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "&Selecionar tudo" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Colar" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Seleciona tudo no documento" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "&Localizar..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Localizar" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Localizar texto na página aberta atualmente" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Entra no Localizar no modo de página" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtrair conteúdo CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extrair o conteúdo CHM para o diretório" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Extrai o conteúdo do arquivo CHM para o diretório especificado. Todos os " "arquivos são extraídos." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "Configur&ações do programa..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "Altera as configurações do programa" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Adicionar marcador" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Adicionar um marcador para a página aberta atualmente" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Adiciona um marcador para a página aberta atualmente. Recorda a página " "aberta, e a posição de rolagem. Marcadores são acessíveis através da aba ou " "menu Marcadores." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "&Aumentar o tamanho da fonte" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Aumentar o tamanho da fonte" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" "Aumenta o tamanho da fonte do documento. O tamanho da nova fonte será " "armazenada." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "&Diminuir o tamanho da fonte" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Diminuir o tamanho da fonte" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" "Diminui o tamanho da fonte do documento. O tamanho da nova fonte será " "armazenada." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Exibir fonte do HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Exibir fonte do HTML da página atual" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Mostra o fonte do HTML da página aberta atualmente" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Habilitar modo &tela cheia" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Entra ou sai do modo tela cheia" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "Habilitar &janela lateral" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Mostra ou oculta o tamanho da janela (como as abas Conteúdo, Índice, " "Pesquisar e Favoritos)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Localizar no conteúdo da janela" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Localizar a página atual no conteúdo da janela" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" "Se a página atual está presente na Tabela de Conteúdo, localize-a nessa " "Tabela." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "D&efinir codificação" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Altera a codificação do documento atual." #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Abrir..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Abrir um arquivo CHM" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Abre um novo arquivo CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Voltar" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Navegar para trás" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Navegar para trás no histórico da navegação" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Avançar" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Navegar para frente" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Navegar para frente no histórico da navegação" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Início" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Navegar até o início" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" "Navegar até a página Inicial do documento, conforme especificado no " "documento." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Página anterior na Tabela de Contexto" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Página anterior na TDC (Tabela de Contexto)" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Ir para a página anterior na Tabela de Conteúdo" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Ir para a página anterior na Tabela de Conteúdo

Atalho: " "Ctrl+Seta para a esquerda" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Próxima página na Tabela de Contexto" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Próxima página na TDC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Ir para a próxima página na Tabela de Conteúdo" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: " "Ctrl+Right Arrow" msgstr "" "Ir para a próxima página na Tabela de Conteúdo

Atalho: " "Ctrl+Seta para a direita" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "Fe&char janela" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Fechar a janela atual" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Fecha a janela aberta atualmente" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Márcio Moraes" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "marciopanto@gmail.com" kchmviewer-5.3/packages/0000755000175000001440000000000011514013420014002 5ustar timuserskchmviewer-5.3/packages/kchmviewer.png0000644000175000001440000003571511311623221016670 0ustar timusersPNG  IHDR>a IDATxwՕ:OIQΈ ,` xx^^Ű1L66IBByf3Թi(SuUu[B)19zE{OrG#Q.p1rG#Q.p1rG#Q.;}\s-jծC4WMb9\t;}^m0sZݲ 4 ӶхFa(yuX8ϝ|QCrjD_@۾Nl(*eKy_ [^UW?t K ~ 8}">;2 ujohx4)Q[Zə3O 7=uˏ2j2;辕i2y3ϼg%7Surd2Ό{O}IKڻm=mHX)4XRO?w=w8UWx=MJ"Eua38oЬux /~(R{-T|w9t5s|>wxhsڧ_dt¿jUHB<:-1-I"i#B0t]wD7Qϼf4dxT=?*i9,R}:5y(*@ ,[Jcp(u?czeK'?=Mo?tzt ̯}}XԦ"*˃h {EG(LAJŏ7y"jW?+?|[N,>{պ=[Xղ^5j<ƌLGuuATR 0x4ePdغc}%i(ԩ©K$~s5\zX8PT(lؗ'H()) +(CuPP"m!R*ZmMS\#8Ӧ,K_x#|] Cn{ܫ`v9\3[):eP6 'J);MV4j uf*7;ֿ$%H$A*U4!WE,yWS^y bubscFS"@ Ӧ^*E8x'EOآ4_`y|=s[|o͵oUfIű, oxTXI3o o^~B̽T9Wͻ%W1KDe:: RpH༖Jy%P¦i~N @he6V4T%I$n&I,9g$ +Z_>!"[®NuӿrB`v]X\kPH$Ry~_ H)[OPdeoDx~o[*Ney+f5V@mamcY1m ˲H)= J{7Ԏ=h5{MwWν| ]CII*Bєb8a3Ip\19X8j15H"&A MIZz {@ҫ Ym(֟]Q><9D]ǠsǛ~mtDB {xʼBYGw y6̶x vu'7 0Pl굉$ PH%Q! %UmK4¶؛,gdSW%<@TFLP@Iq&I38dufV:TXWOba%>ke3d 5E %b["nf$.ROJlxRZ2D!=i( B@$fb[&Rxd0+ģ Aᛐx2b Jٔ14Ap?HIcQ__zž'rxps޻>bRQBr$LeKM-@8`+*~=J)b)ۋl[2%{ D,* $ 8TDy~1Kڼg3DdwE8VӲ%##QuvFR0(/OfѤ|aꝝa~tVJD11l30<%!/ xL.%$%-ubzy=W.$>ǃidTOo}~{(P!<^e1;–} Bl[?/!^6@ByP>?ҊaP&meRBDA9tIgJsY/Njh`T:S, j]N"y0lB y~! iH s1 Mg0c@~}E!7 yBPVh©#@* ;g4߾į܊ Nta  ANJ^iQ[@M;n<@'o(ƣH)4=q O-:.WS&a@|<^t,e]"a;FP/%y$amC8ԩΝ뻝sz&R=^;_ MH۩ pC(RFP(E)H@$3lEwpHȿ*mJ! dBci:()+Ey~)ԛ/ND H4E(襬ɅA]gNM @j)y 'm _p8C;UH$UU5L/BAʲ fz/̀o۶3:(mt142_V>ʗ_dxpH}>5. &0J 1m Œ&HtHILAC3:,|'!B &xMt 5>O~uZVǏY˧o|Kozξ_9.Lp"U ѝkI2i"cI>r\-5e$&ɵo9;j8aexswMӰdNE#0@w#}GgD"[2i*&VhΩܿYƒxt;@(|~P"P`>qmȕ_U󮦲"k\[Nw/Az`{0[;̞䤁R*.@ J` /"ӽ/N<"T &}C D4J.>kN%qp0N*g8Q|룦2>:VБ6fv6{)eYjg?1%yx L'W_U6lb(3ԋf zȏQaYIɷ&?\5* 4L*B)P47oz }IT%\/+7t,p*zBCx`xQV&@RQ$rtM#7;k] ԕTRWLkIesYV3 ezF"LL&IRw೏c;b<{Nڼy3h Ń[W2؅BhyuO8\9*),cKɞoDmUiIm#4#ix 3\VL"Kڻ|MWm&AmY>}4fyChvݣy :SH?KR0'Sgbh:J}Q( ̮nrQli$6-M IY&~h}فx2u>l6K,00A a}v"d*C$:>ϡ'jr+y=46T O0~D 2 (I1%AY`'QH_2O£ CCqy)d&?8GSsJ<'O+ZnG)mc&Xs Oxg[&>vM4EJID&C#R߬\> / x Ln >z3V@)6&*D89}躳`(#C]l9? sr\<4F1_)%gN?jcs<- n,K!wlBZ C*Θ[oz! ^6f~Mʳ.Nư\p)՘ҰX|ڒ.Z3AV233&%NHt>g:э1eԚ 4̓{4=cO&H$hJ)Κ~󫧀&2ivRa(<셧__ԯC kQ{.Ay>4Db8Jle}i&-ml[bl1Zi+˲1Nk3%]ZLmsa MG]kx6(!Q*c%RC ܞ%鋙Y8|W> Y߶e:N/:>[ bܱ]q5ɃR _X|dRAJPh6tD+5%5BCγڶ: S ;Ads5T)*SRf'Dž8p|5; D # {qhhchd@wR9J)jt&c&:u(AFݴϕl_[_'_gK2c\m?{ a?5s@FJ̬ndvuUl,P˲@s 3 %$m 4BCJ/ګ,DJ\(Mϊl-ji , \2{dj+If.(` 8~d}}7_z|,^Q^?+wӿ%Ag;eIeA,ttM53s e~RjtVJ,`]6t$XzfV7R_ 8˜hJ!%HA hJHk(4 \(&۬AK|Lg,8.1#cm:dm|!<#[ \_m1'[v/V"d 2Ž6vV)! Yfݟ%mBe5̬gRq%~/S/tO!;4d:^p݉=CKE ǣil@R_932]x^5-{nwdewIDAT;73.bFD:v[sK- 5Ǫ})rɛ\i| ߯(;_C?8.v8-J\*)21j` ,ˢgxvuv w* -@>>gL"j^@jv*4dUJ`Ɣg1UE`@5D?;;m-Ww(ʴ y|#.RhxtYם8TȣWp3'fISq3wԾ;?]&Ռ~u` \$wdݝ{Yk3[:[鰇Hx2/edaPWTFJ z}x.FB!mylaglj8BoW_1y%m +8k1ݺ.ٙx?U&$Ҳ)]”IN9kgXBi@>kڶ?ߖ^89f~{gcNj_3O47}kmк=>I]((ro:t zL*`FU1QӟvYc؀:4b6\2k728|[I +8s?o&LlI?ȗϺ)#t<~o "+:ǖ4W{^'>F r%AvD]{xevv/#=&<^jʙZ^Oua3%+xhczeŁ̸}.Yd7N-6w-0If]O'Vp2໦?{`@xr*eκh MGt4گa{ʽ7NiS 9T *u~}ir F.!G۲1 f74;2ȚXu:D-]{u I6dsniϟr0-I5h钰3HM BdvK|sG%h*RQ,?MSy-Bw6&_# zK wʽ.4+&qܹ'^}$RIۈ&c N=!:{2}2&lRd?I%Sˎ/b:ZYy-;z)>I\BP_ŒFJk §T2JF]F4g@7wD 5P)+5>ݭ{Ox? pmW*]~7+fY $`(6ƶٶNFHH㡩( 7p Pjh(qFr:Ɛݒ63X>eAҼ=|;Q/G~Q-M E>vg/D銤/vvQ/HpOrYyDRqVj?d )+h~nLঐ.!ZĒK[7m;a"~=kgSW%-C0kڶ}'V3Ǐm;n_,oIY4砑x"5~E"0Uua 7\xeex- tn@d{JH_v7[9)1) S !h V0U-&f?2m]/uD1AS$kپ6B[_Rt%x`_75,4"'F"l72D> װ}c̾%mV6iΘn݉sO'"rÅPZRݼ8agg[;K*}bC3@YVARϧ[@!2JM'>#عtɎ \AM?w[۶3nJY㤙Y4}{Xm#n`8J_:;\ 3 cAm`W_{Ǻb+ɼ,iD;JrNjr_L@P\]Fmqs&N2id]vvwK%=(!)JaJRԓG?Nei[I"V!ۏ|a.OȬ%|p4TMhxAlƳ.!\s_o3-cmm=]lknNδ&ttxVUS8qţM[+gJ2 ~%uXKѷ bh:^C0"cFY:b)jga.kǣDUIc6^wHغe7<̭my9yEc4gϹ)e.*RJz:xez6l;2HIY)']HQA!mTJ1z2M4oN|Ӷp4T_8NLmt ;S#}@:HG7<bR4V:LGxͅ>ֶl˒I?,?o3lCJ!"œrƬW?)bgή3䂙]"jB(kwmᥭhaiL:6NJɂ)W74q^-/_x;mK*ɅQ_Ri$ll}eKF#t000'n3)P&4RQPt` #{/ ;q{YR>_'@|_5m[iƶMt!-`YBΝY5McJn}krx#ٱ~vbkG?uffau3 fz5`b7?~aTڥL).:U%ƮP3aYj 6BP "6zJj=*B*07%͵!_6-:P"%95S9'y>5E凵?Wƫ1MW[08<Į=(]u̫k΀>^xNjF;s>O$gW_A,)9ed@}D1T"/S,e~m3j)/,ͬH\+k y_~;_K?G_wfKwkz2( q|,><$NjCihb 2J.#ۍQ~DZMc}!Kb?ңiaVM7l$怮APNfI1(^ְq:B3r2x. ~=stmͯv(Gg+}!3,ԩ U9rÁ>JD'{-~Wh~cY-'7kxfP"l)  *|6Lczd*>"A6ǟyCkSm|ݭ$(=4p쥜68kPgiDQjjj=ƧWL|:Ni^@ǒ6Clnk+5 Am\6MәR=`~cz s Ml"|y{-sh/vip?Sk;5vgUagZI({#[RR yl*D ̯K{6D"%O}I%dvC3PfJhxߴgs%aHY)^aםj}ps7kx~?ƒjNvg]ƔÎ/[tvF^쪥+Do=x+Oo}^%$lz+aLTY>*hqfSWVgJ+kx5cVȬjx{xzz۸-8U|l\jut 2W?żiݜ9y<X_8h$$$6٣dـ #\s-rܲ =A+xZ})it 2g4s2sk1M3Ӎ[4M3Bgwo]>؎3Vqj\xG3&W]sRimli-/܎T/Nlg z5ܪ۴i)#yGQWi(dzxVOƣ$R1wPY:noG;?~"M9/x^ó_Q&[ktn9ϋ7ܱ0<痲~?Gnv{A}מ&iZ@Si5;ֳpYO# U28N $duӕ΀ڒ ,|-\ߞD/lkxu ! ͮ‡/Y$=GCݷ$R&J̮l FJֺ?n{&c(:SkYV?SػwW>6z<__zڞaM|=F$VVs^ EOya)4/ʳ.=k' pQ_IM5\/3v2iw/Omy'wLOxTikάۨm#i37_]sWJ]Dsݧi[mo[Wܶ5ut%yE,)ӎ㼅F=K=~㺿OҢ_UOi5MU-Xղ̾0e:kI|OX rh7R2ڞ?,1Ù)ᱭ/_eK gN9[LJx!7Zs0~+nB@V` ŕX?{ধ~^$ RRqÅ_ㄦYcB.4,bpx@ _n?^kFew/OmZ ;^S9mšJ*ij9c̹OʣD RpX~xY6ml1wP(Mn@A,`kwOn~WvoSI C$E9e">` ly\U\{㴙;N&jecw'+v-/@έbJk8x>wſYy_Ε[WX"'b`&^w=pᶏ c}NV\s^e0: T\ 3#_y}KW=?8)PYsǃ0}'o\+ 5gpma */@ϖ5}I@4]'aΜ`^(S3 Y^ټc[^dݞmciy5* J^Z9sqw_?yK+H4锃 LII h^ʶB!tu:e>_E г 8f?[q?# g a[Q1RVlgPt맮S{߁-G [sg$Mi!;KT0:9} +G_W_ޓ( 03y'vT-G\#TEU\l9j pLyctF(c8r9F\(c8r9F\()p jIENDB`kchmviewer-5.3/packages/kchmviewer.desktop0000644000175000001440000000040311311623221017537 0ustar timusers[Desktop Entry] Name=KchmViewer Categories=Qt;KDE;Office;Viewer; Terminal=false Type=Application Encoding=UTF-8 Exec=kchmviewer %f Icon=kchmviewer GenericName=CHM file viewer Comment=A viewer of CHM (MS-Help) files MimeType=application/chm;application/x-chm; kchmviewer-5.3/packages/rpm.spec0000644000175000001440000000163711311626155015475 0ustar timusersSummary: Free CHM files viewer application Name: kchmviewer Version: 0.7 Release: 1 License: GPLv3+ Group: Applications/Office Packager: kchmviewer@ulduzsoft.com URL: http://www.kchmviewer.net %description Kchmviewer is a free, open-source chm (MS HTML help file format) viewer, which uses Qt toolkit. Its main advantage is the best support for non-English languages. Unlike other viewers, kchmviewer in most cases is able to correctly detect the chm file encoding and show it. It correctly shows the index and table of context in Russian, Spanish, Romanian, Korean, Chinese and Arabic help files, and with new search engine is able to search in any chm file no matter what language it is written. Author: ------- George Yunaev Requires: libqt4 >= 4.5.0 %files %defattr(-,root,root) /usr/bin/kchmviewer %defattr(-,root,root) /usr/share/applications/kchmviewer.desktop %defattr(-,root,root) /usr/share/pixmaps/kchmviewer.png kchmviewer-5.3/packages/CMakeLists.txt0000644000175000001440000000022611311626155016554 0ustar timusersINSTALL( FILES kchmviewer.desktop DESTINATION ${KDE4_XDG_APPS_INSTALL_DIR} ) KDE4_INSTALL_ICONS( ${KDE4_ICON_INSTALL_DIR} ) KDE4_UPDATE_ICONCACHE( ) kchmviewer-5.3/build-release.sh0000755000175000001440000000332611514013413015306 0ustar timusers#!/bin/sh # Export the source code PACKAGE=kchmviewer BINARYFILE="bin/kchmviewer" FILE_VERSION="src/version.h" RPM_ARCH="i586" RPM_OUTDIR="/usr/src/packages/RPMS/$RPM_ARCH" # Get current version VERSION_MAJOR=`sed -n 's/^\#define\s\+APP_VERSION_MAJOR\s\+\([0-9]\+\)/\1/p' $FILE_VERSION` VERSION_MINOR=`sed -n 's/^\#define\s\+APP_VERSION_MINOR\s\+\([0-9]\+\)/\1/p' $FILE_VERSION` CURRENTVER="$VERSION_MAJOR.$VERSION_MINOR" BUILDDIR="$PACKAGE-$CURRENTVER" RELEASEDIR="release-$CURRENTVER" if [ -d "$BUILDDIR" ]; then rm -rf "$BUILDDIR" fi if [ -d "$RELEASEDIR" ]; then rm -rf "$RELEASEDIR" fi mkdir "$RELEASEDIR" || exit 1 svn export . "$BUILDDIR/" || exit 1 # Source package tar zcf "$RELEASEDIR/$PACKAGE-$CURRENTVER.tar.gz" $BUILDDIR || exit 1 # Build it (cd "$BUILDDIR" && qmake "CONGIF+=release" && make -j4) || exit 1 # Making an RPM rm -rf "$BUILDDIR/buildroot" mkdir -p "$BUILDDIR/buildroot/usr/bin" mkdir -p "$BUILDDIR/buildroot/usr/share/applications" mkdir -p "$BUILDDIR/buildroot/usr/share/pixmaps" strip --strip-all "$BUILDDIR/$BINARYFILE" cp "$BUILDDIR/$BINARYFILE" "$BUILDDIR/buildroot/usr/bin/" || exit 1 cp packages/*.desktop "$BUILDDIR/buildroot/usr/share/applications" cp packages/*.png "$BUILDDIR/buildroot/usr/share/pixmaps" # Prepare a spec file sed "s/^Version: [0-9.]\\+/Version: $CURRENTVER/" packages/rpm.spec > $BUILDDIR/rpm.spec rpmbuild -bb --target=$RPM_ARCH --buildroot `pwd`"/$BUILDDIR/buildroot/" $BUILDDIR/rpm.spec || exit 1 mv $RPM_OUTDIR/*.rpm $RELEASEDIR || exit 1 rm -rf "$BUILDDIR" # win32 sh build-win32-mingw.sh || exit 1 (cd nsis && sh create_installer.sh) || exit 1 mv nsis/InstallKchmviewer*.exe $RELEASEDIR rm -rf "$BUILDDIR" rm -rf "build.win32" echo "Done! Version $CURRENTVER released!" kchmviewer-5.3/kchmviewer.pro0000644000175000001440000000006710663653533015140 0ustar timusersSUBDIRS += lib src TEMPLATE = subdirs CONFIG += debug kchmviewer-5.3/lib/0000755000175000001440000000000011514013420012772 5ustar timuserskchmviewer-5.3/lib/lib.pro0000644000175000001440000000005210663653533014302 0ustar timusersSUBDIRS += libchmfile TEMPLATE = subdirs kchmviewer-5.3/lib/libchmfile/0000755000175000001440000000000011514013420015070 5ustar timuserskchmviewer-5.3/lib/libchmfile/libchmtextencoding.cpp0000644000175000001440000001414611513542133021463 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "libchmfileimpl.h" #include "libchmtextencoding.h" // Do not try to embed those in the text_encoding_table, it does not work - at least with gcc. static short lcid_arabic[] = { 0x1401, 0x3C01, 0x0C01, 0x0801, 0x2C01, 0x3401, 0x3001, 0x1001, 0x1801, 0x2001, 0x4001, 0x0401, 0x2801, 0x1C01, 0x3801, 0x2401, 0x0429, 0x0420, 0, }; static short lcid_baltic[] = { 0x0425, 0x0426, 0x0427, 0 }; static short lcid_centralEuropean[] = { 0x041C, 0x041A, 0x0405, 0x040E, 0x0415, 0x0418, 0x081A, 0x041B, 0x0424, 0 }; static short lcid_ChineseSimplifiedGB18030[] = { 0x0804, 0 }; static short lcid_ChineseSimplifiedGBK[] = { 0x0804, 0 }; static short lcid_ChineseSimplifiedGB2313[] = { 0x1004, 0 }; static short lcid_ChineseTraditionalBig5[] = { 0x0404, 0x1404, 0 }; static short lcid_ChineseTraditionalBigHKSCS[] = { 0x0C04, 0 }; static short lcid_CyrillicCP1251[] = { 0x082C, 0x0423, 0x0402, 0x042F, 0x0419, 0x0C1A, 0x0444, 0x0422, 0x0843, 0 }; static short lcid_CyrillicKOI8R[] = { 0x7001, // artifical LCID 0 }; static short lcid_CyrillicBrokenCPKOI[] = { 0x7002, // artifical LCID 0 }; static short lcid_CyrillicBrokenKOICP[] = { 0x7003, // artifical LCID 0 }; static short lcid_Greek[] = { 0x0408, 0 }; static short lcid_Hebrew[] = { 0x040D, 0 }; static short lcid_Japanese_eucJP[] = { 0x0411, 0 }; static short lcid_Japanese_JIS7[] = { 0x0411, 0 }; static short lcid_Japanese_ShiftJIS[] = { 0x0411, 0 }; static short lcid_Korean_eucKR[] = { 0x0412, 0 }; static short lcid_TamilTSCII[] = { 0x0449, 0 }; static short lcid_ThaiTIS[] = { 0x041E, 0 }; static short lcid_UkrainianKOI[] = { 0x7006, 0 }; static short lcid_Turkish[] = { 0x042C, 0x041F, 0x0443, 0 }; static short lcid_Vietnamese[] = { 0x042A, 0 }; static short lcid_UnicodeUTF8[] = { 0x7004, // artifical LCID 0 }; static short lcid_UnicodeUTF16[] = { 0x7005, // artifical LCID 0 }; static short lcid_Western[] = { 0x0436, 0x042D, 0x0403, 0x0406, 0x0813, 0x0413, 0x0C09, 0x2809, 0x1009, 0x2409, 0x1809, 0x2009, 0x1409, 0x3409, 0x1C09, 0x2C09, 0x0809, 0x0409, 0x0438, 0x040B, 0x080C, 0x0C0C, 0x040C, 0x140C, 0x100C, 0x0C07, 0x0407, 0x1407, 0x1007, 0x0807, 0x040F, 0x0421, 0x0410, 0x0810, 0x083E, 0x043E, 0x0414, 0x0814, 0x0416, 0x0816, 0x0432, 0x2C0A, 0x400A, 0x340A, 0x240A, 0x140A, 0x1C0A, 0x300A, 0x440A, 0x100A, 0x480A, 0x080A, 0x4C0A, 0x180A, 0x3C0A, 0x280A, 0x500A, 0x0C0A, 0x380A, 0x200A, 0x0441, 0x081D, 0x041D, 0x0434, 0x0435, 0x042B, 0x042C, 0x0439, 0x043A, 0x044E, 0x044F, 0x081A, 0x0443, 0 }; static const LCHMTextEncoding text_encoding_table [] = { { "Arabic", "CP1256", lcid_arabic }, { "Baltic", "CP1257", lcid_baltic }, { "Central European", "CP1250", lcid_centralEuropean }, { "Chinese Simplified", "GB18030", lcid_ChineseSimplifiedGB18030 }, { "Chinese Simplified", "GBK", lcid_ChineseSimplifiedGBK }, { "Chinese Simplified", "GB2313", lcid_ChineseSimplifiedGB2313 }, { "Chinese Traditional", "Big5", lcid_ChineseTraditionalBig5 }, { "Chinese Traditional", "Big5-HKSCS", lcid_ChineseTraditionalBigHKSCS }, { "Cyrillic", "CP1251", lcid_CyrillicCP1251 }, { "Cyrillic", "KOI8-R", lcid_CyrillicKOI8R }, { "Cyrillic Broken", "CP1251/KOI8-R", lcid_CyrillicBrokenCPKOI }, { "Cyrillic Broken", "KOI8-R/CP1251", lcid_CyrillicBrokenKOICP }, { "Greek", "CP1253", lcid_Greek }, { "Hebrew", "CP1255", lcid_Hebrew }, { "Japanese", "Shift-JIS", lcid_Japanese_ShiftJIS }, { "Japanese", "eucJP", lcid_Japanese_eucJP }, { "Japanese", "JIS7", lcid_Japanese_JIS7 }, { "Korean", "eucKR", lcid_Korean_eucKR }, { "Tamil", "TSCII", lcid_TamilTSCII }, { "Thai", "TIS-620", lcid_ThaiTIS }, { "Ukrainian", "KOI8-U", lcid_UkrainianKOI }, { "Turkish", "CP1254", lcid_Turkish }, { "Vietnamese", "CP1258", lcid_Vietnamese }, { "Unicode", "UTF-8", lcid_UnicodeUTF8 }, { "Unicode", "UTF-16", lcid_UnicodeUTF16 }, { "Western", "CP1252", lcid_Western }, { 0, 0, 0 } }; const LCHMTextEncoding * LCHMFileImpl::getTextEncodingTable() { return text_encoding_table; } const LCHMTextEncoding * LCHMFileImpl::lookupByLCID( short lcid ) { for ( const LCHMTextEncoding * t = text_encoding_table; t->family; t++ ) { for ( const short * lcids = t->lcids; *lcids; lcids++ ) if ( *lcids == lcid ) return t; } return 0; } int LCHMFileImpl::getEncodingIndex( const LCHMTextEncoding * enc) { for ( int i = 0; text_encoding_table[i].family; i++ ) if ( (text_encoding_table + i) == enc ) return i; return -1; } const LCHMTextEncoding * LCHMFileImpl::lookupByQtCodec(const QString & codec) { for ( const LCHMTextEncoding * t = text_encoding_table; t->family; t++ ) if ( codec == t->qtcodec ) return t; return 0; } kchmviewer-5.3/lib/libchmfile/chmlib-win32/0000755000175000001440000000000011514013420017266 5ustar timuserskchmviewer-5.3/lib/libchmfile/chmlib-win32/chm_lib.h0000644000175000001440000001355611270704705021062 0ustar timusers/* $Id: chm_lib.h,v 1.10 2002/10/09 01:16:33 jedwin Exp $ */ /*************************************************************************** * chm_lib.h - CHM archive manipulation routines * * ------------------- * * * * author: Jed Wing * * version: 0.3 * * notes: These routines are meant for the manipulation of microsoft * * .chm (compiled html help) files, but may likely be used * * for the manipulation of any ITSS archive, if ever ITSS * * archives are used for any other purpose. * * * * Note also that the section names are statically handled. * * To be entirely correct, the section names should be read * * from the section names meta-file, and then the various * * content sections and the "transforms" to apply to the data * * they contain should be inferred from the section name and * * the meta-files referenced using that name; however, all of * * the files I've been able to get my hands on appear to have * * only two sections: Uncompressed and MSCompressed. * * Additionally, the ITSS.DLL file included with Windows does * * not appear to handle any different transforms than the * * simple LZX-transform. Furthermore, the list of transforms * * to apply is broken, in that only half the required space * * is allocated for the list. (It appears as though the * * space is allocated for ASCII strings, but the strings are * * written as unicode. As a result, only the first half of * * the string appears.) So this is probably not too big of * * a deal, at least until CHM v4 (MS .lit files), which also * * incorporate encryption, of some description. * ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 2.1 of the * * License, or (at your option) any later version. * * * ***************************************************************************/ #ifndef INCLUDED_CHMLIB_H #define INCLUDED_CHMLIB_H #ifdef __cplusplus extern "C" { #endif /* RWE 6/12/1002 */ #ifdef PPC_BSTR #include #endif #ifdef WIN32 #include #ifdef __MINGW32__ #define __int64 long long #endif typedef unsigned __int64 LONGUINT64; typedef __int64 LONGINT64; #else typedef unsigned long long LONGUINT64; typedef long long LONGINT64; #endif /* the two available spaces in a CHM file */ /* N.B.: The format supports arbitrarily many spaces, but only */ /* two appear to be used at present. */ #define CHM_UNCOMPRESSED (0) #define CHM_COMPRESSED (1) /* structure representing an ITS (CHM) file stream */ struct chmFile; /* structure representing an element from an ITS file stream */ #define CHM_MAX_PATHLEN (512) struct chmUnitInfo { LONGUINT64 start; LONGUINT64 length; int space; int flags; char path[CHM_MAX_PATHLEN+1]; }; /* open an ITS archive */ #ifdef PPC_BSTR /* RWE 6/12/2003 */ struct chmFile* chm_open(BSTR filename); #elif defined (WIN32) struct chmFile* chm_open(const WCHAR *filename); #else struct chmFile* chm_open(const char *filename); #endif /* close an ITS archive */ void chm_close(struct chmFile *h); /* methods for ssetting tuning parameters for particular file */ #define CHM_PARAM_MAX_BLOCKS_CACHED 0 void chm_set_param(struct chmFile *h, int paramType, int paramVal); /* resolve a particular object from the archive */ #define CHM_RESOLVE_SUCCESS (0) #define CHM_RESOLVE_FAILURE (1) int chm_resolve_object(struct chmFile *h, const char *objPath, struct chmUnitInfo *ui); /* retrieve part of an object from the archive */ LONGINT64 chm_retrieve_object(struct chmFile *h, struct chmUnitInfo *ui, unsigned char *buf, LONGUINT64 addr, LONGINT64 len); /* enumerate the objects in the .chm archive */ typedef int (*CHM_ENUMERATOR)(struct chmFile *h, struct chmUnitInfo *ui, void *context); #define CHM_ENUMERATE_NORMAL (1) #define CHM_ENUMERATE_META (2) #define CHM_ENUMERATE_SPECIAL (4) #define CHM_ENUMERATE_FILES (8) #define CHM_ENUMERATE_DIRS (16) #define CHM_ENUMERATE_ALL (31) #define CHM_ENUMERATOR_FAILURE (0) #define CHM_ENUMERATOR_CONTINUE (1) #define CHM_ENUMERATOR_SUCCESS (2) int chm_enumerate(struct chmFile *h, int what, CHM_ENUMERATOR e, void *context); int chm_enumerate_dir(struct chmFile *h, const char *prefix, int what, CHM_ENUMERATOR e, void *context); #ifdef __cplusplus } #endif #endif /* INCLUDED_CHMLIB_H */ kchmviewer-5.3/lib/libchmfile/chmlib-win32/chmlib.lib0000755000175000001440000005654611365452554021262 0ustar timusers! / 1272321873 0 0 0 206 ` ====_chm_open_chm_close_chm_set_param_chm_resolve_object_chm_retrieve_object_chm_enumerate_chm_enumerate_dir_LZXinit_LZXteardown_LZXreset_LZXdecompresschm_lib.o/ 1272321850 0 0 100666 15466 ` LT4B.text.0^ 0`.data@0.bss0.rdata`H/@`@U}~ UE 9v>UET$D$E$EE‹EE E)‹E U}~ UE 9v>UET$D$E$EE‹EE E)‹E UE wbEЋE@ ‹E ‹E ‹EEPEE PE UE wdEЋE@ ‹E ‹E Љ‹EEPEE PE UE w{EEE1EUEUEUJЊ E UM}ɋMEUQEPEE PE UE w{EEE1EUEUEUJЊ E UM}ɋMEUQEPEE PE UD$ ED$E D$E$`USE XtE `t #ED$ D$E D$E$ED$E D$E$[ED$E D$E$?E D$E D$E$#ED$E D$E$ED$E D$E$cED$E D$E$E(D$E D$E$E8D$E D$E$E@D$E D$E$EHD$E D$E$EPD$E D$E$ED$D$*$t E@uE@W.E@uE@_haE@u.E tEXD$E D$E$(&$EHHXLEPT@PڋMAXQ\[UE Tt ED$ D$E D$E$vED$E D$E$ED$E D$E$E D$E D$E$ED$E D$E$uEȉ$EP(E)ÉEȉEjDžD$E$uEȉ$^$HEЉUԋEЋUԍ@E@$ED$E D$w$ƅww$E܃}t)EHw,>,A,>-?-@*-@+.A=.A~.A.filegchm_lib.c _ 3 E6 X jD }  O 4k 28DC \ y  ^    ? L C ^     Z 3 F Y m v " K% & * .text.^.data.bss.rdataA    # 3 B _stricmp _memcmp O Y _LZXinit _memcpy _malloc h _strncpy _strlen _free r__unmarshal_char_array__unmarshal_uchar_array__unmarshal_int32__unmarshal_uint32__unmarshal_int64__unmarshal_uint64__unmarshal_uuid__CHMU_RESET_TABLE__CHMU_LZXC_CONTROLDATA__CHMU_CONTENT__CHMU_SPANINFO__unmarshal_itsf_header__unmarshal_itsp_header__chm_pmgl_marker__unmarshal_pmgl_header__chm_pmgi_marker__unmarshal_pmgi_header__unmarshal_lzxc_reset_table__unmarshal_lzxc_control_data__chm_fetch_bytes_chm_open_chm_close_chm_set_param__chm_skip_cword__chm_skip_PMGL_entry_data__chm_parse_cword__chm_parse_UTF8__chm_parse_PMGL_entry__chm_find_in_PMGL__chm_find_in_PMGI_chm_resolve_object__chm_get_cmpblock_bounds__chm_decompress_block__chm_decompress_region_chm_retrieve_object_chm_enumerate_chm_enumerate_dir___umoddi3___udivdi3_ReadFile@20_SetFilePointer@16_CreateFileW@28_CloseHandle@4_LZXteardown_LZXreset_LZXdecompress_strnicmplzx.o/ 1272321861 0 0 100666 8049 ` L~.text< 0`.data@0.bss0.rdata @`@US$EEӈ؉E}~}~ 9$UEE$‹EEuE$EUPEUP}u E*}u E2EEE@EPEPEPEPEUfBE@ E@0E@,Ef@$E@8E@<E@ EEUƄ+E}~EEUƄ\RE}~E$[U}t!Et E$E$UE@EPEPEPEPE@ E@0E@,Ef@$E@8E@<E@ EEUƄ+E}~EEUƄ\RE}9~UWVS$EE ӈ؉EEEEE]JE8u;uEEE;Ev EE 6EfF}MuC;ErmG;E vE;EEEfC;EreeEE8EEo6Effu/EEfE@Ef6UEfE6EfƸ+EMMЋUЈЃtFE+E ;Ew6EfEEE;EvSC;E6mGE;Eu(EtC;Er$[^_UWVS0E0EXE@EE`E@E ljغ)ȉ ƃE~ÉEEUыUE}vҋEP@ET$ D$D$$Lt EETE@E ljغ)ȉ ƃE~ËE@EEfE؃}vDEme؉#E܅ E؃}u EEfE؃}wËE؉EEUE܋E܈+E܉Ã}uu8E@E ljغ)ȉ ƃE~ÉEEEU E}Mu}uu8E@E ljغ)ȉ ƃE~ÉEEEU E}Mu}\8E@E ljغ)ȉ ƃE~ĉEKE8E@E ljغ)ȉ ƃE~ËE@EEfE؃}vDEme؉#E܅ E؃}u EEfE؃}wËE؉EEUE܋E܈+E܉ËEU +EE}yEEU ‹EE}Mu.EU +EE}yEEU ‹EEE;EE0EXEUP0[^_UWVSEE xE|E@ EE@EE@EE@EE@EEEE@ KEEE8E @E  ljغ)ȉ ƃE ~ĉEK}8E @E  ljغ)ȉ ƃE ~ÉE8E @E  ljغ)ȉ ƃE ~ÉEE E‹EP4E@ 1E@,E@$fuTE@(tE 8E @E  ljغ)ȉ ƃE ~ÉUfB$8E @E  ljغ)ȉ ƃE ~ÉE8E @E  ljغ)ȉ ƃE ~ÉEE UEP(EP(EP,E@$tE`E @E  ljغ)ȉ ƃE ~ÉEEUыUTE}vҋESETT$ D$D$$-t lpE tE+lD$D$ D$T$E$t lptE lpE tE@U+lT$D$ D$L$E$gt *lptE EdE+T$ D$D$ $t  E,t E@<lpE tE\RlD$D$ D$T$E$t n lptE Et.E\RT$ D$D$ $] E@<8E @E  ljغ)ȉ ƃE ~Ã~m E U B ‹E  ‹E  ЉEE E U B ‹E  ‹E  ЉEE E U B ‹E  ‹E  ЉEE   E ;x x;E r   E;E~EEE)EEP,E)‹EP,EH!EEE;Ev  E@$> A z{ E @E  ljغ)ȉ ƃE ~ËEdEEfE}vGEme#E E}u  EEfE}wEEEU+EE+EÁ}E|‹EEMmEE}8E @E  ljغ)ȉ ƃE ~ËEt.EEfE}vGEme#E E}u  EEfE}wEEċEċU\REE+EËEEEEE}}EE8E @E  ljغ)ȉ ƃE ;]|ËEȺ )ȉЉE̋EȈ+]ȋE@E̍EEEEEEEE:}uEE,}uEEEEEEEEEEEEE|EEEEEEE;Ev OE)EEUEEEE;|s"}MuEEEE}Mu߃}E @E  ljغ)ȉ ƃE ~ËEdEEfE}vGEme#E E}u UEEfE}wEEEU+EE+EÁ}E|‹EEMmEE}8E @E  ljغ)ȉ ƃE ~ËEt.EEfE}vGEme#E E}u CEEfE}wEEċEċU\REE+EËEEEEE}EEȋE@E}Hm8E @E  ljغ)ȉ ƃE ;]|ËEȺ )ȉЉE̋EȈ+]ȋEE8E @E  ljغ)ȉ ƃE ~ËESEEfE}vDEme#E E}u EEfE}wËEEEUTEE+EËEEW}8E @E  ljغ)ȉ ƃE ~ËESEEfE}vDEme#E E}u EEfE}wËEEEUTEE+EËEEw}~j8E @E  ljغ)ȉ ƃE ;]|ËEȺ )ȉЉE̋EȈ+]ȋEEEEEEEEE:}uEE,}uEEEEEEEEEEEEE|EEEEEEE;Ev E)EEUEEEE;|s"}MuEEEE}Mu߃}VEE ;xv EU|D$E D$$EE EEE@,E}~ }}}t U}uEEM)|T$D$E$EUP EUPEUPEUPE@0=HEH07E@4)}~ E@fd=CreateFileA(filename, + if ((newHandle->fd=CreateFileW(filename, GENERIC_READ, 0, NULL, Only in chmlib-0.40.mod/src: chm_lib.c~ diff -ur chmlib-0.40/src/chm_lib.h chmlib-0.40.mod/src/chm_lib.h --- chmlib-0.40/src/chm_lib.h 2009-05-23 07:43:31.000000000 -0700 +++ chmlib-0.40.mod/src/chm_lib.h 2009-10-24 15:49:48.000000000 -0700 @@ -52,6 +52,7 @@ #endif #ifdef WIN32 +#include #ifdef __MINGW32__ #define __int64 long long #endif @@ -86,6 +87,8 @@ #ifdef PPC_BSTR /* RWE 6/12/2003 */ struct chmFile* chm_open(BSTR filename); +#elif defined (WIN32) +struct chmFile* chm_open(const WCHAR *filename); #else struct chmFile* chm_open(const char *filename); #endif kchmviewer-5.3/lib/libchmfile/libchmfileimpl.h0000644000175000001440000002707611365447675020270 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef INCLUDE_LIBCHMFILEIMPL_H #define INCLUDE_LIBCHMFILEIMPL_H #if defined (USE_PATCHED_CHMLIB) #include "chmlib-win32/chm_lib.h" #else #include "chm_lib.h" #endif #include #include "libchmfile.h" #include "libchmtocimage.h" #include //! Keeps the intermediate search result class LCHMSearchProgressResult { public: inline LCHMSearchProgressResult() {} inline LCHMSearchProgressResult( unsigned int t, unsigned int u ) : titleoff(t),urloff(u) {} QVector offsets; quint32 titleoff; quint32 urloff; }; //! An array to keeps the intermediate search results typedef QVector LCHMSearchProgressResults; //! CHM files processor; the implementation class LCHMFileImpl { public: LCHMFileImpl(); ~LCHMFileImpl(); // Implementations for LCHMFile members bool loadFile( const QString& archiveName ); void closeAll(); QString title() const { return encodeWithCurrentCodec( m_title ); } QString homeUrl() const { return encodeWithCurrentCodec( m_home ); } bool getFileContentAsString( QString * str, const QString& url, bool internal_encoding = false ); bool getFileContentAsBinary( QByteArray * data, const QString& url ) const; bool getFileContentAsBinary( QByteArray * data, const chmUnitInfo *ui ) const; bool getFileSize( unsigned int * size, const QString& url ); bool enumerateFiles( QStringList * files ); QString getTopicByUrl ( const QString& url ) const; const QPixmap * getBookIconPixmap( unsigned int imagenum ); bool setCurrentEncoding( const LCHMTextEncoding * encoding ); //! Parse the HHC or HHS file, and fill the context (asIndex is false) or index (asIndex is true) array. bool parseFileAndFillArray (const QString& file, QVector< LCHMParsedEntry > * data, bool asIndex ); /*! * \brief Fast search using the $FIftiMain file in the .chm. * \param text The text we're looking for. * \param wholeWords Are we looking for whole words only? * \param titlesOnly Are we looking for titles only? * \param results A string-string hashmap that will hold * the results in case of successful search. The keys are * the URLs and the values are the page titles. * \param phrase_search Indicates that word offset information should be kept. * \return true if the search found something, false otherwise. */ bool searchWord( const QString& word, bool wholeWords, bool titlesOnly, LCHMSearchProgressResults& results, bool phrase_search ); /*! * \brief Finalize the search, resolve the matches, the and generate the results array. * \param tempres Temporary search results from SearchWord. * \param results A string-string hashmap that will hold the results in case of successful search. * The keys are the URLs and the values are the page titles. */ void getSearchResults( const LCHMSearchProgressResults& tempres, QStringList * results, unsigned int limit_results = 500 ); //! Looks up fileName in the archive. bool hasFile( const QString& fileName ) const; //! Looks up fileName in the archive. bool ResolveObject( const QString& fileName, chmUnitInfo *ui ) const; //! Retrieves an uncompressed chunk of a file in the .chm. size_t RetrieveObject( const chmUnitInfo *ui, unsigned char *buffer, LONGUINT64 fileOffset, LONGINT64 bufferSize) const; //! Encode the string with the currently selected text codec, if possible. Or return as-is, if not. inline QString encodeWithCurrentCodec( const QByteArray& str) const { return (m_textCodec ? m_textCodec->toUnicode( str.constData () ) : str); } //! Encode the string with the currently selected text codec, if possible. Or return as-is, if not. inline QString encodeWithCurrentCodec (const char * str) const { return (m_textCodec ? m_textCodec->toUnicode( str ) : (QString) str); } //! Encode the string from internal files with the currently selected text codec, if possible. //! Or return as-is, if not. inline QString encodeInternalWithCurrentCodec (const QString& str) const { return (m_textCodecForSpecialFiles ? m_textCodecForSpecialFiles->toUnicode( qPrintable(str) ) : str); } //! Encode the string from internal files with the currently selected text codec, if possible. //! Or return as-is, if not. inline QString encodeInternalWithCurrentCodec (const char * str) const { return (m_textCodecForSpecialFiles ? m_textCodecForSpecialFiles->toUnicode (str) : (QString) str); } //! Helper. Translates from Win32 encodings to generic wxWidgets ones. const char * GetFontEncFromCharSet (const QString& font) const; //! Helper. Returns the $FIftiMain offset of leaf node or 0. unsigned int GetLeafNodeOffset(const QString& text, unsigned int initialOffset, unsigned int buffSize, unsigned short treeDepth); //! Helper. Processes the word location code entries while searching. bool ProcessWLC(quint64 wlc_count, quint64 wlc_size, quint32 wlc_offset, unsigned char ds, unsigned char dr, unsigned char cs, unsigned char cr, unsigned char ls, unsigned char lr, LCHMSearchProgressResults& results, bool phrase_search ); //! Looks up as much information as possible from #WINDOWS/#STRINGS. bool getInfoFromWindows(); //! Looks up as much information as possible from #SYSTEM. bool getInfoFromSystem(); //! Fill the topic-url map void fillTopicsUrlMap(); //! Sets up textCodec void setupTextCodec (const char * name); //! Guess used text encoding, using m_detectedLCID and m_font. Set up m_textCodec bool guessTextEncoding (); //! Change the current CHM encoding for internal files and texts. //! Encoding could be either simple Qt codepage, or set like CP1251/KOI8, which allows to //! set up encodings separately for text (first) and internal files (second) bool changeFileEncoding( const char *qtencoding ); //! Convert the word, so it has an appropriate encoding QByteArray convertSearchWord ( const QString &src ); /*! * Helper procedure in TOC parsing, decodes the string between the quotes (first or last) with decoding HTML * entities like í */ int findStringInQuotes (const QString& tag, int offset, QString& value, bool firstquote, bool decodeentities ); /*! * Decodes Unicode HTML entities according to current encoding. */ QString decodeEntity (const QString& entity ); /*! * \brief Returns the list of all available text encodings. * \return A pointer to the beginning of the text encoding table. The table could be * enumerated until language == 0, which means end of table. * * \ingroup encoding */ static const LCHMTextEncoding * getTextEncodingTable(); /*! * \brief Looks up for encoding by LCID * \param lcid LCID to look up * \return A pointer to encoding structure. * * \ingroup encoding */ static const LCHMTextEncoding * lookupByLCID( short lcid ); /*! * \brief Looks up for encoding by QtCodec * \param qtcodec Qt text codec name to look up * \return A pointer to encoding structure. * * \ingroup encoding */ static const LCHMTextEncoding * lookupByQtCodec( const QString& codec ); /*! * \brief Get the encoding index * \param enc Encoding * \return An index in encoding table. getTextEncodingTable() + i gets the encoding. * * \ingroup encoding */ static int getEncodingIndex( const LCHMTextEncoding * enc); /*! * Normalizes path to search in internal arrays */ QString normalizeUrl (const QString& path ) const; /*! * Parse binary TOC */ bool parseBinaryTOC( QVector< LCHMParsedEntry > * topics ) const; /*! * Parse binary index */ bool parseBinaryIndex( QVector< LCHMParsedEntry > * topics ) const; //! Internal loader bool loadBinaryIndex( QVector< LCHMParsedEntry > * entries ) const; //! btree string parser QString getBtreeString( const QByteArray& btidx, unsigned long * offset, unsigned short * spaceLeft ) const; /*! * Recursively parse and fill binary TOC */ bool RecurseLoadBTOC( const QByteArray& tocidx, const QByteArray& topics, const QByteArray& urltbl, const QByteArray& urlstr, const QByteArray& strings, int offset, QVector< LCHMParsedEntry > * entries, int level ) const; /*! * Check if an option was set in environment */ bool hasOption( const QString& name ) const; // Members //! Pointer to the chmlib structure chmFile * m_chmFile; //! Opened file name QString m_filename; //! Home url, got from CHM file QByteArray m_home; //! Context tree filename. Got from CHM file QByteArray m_topicsFile; //! Index filename. Got from CHM file QByteArray m_indexFile; //! Chm Title. Got from CHM file QByteArray m_title; // Localization stuff //! LCID from CHM file, used in encoding detection short m_detectedLCID; //! font charset from CHM file, used in encoding detection QString m_font; //! Chosen text codec QTextCodec * m_textCodec; QTextCodec * m_textCodecForSpecialFiles; //! Current encoding const LCHMTextEncoding * m_currentEncoding; //! Map to decode HTML entitles like ´ based on current encoding QMap m_entityDecodeMap; //! TRUE if /#TOPICS, /#STRINGS, /#URLTBL and /#URLSTR are resolved, and the members below are valid bool m_lookupTablesValid; //! pointer to /#TOPICS chmUnitInfo m_chmTOPICS; //! pointer to /#STRINGS chmUnitInfo m_chmSTRINGS; //! pointer to /#URLTBL chmUnitInfo m_chmURLTBL; //! pointer to /#URLSTR chmUnitInfo m_chmURLSTR; //! Indicates whether TOC, either binary or text, is available. bool m_tocAvailable; //! Indicates whether index, either binary or text, is available. bool m_indexAvailable; //! Indicates whether the built-in search is available. This is true only when m_lookupTablesValid //! is TRUE, and m_chmFIftiMain is resolved. bool m_searchAvailable; //! pointer to /$FIftiMain chmUnitInfo m_chmFIftiMain; //! Book TOC icon images storage LCHMTocImageKeeper m_imagesKeeper; //! Map url->topic QMap< QString, QString > m_url2topics; //! KCHMViewer debug options from environment QString m_envOptions; }; #endif // INCLUDE_LIBCHMFILEIMPL_H kchmviewer-5.3/lib/libchmfile/libchmtextencoding.h0000644000175000001440000000323611311315004021115 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef LIBCHMTEXTENCODING_H #define LIBCHMTEXTENCODING_H /*! * Represents a text encoding of CHM file; also has some useful routines. */ typedef struct { const char * family; //! Cyrillic, Western, Greek... NULL pointer represents the end of table. const char * qtcodec; //! Qt text codec to use const short * lcids; //! List of LCIDs to use for this codepage. Ends with LCID 0. } LCHMTextEncoding; #endif /* LIBCHMTEXTENCODING_H */ kchmviewer-5.3/lib/libchmfile/libchmfile.h0000644000175000001440000002323711311315004017344 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef INCLUDE_LIBCHMFILE_H #define INCLUDE_LIBCHMFILE_H #include #include #include #include #include #include "libchmtextencoding.h" //! Contains different (non-standard) image types namespace LCHMBookIcons { const int IMAGE_NONE = -1; const int IMAGE_AUTO = -2; const int IMAGE_INDEX = -3; const int MAX_BUILTIN_ICONS = 42; }; //! Contains a single index or TOC entry. See LCHMFile::parseTOC() and LCHMFile::parseIndex() typedef struct { //! Entry name QString name; //! Entry URLs. The TOC entry should have only one URL; the index entry could have several. QStringList urls; //! Associated image number. Used for TOC only; indexes does not have the image. //! Use LCHMFile::getBookIconPixmap() to get associated pixmap icon int imageid; //! Indentation level for this entry. int indent; } LCHMParsedEntry; // forward declaration class LCHMFileImpl; //! CHM files processor, heavily based on chmlib. Used search code from xchm. class LCHMFile { public: //! Default constructor and destructor. LCHMFile(); ~LCHMFile(); /*! * \brief Attempts to load a .chm file. * \param archiveName The .chm filename. * \return true on success, false on failure. * * Loads a CHM file. Could internally load more than one file, if files linked to * this one are present locally (like MSDN). * \ingroup init */ bool loadFile( const QString& archiveName ); /*! * \brief Closes all the files, and frees the appropriate data. * \ingroup init */ void closeAll(); /*! * \brief Gets the title name of the opened .chm. * \return The name of the opened document, or an empty string if no .chm has been loaded. * \ingroup information */ QString title() const; /*! * \brief Gets the URL of the default page in the chm archive. * \return The home page name, with a '/' added in front and relative to * the root of the archive filesystem. If no .chm has been opened, * returns "/". * \ingroup information */ QString homeUrl() const; /*! * \brief Checks whether the Table of Contents is present in this file. * \return true if it is available; false otherwise. * \ingroup information */ bool hasTableOfContents() const; /*! * \brief Checks whether the Index Table is present in this file. * \return true if it is available; false otherwise. * \ingroup information */ bool hasIndexTable() const; /*! * \brief Checks whether the Search Table is available in this file. * \return true if it is available; false otherwise. * \ingroup information * * If the search table is not available, the search is not possible. */ bool hasSearchTable() const; /*! * \brief Parses the Table of Contents (TOC) * \param topics A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy chm file; please report a bug if the file is opened ok under Windows. * \ingroup fileparsing */ bool parseTableOfContents( QVector< LCHMParsedEntry > * topics ) const; /*! * \brief Parses the Index Table * \param indexes A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy chm file; so far it never happened on indexes. * \ingroup fileparsing */ bool parseIndex( QVector< LCHMParsedEntry > * indexes ) const; /*! * \brief Retrieves the content from url in current chm file to QString. * \param str A string where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. * * This function retreives the file content (mostly for HTML pages) from the chm archive * opened by load() function. Because the content in chm file is not stored in Unicode, it * will be recoded according to current encoding. Do not use for binary data. * * \sa setCurrentEncoding() currentEncoding() getFileContentAsBinary() * \ingroup dataretrieve */ bool getFileContentAsString( QString * str, const QString& url ); /*! * \brief Retrieves the content from url in current chm file to QByteArray. * \param data A data array where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. * * This function retreives the file content from the chm archive opened by load() * function. The content is not encoded. * * \sa getFileContentAsString() * \ingroup dataretrieve */ bool getFileContentAsBinary( QByteArray * data, const QString& url ); /*! * \brief Retrieves the content size. * \param size A pointer where the size will be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content size is successfully stored; false otherwise. * * \ingroup dataretrieve */ bool getFileSize( unsigned int * size, const QString& url ); /*! * \brief Obtains the list of all the files in current chm file archive. * \param files An array to store list of URLs (file names) present in chm archive. * \return true if the enumeration succeed; false otherwise (I could hardly imagine a reason). * * \ingroup dataretrieve */ bool enumerateFiles( QStringList * files ); /*! * \brief Gets the Title of the HTML page referenced by url. * \param url An URL in chm file to get title from. Must be absolute. * \return The title, or QString::null if the URL cannot be found or not a HTML page. * * \ingroup dataretrieve */ QString getTopicByUrl ( const QString& url ); /*! * \brief Gets the appropriate CHM pixmap icon. * \param imagenum The image number from TOC. * \return The pixmap to show in TOC tree. * * \ingroup dataretrieve */ const QPixmap * getBookIconPixmap( unsigned int imagenum ); /*! * \brief Normalizes the URL, converting relatives, adding "/" in front and removing .. * \param url The URL to normalize. * \return The normalized, cleaned up URL. * * \ingroup dataretrieve */ QString normalizeUrl( const QString& url ) const; /*! * \brief Gets the current CHM archive encoding (set or autodetected) * \return The current encoding. * * \ingroup encoding */ const LCHMTextEncoding * currentEncoding() const; /*! * \brief Sets the CHM archive encoding to use * \param encoding An encoding to use. * * \ingroup encoding */ bool setCurrentEncoding ( const LCHMTextEncoding * encoding ); /*! * \brief Execute a search query, return the results. * \param query A search query. * \param results An array to store URLs where the query was found. * \return true if search was successful (this does not mean that it returned any results); * false otherwise. * * This function executes a standard search query. The query should consist of one of more * words separated by a space with a possible prefix. A prefix may be: * + Plus indicates that the word is required; any page without this word is excluded from the result. * - Minus indicates that the word is required to be absent; any page with this word is excluded from * the result. * "." Quotes indicates a phrase. Anything between quotes is a phrase, which is set of space-separated * words. Will be in result only if the words in phrase are in page in the same sequence, and * follow each other. * * If there is no prefix, the word considered as required. * \ingroup search */ bool searchQuery ( const QString& query, QStringList * results, unsigned int limit = 100 ); //! Access to implementation LCHMFileImpl * impl() { return m_impl; } private: //! No copy construction allowed. LCHMFile( const LCHMFile& ); //! No assignments allowed. LCHMFile& operator=( const LCHMFile& ); //! Implementation LCHMFileImpl * m_impl; }; #endif // INCLUDE_LIBCHMFILE_H kchmviewer-5.3/lib/libchmfile/libchmurlfactory.h0000644000175000001440000000752111365452772020644 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef LIBCHMURLFACTORY_H #define LIBCHMURLFACTORY_H #include #include #include namespace LCHMUrlFactory { static inline bool isRemoteURL( const QString & url, QString & protocol ) { // Check whether the URL is external QRegExp uriregex ( "^(\\w+):\\/\\/" ); QRegExp mailtoregex ( "^(mailto):" ); // mailto: can also have different format, so handle it if ( url.startsWith( "mailto:" ) ) { protocol = "mailto"; return true; } else if ( uriregex.indexIn( url ) != -1 ) { QString proto = uriregex.cap ( 1 ).toLower(); // Filter the URLs which need to be opened by a browser if ( proto == "http" || proto == "ftp" || proto == "mailto" || proto == "news" ) { protocol = proto; return true; } } return false; } // Some JS urls start with javascript:// static inline bool isJavascriptURL( const QString & url ) { return url.startsWith ("javascript://"); } // Parse urls like "ms-its:file name.chm::/topic.htm" static inline bool isNewChmURL( const QString & url, const QString & currentFile, QString & chmfile, QString & page ) { QRegExp uriregex ( "^ms-its:(.*)::(.*)$" ); uriregex.setCaseSensitivity( Qt::CaseInsensitive ); if ( uriregex.indexIn ( url ) != -1 ) { chmfile = uriregex.cap ( 1 ); page = uriregex.cap ( 2 ); // If new filename has relative path, convert it to absolute if we can. QFileInfo finfo( chmfile ); if ( !finfo.isAbsolute() && !currentFile.isEmpty() ) { QFileInfo chmfinfo( currentFile ); chmfile = chmfinfo.absolutePath() + "/" + chmfile; } return true; } return false; } static inline QString makeURLabsoluteIfNeeded( const QString & url ) { QString p1, p2, newurl = url; if ( !isRemoteURL (url, p1) && !isJavascriptURL (url) && !isNewChmURL (url, "", p1, p2) ) { newurl = QDir::cleanPath (url); // Normalize url, so it becomes absolute if ( newurl[0] != '/' ) newurl = "/" + newurl; } //qDebug ("makeURLabsolute (%s) -> (%s)", url.ascii(), newurl.ascii()); return newurl; } // Returns a special string, which allows the kio-slave, or viewwindow-browser iteraction // to regognize our own internal urls, which is necessary to show image-only pages. static inline QString getInternalUriExtension() { return ".KCHMVIEWER_SPECIAL_HANDLER"; } static inline bool handleFileType( const QString& link, QString& generated ) { QString intext = getInternalUriExtension(); if ( !link.endsWith( intext ) ) return false; QString filelink = link.left( link.length() - intext.length() ); generated = ""; return true; } }; #endif // LIBCHMURLFACTORY_H kchmviewer-5.3/lib/libchmfile/libchmtocimage.h0000644000175000001440000000311611311315004020207 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef INCLUDE_LIBCHMTOCIMAGE_H #define INCLUDE_LIBCHMTOCIMAGE_H #include //! This class is used to retrieve the book TOC icons associated with images class LCHMTocImageKeeper { public: LCHMTocImageKeeper(); const QPixmap * getImage( int id ); private: QPixmap m_images[LCHMBookIcons::MAX_BUILTIN_ICONS]; }; #endif // INCLUDE_LIBCHMTOCIMAGE_H kchmviewer-5.3/lib/libchmfile/libchmfile_search.cpp0000644000175000001440000002075211311315004021223 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "libchmfile.h" #include "libchmfileimpl.h" //#define DEBUG_SEARCH(A) qDebug A #define DEBUG_SEARCH(A) static inline void validateWord ( QString & word, bool & query_valid ) { QRegExp rxvalid ("[^\\d\\w_\\.]+"); QString orig = word; word.remove ( rxvalid ); if ( word != orig ) query_valid = false; } static inline void validateWords ( QStringList & wordlist, bool & query_valid ) { QRegExp rxvalid ("[^\\d\\w_\\.]+"); for ( int i = 0; i < wordlist.size(); i++ ) validateWord ( wordlist[i], query_valid ); } inline static void mergeResults ( LCHMSearchProgressResults & results, const LCHMSearchProgressResults & src, bool add ) { if ( results.empty() && add ) { results = src; return; } for ( int s1 = 0; s1 < results.size(); s1++ ) { bool found = false; for ( int s2 = 0; s2 < src.size(); s2++ ) { if ( results[s1].urloff == src[s2].urloff ) { found = true; break; } } // If we're adding, we only add the items found (i.e. any item, which is not found, is removed. // But if we're removing, we only remove the items found. if ( (found && !add) || (!found && add) ) { results.erase ( results.begin() + s1 ); s1--; } } } static inline void findNextWords ( QVector & src, const QVector & needle ) { for ( int s1 = 0; s1 < src.size(); s1++ ) { bool found = false; quint64 target_offset = src[s1] + 1; DEBUG_SEARCH (("Offset loop: offset at %u is %u, target %u", (unsigned int) s1, (unsigned int) src[s1], (unsigned int) target_offset)); // Search in the offsets list in attempt to find next word for ( int s2 = 0; s2 < needle.size(); s2++ ) { if ( needle[s2] == target_offset ) { found = true; break; } } if ( !found ) { // Remove this offset, we don't need it anymore DEBUG_SEARCH (("Offset loop failed: offset %u not found", (unsigned int) target_offset)); src.erase ( src.begin() + s1 ); s1--; } else { DEBUG_SEARCH (("Offset loop succeed: offset %u found", (unsigned int) target_offset)); src[s1]++; } } } inline bool searchPhrase( LCHMFileImpl * impl, const QStringList & phrase, LCHMSearchProgressResults & results ) { // Accumulate the phrase data here. LCHMSearchProgressResults phrasekeeper; // On the first word, just fill the phrasekeeper with every occupence of the first word DEBUG_SEARCH (("Search word(0): '%s'", phrase[0].ascii())); if ( !impl->searchWord ( phrase[0], true, false, phrasekeeper, true ) ) return false; // the word not found, so the whole phrase is not found either. for ( int i = 1; i < phrase.size(); i++ ) { LCHMSearchProgressResults srchtmp; DEBUG_SEARCH (("Search word(%d): '%s'", i, phrase[i].ascii())); if ( !impl->searchWord ( phrase[i], true, false, srchtmp, true ) ) return false; // the ith word not found, so the whole phrase is not found either. // Iterate the both arrays, and remove every word in phrasekeeper, which is not found // in the srchtmp, or is found on a different position. for ( int p1 = 0; p1 < phrasekeeper.size(); p1++ ) { bool found = false; DEBUG_SEARCH (("Ext loop (it %d): urloff %d", p1, phrasekeeper[p1].urloff)); for ( int p2 = 0; p2 < srchtmp.size(); p2++ ) { // look up for words on the the same page if ( srchtmp[p2].urloff != phrasekeeper[p1].urloff ) continue; // Now check every offset to find the one which is 1 bigger than the findNextWords ( phrasekeeper[p1].offsets, srchtmp[p2].offsets ); // If at least one next word is found, we leave the block intact, otherwise remove it. if ( !phrasekeeper[p1].offsets.empty() ) found = true; } if ( !found ) { DEBUG_SEARCH (("Ext loop: this word not found on %d, remove it", phrasekeeper[p1].urloff)); phrasekeeper.erase ( phrasekeeper.begin() + p1 ); p1--; } } } for ( int o = 0; o < phrasekeeper.size(); o++ ) results.push_back ( LCHMSearchProgressResult (phrasekeeper[o].titleoff, phrasekeeper[o].urloff) ); return !results.empty(); } bool LCHMFile::searchQuery( const QString& inquery, QStringList * searchresults, unsigned int limit ) { QStringList words_must_exist, words_must_not_exist, words_highlight; QVector phrases_must_exist; QString query = inquery; bool query_valid = true; LCHMSearchProgressResults results; int pos; int i; /* * Parse the search query with a simple state machine. * Query should consist of one of more words separated by a space with a possible prefix. * A prefix may be: * + indicates that the word is required; any page without this word is excluded from the result. * - indicates that the word is required to be absent; any page with this word is excluded from * the result. * "." indicates a phrase. Anything between quotes indicates a phrase, which is set of space-separated * words. Will be in result only if the words in phrase are in page in the same sequence, and * follow each other. * If there is no prefix, the word considered as required. */ QRegExp rxphrase( "\"(.*)\"" ); QRegExp rxword( "([^\\s]+)" ); rxphrase.setMinimal( TRUE ); // First, get the phrase queries while ( (pos = rxphrase.indexIn (query, 0)) != -1 ) { // A phrase query found. Locate its boundaries, and parse it. QStringList plist = rxphrase.cap ( 1 ).split ( QRegExp ("\\s+") ); validateWords ( plist, query_valid ); if ( plist.size() > 0 ) phrases_must_exist.push_back( plist ); query.remove (pos, rxphrase.matchedLength()); } // Then, parse the rest query while ( (pos = rxword.indexIn( query, 0 )) != -1 ) { // A phrase query found. Locate its boundaries, and parse it. QString word = rxword.cap ( 1 ); QChar type = '+'; if ( word[0] == '-' || word[0] == '+' ) { type = word[0]; word.remove (0, 1); } validateWord ( word, query_valid ); if ( type == '-' ) words_must_not_exist.push_back ( word ); else words_must_exist.push_back ( word ); query.remove (pos, rxword.matchedLength()); } #if defined (DUMP_SEARCH_QUERY) // Dump the search query QString qdump; for ( i = 0; i < phrases_must_exist.size(); i++ ) qdump += QString(" \"") + phrases_must_exist[i].join (" ") + QString ("\""); for ( i = 0; i < words_must_not_exist.size(); i++ ) qdump += QString (" -") + words_must_not_exist[i]; for ( i = 0; i < words_must_exist.size(); i++ ) qdump += QString (" +") + words_must_exist[i]; qDebug ("Search query dump: %s", qdump.ascii()); #endif // First search for phrases if ( phrases_must_exist.size() > 0 ) { LCHMSearchProgressResults tempres; for ( i = 0; i < phrases_must_exist.size(); i++ ) { if ( !searchPhrase ( impl(), phrases_must_exist[i], tempres ) ) return false; mergeResults ( results, tempres, true ); } } for ( i = 0; i < words_must_exist.size(); i++ ) { LCHMSearchProgressResults tempres; if ( !m_impl->searchWord ( words_must_exist[i], true, false, tempres, false ) ) return false; mergeResults ( results, tempres, true ); } for ( i = 0; i < words_must_not_exist.size(); i++ ) { LCHMSearchProgressResults tempres; m_impl->searchWord ( words_must_not_exist[i], true, false, tempres, false ); mergeResults ( results, tempres, false ); } m_impl->getSearchResults( results, searchresults, limit ); return true; } kchmviewer-5.3/lib/libchmfile/libchmfile.pro0000644000175000001440000000112511365746646017742 0ustar timusersHEADERS += bitfiddle.h \ libchmfile.h \ libchmfileimpl.h \ libchmtextencoding.h \ libchmtocimage.h \ libchmurlfactory.h \ libchmsearchengine.h \ libchmsearchengine_impl.h \ libchmsearchengine_indexing.h SOURCES += libchmfile.cpp \ libchmfileimpl.cpp \ libchmfile_search.cpp \ libchmtextencoding.cpp \ libchmtocimage.cpp \ libchmsearchengine.cpp \ libchmsearchengine_impl.cpp \ libchmsearchengine_indexing.cpp TARGET = chmfile CONFIG += warn_on \ qt \ staticlib TEMPLATE = lib INCLUDEPATH += ../../src win32-g++: { DEFINES += USE_PATCHED_CHMLIB } kchmviewer-5.3/lib/libchmfile/libchmtocimage.cpp0000644000175000001440000057725611311315004020567 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "libchmfile.h" #include "libchmtocimage.h" typedef struct { unsigned int size; const char * data; } png_memory_image_t; static const png_memory_image_t png_image_bookarray[42] = { { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x00" "\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x80" "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\xC0\xC0\xC0\x00\xC0\x40\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\xC0\x40\xC0\x00\x40\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x40\xC0" "\x00\x40\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\xFF\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x40\xC0\x00\x40\xC0\x40\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x40\xC0\x00\x40\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00" "\x80\x80\x80\x00\x00\x00\x00\x01\x02\x00\x00\x00\x01\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xC0\x40\xC0\x00\x40\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" "\x00\x80\x00\x80\x00\x80\x00\x80\x80\x80\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x40\xC0\x40\x00\x40\x40\x40\x00\x00\x00\x00\x00\x80\x80\x80\x00\x40\x40\x40\x00\x3F\x3F\x3F" "\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\x80\x00\x80\xFF\x80\x00\x80\xFF\x80\x00\x80\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF" "\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80" "\x00\x80\xFF\x80\x00\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x00\x00" "\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\xFF\x00\x00\x00" "\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x19\x71\xA3\xBE\x36\x4F\x5A\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80" "\xFF\x40\x40\x40\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x80\x00\x00\x3F\xFF\x3F\x00\x00\x00\x00\x00\x80" "\x80\x80\xFF\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x81\x81\x81\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x80\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x80\x80" "\x80\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\xFF\xFF\xFF\x00\x80\x00\x80\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x81\x81\x81\x00\x40\x40\x40" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80" "\x00\x00\x00\x00\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x81\x81\x81\x00\x81\x81\x81\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80\xFF\x80\x00\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x00\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xEC\xAF\x46\xD5\x91\xC8\xE3\xA4\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00" "\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x00" "\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x80\x00\x80\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x81\x00\x80" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x80\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x00\x81\x00\x80\x00\xC1\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00" "\x80\x00\x00\x00\x00\x00\x7F\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x40\x40" "\x00\x00\x00\x00\x00\x81\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x80\x00\x81\x00\x80\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x00\x00\x00\xFF\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x80\x00\x40\xC0\x40\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x00\x80\x00\x00\x00\x00\x00\xC0\x40\xC0\x00\xC1\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00" "\x80\x80\x80\x00\x00\x00\x00\x01\x02\x00\x00\x00\x01\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xC0\x40\xC0\x00\x40\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" "\x00\x80\x00\x80\x00\x80\x00\x80\x80\x80\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x40\xC0\x40\x00\x40\x40\x40\x00\x00\x00\x00\x00\x80\x80\x80\x00\x40\x40\x40\x00\x3F\x3F\x3F" "\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\x80\x00\x80\xFF\x80\x00\x80\xFF\x80\x00\x80\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF" "\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80" "\x00\x80\xFF\x80\x00\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x00\x00" "\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\xFF\x00\x00\x00" "\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B\x78\x8F\xD2\x1A\xFF\x32\x3B\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x80\x80\x80" "\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x80\x80\x80\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF" "\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x7F\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x80\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x02\x01" "\x00\x00\x01\x01\x00\x00\x00\x81\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\xFF\xFF\xFF\x00\x80\x00\x80\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7F\x00\x80" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\x00\xFF\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x81\x81\x81\x00\x40\x40\x40" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80" "\x00\x00\x00\x00\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x81\x81\x81\x00\x81\x81\x81\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80\xFF\x80\x00\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x00\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\xB6\x69\xF8\x9A\x72\x7B\xFD\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x80\x80\x80\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00" "\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x80\x80\x80\xFF\x7F\x7F\x80\x00\xC1\xC1\xC0\x00" "\x3F\x3F\x40\x00\xC1\xC1\xC0\x00\x3F\x3F\x40\x00\xC1\xC1\xC0\x00\x7F\x7F\x40\x00\x00\x00\x80\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0" "\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80" "\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF" "\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0" "\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF" "\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x01\x00\x00\x00\x00\x80\x80" "\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x80\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\x7B\x78\xBB\x65\xD9\x1C\xEF\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x80\x80\x80\xFF\x7F\x7F\x7F\x00\x00\x00\x01\x00" "\xC1\xC1\xC0\x00\x3F\x3F\x40\x00\xC1\xC1\xC0\x00\x3F\x3F\x40\x00\x7F\x7F\xFF\x00\x00\x00\x00\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF" "\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x3F\x3F\x40\x00\xC1\xC1\xC0\x00\x3F\x3F\x40\x00\xC1\xC1\xC0\x00\x3F\x3F\x40\x00\xC1\xC1\xC1\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x80\x00\x81\x81\x80\x00\x80\x80\x80\x00\x04\x00\x00\x00\x00\x7F\x7F" "\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00" "\x00\x00\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00" "\x00\x01\x00\x7F\x7F\x80\x00\x80\x80\x80\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0" "\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF" "\x00\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x80\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xCA\x77\x06\x21\xB0\x9C\x3D\x2E\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00" "\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00" "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00" "\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x81\x81\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01" "\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\xFF\x00\x00\xC1\xC0\xC0\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xFF" "\x00\x00\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80" "\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF" "\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0" "\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF" "\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x01\x00\x00\x00\x00\x80\x80" "\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x80\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x79\x5A\x0A\xDD\xD6\x45\x4D\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00" "\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00" "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x7F\xFF\xFF\x00\x00\x00\x00\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\xFF" "\xFF\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF" "\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01" "\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\xFF\x00\x00\xC1\xC0\xC0\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x81\x81\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\xC0\xC0\x00\x3F" "\x00\x00\x00\xC0\xC0\xC0\x00\xC0\xC0\x80\x00\x00\x00\xC0\x00\xC0\xC0\x80\x00\x00\x00\xC0\x00\xC0\xC0" "\x80\x00\x00\x00\xC0\x00\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\xC0\xC0\xC0\xFF" "\x80\x80\x80\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00" "\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\xC1\xC1\xC1\x00\x00" "\x00\x01\x00\x7F\x7F\x80\x00\x80\x80\x80\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0" "\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF" "\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF" "\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF" "\x00\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x80\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x33\x28\x09\x1C\xAE\x31\x32\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00" "\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\x01\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE8\x04\x5D\xFD\xA0\x80\xC9\x63\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\x01\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x81\x81\x80\x00\x00\x00\x00\x00\x80" "\x80\x80\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00" "\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\xFF\x00" "\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x01\x01\x00\x01\x01\x00\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\x00\x00\x00\x00\x00\xFF\x00\x01\x00\xFF" "\xFF\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\xFF\x00\x00\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00" "\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\x01\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x22\x4F\x1D\x9B\xFC\x6D\x6C\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01" "\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x01\x01\x00\x00" "\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\xFF\x00\xFF\xFF\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE3\xD9\x62\x47\xFA\x28\x6C\x06\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\xFF\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x01" "\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00" "\x00\x00\xFF\xFF\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00" "\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\xFF\xFF\x00\xFF\xFF\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2D\x7C\x8C\x20\x93\x9B\xCB\xA7\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0" "\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x3F\x00\x00\x80\x81\x00\x00\x00\x00\x00\x00\x80" "\x7F\x00\x00\x00\x00\x00\xC0\xC0\xC1\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF" "\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x80\x00\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x00\x80\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF" "\x7F\x7F\x7F\x00\xC1\xC1\xC1\x00\x40\xC0\xC0\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x01\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x01\x81" "\x01\x00\x80\x00\x80\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC0" "\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0" "\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\xC1\xC1\xC1\x00\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\xC0" "\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\xC0\x00\x00\x00\x40" "\x40\x3F\x00\xC0\xC0\xC1\x00\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x00\x00" "\x00\x00\xC0\xC0\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xC0\x40\x40\x00\x40\x40\x3F\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x01\x00\x3F\x3F\x3F\x00\xFF\xFF\xFF\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7F\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01" "\x01\x00\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x80\xFF\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40" "\x01\x00\x00\x81\x00\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\x00\x00\x81\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\xC0\x00\x00\x00\x00\x00\x80\x80\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x32\x9B\x2E\x2D\x01\x77\x57\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00" "\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x80\x80\xFF\x00\x80\x80\xFF\x00\x00" "\xFF\xFF\x00\x00\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF" "\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x80\x00\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x00\x80\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x01\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x3F\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80" "\x00\x00\xFF\x80\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC0" "\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x40\x40" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x80\xFF\x00\x81\x80\x80\x00\x00\xFF\xFF\x00" "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\xC0" "\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x80\x00\xC0\xC1\xC1\x00\x3F" "\x00\x00\x00\xC0\xC0\xC1\x00\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01\x00\x00\x00\x00" "\x00\x00\xC0\xC0\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\xC0\x40\x40\x00\x40\x40\x3F\x00\x01\x00\xFF\x00\x40\xC0\xC0\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x3F\x3F\x3F\x00\xFF\xFF\xFF\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7F\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01" "\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x80\xFF\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40" "\x01\x00\x00\x81\x00\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\x00\x00\x81\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\xC0\x00\x00\x00\x00\x00\x80\x80\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x2B\xAD\x4B\x8B\x6D\x23\xB6\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0" "\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x3F\x00\x00\x80\x81\x00\x00\x00\x00\x00\x00\x80" "\x7F\x00\x00\x00\x00\x00\xC0\xC0\xC1\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF" "\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x80\x00\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x00\x80\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF" "\x7F\x7F\x7F\x00\xC1\xC1\xC1\x00\x40\xC0\xC0\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x01\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x01\x81" "\x01\x00\x80\x00\x80\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC0" "\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0" "\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\xC1\xC1\xC1\x00\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\xC0" "\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\xC0\x00\x00\x00\x40" "\x40\x3F\x00\xC0\xC0\xC1\x00\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x81\x81\x00\x00\x00" "\x00\x00\xC0\x40\x40\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xC0\x40\x40\x00\x40\x40\x3F\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x81\x80\x00\xFF\x7F\x7F\x00\x80\x00\x00\x00\x40\x40\xC0\x00\xC0\xC0\xC0\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81" "\x81\x81\x00\x80\x00\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x80\xFF\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x7F\x00\x00\x80\xFF\x00\x00\x00\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x80\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\x00\xFF\x00\x00\x80\xFF\x00\x00\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\x40\x40\x81\x00\x00" "\x00\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x7F\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\xC0\x00\x00\x00\x00\x00\x80\x80\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF5\x35\xB3\xDB\x47\x22\xC5\x3E\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00" "\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x01\x00\x00" "\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x80\x80\xFF\x00\x80\x80\xFF\x00\x00" "\xFF\xFF\x00\x00\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF" "\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x80\x00\xFF\x00\x80\x00\xFF\x00\x00\xFF\xFF\x00\x00\x80\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x01\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x01\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x3F\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80" "\x00\x00\xFF\x80\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\xC1\xC1\xC0" "\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x40\x40" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x80\xFF\x00\x81\x80\x80\x00\x00\xFF\xFF\x00" "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\xC0" "\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x80\x00\xC0\xC1\xC1\x00\x3F" "\x00\x00\x00\xC0\xC0\xC1\x00\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x81\x81\x00\x00\x00" "\x00\x00\xC0\x40\x40\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\xC0\x40\x40\x00\x40\x40\x3F\x00\x01\x00\xFF\x00\x40\xC0\xC0\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x81\x80\x00\xFF\x7F\x7F\x00\x80\x00\x00\x00\x40\x40\xC0\x00\xC0\xC0\xC0\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xC0\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81" "\x81\x81\x00\x80\x00\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x80\xFF\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x7F\x00\x00\x80\xFF\x00\x00\x00\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x80\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\x00\xFF\x00\x00\x80\xFF\x00\x00\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\x40\x40\x81\x00\x00" "\x00\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x7F\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\xC0\x00\x00\x00\x00\x00\x80\x80\x00" "\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD7\xDE\xC4\xFF\x42\xC7\x9B\xA9\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x80" "\x80\x80\x00\xC1\xC1\xC1\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x80\x80\x80\x00\x3F\x3F\x3F\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x01\x00" "\xFF\xFF\xFF\x00\x00\x00\x01\x00\x00\x00\x7F\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\xFF\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x75\x7A\xA1\xB2\x30\x65\x74\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80" "\x80\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00" "\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00" "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00" "\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\xFF\x00\x00\x00\x81\x80\x80\x00\x3F\x3F\x3F\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x01\x01\x01\x00\x01\x01\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\xFF\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA2\xDD\xCE\xCA\x46\xBC\x69\xD0\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x7F\xFF\x7F\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x81\x01\x81\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x7F\xFF" "\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x00\x00\x01\x00\x00\x00\x00\x00\x7F\xFF\x80\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x7F\xFF\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00" "\x81\x01\x81\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7E\x13\x5A\xB8\x0F\x88\x51\xFF\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80" "\x80\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00" "\xFF\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00" "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x02\x00" "\x00\x00\x00\x01\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x7F\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x81\x00\x80\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x81\x01\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x7F\xFF" "\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x00\x00\x01\x00\x00\x00\x00\x00\x7F\xFF\x80\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x7F\xFF\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00" "\x81\x01\x81\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD9\x8B\x81\x99\x2A\x3C\x4C\x83\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00" "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x80\x00\x80" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x80\x80" "\x80\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\xC0\xC0\xC0" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x80\x80\x80\x00\xFF\xFF\xFF\x00\xC1\xC1\xC1\x00\x40" "\x40\x40\x00\x01\x80\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC9\x37\xA7\x79\xF8\x99\x78\xFD\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x81\x80\x80\x00" "\x01\x01\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x81\x81\x80\x00\x81\x81\x81\x00\x01" "\x01\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00" "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x80\x00\x80" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x80\x80" "\x80\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\xC0\xC0\xC0" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x80\x80\x80\x00\xFF\xFF\xFF\x00\xC1\xC1\xC1\x00\x40" "\x40\x40\x00\x01\x80\x00\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\xFF\x7F\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7E\xFB\xBE\x76\x34\x86\xB8\x07\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x40\x40\x40\x00\xC0\xC0\xC0\x00\x40\x40" "\x40\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x80\x80\x80" "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x01\x00\x00" "\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x80\x80\x80\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0" "\xFF\x40\x40\x40\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x01\x01\x01\x00\xFF" "\xFF\xFF\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x01\x00\x00\x00\xFF\x00\x40\x40\x40\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\x01\x00\xFF\xFF\x00" "\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\x00\x01\x01\x01\x00\x80\x80\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00" "\x3F\x3F\x40\x00\xC0\xC0\xC0\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\xFF\x00\x3F\x3F\x3F\x00\x80\x80" "\x00\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x00\x00\x00\x01\x00\x81\x81\x01\x00\x40\x40\xC0\x00\x80\x80\x00\x00\x01\x01\x01\x00" "\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0\x00\xC0\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x40" "\x40\xC0\x00\x00\x00\x00\x00\x40\x40\xC0\x00\x80\x80\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00" "\x00\x00\x40\x40\xC0\x00\xC0\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\x00\xC0\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD7\x04\xC0\x9D\x86\xE8\xEF\xDB\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\x00\x00\xFF\xFF\x00" "\x00\xFF\x80\x80\x80\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xC0\xC0\xC0" "\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0" "\xC0\x00\x00\x00\x00\x00\x00\x01\x01\x00\x01\x01\xFF\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x3F\x3F\x40\x00\x00\xFF\xFF\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\xFF" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF" "\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x80\x80\x00\xFF" "\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00" "\x3F\x3F\x40\x00\xC0\xC0\xC0\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\xFF\x00\x3F\x3F\x3F\x00\x80\x80" "\x00\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x00\x00\x00\x01\x00\x81\x81\x01\x00\x40\x40\xC0\x00\x80\x80\x00\x00\x01\x01\x01\x00" "\x01\x01\x01\x00\x80\x80\x00\x00\x40\x40\xC0\x00\xC0\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x40" "\x40\xC0\x00\x00\x00\x00\x00\x40\x40\xC0\x00\x80\x80\xC0\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00" "\x00\x00\x40\x40\xC0\x00\xC0\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\x00\xC0\xC0\xC0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xAA\x18\xF9\xFF\xA4\xB4\xD4\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x80\x80\x80\xFF\x80\x80\x80\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\xFF\xFF\x00" "\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x40\x40\x40\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0" "\x00\x40\x40\x40\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x01\x01\x00\x80\x80\x80\x00\x80\x80\x80\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x80\x80\x80\x00\x40\x40\x40\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x80\x80\x80\x00\x01\x01\x01\x00\x00\x00\x00\x00\x01\x01\x01" "\x00\x80\x80\x80\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00" "\x40\x40\x40\x00\x80\x80\x80\x00\x01\x01\x01\x00\x80\x80\x80\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\xC0\xC0" "\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x80\x80\x80\x00\xFF" "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\x00\x00\xFF\xFF" "\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD1\xD0\x9F\x60\xE3\xE0\x4D\xCB\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\xC1\xC0\xC0\x00\xC1\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0" "\xC0\x00\x00\x00\x00\x00\x00\x01\x01\x00\xC1\xC1\xC1\x00\x01\x01\x00\x00\x01\x01\x01\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\x00\x00" "\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\x00\x00\x00\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\x01\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x80\x80\x80\x00\x40\x40\x40\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x00\x3F\x3F\x3F\x00\x80\x80\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01" "\x00\x80\x80\x80\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00" "\x40\x40\x40\x00\x80\x80\x80\x00\x01\x01\x01\x00\x80\x80\x80\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x40\x40\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\xC0\xC0" "\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x80\x80\x80\x00\xFF" "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\x00\x00\xFF\xFF" "\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE9\xB2\xE9\x24\xBC\x59\xC0\x67\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" "\x01\x81\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x80\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xC0\xC0\xC0" "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x80\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0" "\xFF\x00\x00\x80\xFF\x80\x80\x00\x00\x00\x00\x00\x00\x01\x01\x81\x00\x01\x01\x81\x00\xC1\xC1\xC0\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x80\xFF\xFF\xFF\x00\xFF\x00\xFF\x00\xFF\xFF" "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00" "\x80\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xFF\xFF\x00\xFF\x00\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00" "\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x80\x80\x00\x00\x00\x01\x80\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x01\x01\x80\x00\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x80\xFF\x00\xFF\x00\xFF\x00\x00\x00\xFF\x00\xFF\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00" "\x00\x01\x80\x00\x00\x00\x00\x00\x00\x01\x00\x00\x80\x80\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x89\x0B\xF3\xB4\x69\x4F\x85\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\x80\x80\x80\xFF\x00\x00\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x80\xFF\xFF\xFF\x00" "\xFF\x00\x00\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x80\x80" "\x80\xFF\x00\x00\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\x00\x00\x00\xC1\xC0\xC0\x00\x40\x40\xC0\x00\x00\x80\x00\x00\x00\x00\x00\x00\x01\x01\x81\x00" "\x00\x00\x00\x00\xC0\xC0\x40\x00\x3F\x3F\x3F\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x80\xFF\xFF" "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xFF\xFF\x00\xFF\x00\xFF\x00" "\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\x00\x01\x80\x00\x00\x00\x00\x00\xFF\x00" "\x00\x00\x01\x01\x80\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x80\x80\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x80\xFF\x00\xFF\x00\xFF\x00\x00\x00\xFF\x00\xFF\x00\xFF" "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\x80" "\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x2A\x21\x92\x43\x90\x14\x7B\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x80\x00" "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x01\x00\x7F\x7F" "\xFF\x00\x80\x80\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x7F\x7F\xFF\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xC0\xC0\x40\x00\x7F\x7F\xFF\x00\x00" "\x00\x01\x00\x80\x80\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01" "\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\x40\x00\x7F\x7F\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80\x80\x00\x00\xC0\xC0\xC0" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x81\x81\x81\x00\x01\x01\x01\x00\x81\x81\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\xFF\x80\x80\x00\xFF\xFF\xFF\x00\xFF\x00\x00" "\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x80\x00\xFF\x80\x80\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80" "\x80\x00\xFF\x00\x00\x00\x00\x40\x40\xC1\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF" "\xFF\x00\x01\x01\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\xC0\xC0\x40" "\x00\x00\x00\xC0\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\x00\xC1\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x80\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x34\xE6\xE2\x1F\x81\x45\x95\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x80\x80\x00" "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x81\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x81\x80\x00\x00\x7F\x7F" "\xFF\x00\x80\x80\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\xFF\xFF\x00\x81\x80\x00\x00\x7F\x7F\xFF\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC0\xC0\x00\xC0\x81\x01\x00\x7F\x7F\xFF\x00\x00" "\x00\x01\x00\x80\x80\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x01" "\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\x40\x00\x7F\x7F\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80\x80\x00\x00\xC0\xC0\xC0" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\xFF\x00\x81\x81\x81\x00\x01\x01\x01\x00\x81\x81\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\xFF\x80\x80\x00\xFF\xFF\xFF\x00\xFF\x00\x00" "\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x80\x00\xFF\x80\x80\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80" "\x80\x00\xFF\x00\x00\x00\x00\x40\x40\xC1\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF" "\xFF\x00\x01\x01\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\xC0\xC0\x40" "\x00\x00\x00\xC0\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\x00\xC1\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x80\x80\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD0\x0C\x16\x8A\x64\xF0\xC0\x3D\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF" "\x00\x00\x00\x00\x01\x01\x01\x00\x01\x01\x01\x00\x81\x81\x81\x00\x01\x01\x00\x00\xC1\xC1\xC1\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\x40\x00\x00\xFF\xFF\x00\x80\x00\x00\x00\x40\x40" "\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\xC0\xC0\x80\x00\x7F\x7F\x00\x00\x00\x00\x01" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00" "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0" "\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\xC0\xC0" "\xC0\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\xFF\x80\x80\x00\xFF\x00\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x80\x80\x80" "\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x81\x00\x00" "\x40\x00\xC0\x00\x00\x80\x80\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\xC0\xC0\xC0\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x80\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC0\x80\x80\x00\x40\x40" "\x40\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\xFF\x7F\x80\x00\x81\x81\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x80\x00\x00\x00\xC0\xC0\xC0" "\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00" "\xC1\xC1\xC0\x00\x80\x7F\x3F\x00\x00\x80\x01\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\x80\x80\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F" "\x00\x00\x00\x00\x00\x00\x81\x81\x00\x00\x80\x80\x00\x00\xC0\xC0\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x40" "\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBE\x4D\x07\xF0\xED\x63\x0A\xFD\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\xC1\xC0\xC0\x00" "\x81\x81\x81\x00\x01\x00\x00\x00\x01\x00\x00\x00\x81\x81\x81\x00\x01\x01\x00\x00\xC1\xC1\xC1\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x04\x01" "\x00\x00\x01\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x40\x40\x40\x00\x00\xFF\xFF\x00\x80\x00\x00\x00\x40\x40" "\x40\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\xC0\xC0\x40\x00\xC0\xC0\x80\x00\x7F\x7F\x00\x00\x00\x00\x01" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00" "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0" "\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\xC0\xC0" "\xC0\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\xFF\x80\x80\x00\xFF\x00\xFF\x00\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x80\x80\x80" "\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x81\x00\x00" "\x40\x00\xC0\x00\x00\x80\x80\x00\xC0\xC0\xC0\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\xC0\xC0\xC0\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00" "\x00\x00\x00\x00\x80\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC0\x80\x80\x00\x40\x40" "\x40\x00\x00\x00\x00\x00\x40\xC0\xC0\x00\xFF\x7F\x80\x00\x81\x81\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x80\x00\x00\x00\xC0\xC0\xC0" "\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00" "\xC1\xC1\xC0\x00\x80\x7F\x3F\x00\x00\x80\x01\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\x80\x80\xFF\xC0\xC0" "\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F" "\x00\x00\x00\x00\x00\x00\x81\x81\x00\x00\x80\x80\x00\x00\xC0\xC0\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x40" "\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x2F\x35\xC9\x77\x48\x56\x41\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x80" "\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x80\x80\xFF\x00\x00\x00\x00\x40\x40\x40" "\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x7F\x7F\x80\x00\x00\x00\xFF\x00\x81\x81\x81\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40" "\x40\x40\x00\x04\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x40\x40\x40\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x81\x81\x81\x00\x01\x01\x00\x00\x80\x80" "\x81\x00\x00\x00\x00\x00\x80\x80\x80\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0" "\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x01\x00\x00\x00\x00\x80\x80\x80\x00\x40\x40\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x01\x01\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40" "\x40\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\x80\x80\x80" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80" "\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB6\x05\xC9\xAB\x7C\x77\xA6\xA1\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x80\x80\x80\xFF\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x01\x80\x80\x80\xFF\x00\x00\x00\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00" "\x00\x00\x81\x81\x81\x00\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40\x00\x04\x00\x00\x00\x00\x80\x80" "\x80\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\xFF\xFF\xFF" "\x00\x00\x00\x00\x00\x81\x81\x81\x00\x01\x01\x01\x00\x80\x80\x80\x00\x00\x00\x00\x00\x80\x80\x80\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00" "\x00\x00\x01\x00\x00\x00\x00\x80\x80\x80\x00\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x80\x80\x80" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x3F\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00\x40\x40\x40\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x40\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x40\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x35\xD6\xA3\x81\xA7\xB0\x8B\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\x00\x00\xFF\x00" "\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x81\x81\x00\x40\x40\x3F" "\x00\x81\x81\x80\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x01\x01\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x35\x86\x1E\xD6\xF6\xF1\x59\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x01\x00\xFF" "\x00\xFF\xFF\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00" "\xFF\x00\x00\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00" "\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x81\x81\x81\x00\x40\x40\x3F" "\x00\x81\x81\x80\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x01\x01\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x01\x01\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x01\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\xC0\x00\x00\x00\xC1" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x34\xBA\xF9\x00\x88\x01\xD9\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x3F\x3F\x3F\x00\x01\x01" "\x00\x00\xFF\xFF\x00\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\xFF\x00\x00\x00\x00\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xFF\xFF\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\xC0\xC0\x80\x00\x00\x00\x81" "\x00\x7F\x7F\x80\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF" "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x7F\x7F\x80\x00\x00\x00\xFF\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xC0\xC0\xC0\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x3F\x3F\x3F\x00\xC1" "\xC1\xC0\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x40\x40\x40\x00\x81\x81\x80\x00\x00\x00\x01\x00\xC0\xC0\xC0\x00\x7F\x7F\x80\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x40\x40\x40\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF" "\x80\x80\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x7F" "\x7F\x80\x00\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x81\x81\x80\x00\x80\x80\x80\x00\x80\x80\x80" "\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\xD9\xC6\x01\x2A\xF1\x62\x54\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xC1\xC0\xC0\x00\x3F\x40\x40\x00\x00\x00" "\x00\x00\x00\xFF\xFF\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\xFF" "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x80\x80\x80" "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF" "\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF" "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x81\x80\x80\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xC0\xC0\xC0\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\xFF\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\xC1\xC1\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x80\x80\x80\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x3F\x3F\x3F\x00\xC1" "\xC1\xC0\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x40\x40\x40\x00\x81\x81\x80\x00\x00\x00\x01\x00\xC0\xC0\xC0\x00\x7F\x7F\x80\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x40\x40\x40\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF" "\x80\x80\x80\xFF\xC0\xC0\xC0\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x40\x40\x40\x00\xC0\xC0\xC0\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\x00\x7F" "\x7F\x80\x00\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x40\x00\x81\x81\x80\x00\x80\x80\x80\x00\x80\x80\x80" "\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x50\x04\xC5\x7F\x63\x55\x6E\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x40\x40\x40\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x01\x01\x00\x00\xFF\xFF" "\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00" "\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF" "\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x02\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x01\x01" "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00" "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00" "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x40\x40\x40\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xFF" "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x80\x80\x80\x00\xC1\xC1\xC1\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\xFF\xFF\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40" "\x00\x00\x00\x00\x00\x01\x01\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00" "\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7C\xD8\x09\x7C\xF1\x24\x22\x3A\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF" "\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x01\x01\x00\x00\xFF\xFF" "\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xFF\x00\x00\x00\xFF\xFF\x00\x00" "\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\xC1\xC0\xC0\x00\x00\xFF\xFF\x00" "\x01\x01\x01\x00\xFF\xFF\x00\x00\x00\xFF\x00\x00\x01\x01\x01\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x02\x00\x00\x00\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\xFF\xFF\xFF\x00\x00" "\x00\x00\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x01\x01" "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00" "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00" "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x40\x40\x40\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x01\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xFF" "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x80\x80\x80\x00\xC1\xC1\xC1\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00" "\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\xFF\xFF\xFF\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xFF" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x40\x40\x00\x40\x40\x40" "\x00\x00\x00\x00\x00\x01\x01\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00" "\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x3F\x3F\x3F\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\xC0\xFF" "\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00" "\x00\x00\xFF\x80\x80\x80\xFF\x80\x80\x80\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\xE9\x1F\xBE\x0F\x02\xCD\x5F\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xFF\x80\x80\x80\xFF\x00" "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xFF\xFF\x00\x00\x01\x01\x00\xFF\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x00\x00\x00\x00" "\x00\x00\x00\x01\x00\x01\x01\x00\x00\xFF\xFF\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\xFF\x00\x00\x00\xFF\x80\x80\x80\x00\x00\x00" "\x00\x00\x80\x80\x80\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\x80\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\xFF\x80\x80\x80\x00\x80" "\x80\x80\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x40\x40\x40\xFF\xFF\xFF\xFF\x00\x01\x01\x01\x00\x00\xFF\xFF" "\x00\x00\x00\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\xC1\xC1\xC1\x00\x3F\x3F\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\x00\x01\x01\x00\x00\x7F\x7F\x00\x00\x80\x80\x00\x01" "\x01\x01\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\xFF\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x80\x7F\x7F\x00\x00\xFF\xFF" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x80\x80\x80\x00" "\x00\x7F\x7F\x00\x80\x81\x81\x00\x00\x01\x01\x00\x00\x01\x01\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\xC1\xC1\xC0\x00\xC1\xC1\xC1" "\x00\xC0\xC0\xC0\x00\x00\x01\x01\x00\x00\xFF\xFF\x00\x01\x01\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" "\x80\x80\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFC\x80\xFB\x9C\x8E\x95\x3D\x08\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" }, { 1108, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08" "\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x04\x1B\x49\x44\x41\x54\x18\x19\x01\x10\x04\xEF\xFB\x01\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\x81\x80\x80\x00\x7F\x80\x80\x00\x00\x00" "\x00\x00\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00" "\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF" "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF" "\xFF\xFF\xC0\xC0\xC0\xFF\xFF\xFF\xFF\xFF\x80\x80\x80\xFF\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF" "\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\xFF\x00\x00\xFF\xFF\x00\x00\xFF\x00\x00\x00\x00\x00\xFF\xFF\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xC0\xC0\xC0\x00\x00\x00\x00\x00\x02\x01" "\x00\x00\x01\xC1\xC0\xC0\x00\x81\x80\x80\x00\x01\x01\x01\x00\x01\x01\x01\x00\x80\x80\x80\x00\x01\xFF" "\xFF\x00\x80\x80\x80\x00\xC1\xC1\xC1\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\x80\x80\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\xC0\xC0\xFF\x00" "\x00\x00\xFF\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\xFF\x80\x80\x80\x00\x80" "\x80\x80\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\x00\x00\xFF\x00\x00\x00" "\x00\x00\x00\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x40\x40\x40\xFF\xFF\xFF\xFF\x00\x01\x01\x01\x00\x00\xFF\xFF" "\x00\x00\x00\x00\x00\x01\x01\x01\x00\xFF\xFF\xFF\x00\xC1\xC1\xC1\x00\x3F\x3F\xFF\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xC0\xC0\xC0\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00\x00\x01\x01\x00\x00\x7F\x7F\x00\x00\x80\x80\x00\x01" "\x01\x01\x00\xC0\xC0\xC0\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x01\x00\xFF\xFF\xFF\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x80\x7F\x7F\x00\x00\xFF\xFF" "\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\xC1\xC1\xC1\x00\x80\x80\x80\x00" "\x00\x7F\x7F\x00\x80\x81\x81\x00\x00\x01\x01\x00\x00\x01\x01\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\x00\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xC0\xC0\xC0\xFF\x00\x00\x00\xFF\x02\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\xC1\xC1\x00\xC1\xC1\xC0\x00\xC1\xC1\xC1" "\x00\xC0\xC0\xC0\x00\x00\x01\x01\x00\x00\xFF\xFF\x00\x01\x01\x01\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" "\x80\x80\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x98\x02\xAF\x81\x39\xA0\x85\x00\x00\x00\x00" "\x49\x45\x4E\x44\xAE\x42\x60\x82" } }; LCHMTocImageKeeper::LCHMTocImageKeeper( ) { for ( int i = 0; i < LCHMBookIcons::MAX_BUILTIN_ICONS; i++ ) { const png_memory_image_t * image = png_image_bookarray + i; if ( !m_images[i].loadFromData ((const uchar*)image->data, image->size, "PNG") ) qFatal ( "Could not load image %d", i ); } } const QPixmap * LCHMTocImageKeeper::getImage( int id ) { if ( id < 0 || id > LCHMBookIcons::MAX_BUILTIN_ICONS ) qFatal("LCHMTocImageKeeper::getImage: requested image id (%d) is out of range (%d)", id, LCHMBookIcons::MAX_BUILTIN_ICONS ); return &m_images[id]; } kchmviewer-5.3/lib/libchmfile/libchmfileimpl.cpp0000644000175000001440000014271411365252372020604 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include #include #include #include #include #if defined (USE_PATCHED_CHMLIB) #include "chmlib-win32/chm_lib.h" #else #include "chm_lib.h" #endif #include "bitfiddle.h" #include "libchmfile.h" #include "libchmurlfactory.h" #include "libchmfileimpl.h" // Big-enough buffer size for use with various routines. #define BUF_SIZE 4096 #define COMMON_BUF_LEN 1025 #define TOPICS_ENTRY_LEN 16 #define URLTBL_ENTRY_LEN 12 //#define DEBUGPARSER(A) qDebug A #define DEBUGPARSER(A) ; class KCHMShowWaitCursor { public: KCHMShowWaitCursor () { QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) ); } ~KCHMShowWaitCursor () { QApplication::restoreOverrideCursor(); } }; LCHMFileImpl::LCHMFileImpl( ) { m_envOptions = getenv("KCHMVIEWEROPTS"); m_chmFile = NULL; m_filename = m_font = QString::null; m_entityDecodeMap.clear(); m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_detectedLCID = 0; m_currentEncoding = 0; } LCHMFileImpl::~ LCHMFileImpl( ) { closeAll(); } bool LCHMFileImpl::loadFile( const QString & archiveName ) { QString filename; // If the file has a file:// prefix, remove it if ( archiveName.startsWith( "file://" ) ) filename = archiveName.mid( 7 ); // strip it else filename = archiveName; if( m_chmFile ) closeAll(); #if defined (USE_PATCHED_CHMLIB) m_chmFile = chm_open( (WCHAR*) filename.utf16() ); #else m_chmFile = chm_open( QFile::encodeName(filename) ); #endif if ( m_chmFile == NULL ) return false; m_filename = filename; // Reset encoding m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_currentEncoding = 0; // Get information from /#WINDOWS and /#SYSTEM files (encoding, title, context file and so) // and guess the encoding getInfoFromWindows(); getInfoFromSystem(); guessTextEncoding(); // Check whether the search tables are present if ( ResolveObject("/#TOPICS", &m_chmTOPICS) && ResolveObject("/#STRINGS", &m_chmSTRINGS) && ResolveObject("/#URLTBL", &m_chmURLTBL) && ResolveObject("/#URLSTR", &m_chmURLSTR) ) { m_lookupTablesValid = true; fillTopicsUrlMap(); } else m_lookupTablesValid = false; if ( m_lookupTablesValid && ResolveObject ("/$FIftiMain", &m_chmFIftiMain) ) m_searchAvailable = true; else m_searchAvailable = false; // Some CHM files have toc and index files, but do not set the name properly. // Some heuristics here. if ( m_topicsFile.isEmpty() && hasFile( "/toc.hhc" ) ) m_topicsFile = "/toc.hhc"; if ( m_indexFile.isEmpty() && hasFile( "/index.hhk" ) ) m_indexFile = "/index.hhk"; if ( !m_topicsFile.isEmpty() || ( m_lookupTablesValid && hasFile( "/#TOCIDX" ) ) ) m_tocAvailable = true; else m_tocAvailable = false; if ( !m_indexFile.isEmpty() || ( m_lookupTablesValid && hasFile( "/$WWKeywordLinks/BTree" ) ) ) m_indexAvailable = true; else m_indexAvailable = false; return true; } void LCHMFileImpl::closeAll( ) { if ( m_chmFile == NULL ) return; chm_close( m_chmFile ); m_chmFile = NULL; m_filename = m_font = QString::null; m_home.clear(); m_topicsFile.clear(); m_indexFile.clear(); m_entityDecodeMap.clear(); m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_detectedLCID = 0; m_currentEncoding = 0; } QString LCHMFileImpl::decodeEntity( const QString & entity ) { // Set up m_entityDecodeMap characters according to current textCodec if ( m_entityDecodeMap.isEmpty() ) { m_entityDecodeMap["AElig"] = encodeWithCurrentCodec ("\306"); // capital AE diphthong (ligature) m_entityDecodeMap["Aacute"] = encodeWithCurrentCodec ("\301"); // capital A, acute accent m_entityDecodeMap["Acirc"] = encodeWithCurrentCodec ("\302"); // capital A, circumflex accent m_entityDecodeMap["Agrave"] = encodeWithCurrentCodec ("\300"); // capital A, grave accent m_entityDecodeMap["Aring"] = encodeWithCurrentCodec ("\305"); // capital A, ring m_entityDecodeMap["Atilde"] = encodeWithCurrentCodec ("\303"); // capital A, tilde m_entityDecodeMap["Auml"] = encodeWithCurrentCodec ("\304"); // capital A, dieresis or umlaut mark m_entityDecodeMap["Ccedil"] = encodeWithCurrentCodec ("\307"); // capital C, cedilla m_entityDecodeMap["Dstrok"] = encodeWithCurrentCodec ("\320"); // whatever m_entityDecodeMap["ETH"] = encodeWithCurrentCodec ("\320"); // capital Eth, Icelandic m_entityDecodeMap["Eacute"] = encodeWithCurrentCodec ("\311"); // capital E, acute accent m_entityDecodeMap["Ecirc"] = encodeWithCurrentCodec ("\312"); // capital E, circumflex accent m_entityDecodeMap["Egrave"] = encodeWithCurrentCodec ("\310"); // capital E, grave accent m_entityDecodeMap["Euml"] = encodeWithCurrentCodec ("\313"); // capital E, dieresis or umlaut mark m_entityDecodeMap["Iacute"] = encodeWithCurrentCodec ("\315"); // capital I, acute accent m_entityDecodeMap["Icirc"] = encodeWithCurrentCodec ("\316"); // capital I, circumflex accent m_entityDecodeMap["Igrave"] = encodeWithCurrentCodec ("\314"); // capital I, grave accent m_entityDecodeMap["Iuml"] = encodeWithCurrentCodec ("\317"); // capital I, dieresis or umlaut mark m_entityDecodeMap["Ntilde"] = encodeWithCurrentCodec ("\321"); // capital N, tilde m_entityDecodeMap["Oacute"] = encodeWithCurrentCodec ("\323"); // capital O, acute accent m_entityDecodeMap["Ocirc"] = encodeWithCurrentCodec ("\324"); // capital O, circumflex accent m_entityDecodeMap["Ograve"] = encodeWithCurrentCodec ("\322"); // capital O, grave accent m_entityDecodeMap["Oslash"] = encodeWithCurrentCodec ("\330"); // capital O, slash m_entityDecodeMap["Otilde"] = encodeWithCurrentCodec ("\325"); // capital O, tilde m_entityDecodeMap["Ouml"] = encodeWithCurrentCodec ("\326"); // capital O, dieresis or umlaut mark m_entityDecodeMap["THORN"] = encodeWithCurrentCodec ("\336"); // capital THORN, Icelandic m_entityDecodeMap["Uacute"] = encodeWithCurrentCodec ("\332"); // capital U, acute accent m_entityDecodeMap["Ucirc"] = encodeWithCurrentCodec ("\333"); // capital U, circumflex accent m_entityDecodeMap["Ugrave"] = encodeWithCurrentCodec ("\331"); // capital U, grave accent m_entityDecodeMap["Uuml"] = encodeWithCurrentCodec ("\334"); // capital U, dieresis or umlaut mark m_entityDecodeMap["Yacute"] = encodeWithCurrentCodec ("\335"); // capital Y, acute accent m_entityDecodeMap["OElig"] = encodeWithCurrentCodec ("\338"); // capital Y, acute accent m_entityDecodeMap["oelig"] = encodeWithCurrentCodec ("\339"); // capital Y, acute accent m_entityDecodeMap["aacute"] = encodeWithCurrentCodec ("\341"); // small a, acute accent m_entityDecodeMap["acirc"] = encodeWithCurrentCodec ("\342"); // small a, circumflex accent m_entityDecodeMap["aelig"] = encodeWithCurrentCodec ("\346"); // small ae diphthong (ligature) m_entityDecodeMap["agrave"] = encodeWithCurrentCodec ("\340"); // small a, grave accent m_entityDecodeMap["aring"] = encodeWithCurrentCodec ("\345"); // small a, ring m_entityDecodeMap["atilde"] = encodeWithCurrentCodec ("\343"); // small a, tilde m_entityDecodeMap["auml"] = encodeWithCurrentCodec ("\344"); // small a, dieresis or umlaut mark m_entityDecodeMap["ccedil"] = encodeWithCurrentCodec ("\347"); // small c, cedilla m_entityDecodeMap["eacute"] = encodeWithCurrentCodec ("\351"); // small e, acute accent m_entityDecodeMap["ecirc"] = encodeWithCurrentCodec ("\352"); // small e, circumflex accent m_entityDecodeMap["Scaron"] = encodeWithCurrentCodec ("\352"); // small e, circumflex accent m_entityDecodeMap["egrave"] = encodeWithCurrentCodec ("\350"); // small e, grave accent m_entityDecodeMap["eth"] = encodeWithCurrentCodec ("\360"); // small eth, Icelandic m_entityDecodeMap["euml"] = encodeWithCurrentCodec ("\353"); // small e, dieresis or umlaut mark m_entityDecodeMap["iacute"] = encodeWithCurrentCodec ("\355"); // small i, acute accent m_entityDecodeMap["icirc"] = encodeWithCurrentCodec ("\356"); // small i, circumflex accent m_entityDecodeMap["igrave"] = encodeWithCurrentCodec ("\354"); // small i, grave accent m_entityDecodeMap["iuml"] = encodeWithCurrentCodec ("\357"); // small i, dieresis or umlaut mark m_entityDecodeMap["ntilde"] = encodeWithCurrentCodec ("\361"); // small n, tilde m_entityDecodeMap["oacute"] = encodeWithCurrentCodec ("\363"); // small o, acute accent m_entityDecodeMap["ocirc"] = encodeWithCurrentCodec ("\364"); // small o, circumflex accent m_entityDecodeMap["ograve"] = encodeWithCurrentCodec ("\362"); // small o, grave accent m_entityDecodeMap["oslash"] = encodeWithCurrentCodec ("\370"); // small o, slash m_entityDecodeMap["otilde"] = encodeWithCurrentCodec ("\365"); // small o, tilde m_entityDecodeMap["ouml"] = encodeWithCurrentCodec ("\366"); // small o, dieresis or umlaut mark m_entityDecodeMap["szlig"] = encodeWithCurrentCodec ("\337"); // small sharp s, German (sz ligature) m_entityDecodeMap["thorn"] = encodeWithCurrentCodec ("\376"); // small thorn, Icelandic m_entityDecodeMap["uacute"] = encodeWithCurrentCodec ("\372"); // small u, acute accent m_entityDecodeMap["ucirc"] = encodeWithCurrentCodec ("\373"); // small u, circumflex accent m_entityDecodeMap["ugrave"] = encodeWithCurrentCodec ("\371"); // small u, grave accent m_entityDecodeMap["uuml"] = encodeWithCurrentCodec ("\374"); // small u, dieresis or umlaut mark m_entityDecodeMap["yacute"] = encodeWithCurrentCodec ("\375"); // small y, acute accent m_entityDecodeMap["yuml"] = encodeWithCurrentCodec ("\377"); // small y, dieresis or umlaut mark m_entityDecodeMap["iexcl"] = encodeWithCurrentCodec ("\241"); m_entityDecodeMap["cent"] = encodeWithCurrentCodec ("\242"); m_entityDecodeMap["pound"] = encodeWithCurrentCodec ("\243"); m_entityDecodeMap["curren"] = encodeWithCurrentCodec ("\244"); m_entityDecodeMap["yen"] = encodeWithCurrentCodec ("\245"); m_entityDecodeMap["brvbar"] = encodeWithCurrentCodec ("\246"); m_entityDecodeMap["sect"] = encodeWithCurrentCodec ("\247"); m_entityDecodeMap["uml"] = encodeWithCurrentCodec ("\250"); m_entityDecodeMap["ordf"] = encodeWithCurrentCodec ("\252"); m_entityDecodeMap["laquo"] = encodeWithCurrentCodec ("\253"); m_entityDecodeMap["not"] = encodeWithCurrentCodec ("\254"); m_entityDecodeMap["shy"] = encodeWithCurrentCodec ("\255"); m_entityDecodeMap["macr"] = encodeWithCurrentCodec ("\257"); m_entityDecodeMap["deg"] = encodeWithCurrentCodec ("\260"); m_entityDecodeMap["plusmn"] = encodeWithCurrentCodec ("\261"); m_entityDecodeMap["sup1"] = encodeWithCurrentCodec ("\271"); m_entityDecodeMap["sup2"] = encodeWithCurrentCodec ("\262"); m_entityDecodeMap["sup3"] = encodeWithCurrentCodec ("\263"); m_entityDecodeMap["acute"] = encodeWithCurrentCodec ("\264"); m_entityDecodeMap["micro"] = encodeWithCurrentCodec ("\265"); m_entityDecodeMap["para"] = encodeWithCurrentCodec ("\266"); m_entityDecodeMap["middot"] = encodeWithCurrentCodec ("\267"); m_entityDecodeMap["cedil"] = encodeWithCurrentCodec ("\270"); m_entityDecodeMap["ordm"] = encodeWithCurrentCodec ("\272"); m_entityDecodeMap["raquo"] = encodeWithCurrentCodec ("\273"); m_entityDecodeMap["frac14"] = encodeWithCurrentCodec ("\274"); m_entityDecodeMap["frac12"] = encodeWithCurrentCodec ("\275"); m_entityDecodeMap["frac34"] = encodeWithCurrentCodec ("\276"); m_entityDecodeMap["iquest"] = encodeWithCurrentCodec ("\277"); m_entityDecodeMap["times"] = encodeWithCurrentCodec ("\327"); m_entityDecodeMap["divide"] = encodeWithCurrentCodec ("\367"); m_entityDecodeMap["copy"] = encodeWithCurrentCodec ("\251"); // copyright sign m_entityDecodeMap["reg"] = encodeWithCurrentCodec ("\256"); // registered sign m_entityDecodeMap["nbsp"] = encodeWithCurrentCodec ("\240"); // non breaking space m_entityDecodeMap["fnof"] = QChar((unsigned short) 402); m_entityDecodeMap["Delta"] = QChar((unsigned short) 916); m_entityDecodeMap["Pi"] = QChar((unsigned short) 928); m_entityDecodeMap["Sigma"] = QChar((unsigned short) 931); m_entityDecodeMap["beta"] = QChar((unsigned short) 946); m_entityDecodeMap["gamma"] = QChar((unsigned short) 947); m_entityDecodeMap["delta"] = QChar((unsigned short) 948); m_entityDecodeMap["eta"] = QChar((unsigned short) 951); m_entityDecodeMap["theta"] = QChar((unsigned short) 952); m_entityDecodeMap["lambda"] = QChar((unsigned short) 955); m_entityDecodeMap["mu"] = QChar((unsigned short) 956); m_entityDecodeMap["nu"] = QChar((unsigned short) 957); m_entityDecodeMap["pi"] = QChar((unsigned short) 960); m_entityDecodeMap["rho"] = QChar((unsigned short) 961); m_entityDecodeMap["lsquo"] = QChar((unsigned short) 8216); m_entityDecodeMap["rsquo"] = QChar((unsigned short) 8217); m_entityDecodeMap["rdquo"] = QChar((unsigned short) 8221); m_entityDecodeMap["bdquo"] = QChar((unsigned short) 8222); m_entityDecodeMap["trade"] = QChar((unsigned short) 8482); m_entityDecodeMap["ldquo"] = QChar((unsigned short) 8220); m_entityDecodeMap["ndash"] = QChar((unsigned short) 8211); m_entityDecodeMap["mdash"] = QChar((unsigned short) 8212); m_entityDecodeMap["bull"] = QChar((unsigned short) 8226); m_entityDecodeMap["hellip"] = QChar((unsigned short) 8230); m_entityDecodeMap["emsp"] = QChar((unsigned short) 8195); m_entityDecodeMap["rarr"] = QChar((unsigned short) 8594); m_entityDecodeMap["rArr"] = QChar((unsigned short) 8658); m_entityDecodeMap["crarr"] = QChar((unsigned short) 8629); m_entityDecodeMap["le"] = QChar((unsigned short) 8804); m_entityDecodeMap["ge"] = QChar((unsigned short) 8805); m_entityDecodeMap["lte"] = QChar((unsigned short) 8804); // wrong, but used somewhere m_entityDecodeMap["gte"] = QChar((unsigned short) 8805); // wrong, but used somewhere m_entityDecodeMap["dagger"] = QChar((unsigned short) 8224); m_entityDecodeMap["Dagger"] = QChar((unsigned short) 8225); m_entityDecodeMap["euro"] = QChar((unsigned short) 8364); m_entityDecodeMap["asymp"] = QChar((unsigned short) 8776); m_entityDecodeMap["isin"] = QChar((unsigned short) 8712); m_entityDecodeMap["notin"] = QChar((unsigned short) 8713); m_entityDecodeMap["prod"] = QChar((unsigned short) 8719); m_entityDecodeMap["ne"] = QChar((unsigned short) 8800); m_entityDecodeMap["amp"] = "&"; // ampersand m_entityDecodeMap["gt"] = ">"; // greater than m_entityDecodeMap["lt"] = "<"; // less than m_entityDecodeMap["quot"] = "\""; // double quote m_entityDecodeMap["apos"] = "'"; // single quote m_entityDecodeMap["frasl"] = "/"; m_entityDecodeMap["minus"] = "-"; m_entityDecodeMap["oplus"] = "+"; m_entityDecodeMap["Prime"] = "\""; } // If entity is an ASCII code like 〽 - just decode it if ( entity[0] == '#' ) { bool valid; unsigned int ascode = entity.mid(1).toUInt( &valid ); if ( !valid ) { qWarning ( "LCHMFileImpl::decodeEntity: could not decode HTML entity '%s'", qPrintable( entity ) ); return QString::null; } return (QString) (QChar( ascode )); } else { QMap::const_iterator it = m_entityDecodeMap.find( entity ); if ( it == m_entityDecodeMap.end() ) { qWarning ("LCHMFileImpl::decodeEntity: could not decode HTML entity '%s'", qPrintable( entity )); return QString::null; } return *it; } } inline int LCHMFileImpl::findStringInQuotes (const QString& tag, int offset, QString& value, bool firstquote, bool decodeentities) { int qbegin = tag.indexOf ('"', offset); if ( qbegin == -1 ) qFatal ("LCHMFileImpl::findStringInQuotes: cannot find first quote in tag: '%s'", qPrintable( tag )); int qend = firstquote ? tag.indexOf ('"', qbegin + 1) : tag.lastIndexOf ('"'); if ( qend == -1 || qend <= qbegin ) qFatal ("LCHMFileImpl::findStringInQuotes: cannot find last quote in tag: '%s'", qPrintable( tag )); // If we do not need to decode HTML entities, just return. if ( decodeentities ) { QString htmlentity = QString::null; bool fill_entity = false; value.reserve (qend - qbegin); // to avoid multiple memory allocations for ( int i = qbegin + 1; i < qend; i++ ) { if ( !fill_entity ) { if ( tag[i] == '&' ) // HTML entity starts fill_entity = true; else value.append (tag[i]); } else { if ( tag[i] == ';' ) // HTML entity ends { // If entity is an ASCII code, just decode it QString decode = decodeEntity( htmlentity ); if ( decode.isNull() ) break; value.append ( decode ); htmlentity = QString::null; fill_entity = false; } else htmlentity.append (tag[i]); } } } else value = tag.mid (qbegin + 1, qend - qbegin - 1); return qend + 1; } bool LCHMFileImpl::searchWord (const QString& text, bool wholeWords, bool titlesOnly, LCHMSearchProgressResults& results, bool phrase_search) { bool partial = false; if ( text.isEmpty() || !m_searchAvailable ) return false; QString searchword = (QString) convertSearchWord (text); #define FTS_HEADER_LEN 0x32 unsigned char header[FTS_HEADER_LEN]; if ( RetrieveObject (&m_chmFIftiMain, header, 0, FTS_HEADER_LEN) == 0 ) return false; unsigned char doc_index_s = header[0x1E], doc_index_r = header[0x1F]; unsigned char code_count_s = header[0x20], code_count_r = header[0x21]; unsigned char loc_codes_s = header[0x22], loc_codes_r = header[0x23]; if(doc_index_s != 2 || code_count_s != 2 || loc_codes_s != 2) { // Don't know how to use values other than 2 yet. Maybe next chmspec. return false; } unsigned char* cursor32 = header + 0x14; unsigned int node_offset = UINT32ARRAY(cursor32); cursor32 = header + 0x2e; unsigned int node_len = UINT32ARRAY(cursor32); unsigned char* cursor16 = header + 0x18; unsigned short tree_depth = UINT16ARRAY(cursor16); unsigned char word_len, pos; QString word; unsigned int i = sizeof(unsigned short); unsigned short free_space; QVector buffer(node_len); node_offset = GetLeafNodeOffset (searchword, node_offset, node_len, tree_depth); if ( !node_offset ) return false; do { // got a leaf node here. if ( RetrieveObject (&m_chmFIftiMain, buffer.data(), node_offset, node_len) == 0 ) return false; cursor16 = buffer.data() + 6; free_space = UINT16ARRAY(cursor16); i = sizeof(unsigned int) + sizeof(unsigned short) + sizeof(unsigned short); quint64 wlc_count, wlc_size; unsigned int wlc_offset; while (i < node_len - free_space) { word_len = *(buffer.data() + i); pos = *(buffer.data() + i + 1); char *wrd_buf = new char[word_len]; memcpy (wrd_buf, buffer.data() + i + 2, word_len - 1); wrd_buf[word_len - 1] = 0; if ( pos == 0 ) word = wrd_buf; else word = word.mid (0, pos) + (const char*) wrd_buf; delete[] wrd_buf; i += 2 + word_len; unsigned char title = *(buffer.data() + i - 1); size_t encsz; wlc_count = be_encint (buffer.data() + i, encsz); i += encsz; cursor32 = buffer.data() + i; wlc_offset = UINT32ARRAY(cursor32); i += sizeof(unsigned int) + sizeof(unsigned short); wlc_size = be_encint (buffer.data() + i, encsz); i += encsz; cursor32 = buffer.data(); node_offset = UINT32ARRAY(cursor32); if ( !title && titlesOnly ) continue; if ( wholeWords && searchword == word ) return ProcessWLC(wlc_count, wlc_size, wlc_offset, doc_index_s, doc_index_r,code_count_s, code_count_r, loc_codes_s, loc_codes_r, results, phrase_search); if ( !wholeWords ) { if ( word.startsWith (searchword)) { partial = true; ProcessWLC(wlc_count, wlc_size, wlc_offset, doc_index_s, doc_index_r,code_count_s, code_count_r, loc_codes_s, loc_codes_r, results, phrase_search); } else if ( QString::compare (searchword, word.mid(0, searchword.length())) < -1 ) break; } } } while ( !wholeWords && word.startsWith (searchword) && node_offset ); return partial; } bool LCHMFileImpl::ResolveObject(const QString& fileName, chmUnitInfo *ui) const { return m_chmFile != NULL && ::chm_resolve_object(m_chmFile, qPrintable( fileName ), ui) == CHM_RESOLVE_SUCCESS; } bool LCHMFileImpl::hasFile(const QString & fileName) const { chmUnitInfo ui; return m_chmFile != NULL && ::chm_resolve_object(m_chmFile, qPrintable( fileName ), &ui) == CHM_RESOLVE_SUCCESS; } size_t LCHMFileImpl::RetrieveObject(const chmUnitInfo *ui, unsigned char *buffer, LONGUINT64 fileOffset, LONGINT64 bufferSize) const { return ::chm_retrieve_object(m_chmFile, const_cast(ui), buffer, fileOffset, bufferSize); } inline unsigned int LCHMFileImpl::GetLeafNodeOffset(const QString& text, unsigned int initialOffset, unsigned int buffSize, unsigned short treeDepth) { unsigned int test_offset = 0; unsigned char* cursor16, *cursor32; unsigned char word_len, pos; unsigned int i = sizeof(unsigned short); QVector buffer(buffSize); QString word; while(--treeDepth) { if ( initialOffset == test_offset ) return 0; test_offset = initialOffset; if ( RetrieveObject (&m_chmFIftiMain, buffer.data(), initialOffset, buffSize) == 0 ) return 0; cursor16 = buffer.data(); unsigned short free_space = UINT16ARRAY(cursor16); while (i < buffSize - free_space ) { word_len = *(buffer.data() + i); pos = *(buffer.data() + i + 1); char *wrd_buf = new char[word_len]; memcpy ( wrd_buf, buffer.data() + i + 2, word_len - 1 ); wrd_buf[word_len - 1] = 0; if ( pos == 0 ) word = wrd_buf; else word = word.mid(0, pos) + (const char*) wrd_buf; delete[] wrd_buf; if ( text <= word ) { cursor32 = buffer.data() + i + word_len + 1; initialOffset = UINT32ARRAY(cursor32); break; } i += word_len + sizeof(unsigned char) + sizeof(unsigned int) + sizeof(unsigned short); } } if ( initialOffset == test_offset ) return 0; return initialOffset; } inline bool LCHMFileImpl::ProcessWLC (quint64 wlc_count, quint64 wlc_size, unsigned int wlc_offset, unsigned char ds, unsigned char dr, unsigned char cs, unsigned char cr, unsigned char ls, unsigned char lr, LCHMSearchProgressResults& results, bool phrase_search) { int wlc_bit = 7; quint64 index = 0, count; size_t length, off = 0; QVector buffer (wlc_size); unsigned char *cursor32; unsigned char entry[TOPICS_ENTRY_LEN]; unsigned char combuf[13]; if ( RetrieveObject (&m_chmFIftiMain, buffer.data(), wlc_offset, wlc_size) == 0 ) return false; for ( quint64 i = 0; i < wlc_count; ++i ) { if ( wlc_bit != 7 ) { ++off; wlc_bit = 7; } index += sr_int (buffer.data() + off, &wlc_bit, ds, dr, length); off += length; if ( RetrieveObject (&m_chmTOPICS, entry, index * 16, TOPICS_ENTRY_LEN) == 0 ) return false; LCHMSearchProgressResult progres; cursor32 = entry + 4; progres.titleoff = UINT32ARRAY(cursor32); cursor32 = entry + 8; progres.urloff = UINT32ARRAY(cursor32); if ( RetrieveObject (&m_chmURLTBL, combuf, progres.urloff, 12) == 0 ) return false; cursor32 = combuf + 8; progres.urloff = UINT32ARRAY (cursor32); count = sr_int (buffer.data() + off, &wlc_bit, cs, cr, length); off += length; if ( phrase_search ) progres.offsets.reserve (count); for (quint64 j = 0; j < count; ++j) { quint64 lcode = sr_int (buffer.data() + off, &wlc_bit, ls, lr, length); off += length; if ( phrase_search ) progres.offsets.push_back (lcode); } results.push_back (progres); } return true; } bool LCHMFileImpl::getInfoFromWindows() { #define WIN_HEADER_LEN 0x08 unsigned char buffer[BUF_SIZE]; unsigned int factor; chmUnitInfo ui; long size = 0; if ( ResolveObject("/#WINDOWS", &ui) ) { if ( !RetrieveObject(&ui, buffer, 0, WIN_HEADER_LEN) ) return false; unsigned int entries = get_int32_le( (unsigned int *)(buffer) ); unsigned int entry_size = get_int32_le( (unsigned int *)(buffer + 0x04) ); QVector uptr(entries * entry_size); unsigned char* raw = (unsigned char*) uptr.data(); if ( !RetrieveObject (&ui, raw, 8, entries * entry_size) ) return false; if( !ResolveObject ("/#STRINGS", &ui) ) return false; for ( unsigned int i = 0; i < entries; ++i ) { unsigned int offset = i * entry_size; unsigned int off_title = get_int32_le( (unsigned int *)(raw + offset + 0x14) ); unsigned int off_home = get_int32_le( (unsigned int *)(raw + offset + 0x68) ); unsigned int off_hhc = get_int32_le( (unsigned int *)(raw + offset + 0x60) ); unsigned int off_hhk = get_int32_le( (unsigned int *)(raw + offset + 0x64) ); factor = off_title / 4096; if ( size == 0 ) size = RetrieveObject(&ui, buffer, factor * 4096, BUF_SIZE); if ( size && off_title ) m_title = QByteArray( (const char*) (buffer + off_title % 4096) ); if ( factor != off_home / 4096) { factor = off_home / 4096; size = RetrieveObject (&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_home ) m_home = QByteArray("/") + QByteArray( (const char*) buffer + off_home % 4096); if ( factor != off_hhc / 4096) { factor = off_hhc / 4096; size = RetrieveObject(&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_hhc ) m_topicsFile = QByteArray("/") + QByteArray((const char*) buffer + off_hhc % 4096); if ( factor != off_hhk / 4096) { factor = off_hhk / 4096; size = RetrieveObject (&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_hhk ) m_indexFile = QByteArray("/") + QByteArray((const char*) buffer + off_hhk % 4096); } } return true; } bool LCHMFileImpl::getInfoFromSystem() { unsigned char buffer[BUF_SIZE]; chmUnitInfo ui; int index = 0; unsigned char* cursor = NULL, *p; unsigned short value = 0; long size = 0; // Run the first loop to detect the encoding. We need this, because title could be // already encoded in user encoding. Same for file names if ( !ResolveObject ("/#SYSTEM", &ui) ) return false; // Can we pull BUFF_SIZE bytes of the #SYSTEM file? if ( (size = RetrieveObject (&ui, buffer, 4, BUF_SIZE)) == 0 ) return false; buffer[size - 1] = 0; // First loop to detect the encoding for ( index = 0; index < (size - 1 - (long)sizeof(unsigned short)) ;) { cursor = buffer + index; value = UINT16ARRAY(cursor); switch(value) { case 0: index += 2; cursor = buffer + index; if(m_topicsFile.isEmpty()) m_topicsFile = QByteArray("/") + QByteArray((const char*) buffer + index + 2); break; case 1: index += 2; cursor = buffer + index; if(m_indexFile.isEmpty()) m_indexFile = QByteArray("/") + QByteArray((const char*)buffer + index + 2); break; case 2: index += 2; cursor = buffer + index; if(m_home.isEmpty() || m_home == "/") m_home = QByteArray("/") + QByteArray((const char*) buffer + index + 2); break; case 3: index += 2; cursor = buffer + index; m_title = QByteArray( (const char*) (buffer + index + 2) ); break; case 4: index += 2; cursor = buffer + index; p = buffer + index + 2; m_detectedLCID = (short) (p[0] | (p[1]<<8)); break; case 6: index += 2; cursor = buffer + index; if ( m_topicsFile.isEmpty() ) { QString topicAttempt = "/", tmp; topicAttempt += QString ((const char*) buffer +index +2); tmp = topicAttempt + ".hhc"; if ( ResolveObject( tmp, &ui) ) m_topicsFile = qPrintable( tmp ); tmp = topicAttempt + ".hhk"; if ( ResolveObject( tmp, &ui) ) m_indexFile = qPrintable( tmp ); } break; case 16: index += 2; cursor = buffer + index; m_font = QString ((const char*) buffer + index + 2); break; default: index += 2; cursor = buffer + index; } value = UINT16ARRAY(cursor); index += value + 2; } return true; } QByteArray LCHMFileImpl::convertSearchWord( const QString & src ) { static const char * searchwordtable[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "s", 0, "oe", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "s", 0, "oe", 0, 0, "y", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "a", "a", "a", "a", "a", "a", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "o", "o", "o", "o", "o", 0, "o", "u", "u", "u", "u", "y", "\xDE", "ss", "a", "a", "a", "a", "a", "a", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "o", "n", "o", "o", "o", "o", "o", 0, "o", "u", "u", "u", "u", "y", "\xFE", "y" }; if ( !m_textCodec ) return (QByteArray) qPrintable( src.toLower() ); QByteArray dest = m_textCodec->fromUnicode (src); for ( int i = 0; i < dest.size(); i++ ) { if ( dest[i] & 0x80 ) { int index = dest[i] & 0x7F; if ( searchwordtable[index] ) dest.replace (i, 1, searchwordtable[index]); else dest.remove (i, 1); } } return dest.toLower(); } void LCHMFileImpl::getSearchResults( const LCHMSearchProgressResults& tempres, QStringList * results, unsigned int limit_results ) { unsigned char combuf [COMMON_BUF_LEN]; QMap urlsmap; // used to prevent duplicated urls for ( int i = 0; i < tempres.size(); i++ ) { if ( urlsmap.find (tempres[i].urloff) != urlsmap.end() ) continue; urlsmap[tempres[i].urloff] = 1; if ( RetrieveObject (&m_chmURLSTR, combuf, tempres[i].urloff + 8, COMMON_BUF_LEN - 1) == 0 ) continue; combuf[COMMON_BUF_LEN - 1] = 0; results->push_back( LCHMUrlFactory::makeURLabsoluteIfNeeded( (const char*) combuf ) ); if ( --limit_results == 0 ) break; } } QString LCHMFileImpl::normalizeUrl( const QString & path ) const { int pos = path.indexOf ('#'); QString fixedpath = pos == -1 ? path : path.left (pos); return LCHMUrlFactory::makeURLabsoluteIfNeeded( fixedpath ); } /* * FIXME: * (from htmlhelp.chm) */ bool LCHMFileImpl::parseFileAndFillArray( const QString & file, QVector< LCHMParsedEntry > * data, bool asIndex ) { QString src; const int MAX_NEST_DEPTH = 256; if ( !getFileContentAsString( &src, file ) || src.isEmpty() ) return false; KCHMShowWaitCursor wc; /* // Save the index for debugging purposes QFile outfile( "parsed.htm" ); if ( outfile.open( QIODevice::WriteOnly ) ) { QTextStream textstream( &outfile ); textstream << src; outfile.close(); } */ unsigned int defaultimagenum = asIndex ? LCHMBookIcons::IMAGE_INDEX : LCHMBookIcons::IMAGE_AUTO; int pos = 0, indent = 0, root_indent_offset = 0; bool in_object = false, root_indent_offset_set = false; LCHMParsedEntry entry; entry.imageid = defaultimagenum; // Split the HHC file by HTML tags int stringlen = src.length(); while ( pos < stringlen && (pos = src.indexOf ('<', pos)) != -1 ) { int i, word_end = 0; for ( i = ++pos; i < stringlen; i++ ) { // If a " or ' is found, skip to the next one. if ( (src[i] == '"' || src[i] == '\'') ) { // find where quote ends, either by another quote, or by '>' symbol (some people don't know HTML) int nextpos = src.indexOf (src[i], i+1); if ( nextpos == -1 && (nextpos = src.indexOf ('>', i+1)) == -1 ) { qWarning ("LCHMFileImpl::ParseHhcAndFillTree: corrupted TOC: %s", qPrintable( src.mid(i) )); return false; } i = nextpos; } else if ( src[i] == '>' ) break; else if ( !src[i].isLetterOrNumber() && src[i] != '/' && !word_end ) word_end = i; } QString tagword, tag = src.mid (pos, i - pos); if ( word_end ) tagword = src.mid (pos, word_end - pos).toLower(); else tagword = tag.toLower(); // qDebug ("tag: '%s', tagword: '%s'\n", qPrintable( tag ), qPrintable( tagword ) ); // - a topic entry if ( tagword == "object" && tag.indexOf ("text/sitemap", 0, Qt::CaseInsensitive ) != -1 ) in_object = true; else if ( tagword == "/object" && in_object ) { // a topic entry closed. Add a tree item if ( !entry.name.isEmpty() ) { if ( !root_indent_offset_set ) { root_indent_offset_set = true; root_indent_offset = indent; if ( root_indent_offset > 1 ) qWarning("CHM has improper index; root indent offset is %d", root_indent_offset); } // Trim the entry name entry.name = entry.name.trimmed(); int real_indent = indent - root_indent_offset; entry.indent = real_indent; data->push_back( entry ); } else { if ( !entry.urls.isEmpty() ) qWarning ("LCHMFileImpl::ParseAndFillTopicsTree: tag with url \"%s\" is parsed, but name is empty.", qPrintable( entry.urls[0] )); else qWarning ("LCHMFileImpl::ParseAndFillTopicsTree: tag is parsed, but both name and url are empty."); } entry.name = QString::null; entry.urls.clear(); entry.imageid = defaultimagenum; in_object = false; } else if ( tagword == "param" && in_object ) { // int offset; // strlen("param ") QString name_pattern = "name=", value_pattern = "value="; QString pname, pvalue; if ( (offset = tag.indexOf (name_pattern, 0, Qt::CaseInsensitive )) == -1 ) qFatal ("LCHMFileImpl::ParseAndFillTopicsTree: bad tag '%s': no name=\n", qPrintable( tag )); // offset+5 skips 'name=' offset = findStringInQuotes (tag, offset + name_pattern.length(), pname, TRUE, FALSE); pname = pname.toLower(); if ( (offset = tag.indexOf(value_pattern, offset, Qt::CaseInsensitive )) == -1 ) qFatal ("LCHMFileImpl::ParseAndFillTopicsTree: bad tag '%s': no value=\n", qPrintable( tag )); // offset+6 skips 'value=' findStringInQuotes (tag, offset + value_pattern.length(), pvalue, FALSE, TRUE); //qDebug (": name '%s', value '%s'", qPrintable( pname ), qPrintable( pvalue )); if ( pname == "name" || pname == "keyword" ) { // Some help files contain duplicate names, where the second name is empty. Work it around by keeping the first one if ( !pvalue.isEmpty() ) entry.name = pvalue; } else if ( pname == "merge" ) { // MERGE implementation is experimental QString mergeurl = LCHMUrlFactory::makeURLabsoluteIfNeeded( pvalue ); QString mergecontent; if ( getFileContentAsString( &mergecontent, mergeurl ) && !mergecontent.isEmpty() ) { qWarning( "MERGE is used in index; the implementation is experimental. Please let me know if it works" ); // Merge the read value into the current parsed file. // To save memory it is done in a kinda hacky way: src = mergecontent + src.mid( i ); pos = 0; stringlen = src.length(); } else qWarning( "MERGE is used in index but file %s was not found in CHM archive", qPrintable(mergeurl) ); } else if ( pname == "local" ) { // Check for URL duplication QString url = LCHMUrlFactory::makeURLabsoluteIfNeeded( pvalue ); if ( !entry.urls.contains( url ) ) entry.urls.push_back( url ); } else if ( pname == "see also" && asIndex && entry.name != pvalue ) entry.urls.push_back (":" + pvalue); else if ( pname == "imagenumber" ) { bool bok; int imgnum = pvalue.toInt (&bok); if ( bok && imgnum >= 0 && imgnum < LCHMBookIcons::MAX_BUILTIN_ICONS ) entry.imageid = imgnum; } } else if ( tagword == "ul" ) // increase indent level { // Fix for buggy help files if ( ++indent >= MAX_NEST_DEPTH ) qFatal("LCHMFileImpl::ParseAndFillTopicsTree: max nest depth (%d) is reached, error in help file", MAX_NEST_DEPTH); // This intended to fix
      , which was seen in some buggy chm files, // and brokes rootentry[indent-1] check } else if ( tagword == "/ul" ) // decrease indent level { if ( --indent < root_indent_offset ) indent = root_indent_offset; DEBUGPARSER(("
    : new intent is %d\n", indent - root_indent_offset)); } pos = i; } return true; } bool LCHMFileImpl::getFileContentAsBinary( QByteArray * data, const QString & url ) const { chmUnitInfo ui; if( !ResolveObject( url, &ui ) ) return false; return getFileContentAsBinary( data, &ui ); } bool LCHMFileImpl::getFileContentAsBinary(QByteArray * data, const chmUnitInfo * ui) const { data->resize( ui->length ); if ( RetrieveObject( ui, (unsigned char*) data->data(), 0, ui->length ) ) return true; else return false; } bool LCHMFileImpl::getFileContentAsString( QString * str, const QString & url, bool internal_encoding ) { QByteArray buf; if ( getFileContentAsBinary( &buf, url ) ) { unsigned int length = buf.size(); if ( length > 0 ) { buf.resize( length + 1 ); buf [length] = '\0'; *str = internal_encoding ? (QString)( buf.constData() ) : encodeWithCurrentCodec( buf.constData() ); return true; } } return false; } QString LCHMFileImpl::getTopicByUrl( const QString & url ) const { QMap< QString, QString >::const_iterator it = m_url2topics.find( url ); if ( it == m_url2topics.end() ) return QString::null; return it.value(); } static int chm_enumerator_callback( struct chmFile*, struct chmUnitInfo *ui, void *context ) { ((QStringList*) context)->push_back( ui->path ); return CHM_ENUMERATOR_CONTINUE; } bool LCHMFileImpl::enumerateFiles( QStringList * files ) { files->clear(); return chm_enumerate( m_chmFile, CHM_ENUMERATE_ALL, chm_enumerator_callback, files ); } const QPixmap * LCHMFileImpl::getBookIconPixmap( unsigned int imagenum ) { return m_imagesKeeper.getImage( imagenum ); } bool LCHMFileImpl::setCurrentEncoding( const LCHMTextEncoding * encoding ) { m_currentEncoding = encoding; return changeFileEncoding( encoding->qtcodec ); } bool LCHMFileImpl::guessTextEncoding( ) { const LCHMTextEncoding * enc = 0; if ( !m_detectedLCID || (enc = lookupByLCID (m_detectedLCID)) == 0 ) qFatal ("Could not detect text encoding by LCID"); if ( changeFileEncoding (enc->qtcodec) ) { m_currentEncoding = enc; return true; } return false; } bool LCHMFileImpl::changeFileEncoding( const char *qtencoding ) { // Encoding could be either simple Qt codepage, or set like CP1251/KOI8, which allows to // set up encodings separately for text (first) and internal files (second) const char * p = strchr( qtencoding, '/' ); if ( p ) { char buf[128]; // much bigger that any encoding possible. No DoS; all encodings are hardcoded. strcpy( buf, qtencoding ); buf[p - qtencoding] = '\0'; m_textCodec = QTextCodec::codecForName( buf ); if ( !m_textCodec ) { qWarning( "Could not set up Text Codec for encoding '%s'", buf ); return false; } m_textCodecForSpecialFiles = QTextCodec::codecForName( p + 1 ); if ( !m_textCodecForSpecialFiles ) { qWarning( "Could not set up Text Codec for encoding '%s'", p + 1 ); return false; } } else { m_textCodecForSpecialFiles = m_textCodec = QTextCodec::codecForName (qtencoding); if ( !m_textCodec ) { qWarning( "Could not set up Text Codec for encoding '%s'", qtencoding ); return false; } } m_entityDecodeMap.clear(); return true; } void LCHMFileImpl::fillTopicsUrlMap() { if ( !m_lookupTablesValid ) return; // Read those tables QVector topics( m_chmTOPICS.length ), urltbl( m_chmURLTBL.length ), urlstr( m_chmURLSTR.length ), strings( m_chmSTRINGS.length ); if ( !RetrieveObject( &m_chmTOPICS, (unsigned char*) topics.data(), 0, m_chmTOPICS.length ) || !RetrieveObject( &m_chmURLTBL, (unsigned char*) urltbl.data(), 0, m_chmURLTBL.length ) || !RetrieveObject( &m_chmURLSTR, (unsigned char*) urlstr.data(), 0, m_chmURLSTR.length ) || !RetrieveObject( &m_chmSTRINGS, (unsigned char*) strings.data(), 0, m_chmSTRINGS.length ) ) return; for ( unsigned int i = 0; i < m_chmTOPICS.length; i += TOPICS_ENTRY_LEN ) { unsigned int off_title = get_int32_le( (unsigned int *)(topics.data() + i + 4) ); unsigned int off_url = get_int32_le( (unsigned int *)(topics.data() + i + 8) ); off_url = get_int32_le( (unsigned int *)( urltbl.data() + off_url + 8) ) + 8; QString url = LCHMUrlFactory::makeURLabsoluteIfNeeded( (const char*) urlstr.data() + off_url ); if ( off_title < (unsigned int)strings.size() ) m_url2topics[url] = encodeWithCurrentCodec ( (const char*) strings.data() + off_title ); else m_url2topics[url] = "Untitled"; } } bool LCHMFileImpl::getFileSize(unsigned int * size, const QString & url) { chmUnitInfo ui; if( !ResolveObject( url, &ui ) ) return false; *size = ui.length; return true; } bool LCHMFileImpl::parseBinaryTOC( QVector< LCHMParsedEntry > * toc ) const { if ( hasOption("nobintables") ) return false; if ( !m_lookupTablesValid ) return false; QByteArray tocidx, topics, urltbl, urlstr, strings; // Read the index tables if ( !getFileContentAsBinary( &tocidx, "/#TOCIDX" ) || !getFileContentAsBinary( &topics, "/#TOPICS" ) || !getFileContentAsBinary( &urltbl, "/#URLTBL" ) || !getFileContentAsBinary( &urlstr, "/#URLSTR" ) || !getFileContentAsBinary( &strings, "/#STRINGS" ) ) return false; // Shamelessly stolen from xchm if ( !RecurseLoadBTOC( tocidx, topics, urltbl, urlstr, strings, UINT32ARRAY( tocidx.data() ), toc, 0 ) ) { qWarning("Failed to parse binary TOC, fallback to text-based TOC"); toc->clear(); return false; } return true; } // // This piece of code was based on the one in xchm written by Razvan Cojocaru // bool LCHMFileImpl::RecurseLoadBTOC( const QByteArray& tocidx, const QByteArray& topics, const QByteArray& urltbl, const QByteArray& urlstr, const QByteArray& strings, int offset, QVector< LCHMParsedEntry > * entries, int level ) const { while ( offset ) { // If this is end of TOCIDX, return. if ( tocidx.size() < offset + 20 ) return true; unsigned int flags = UINT32ARRAY( tocidx.data() + offset + 4 ); int index = UINT32ARRAY( tocidx.data() + offset + 8 ); if ( (flags & 0x04) || (flags & 0x08)) { QString name, value; if ( (flags & 0x08) == 0 ) { if ( strings.size() < index + 1 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid name index (%d) for book TOC entry!", index ); return false; } name = encodeWithCurrentCodec( strings.data() + index); } else { if ( topics.size() < (index * 16) + 12 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid name index (%d) for local TOC entry!", index ); return false; } unsigned int tocoffset = UINT32ARRAY(topics.data()+ (index * 16) + 4); long test = (long)tocoffset; if ( (unsigned) strings.size() < tocoffset + 1 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid name tocoffset (%d) for TOC entry!", tocoffset ); return false; } if ( test == -1 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid name offset (%d) for TOC entry!", tocoffset ); return false; } name = encodeWithCurrentCodec( strings.data() + tocoffset ); // #URLTBL index tocoffset = UINT32ARRAY( topics.data() + (index * 16) + 8 ); if ( (unsigned) urltbl.size() < tocoffset + 12 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid url index (%d) for TOC entry!", tocoffset ); return false; } tocoffset = UINT32ARRAY(urltbl.data() + tocoffset + 8); if ( (unsigned) urlstr.size() < tocoffset ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid url offset (%d) for TOC entry!", tocoffset ); return false; } value = encodeWithCurrentCodec( urlstr.data() + tocoffset + 8 ); } LCHMParsedEntry entry; entry.name = name.trimmed(); if ( !entry.name.isEmpty() ) { if ( !value.isEmpty() ) entry.urls.push_back( LCHMUrlFactory::makeURLabsoluteIfNeeded( value ) ); entry.imageid = LCHMBookIcons::IMAGE_AUTO; entry.indent = level; entries->push_back( entry ); } } if ( flags & 0x04 ) { // book if ( tocidx.size() < offset + 24 ) { qWarning("LCHMFile::RecurseLoadBTOC: invalid child entry offset (%d)", offset ); return false; } unsigned int childoffset = UINT32ARRAY( tocidx.data() + offset + 20 ); if ( childoffset ) { if ( !RecurseLoadBTOC( tocidx, topics, urltbl, urlstr, strings, childoffset, entries, level + 1 ) ) return false; } } offset = UINT32ARRAY( tocidx.data() + offset + 0x10 ); } return true; } bool LCHMFileImpl::hasOption(const QString & name) const { if ( !m_envOptions.isEmpty() && m_envOptions.contains( name ) ) return true; return false; } // // This piece of code was based on the one in xchm written by Razvan Cojocaru // bool LCHMFileImpl::parseBinaryIndex( QVector< LCHMParsedEntry > * entries ) const { if ( !m_lookupTablesValid ) return false; if ( hasOption("nobintables") ) return false; if ( !loadBinaryIndex( entries ) ) { qWarning("Failed to parse binary index, fallback to text-based index"); entries->clear(); return false; } return true; } QString LCHMFileImpl::getBtreeString( const QByteArray& btidx, unsigned long * offset, unsigned short * spaceLeft ) const { QByteArray string; unsigned short tmp; while ( 1 ) { // accumulate the name if ( (unsigned) btidx.size() < *offset + sizeof(unsigned short) ) return QString(); tmp = UINT16ARRAY( btidx.data() + *offset ); *offset += sizeof(unsigned short); *spaceLeft -= sizeof(unsigned short); if ( tmp == 0x00 ) break; string.push_back( tmp ); } return encodeWithCurrentCodec( string ).trimmed(); } bool LCHMFileImpl::loadBinaryIndex( QVector< LCHMParsedEntry > * entries ) const { QByteArray btidx, topics, urltbl, urlstr, strings; // Read the index tables if ( !getFileContentAsBinary( &btidx, "/$WWKeywordLinks/BTree" ) || !getFileContentAsBinary( &topics, "/#TOPICS" ) || !getFileContentAsBinary( &urltbl, "/#URLTBL" ) || !getFileContentAsBinary( &urlstr, "/#URLSTR" ) || !getFileContentAsBinary( &strings, "/#STRINGS" ) ) return false; // Make sure we have enough entries in tree if ( btidx.size() < 88 ) { qWarning("LCHMFile::loadBinaryIndex: BTree is too small" ); return false; } unsigned long offset = 0x4c; int next = -1; unsigned short freeSpace, spaceLeft; const short blockSize = 2048; bool found_item = false; do { if ( (unsigned) btidx.size() < offset + 12 ) break; freeSpace = UINT16ARRAY( btidx.data() + offset ); next = INT32ARRAY( btidx.data() + offset + 8 ); spaceLeft = blockSize - 12; offset += 12; while ( spaceLeft > freeSpace ) { QString value; LCHMParsedEntry entry; entry.name = getBtreeString( btidx, &offset, &spaceLeft ); if ( entry.name.isEmpty() ) { qWarning("LCHMFile::loadBinaryIndex: cannot parse name" ); return false; } if ( (unsigned) btidx.size() < offset + 16 ) { qWarning("LCHMFile::loadBinaryIndex: index is terminated by name" ); return false; } unsigned short seeAlso = UINT16ARRAY(btidx.data() + offset); unsigned int numTopics = UINT32ARRAY(btidx.data() + offset + 0xc); offset += 16; spaceLeft -= 16; if ( seeAlso ) { QString seealso = getBtreeString( btidx, &offset, &spaceLeft ); if ( entry.name != seealso ) entry.urls.push_back( ":" + seealso ); } else { for ( unsigned int i = 0; i < numTopics && spaceLeft > freeSpace; ++i ) { if ( (unsigned) btidx.size() < offset + sizeof(unsigned int) ) { qWarning("LCHMFile::loadBinaryIndex: premature url termination" ); return false; } unsigned int index = UINT32ARRAY( btidx.data() + offset ); // #URLTBL index unsigned int tocoffset = UINT32ARRAY( topics.data() + (index * 16) + 8 ); if ( (unsigned) urltbl.size() < tocoffset + 12 ) { qWarning("LCHMFile::loadBinaryIndex: invalid url index (%d) for TOC entry!", tocoffset ); return false; } tocoffset = UINT32ARRAY(urltbl.data() + tocoffset + 8); if ( (unsigned) urlstr.size() < tocoffset ) { qWarning("LCHMFile::loadBinaryIndex: invalid url offset (%d) for TOC entry!", tocoffset ); return false; } QString url = encodeWithCurrentCodec( urlstr.data() + tocoffset + 8 ); entry.urls.push_back( LCHMUrlFactory::makeURLabsoluteIfNeeded( url ) ); offset += sizeof(unsigned int); spaceLeft -= sizeof(unsigned int); } } entry.name = entry.name.trimmed(); if ( !entry.name.isEmpty() ) { entry.imageid = LCHMBookIcons::IMAGE_INDEX; entry.indent = 0; found_item = true; entries->push_back( entry ); } if ( (unsigned) btidx.size() < offset + 8 ) { qWarning("LCHMFile::loadBinaryIndex: binary index is gone" ); return false; } offset += 8; spaceLeft -= 8; } offset += spaceLeft; } while ( next != -1 ); return found_item; } kchmviewer-5.3/lib/libchmfile/bitfiddle.h0000644000175000001440000000642711270704705017214 0ustar timusers/* Copyright (C) 2003 Razvan Cojocaru Most of the code in this file is a modified version of code from Pabs' GPL chmdeco project, credits and thanks go to him. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ inline unsigned short UINT16ARRAY( const void * x ) { unsigned char * p = (unsigned char *) x; return p[0] | (p[1] << 8); } inline unsigned int UINT32ARRAY( const void * x ) { unsigned char * p = (unsigned char *) x; return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } inline int INT32ARRAY( const void * x ) { char * p = (char *) x; return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } inline unsigned int get_int32_le( void *addr) { unsigned char *p = (unsigned char*) addr; return (unsigned int) ( p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24) ); } inline quint64 be_encint(unsigned char* buffer, size_t& length) { quint64 result = 0; int shift=0; length = 0; do { result |= ((*buffer) & 0x7f) << shift; shift += 7; ++length; } while (*(buffer++) & 0x80); return result; } /* Finds the first unset bit in memory. Returns the number of set bits found. Returns -1 if the buffer runs out before we find an unset bit. */ inline int ffus(unsigned char* byte, int* bit, size_t& length) { int bits = 0; length = 0; while(*byte & (1 << *bit)){ if(*bit) --(*bit); else { ++byte; ++length; *bit = 7; } ++bits; } if(*bit) --(*bit); else { ++length; *bit = 7; } return bits; } inline quint64 sr_int(unsigned char* byte, int* bit, unsigned char s, unsigned char r, size_t& length) { quint64 ret; unsigned char mask; int n, n_bits, num_bits, base, count; length = 0; size_t fflen; if(!bit || *bit > 7 || s != 2) return ~(quint64)0; ret = 0; count = ffus(byte, bit, fflen); length += fflen; byte += length; n_bits = n = r + (count ? count-1 : 0) ; while(n > 0) { num_bits = n > *bit ? *bit : n-1; base = n > *bit ? 0 : *bit - (n-1); switch(num_bits){ case 0: mask = 1; break; case 1: mask = 3; break; case 2: mask = 7; break; case 3: mask = 0xf; break; case 4: mask = 0x1f; break; case 5: mask = 0x3f; break; case 6: mask = 0x7f; break; case 7: mask = 0xff; break; default: mask = 0xff; break; } mask <<= base; ret = (ret << (num_bits+1)) | (quint64)((*byte & mask) >> base); if( n > *bit ){ ++byte; ++length; n -= *bit+1; *bit = 7; } else { *bit -= n; n = 0; } } if(count) ret |= (quint64)1 << n_bits; return ret; } kchmviewer-5.3/lib/libchmfile/libchmsearchengine.cpp0000644000175000001440000001142511311315004021407 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "libchmfile.h" #include "libchmurlfactory.h" #include "libchmsearchengine.h" #include "libchmsearchengine_impl.h" #include "libchmsearchengine_indexing.h" LCHMSearchEngine::LCHMSearchEngine() { impl = new LCHMSearchEngineImpl(); } LCHMSearchEngine::~ LCHMSearchEngine() { delete impl; } bool LCHMSearchEngine::loadIndex( QDataStream & stream ) { if ( impl->m_Index ) delete impl->m_Index; impl->m_Index = new QtAs::Index(); return impl->m_Index->readDict( stream ); } bool LCHMSearchEngine::generateIndex( LCHMFile * chmFile, QDataStream & stream ) { QStringList documents; QStringList alldocuments; emit progressStep( 0, "Generating the list of documents" ); impl->processEvents(); // Enumerate the documents if ( !chmFile->enumerateFiles( &alldocuments ) ) return false; if ( impl->m_Index ) delete impl->m_Index; impl->m_Index = new QtAs::Index(); connect( impl->m_Index, SIGNAL( indexingProgress( int, const QString& ) ), this, SLOT( updateProgress( int, const QString& ) ) ); // Process the list of files in CHM archive and keep only HTML document files from there for ( int i = 0; i < alldocuments.size(); i++ ) if ( alldocuments[i].endsWith( ".html", Qt::CaseInsensitive ) || alldocuments[i].endsWith( ".htm", Qt::CaseInsensitive ) ) documents.push_back( LCHMUrlFactory::makeURLabsoluteIfNeeded( alldocuments[i] ) ); if ( impl->m_Index->makeIndex( documents, chmFile ) == -1 ) { delete impl->m_Index; impl->m_Index = 0; return false; } impl->m_Index->writeDict( stream ); impl->m_keywordDocuments.clear(); return true; } void LCHMSearchEngine::cancelIndexGeneration() { impl->m_Index->setLastWinClosed(); } void LCHMSearchEngine::updateProgress(int value, const QString & stepName) { emit progressStep( value, stepName ); } bool LCHMSearchEngine::searchQuery(const QString & query, QStringList * results, LCHMFile * chmFile, unsigned int limit) { // We should have index if ( !impl->m_Index ) return false; // Characters which split the words. We need to make them separate tokens QString splitChars = impl->m_Index->getCharsSplit(); // Characters which are part of the word. We should keep them apart. QString partOfWordChars = impl->m_Index->getCharsPartOfWord(); // Variables to store current state SearchDataKeeper keeper; QString term; for ( int i = 0; i < query.length(); i++ ) { QChar ch = query[i].toLower(); // a quote either begins or ends the phrase if ( ch == '"' ) { keeper.addTerm( term ); if ( keeper.isInPhrase() ) keeper.endPhrase(); else keeper.beginPhrase(); continue; } // If new char does not stop the word, add ot and continue if ( ch.isLetterOrNumber() || partOfWordChars.indexOf( ch ) != -1 ) { term.append( ch ); continue; } // If it is a split char, add this term and split char as separate term if ( splitChars.indexOf( ch ) != -1 ) { // Add existing term if present keeper.addTerm( term ); // Change the term variable, so it will be added when we exit this block term = ch; } // Just add the word; it is most likely a space or terminated by tokenizer. keeper.addTerm( term ); term = QString::null; } keeper.addTerm( term ); if ( keeper.isInPhrase() ) return false; QStringList foundDocs = impl->m_Index->query( keeper.terms, keeper.phrases, keeper.phrasewords, chmFile ); for ( QStringList::iterator it = foundDocs.begin(); it != foundDocs.end() && limit > 0; ++it, limit-- ) results->push_back( *it ); return true; } bool LCHMSearchEngine::hasIndex() const { return impl->m_Index != 0; } kchmviewer-5.3/lib/libchmfile/CMakeLists.txt0000644000175000001440000000053311023347400017634 0ustar timusers# Project files SET( libchmfileSources libchmfile.cpp libchmfileimpl.cpp libchmfile_search.cpp libchmsearchengine.cpp libchmsearchengine_impl.cpp libchmsearchengine_indexing.cpp libchmtextencoding.cpp libchmtocimage.cpp ) KDE4_ADD_LIBRARY( chmfile STATIC ${libchmfileSources} ) kchmviewer-5.3/lib/libchmfile/libchmsearchengine_indexing.h0000644000175000001440000000756311311315004022751 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef QASSISTANTINDEX_H #define QASSISTANTINDEX_H #include #include #include #include //#include "libchmurlfactory.h" class LCHMFile; namespace QtAs { struct Document { Document( int d, int f ) : docNumber( d ), frequency( f ) {} Document() : docNumber( -1 ), frequency( 0 ) {} bool operator==( const Document &doc ) const { return docNumber == doc.docNumber; } bool operator<( const Document &doc ) const { return frequency > doc.frequency; } bool operator<=( const Document &doc ) const { return frequency >= doc.frequency; } bool operator>( const Document &doc ) const { return frequency < doc.frequency; } qint16 docNumber; qint16 frequency; }; QDataStream &operator>>( QDataStream &s, Document &l ); QDataStream &operator<<( QDataStream &s, const Document &l ); class Index : public QObject { Q_OBJECT public: Index(); void writeDict( QDataStream& stream ); bool readDict( QDataStream& stream ); bool makeIndex( const QStringList& docs, LCHMFile * chmFile ); QStringList query( const QStringList&, const QStringList&, const QStringList&, LCHMFile * chmFile ); QString getCharsSplit() const { return m_charssplit; } QString getCharsPartOfWord() const { return m_charsword; } signals: void indexingProgress( int, const QString& ); public slots: void setLastWinClosed(); private: struct Entry { Entry( int d ) { documents.append( Document( d, 1 ) ); } Entry( QVector l ) : documents( l ) {} QVector documents; }; struct PosEntry { PosEntry( int p ) { positions.append( p ); } QList positions; }; bool parseDocumentToStringlist( LCHMFile * chmFile, const QString& filename, QStringList& tokenlist ); void insertInDict( const QString&, int ); QStringList getWildcardTerms( const QString& ); QStringList split( const QString& ); QList setupDummyTerm( const QStringList& ); bool searchForPhrases( const QStringList &phrases, const QStringList &words, const QString &filename, LCHMFile * chmFile ); QStringList docList; QHash dict; QHashminiDict; bool lastWindowClosed; // Those characters are splitters (i.e. split the word), but added themselves into dictionary too. // This makes the dictionary MUCH larger, but ensure that for the piece of "window->print" both // search for "print" and "->print" will find it. QString m_charssplit; // Those characters are parts of word - for example, '_' is here, and search for _debug will find only _debug. QString m_charsword; }; }; #endif /* QASSISTANTINDEX_H */ kchmviewer-5.3/lib/libchmfile/libchmsearchengine.h0000644000175000001440000000730711311315004021060 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef LCHMSEARCHENGINE_H #define LCHMSEARCHENGINE_H #include // forward declaration class LCHMFile; class LCHMSearchEngineImpl; class LCHMSearchEngine : public QObject { Q_OBJECT public: LCHMSearchEngine(); ~LCHMSearchEngine(); //! Loads the search index from the data stream \param stream. //! The index should be previously saved with generateIndex(). bool loadIndex( QDataStream& stream ); //! Generates the search index from the opened CHM file \param chmFile, //! and saves it to the data stream \param stream which should be writeable. //! //! To show the progress, this procedure emits a progressStep() signal periodically //! with the value showing current progress in percentage (i.e. from 0 to 100) //! After signal emission, the following event processing function will be called: //! qApp->processEvents( QEventLoop::ExcludeUserInputEvents ) //! to make sure the dialogs (if any) are properly updated. //! //! If \param progressDls is not null, it will be used to display progress. //! Returns true if the index has been generated and saved, or false if internal //! error occurs, or (most likely) the cancelIndexGeneration() slot has been called. bool generateIndex( LCHMFile * chmFile, QDataStream& stream ); //! Executes the search query. The \param query is a string like "C++ language" class, //! \param results is a pointer to QStringList, and \param limit limits the number of //! results in case the query is too generic (like \a "a" ). //! The \param chmFile is used to get the current encoding information. //! The return value is false only if the index is not generated, or if a closing quote character //! is missing. Call hasIndex() to clarify. If search returns no results, the return value is //! true, but the \param results list will be empty. //! //! Note that the function does not clear \param results before adding search results, so if you are //! not merging search results, make sure it's empty. bool searchQuery ( const QString& query, QStringList * results, LCHMFile * chmFile, unsigned int limit = 100 ); //! Returns true if a valid search index is present, and therefore search could be executed bool hasIndex() const; signals: void progressStep( int value, const QString& stepName ); public slots: void cancelIndexGeneration(); private slots: void updateProgress( int value, const QString& stepName ); private: LCHMSearchEngineImpl * impl; }; #endif kchmviewer-5.3/lib/libchmfile/libchmfile.cpp0000644000175000001440000000652511311407470017711 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "libchmfile.h" #include "libchmfileimpl.h" #include LCHMFile::LCHMFile( ) { m_impl = new LCHMFileImpl(); } LCHMFile::~ LCHMFile( ) { delete m_impl; } bool LCHMFile::loadFile( const QString & archiveName ) { return m_impl->loadFile( archiveName ); } void LCHMFile::closeAll( ) { m_impl->closeAll(); } QString LCHMFile::title( ) const { return m_impl->title(); } QString LCHMFile::homeUrl( ) const { QString url = m_impl->homeUrl(); return url.isNull() ? "/" : url; } bool LCHMFile::hasTableOfContents( ) const { return m_impl->m_tocAvailable; } bool LCHMFile::hasIndexTable( ) const { return m_impl->m_indexAvailable; } bool LCHMFile::hasSearchTable( ) const { return m_impl->m_searchAvailable; } bool LCHMFile::parseTableOfContents( QVector< LCHMParsedEntry > * topics ) const { return m_impl->parseBinaryTOC( topics ) || m_impl->parseFileAndFillArray( m_impl->m_topicsFile, topics, false ); } bool LCHMFile::parseIndex( QVector< LCHMParsedEntry > * indexes ) const { //return m_impl->parseBinaryIndex( indexes ) return m_impl->parseFileAndFillArray( m_impl->m_indexFile, indexes, true ); } bool LCHMFile::getFileContentAsString( QString * str, const QString & url ) { return m_impl->getFileContentAsString( str, url ); } bool LCHMFile::getFileContentAsBinary( QByteArray * data, const QString & url ) { return m_impl->getFileContentAsBinary( data, url ); } bool LCHMFile::enumerateFiles( QStringList * files ) { return m_impl->enumerateFiles( files ); } QString LCHMFile::getTopicByUrl( const QString & url ) { return m_impl->getTopicByUrl( url ); } const QPixmap * LCHMFile::getBookIconPixmap( unsigned int imagenum ) { return m_impl->getBookIconPixmap( imagenum ); } const LCHMTextEncoding * LCHMFile::currentEncoding( ) const { return m_impl->m_currentEncoding; } bool LCHMFile::setCurrentEncoding( const LCHMTextEncoding * encoding ) { return m_impl->setCurrentEncoding( encoding ); } QString LCHMFile::normalizeUrl( const QString & url ) const { return m_impl->normalizeUrl( url ); } bool LCHMFile::getFileSize(unsigned int * size, const QString & url) { return m_impl->getFileSize( size, url ); } kchmviewer-5.3/lib/libchmfile/libchmsearchengine_impl.h0000644000175000001440000000503311311315004022073 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef LCHMSEARCHENGINE_IMPL_H #define LCHMSEARCHENGINE_IMPL_H #include "libchmfile.h" // Helper class to simplity state management and data keeping class SearchDataKeeper { public: SearchDataKeeper() { m_inPhrase = false; } void beginPhrase() { phrase_terms.clear(); m_inPhrase = true; } void endPhrase() { m_inPhrase = false; phrasewords += phrase_terms; phrases.push_back( phrase_terms.join(" ") ); } bool isInPhrase() const { return m_inPhrase; } void addTerm( const QString& term ) { if ( !term.isEmpty() ) { terms.push_back( term ); if ( m_inPhrase ) phrase_terms.push_back( term ); } } // Should contain all the search terms present in query, includind those from phrases. One element - one term . QStringList terms; // Should contain phrases present in query without quotes. One element - one phrase. QStringList phrases; // Should contain all the terms present in all the phrases (but not outside). QStringList phrasewords; private: bool m_inPhrase; QStringList phrase_terms; }; namespace QtAs { class Index; }; class LCHMSearchEngineImpl { public: LCHMSearchEngineImpl(); ~LCHMSearchEngineImpl(); void processEvents(); public: QStringList m_keywordDocuments; QtAs::Index * m_Index; }; #endif kchmviewer-5.3/lib/libchmfile/libchmsearchengine_impl.cpp0000644000175000001440000000330511311315004022426 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "libchmurlfactory.h" #include "libchmsearchengine_impl.h" #include "libchmsearchengine_indexing.h" LCHMSearchEngineImpl::LCHMSearchEngineImpl() { m_Index = 0; } LCHMSearchEngineImpl::~LCHMSearchEngineImpl() { delete m_Index; } void LCHMSearchEngineImpl::processEvents( ) { // Do it twice; some events generate other events qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); } kchmviewer-5.3/lib/libchmfile/libchmsearchengine_indexing.cpp0000644000175000001440000003025711311315004023300 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "libchmfileimpl.h" #include "libchmsearchengine_indexing.h" static const int DICT_VERSION = 3; namespace QtAs { // Those characters are splitters (i.e. split the word), but added themselves into dictionary too. // This makes the dictionary MUCH larger, but ensure that for the piece of "window->print" both // search for "print" and "->print" will find it. static const char SPLIT_CHARACTERS[] = "!()*&^%#@[]{}':;,.?/|/?<>\\-+=~`"; // Those characters are parts of word - for example, '_' is here, and search for _debug will find only _debug. static const char WORD_CHARACTERS[] = "$_"; struct Term { Term() : frequency(-1) {} Term( const QString &t, int f, QVector l ) : term( t ), frequency( f ), documents( l ) {} QString term; int frequency; QVectordocuments; bool operator<( const Term &i2 ) const { return frequency < i2.frequency; } }; QDataStream &operator>>( QDataStream &s, Document &l ) { s >> l.docNumber; s >> l.frequency; return s; } QDataStream &operator<<( QDataStream &s, const Document &l ) { s << (short)l.docNumber; s << (short)l.frequency; return s; } Index::Index() : QObject( 0 ) { lastWindowClosed = false; connect( qApp, SIGNAL( lastWindowClosed() ), this, SLOT( setLastWinClosed() ) ); } void Index::setLastWinClosed() { lastWindowClosed = true; } bool Index::makeIndex( const QStringList& docs, LCHMFile * chmFile ) { if ( docs.isEmpty() ) return false; docList = docs; QStringList::ConstIterator it = docList.begin(); int steps = docList.count() / 100; if ( !steps ) steps++; int prog = 0; for ( int i = 0; it != docList.end(); ++it, ++i ) { if ( lastWindowClosed ) return false; QString filename = *it; QStringList terms; if ( parseDocumentToStringlist( chmFile, filename, terms ) ) { for ( QStringList::ConstIterator tit = terms.begin(); tit != terms.end(); ++tit ) insertInDict( *tit, i ); } if ( i%steps == 0 ) { prog++; prog = qMin( prog, 99 ); emit indexingProgress( prog, tr("Processing document %1") .arg( *it ) ); } } emit indexingProgress( 100, tr("Processing completed") ); return true; } void Index::insertInDict( const QString &str, int docNum ) { Entry *e = 0; if ( dict.count() ) e = dict[ str ]; if ( e ) { if ( e->documents.last().docNumber != docNum ) e->documents.append( Document(docNum, 1 ) ); else e->documents.last().frequency++; } else { dict.insert( str, new Entry( docNum ) ); } } bool Index::parseDocumentToStringlist( LCHMFile * chmFile, const QString& filename, QStringList& tokenlist ) { QString parsedbuf, parseentity, text; if ( !chmFile->getFileContentAsString( &text, filename ) || text.isEmpty() ) { qWarning( "Search index generator: could not retrieve the document content for %s", qPrintable( filename ) ); return false; } m_charssplit = SPLIT_CHARACTERS; m_charsword = WORD_CHARACTERS; tokenlist.clear(); // State machine states enum state_t { STATE_OUTSIDE_TAGS, // outside HTML tags; parse text STATE_IN_HTML_TAG, // inside HTML tags; wait for end tag STATE_IN_QUOTES, // inside HTML tags and inside quotes; wait for end quote (in var QuoteChar) STATE_IN_HTML_ENTITY, // inside HTML entity; parse the entity }; state_t state = STATE_OUTSIDE_TAGS; QChar QuoteChar; // used in STATE_IN_QUOTES for ( int j = 0; j < text.length(); j++ ) { QChar ch = text[j]; if ( (j % 20000) == 0 ) qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); if ( state == STATE_IN_HTML_TAG ) { // We are inside HTML tag. // Ignore everything until we see '>' (end of HTML tag) or quote char (quote start) if ( ch == '"' || ch == '\'' ) { state = STATE_IN_QUOTES; QuoteChar = ch; } else if ( ch == '>' ) state = STATE_OUTSIDE_TAGS; continue; } else if ( state == STATE_IN_QUOTES ) { // We are inside quoted text inside HTML tag. // Ignore everything until we see the quote character again if ( ch == QuoteChar ) state = STATE_IN_HTML_TAG; continue; } else if ( state == STATE_IN_HTML_ENTITY ) { // We are inside encoded HTML entity (like  ). // Collect to parsedbuf everything until we see ; if ( ch.isLetterOrNumber() ) { // get next character of this entity parseentity.append( ch ); continue; } // The entity ended state = STATE_OUTSIDE_TAGS; // Some shitty HTML does not terminate entities correctly. Screw it. if ( ch != ';' && ch != '<' ) { if ( parseentity.isEmpty() ) { // straight '&' symbol. Add and continue. parsedbuf += "&"; } else qWarning( "Index::parseDocument: incorrectly terminated HTML entity '&%s%c', ignoring", qPrintable( parseentity ), ch.toLatin1() ); j--; // parse this character again, but in different state continue; } // Don't we have a space? if ( parseentity.toLower() != "nbsp" ) { QString entity = chmFile->impl()->decodeEntity( parseentity ); if ( entity.isNull() ) { // decodeEntity() already printed error message //qWarning( "Index::parseDocument: failed to decode entity &%s;", parsedbuf.ascii() ); continue; } parsedbuf += entity; continue; } else ch = ' '; // We got a space, so treat it like it, and not add it to parsebuf } // // Now process STATE_OUTSIDE_TAGS // // Check for start of HTML tag, and switch to STATE_IN_HTML_TAG if it is if ( ch == '<' ) { state = STATE_IN_HTML_TAG; goto tokenize_buf; } // Check for start of HTML entity if ( ch == '&' ) { state = STATE_IN_HTML_ENTITY; parseentity = QString::null; continue; } // Replace quote by ' - quotes are used in search window to set the phrase if ( ch == '"' ) ch = '\''; // Ok, we have a valid character outside HTML tags, and probably some in buffer already. // If it is char or letter, add it and continue if ( ch.isLetterOrNumber() || m_charsword.indexOf( ch ) != -1 ) { parsedbuf.append( ch ); continue; } // If it is a split char, add the word to the dictionary, and then add the char itself. if ( m_charssplit.indexOf( ch ) != -1 ) { if ( !parsedbuf.isEmpty() ) tokenlist.push_back( parsedbuf.toLower() ); tokenlist.push_back( ch.toLower() ); parsedbuf = QString::null; continue; } tokenize_buf: // Just add the word; it is most likely a space or terminated by tokenizer. if ( !parsedbuf.isEmpty() ) { tokenlist.push_back( parsedbuf.toLower() ); parsedbuf = QString::null; } } // Add the last word if still here - for broken htmls. if ( !parsedbuf.isEmpty() ) tokenlist.push_back( parsedbuf.toLower() ); return true; } void Index::writeDict( QDataStream& stream ) { stream << DICT_VERSION; stream << m_charssplit; stream << m_charsword; // Document list stream << docList; // Dictionary for( QHash::ConstIterator it = dict.begin(); it != dict.end(); ++it ) { stream << it.key(); stream << (int) it.value()->documents.count(); stream << it.value()->documents; } } bool Index::readDict( QDataStream& stream ) { dict.clear(); docList.clear(); QString key; int version, numOfDocs; stream >> version; if ( version < 2 ) return false; stream >> m_charssplit; stream >> m_charsword; // Read the document list stream >> docList; while ( !stream.atEnd() ) { stream >> key; stream >> numOfDocs; QVector docs( numOfDocs ); stream >> docs; dict.insert( key, new Entry( docs ) ); } return dict.size() > 0; } QStringList Index::query( const QStringList &terms, const QStringList &termSeq, const QStringList &seqWords, LCHMFile * chmFile ) { QList termList; QStringList::ConstIterator it = terms.begin(); for ( it = terms.begin(); it != terms.end(); ++it ) { Entry *e = 0; if ( dict[ *it ] ) { e = dict[ *it ]; termList.append( Term( *it, e->documents.count(), e->documents ) ); } else { return QStringList(); } } if ( !termList.count() ) return QStringList(); qSort( termList ); QVector minDocs = termList.takeFirst().documents; for(QList::Iterator it = termList.begin(); it != termList.end(); ++it) { Term *t = &(*it); QVector docs = t->documents; for(QVector::Iterator minDoc_it = minDocs.begin(); minDoc_it != minDocs.end(); ) { bool found = false; for (QVector::ConstIterator doc_it = docs.constBegin(); doc_it != docs.constEnd(); ++doc_it ) { if ( (*minDoc_it).docNumber == (*doc_it).docNumber ) { (*minDoc_it).frequency += (*doc_it).frequency; found = true; break; } } if ( !found ) minDoc_it = minDocs.erase( minDoc_it ); else ++minDoc_it; } } QStringList results; qSort( minDocs ); if ( termSeq.isEmpty() ) { for(QVector::Iterator it = minDocs.begin(); it != minDocs.end(); ++it) results << docList.at((int)(*it).docNumber); return results; } QString fileName; for(QVector::Iterator it = minDocs.begin(); it != minDocs.end(); ++it) { fileName = docList[ (int)(*it).docNumber ]; if ( searchForPhrases( termSeq, seqWords, fileName, chmFile ) ) results << fileName; } return results; } bool Index::searchForPhrases( const QStringList &phrases, const QStringList &words, const QString &filename, LCHMFile * chmFile ) { QStringList parsed_document; if ( !parseDocumentToStringlist( chmFile, filename, parsed_document ) ) return false; miniDict.clear(); // Initialize the dictionary with the words in phrase(s) for ( QStringList::ConstIterator cIt = words.begin(); cIt != words.end(); ++cIt ) miniDict.insert( *cIt, new PosEntry( 0 ) ); // Fill the dictionary with the words from the document unsigned int word_offset = 3; for ( QStringList::ConstIterator it = parsed_document.begin(); it != parsed_document.end(); it++, word_offset++ ) { PosEntry * entry = miniDict[ *it ]; if ( entry ) entry->positions.append( word_offset ); } // Dump it /* QDictIterator it( miniDict ); for( ; it.current(); ++it ) { QString text( it.currentKey() ); QValueList pos = miniDict[text]->positions; for ( unsigned int i = 1; i < pos.size(); i++ ) text += " " + QString::number( pos[i] ); qDebug( "%s", text.ascii()); } */ QList first_word_positions; for ( QStringList::ConstIterator phrase_it = phrases.begin(); phrase_it != phrases.end(); phrase_it++ ) { QStringList phrasewords = phrase_it->split( ' ' ); first_word_positions = miniDict[ phrasewords[0] ]->positions; for ( int j = 1; j < phrasewords.count(); ++j ) { QList next_word_it = miniDict[ phrasewords[j] ]->positions; QList::iterator dict_it = first_word_positions.begin(); while ( dict_it != first_word_positions.end() ) { if ( next_word_it.indexOf( *dict_it + 1 ) != -1 ) { (*dict_it)++; ++dict_it; } else dict_it = first_word_positions.erase( dict_it ); } } } if ( first_word_positions.count() ) return true; return false; } }; kchmviewer-5.3/lib/kio-msits/0000755000175000001440000000000011514013420014711 5ustar timuserskchmviewer-5.3/lib/kio-msits/msits.cpp0000755000175000001440000001770610753720064016607 0ustar timusers/*************************************************************************** * Copyright (C) 2004-2007 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include "msits.h" #include "libchmurlfactory.h" using namespace KIO; extern "C" { int KDE_EXPORT kdemain( int argc, char **argv ) { kDebug() << "*** kio_msits Init"; KComponentData instance( "kio_msits" ); if ( argc != 4 ) { kDebug() << "Usage: kio_msits protocol domain-socket1 domain-socket2"; exit (-1); } ProtocolMSITS slave ( argv[2], argv[3] ); slave.dispatchLoop(); kDebug() << "*** kio_msits Done"; return 0; } } ProtocolMSITS::ProtocolMSITS (const QByteArray &pool_socket, const QByteArray &app_socket) : SlaveBase ("kio_msits", pool_socket, app_socket) { m_chmFile = 0; } ProtocolMSITS::~ProtocolMSITS() { if ( !m_chmFile ) return; chm_close (m_chmFile); m_chmFile = 0; } // A simple stat() wrapper static bool isDirectory ( const QString & filename ) { return filename.endsWith( '/' ); } void ProtocolMSITS::get( const KUrl& url ) { QString htmdata, fileName; chmUnitInfo ui; QByteArray buf; kDebug() << "kio_msits::get() " << url.path(); if ( !parseLoadAndLookup ( url, fileName ) ) return; // error() has been called by parseLoadAndLookup kDebug() << "kio_msits::get: parseLoadAndLookup returned " << fileName; if ( LCHMUrlFactory::handleFileType( url.path(), htmdata ) ) { buf = htmdata.toUtf8(); kDebug() << "Using special handling for image pages: " << htmdata; } else { if ( isDirectory (fileName) ) { error( KIO::ERR_IS_DIRECTORY, url.prettyUrl() ); return; } if ( !ResolveObject ( fileName, &ui) ) { kDebug() << "kio_msits::get: could not resolve filename " << fileName; error( KIO::ERR_DOES_NOT_EXIST, url.prettyUrl() ); return; } buf.resize( ui.length ); if ( RetrieveObject (&ui, (unsigned char*) buf.data(), 0, ui.length) == 0 ) { kDebug() << "kio_msits::get: could not retrieve filename " << fileName; error( KIO::ERR_NO_CONTENT, url.prettyUrl() ); return; } } totalSize( buf.size() ); KMimeType::Ptr result = KMimeType::findByNameAndContent( fileName, buf ); kDebug() << "Emitting mimetype " << result->name(); mimeType( result->name() ); data( buf ); processedSize( buf.size() ); finished(); } bool ProtocolMSITS::parseLoadAndLookup ( const KUrl& url, QString& abspath ) { kDebug() << "ProtocolMSITS::parseLoadAndLookup (const KUrl&) " << url.path(); int pos = url.path().indexOf ("::"); if ( pos == -1 ) { error( KIO::ERR_MALFORMED_URL, url.prettyUrl() ); return false; } QString filename = url.path().left (pos); abspath = url.path().mid (pos + 2); // skip :: // Some buggy apps add ms-its:/ to the path as well if ( abspath.startsWith( "ms-its:" ) ) abspath = abspath.mid( 7 ); kDebug() << "ProtocolMSITS::parseLoadAndLookup: filename " << filename << ", path " << abspath; if ( filename.isEmpty() ) { error( KIO::ERR_MALFORMED_URL, url.prettyUrl() ); return false; } // If the file has been already loaded, nothing to do. if ( m_chmFile && filename == m_openedFile ) return true; kDebug() << "Opening a new CHM file " << filename; // First try to open a temporary file chmFile * tmpchm; if ( (tmpchm = chm_open ( QFile::encodeName (filename))) == 0 ) { error( KIO::ERR_COULD_NOT_READ, url.prettyUrl() ); return false; } // Replace an existing file by a new one if ( m_chmFile ) chm_close (m_chmFile); m_chmFile = tmpchm; m_openedFile = filename; kDebug() << "A CHM file " << filename << " has beed opened successfully"; return true; } /* * Shamelessly stolen from a KDE KIO tutorial */ static void app_entry(UDSEntry& e, unsigned int uds, const QString& str) { e.insert(uds, str); } // appends an int with the UDS-ID uds static void app_entry(UDSEntry& e, unsigned int uds, long l) { e.insert(uds, l); } // internal function // fills a directory item with its name and size static void app_dir(UDSEntry& e, const QString & name) { e.clear(); app_entry(e, KIO::UDSEntry::UDS_NAME, name); app_entry(e, KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); app_entry(e, KIO::UDSEntry::UDS_SIZE, 1); } // internal function // fills a file item with its name and size static void app_file(UDSEntry& e, const QString & name, size_t size) { e.clear(); app_entry(e, KIO::UDSEntry::UDS_NAME, name); app_entry(e, KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); app_entry(e, KIO::UDSEntry::UDS_SIZE, size); } void ProtocolMSITS::stat (const KUrl & url) { QString fileName; chmUnitInfo ui; kDebug() << "kio_msits::stat (const KUrl& url) " << url.path(); if ( !parseLoadAndLookup ( url, fileName ) ) return; // error() has been called by parseLoadAndLookup if ( !ResolveObject ( fileName, &ui ) ) { error( KIO::ERR_DOES_NOT_EXIST, url.prettyUrl() ); return; } kDebug() << "kio_msits::stat: adding an entry for " << fileName; UDSEntry entry; if ( isDirectory ( fileName ) ) app_dir(entry, fileName); else app_file(entry, fileName, ui.length); statEntry (entry); finished(); } // A local CHMLIB enumerator static int chmlib_enumerator (struct chmFile *, struct chmUnitInfo *ui, void *context) { ((QVector *) context)->push_back (QString::fromLocal8Bit (ui->path)); return CHM_ENUMERATOR_CONTINUE; } void ProtocolMSITS::listDir (const KUrl & url) { QString filepath; kDebug() << "kio_msits::listDir (const KUrl& url) " << url.path(); if ( !parseLoadAndLookup ( url, filepath ) ) return; // error() has been called by parseLoadAndLookup filepath += '/'; if ( !isDirectory (filepath) ) { error(KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path()); return; } kDebug() << "kio_msits::listDir: enumerating directory " << filepath; QVector listing; if ( chm_enumerate_dir ( m_chmFile, filepath.toLocal8Bit(), CHM_ENUMERATE_NORMAL | CHM_ENUMERATE_FILES | CHM_ENUMERATE_DIRS, chmlib_enumerator, &listing ) != 1 ) { error(KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path()); return; } UDSEntry entry; int striplength = filepath.length(); for ( int i = 0; i < listing.size(); i++ ) { // Strip the direcroty name QString ename = listing[i].mid (striplength); if ( isDirectory ( ename ) ) app_dir(entry, ename); else app_file(entry, ename, 0); listEntry(entry, false); } listEntry(entry, true); finished(); } kchmviewer-5.3/lib/kio-msits/CMakeLists.txt0000644000175000001440000000042511114733132017457 0ustar timusersSET( kioSources msits.cpp ) KDE4_ADD_PLUGIN( kio_msits ${kioSources} ) TARGET_LINK_LIBRARIES( kio_msits ${KDE4_KIO_LIBS} ${LIBCHM_LIBRARY} ) INSTALL( TARGETS kio_msits DESTINATION ${PLUGIN_INSTALL_DIR} ) INSTALL( FILES msits.protocol DESTINATION ${KDE4_SERVICES_INSTALL_DIR} ) kchmviewer-5.3/lib/kio-msits/msits.protocol0000755000175000001440000000210710573502134017647 0ustar timusers[Protocol] exec=kio_msits protocol=ms-its input=none output=filesystem reading=true listing=Name,Type,Size defaultMimetype=text/html Description=A kioslave for displaying WinHelp files Description[da]=En kioslave til visning af Windows hjælpefiler Description[de]=Ein Ein-/Ausgabemodul zur Anzeige von WinHelp-Dateien Description[es]=Un kioslave para mostrar archivos WinHelp Description[et]=WinHelp-failide kuvamise IO-moodul Description[fr]=Un module d'entrée / sortie pour l'affichage des fichiers WinHelp Description[hu]=KDE-protokoll WinHelp-fájlok megjelenítéséhez Description[it]=Un kioslave per mostrare i file WinHelp Description[nl]=Een kioslave voor het weergeven van WinHelp-bestanden Description[pl]=kioslave do pokazywania plików WinHelp Description[pt]=A 'kioslave' para mostrar ficheiros WinHelp Description[pt_BR]=Um kioslave para exibir arquivos WinHelp Description[ru]=Обработчик ввода-вывода для файлов WinHelp Description[sv]=En I/O-slav för att visa WinHelp-filer Description[xx]=xxA kioslave for displaying WinHelp filesxx Icon=help kchmviewer-5.3/lib/kio-msits/msits.h0000755000175000001440000000554311023347400016236 0ustar timusers/*************************************************************************** * Copyright (C) 2004-2005 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef MSITS_H #define MSITS_H #include #include #include #include #include "chm_lib.h" class ProtocolMSITS : public KIO::SlaveBase { public: ProtocolMSITS ( const QByteArray&, const QByteArray& ); virtual ~ProtocolMSITS(); virtual void get ( const KUrl& ); virtual void listDir (const KUrl & url); virtual void stat (const KUrl & url); private: // This function does next thing: // - parses the URL to get a file name and URL inside the file; // - loads a new CHM file, if needed; // - returns the parsed URL inside the file; bool parseLoadAndLookup ( const KUrl&, QString& abspath ); // Resolve an object inside a CHM file inline bool ResolveObject (const QString& fileName, chmUnitInfo *ui) { return m_chmFile != NULL && ::chm_resolve_object(m_chmFile, fileName.toUtf8().constData(), ui) == CHM_RESOLVE_SUCCESS; } // Retrieve an object from the CHM file inline size_t RetrieveObject (const chmUnitInfo *ui, unsigned char *buffer, LONGUINT64 fileOffset, LONGINT64 bufferSize) { return ::chm_retrieve_object(m_chmFile, const_cast(ui), buffer, fileOffset, bufferSize); } // An opened file name, if presend QString m_openedFile; // a CHM structure file pointer (from chmlib) chmFile * m_chmFile; }; #endif /* MSITS_H */ kchmviewer-5.3/ChangeLog0000644000175000001440000004710211514012536014011 0ustar timusers2011-01-14 tim - Version 5.3 released. - Fixed spelling error (thx Razvan Visan) - Changed encodings order for Chinese and Japanese languages (thanks Kai-Chieh Ku) - Added Ukrainian localization (thanks Olexander Yatsenko) - Added Brazilian localization (thanks Márcio Moraes) - Fixed some grammatical errors (thanks Robin 'cheese' Lee) - Fixed webkit engine for buggy CHMs which do not have all content, as well as cases when external references cannot be loaded. Thanks to Kai-Chieh Ku - Added Mac support (thanks Serge Weinstock) 2010-04-26 tim - 5.2 RELEASE - Fixed missing images on CHM files under Windows XP SP3; - Fixed viewing CHM files which embed links to other CHM files; 2010-04-23 tim - Fixed window icon (thanks Aaron Lewis) - Fixed typos in README and FAQ (thanks Martin 'Cheese' Lee) - Fixed errors while building index because 'keyword' was ignored (thanks ivg) - Switched to use new cross-compiler from http://mingw-cross-env.nongnu.org/ to create Windows builds 2009-12-17 tim - 5.1 RELEASE - Trying to use non-normalized URL first to fix CHMs which use them in TOC/Index 2009-12-16 tim - Fixed application settings storage. - Fixed bookmark edit button. - Version changed to 5.1 2009-12-14 tim - 5.0 RELEASE - Version changed to 5.0 - Binary index parser commented out as it seems to be buggy. - Toolbar mode is now configurable through settings. - Now the application can start without opening a CHM file. Startup mode is selected in settings. - Added check if a new version is available. - Added new icons from DryIcons 2009-12-13 tim - Major code refactoring, with renamed files and classes, to make it easier to maintain the code in future. - Changed all license headers to GPLv3-compliant. - Recent files feature now uses a separate class. - The navigator tab is now a Dock widget, so can be moved and floated. - Content tab is now always loaded, and the page is correctly located. 2009-24-10 tim - Version changed to 4.2 - Fixed font size change on KHTMLPart (thanks to Jure Repinc) - Fixed Windows file opener being unable to open the file with non-English characters. - Fixed "Open in new tab" for QTextBrowser opening an empty page. - Middle button in QTextBrowser and WebKit now opens the link in new tab in background. - Middle button now closes opened tabs in the tab bar. 2009-19-07 tim - Version changed to 4.1 - Updated Dutch translation (thanks to Sander Pientka) - Updated Turkish translation (thanks to Ozan Caglayan) - Default toolbar button order changed to standard -/+ - Automatic encoding detection for KHTMLPart/WebKit is now disabled by default. - Fixed incorrest index string encoding for non-English strings. - Fixed text size auto-increase each time the file is loaded for WebKit browser. - Fixed Windows mingw build issues. - Fixed Windows command line parser being unable to open the file with non-English characters. - License changed from GPLv2 to GPLv3. 2008-12-01 tim - Version changed to 4.0 (release); - Released version 4.0. 2008-11-30 tim - Integrate Fedora .desktop fixes (thx Patrice Dumas) - Implemented binary TOC and index tables (thx Razvan Cojocaru , the author of xchm). Speed up loading files more than twice! - Now showing 'waiting' cursor while loading chm table of contents or index. - Fixed QTextBrowser by providing workaround for "empty" books. - More compatibility fixes with KDE 4.1 - Added Swedish translation (thx Daniel Nylander) - Fixed handling files with file:// prefix. - Added D-BUS support for Qt and KDE builds, the application could now be controlled remotely from other applications or scripts. - Restored KDE translations. 2008-06-18 tim - Version changed to 4.0b4; - Added WebKit support (requires QtWebKit module). WebKit browser is default for a system where QtWebKit is present; - Added support for Right-To-Left application and text layouts; - Added support for disabling automatic encoding detection for browsers which could detect it themselves (KHTMLPart and Webkit); 2008-06-06 tim - Version changed to 4.0b3; - Added KDE4 support; - Fixed several compatibility issues with qt-4.4.0; - Added keyboard shortcuts to move to the next and previous entries in TOC: Ctrl+Right arrow and Ctrl+Left arrow; - Added manifest for the Windows version (thanks Cristian Adam); - Windows version should not rely on mingw DLL anymore; - Toolbars are now named; - Fixed parallel build (thanks Patrice Dumas); 2008-02-10 tim - Version changed to 4.0b2 (this is Qt4-only release); - Added a command-line option to search through table of contents (--stoc); - Added Italian translation (thanks to Emilio Scalise); - Fixed crash on incorrectly compressed CHM file (thanks Albert Astals Cid); - Fixed kio-msits so it now works with KDE4 (thanks Albert Astals Cid); - Fixed FSF mailing address everywhere (thanks Albert Astals Cid); - Fixed handling of improperly formatted CHM files like Audigy help; - Added heuristics to support for improperly formatted CHMs which have toc and index, but do not specify so in the project file; - Fixed handling of CHM files which have local links in form of MS-ITS: urls; - Search engine has been integrated into libchmfile; - Search indexes are now stored in a single file, which should make it easier to make search available through the indexing application; 2007-08-26 tim - Application ported to Qt4. - Recent files reworked. - Search on page is now done via toolbar (like FireFox), activated by Ctrl-F and /. - After switching tabs (either with mouse or Alt+ the focus is moved to the browser widget, so you don't have to click on it to navigate using keyboard. - Enchanced browser context menu. 2007-06-16 tim - Fixed locale and .desktop installation directory for Gentoo (thanks Peter Volkov) - Increased the speed of search engine indexing (thanks Kai Londenberg) - Fixed the problem when kchmviewer is called from a browser with URL like file://. - Fixed the unability to run the program when the last opened file does not exist anymore, and the LoadLatestFileOnStartup is set to 1. - Fixed CHMs with Unicode index/topic filenames inside CHM file (thanks hephooey). - Fixed showing book images in QTextBrowser when file path contains urlencoded symbols. - Fixed 64bit platforms compilation if system chmlib is not present. - Version 3.1 (Qt3) released. 2007-03-14 tim - Version 3.0 released - Added a lot of decoded entities. - Fixed incorrect saving of the settings file which result of this file not being loaded. - Added FAQ. - Added command-line options to search in index and in search window. 2007-03-09 tim - Added improved custom search engine. - Added DCOP support for KDE version. 2007-03-08 tim - KDE version now shows KDE about dialog - Fixed 'copy' in KDE browser - Version changed to 3.0 - Removed duplicated application title in KDE. - Gentoo installation issues fixed. - KDE version sometime didn't kill the process after quit; thanks Norberto Bensa for fix. - Fixed popup menu popping in a wrong place when using QTextBrowser if the scrollbar position is not at the top of the document. - KHTMLPart options sometime were not disabled while QTextBrowser was choosen. 2007-03-01 tim - The design changed; created the chm files processing library, and moved it outside the source to improve and simplify Okular integration. - Changed URL2Topic search, the result - startup and opening times increased up to 20 times for large chm files! - Index multiple URL entry also opens now faster. - Added support for new autotools. 2006-12-01 tim - Version changed to 2.7. - You can now switch between tabs using Alt+, thanks Bobi Jam. - Kchmviewer should now work correctly on non-x86 platforms, including the codepage autodetection. - Added a warning when the browser or browser settings are changed that the application restart is required for changes to take effect. - Fixed the i18n compilation problem in kchmviewwindow.cpp. - If the TOC directory entry did not have an associated page, it was not possible to select it. - TOC directory entries now could be opened/closed with double-click on the entry name/icon, not just +/- icons. Credits to Ludo for the ideas. - No more duplicate entries in previous file history. - The window title is now truncated if too long. - Tab close icon now positioned correctly. - Now current window size and splitter position is also stored on exit - separately for each chm file. - Window selection with multiple tabs now works. - Czech translation added, thanks Hynek Fabian. - Dutch translation updated, thanks Rinse de Vries. 2006-04-05 tim - Version changed to 2.6 - Fixed gcc 4.x compilation. - Added shortcut help in context menus. - Right-click menu is now available in Contents, Search, Index and Favorites windows. - Fixed navigation buttons 'What's this' messages. - Fixed compilation on Zaurus and Debian. 2006-04-05 tim - Application icon should now be correctly installed. - Fixed handling of mailto: urls. - 'Locate in content' button now opens a Contents tab, if hidden. - Version 2.5 release. 2006-04-02 tim - A tooltip is now shows the full text in all the tree and list views if truncated on screen. - Fixed content tree parser, now the content table should be parsed correctly. - Fixed crash after the encoding is changed, if any tree item is clicked. - Added a bookmark menu. Ctrl-B is a shortcut to add a bookmark. 2006-04-01 tim - Added tab browsing. Use right-click and 'Open in new tab'. - Added right-click content menu to open pages in a new tab. - Control-click on link or table of contents opens a page in a new tab in background. - Shift-click on link or table of contents opens a page in a new tab in foreground. 2006-03-31 tim - 'Setup' menu renamed to 'Settings' - Fixed various navigation errors when 'Locate' button didn't locate the appropriate topic. - Fixed forward navigation, and saved scroll position. - Added tab browsing. 2006-02-07 tim - Navigation history rewritten, now it stores text position too. - Version changed to 2.1. 2006-02-06 tim - Added 'Extract CHM content' menu item to extract the whole CHM file into a directory. 2006-02-02 tim - Added i18n calls for complete internationalization. pot file created. - Switched to a new, correct automake file structure. - Fixed autotest. - Version changed to 2.0. 2006-02-01 tim - Now kchmviewer uses system libchm if found, and no --with-builtin-chmlib configure switch defined. - Made configure more compatible with newest autoconf and Debian - thanks to Jose Luis Tallon. - Added an application icon - thanks to Jose Luis Tallon. - Fixed index parser for PHP manual - thanks to Dmitry Bakshaev. - In full screen mode the menu bar and status bar are now hidden. 2006-01-30 tim - Added 'locate in content window' button to open currently opened topic in the content window. - Fixed compilation with gcc 4.1 - thanks to Jan Jitse Venselaar. - The algorithm to detect the valid root offset in contents page is changed. Now there should be less "CHMFile::ParseAndFillTopicsTree: child entry 1 with no root entry!" errors. - Pages with images only are now shown correctly. 2005-12-30 tim - Fixed kqrunprocess.h compilation bug on some platforms. 2005-11-27 tim - Version 1.3 RELEASE 2005-11-25 tim - Fixed error message when CHM file cannot be opened. - Added Fullscreen mode (shortcut F11), and option to show/hide contents window (F9). 2005-11-22 tim - Added possibility to view HTML source in external viewer/editor 2005-11-21 tim - File names containing non-English characters now open correctly. - Changed copyright notices. 2005-11-21 tim - Fixed browser page update for QTextBrowser when current encoding changes. - Changed encoding selectore. Now it compiles on x86_64. - version 1.2 RELEASE 2005-11-20 tim - Added 'next page' and 'prev page' buttons. - Added extra charset encodings for Japanese, Chinese, Russian and Ukrainian languages. - Added UTF-8 and UTF-16 encodings to country 'Unicode' :) - Added special KOI8 encoding to Russian and Ukrainian languages. 'Special' means that TOC is in CP1251 encoding, while content is in KOI8 encoding. There were some CHM files with such weird encoding, so it is kinda hack. - Fixed language selection bug - application crashed when you select the last language in any submenu. - 'Set encoding' menu renamed to 'Set Language'. - Added a new 'Set codepage' menu, which allows experienced people to send needed text code page directly. - Added Ctrl-F shortcut to move cursor focus onto the search input combo box. - Fixed navigation in some CHM files, which have spaces in filenames. 2005-10-30 tim - fixed security bug - chmlib-0.35 updated to 0.37 - version 1.1 RELEASE released. 2005-09-27 tim - fixed bug with incorrect embedded image shown - thanks to XinWei Hu. - fixed bug with non-working decrease font size - thanks to anonymous Sourceforge user. - copy in KDE version worked through Ctrl-C or 'copy' in content menu. 2005-07-28 tim - Version 1.0 RELEASE released. - Fixed -h option for Qt version. - Fixed search messagebox on '?' button. - Added F3 shortcut for 'next search in page' action. 2005-06-30 tim - version 0.92 RELEASE CANDIDATE 2 released. - fixed Slackware 10 compilation (one more time) 2005-06-25 tim - more namespace cleanups and bugfixes. - context and search windows are not shown if the opened file doesn't have it. - removed 'search in results' checkbox. - the last used directory is also stored. 2005-06-21 tim - fixed 'View HTML source' bug. - fixed "Select All/Copy" popup menu bugs. - fixed bug with duplicated WhatsIs icon on every toolbar. - added several keyboard shortcuts for menu commands. - added extra shortcuts: Ctrl+1 opens the contents page, Ctrl+2 opens Index page, Ctrl+3 opens the Search page, and Ctrl+4 opens the Bookmarks page. - added command-line options to search in pages, in index and in bookmarks. 2005-06-20 Luca 'Ziabice' Gambetta - fix for AMD64 platform (confirmed to work) 2005-06-18 tim - version 0.91 RELEASE CANDIDATE 1 released. 2005-06-18 tim - all configuration settings are now used. - history is saved, loaded and cleaned up correctly. - chm data (size/time) is now stored inside the history file, not in file name. 2005-06-17 tim - some of configuration settings are now used. - new browser is now running on Qt version when external URL is opening. 2005-06-16 tim - added the configuration dialog, configuration settings are now saved and loaded. 2005-06-12 tim - fixed compilation on Slackware 10. - fixed internal links following for QTextBrowser. 2005-06-11 Gregorio Guidi - fixed possible problem - linking static chmlib against non-static executable. - added --without-kde option. 2005-06-07 tim - preparing to release version 0.9beta. - version 0.9beta released. 2005-06-07 tim - added a full-featured search engine with complex query support. 2005-06-02 tim - added copy/selectall functionality to KHTML browser, including a popup menu. - fixed storing scrollbar position for KHTML browser. - fixed window refresh on encoding change, encoding change now works for KHTML browser. - zoom in/out buttons also work for KHTML browser. 2005-06-01 tim - clicking on links (in-book navigation) now works for KHTML browser. - full links (ms-its:) in chm files are now supported. 2005-05-10 tim - switched to KPopupMenu for KDE. - fixed search/print for KHTMLPart. - fixed status bar in KDE window. - added QWhatsThis for every toolbar icon. - fixed command-line parsing for KDE app, remove external GetOpt class. - fixed build outside the work directory. 2005-05-04 tim - KDE integration continues. Now we support printing from KHTML. - KIO-slave now works. - switched to KTabWidget for KDE. - fixed search/print for QTextBrowser. 2005-05-03 tim - Reimplemented browser history in a more convinient way. - KDE integration continues. Now we support KHTML. - Added a KIO-slave to handle CHMs. - Now it is possible to open files with non-latin filenames. - Added support for CHM urls containing anchors. - It is possible to use QTextBrowser even for a KDE application. 2005-04-27 tim - KDE integration started. Now we support KApplication, KMainWindow and KFileDialog. 2005-04-24 tim - version 0.2 released. 2005-04-24 tim - added index fields identation according to .hhk file. - index entries with multiple links are now supported. A dialog is opened when such a link is clicked. - index "see also" links are now supported. - added red color for index entries with multiple links, and grey color for "see also" links. - chmlib interface redesigned for a great code cleanup and a little speedup. - fixed bug when search history and bookmark list grow up every start. - fixed garbage at the end of some HTML pages. - fixed bug when search results do not open in page. - fixed compilation on earlier Qt version (remove qvector.h dependency). - fixed compilation on glibc without off_t. 2005-04-23 tim - TOC parser rewritten, got about 30% speedup on TOC parsing. Note that TOC parser becomes stricter; please report any warnings. - Fixed chinese encoding TOC bugs, chinese files are now also shown correctly. - Added ” entity to the entities list. 2005-04-19 tim - added support for built-in images, including custom images for folders; - re-merged toolbar images into the executable as PNGs (uses less space); - switched to autoconf/automake from qmake to simplify building and distribution, and to simplify KDEing; 2005-04-05 tim - version 0.1alpha released - fixed slowdown on big files; 2005-04-05 tim - images merged into the main executable kchmviewer-5.3/FAQ0000644000175000001440000001013711364464524012602 0ustar timusers*** PLEASE MAKE SURE YOU HAVE THE LATEST RELEASE FROM www.kchmviewer.net BEFORE SUBMITTING A BUG! *** *** Browsing: *** Q: The book body is not shown (empty screen) although table of contents is shown. What's wrong? A: QTextBrowser is very basic browser which cannot handle HTML in some modern books. Kchmviewer tries to fix the books with known quirks, but it does not always work. If the latest release does not work for you, try to use different internal browser by changing it in Settings using KHTMLPart or WebKit instead. Q: The book file contains spaces or non-English characters and it shows without any problem using QTextWidget browser, but when I use KHTMLPart browser, I cannot open it or go through internal links: A: You have either kio_chm installed, or previous version of kio_msits. To disable kio_chm, find the file chm.protocol in your KDE directory, and remove it. Then run kdeinit to reread the configuration. To find the old kio_msits, find the file kio_msits.so in your KDE directory, and remove it. Then recompile the application. Q: The book shows without any problem using QTextWidget browser, but when I use KHTMLPart browser, I get the following error: An error occurred while loading ms-its:/home/user/Symphony?FrameWork.chm::/index.html The?file?or?folder?ms-its:/home/user/Symphony?FrameWork.chm::/index.html?does?not?exist. A: You have kio_chm installed, and because it installs itself as KIO slave for ms-its, sometime KDE uses it instead of kio_msits. To disable it, find the file chm.protocol in your KDE directory, and remove it. Then run kdeinit or kdeinit4 to reread the configuration. Q: When I open CHM document, there is no "Contents" or "Index" tab. A: The files required for Content or Index tabs are not present in chm file. Therefore it is not possible to show those tabs. Q: I use KDE. Which browser is better to use - KHTMLPart or QTextBrowser? A: QTextBrowser was reported to be faster, except for multibyte languages (Japanese/Chinese/Korean). However KHTMLPart is obviously more standard-compliant. I use KHTMLPart. 4.0 version adds WebKit as well. Q: Font size increasing button does not increase the font size, just changes the font to bold once. A: Make sure you use resizeable (true type) fonts. The described behavior is expected when bitmap fonts are used, as their size could not be changed. Check your system configuration. *** Questions about search. *** Before version 3.0 is out there was only one search engine, which is still available in Advanced settings as "search engine based on internal CHM index". The following questions are only related to the old search engine, and are fixed in a new one. Q: Why my search for "for this" found no documents even though I know there are documents containing this phrase? Q: Why my search for "C++" or "argv[0]" found no documents even though I know there are documents containing this phrase? Q: Why the search tab is not shown? A: The search does not look through all the documents. Instead it uses the previously generated index stored in CHM file. If the index is not present in the file, the search is not possible. However the indexing procedure in Microsoft HTML Help Workshop does not index the symbols (except underscore), single letters and common words like for, this, to, do, etc. Therefore those words and symbols are not in index file, so search for "C++" will not be found. Also the the indexing procedure in Microsoft HTML Help Workshop brokes the ASCII characters which are outside 7-bit ASCII table. Therefore search using European/Russian letters often produces strange results, finding the pages with no search words present, and does not work with Asian langiages. The solution is new kchmviewer search engine. It is also index-based, but the index is generated by chmviewer. Every symbol is indexed, so seach for "C++" or "argv[0]" will find the appropriate code. It uses Unicode inside, so it has no problem with any language, including Japanese, Chinese and Korean. kchmviewer-5.3/build-win32-mingw.sh0000755000175000001440000000073311365746646015777 0ustar timusers#!/bin/sh # Path to (cross-platform) mingw compiler #MINGWPATH=/home/tim/bin/mingw/bin #QTPATH=/home/tim/bin/qt-4.6.0/qt/ MINGWPATH=/usr/toolchains/windows-x86-mingw/bin QMAKE=i686-pc-mingw32-qmake BUILDDIR="build.win32" ################################## if [ -d "$BUILDDIR" ]; then rm -rf "$BUILDDIR" fi svn export . "$BUILDDIR/" || exit 1 cd "$BUILDDIR" # Compile it export PATH=$MINGWPATH:$PATH $QMAKE -r -spec win32-g++ "CONFIG += release" && make -j4 || exit 1 kchmviewer-5.3/FindLibchm.cmake0000644000175000001440000000121011023347400015222 0ustar timusers# Tries to find libchm FIND_PATH(LIBCHM_INCLUDE_DIR chm_lib.h /usr/include /usr/local/include) FIND_LIBRARY(LIBCHM_LIBRARY NAMES chm PATH /usr/lib /usr/local/lib) IF (LIBCHM_INCLUDE_DIR AND LIBCHM_LIBRARY) SET(LIBCHM_FOUND TRUE) ENDIF (LIBCHM_INCLUDE_DIR AND LIBCHM_LIBRARY) IF (LIBCHM_FOUND) IF (NOT Libchm_FIND_QUIETLY) MESSAGE(STATUS "Found libchm: ${LIBCHM_LIBRARY}") ENDIF (NOT Libchm_FIND_QUIETLY) ELSE (LIBCHM_FOUND) IF (Libchm_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find libchm. Please install chmlib-devel package (may be also called libchm-devel)") ENDIF (Libchm_FIND_REQUIRED) ENDIF (LIBCHM_FOUND) kchmviewer-5.3/COPYING0000644000175000001440000010451311270677072013305 0ustar timusers GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . kchmviewer-5.3/CMakeLists.txt0000644000175000001440000000111411311623221014762 0ustar timusers# Project name PROJECT( kchmviewer ) # Init cmake #SET( CMAKE_VERBOSE_MAKEFILE ON ) set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/") # Necessary packages FIND_PACKAGE( KDE4 REQUIRED ) FIND_PACKAGE( Libchm REQUIRED) # Set compilation params INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/lib/libchmfile ) ADD_DEFINITIONS( ${KDE4_DEFINITIONS} ) ADD_DEFINITIONS( -DUSE_KDE ) # Run in those subdirectories ADD_SUBDIRECTORY( lib/libchmfile ) ADD_SUBDIRECTORY( lib/kio-msits ) ADD_SUBDIRECTORY( src ) ADD_SUBDIRECTORY( po ) ADD_SUBDIRECTORY( packages ) kchmviewer-5.3/nsis/0000755000175000001440000000000011514013420013200 5ustar timuserskchmviewer-5.3/nsis/license.txt0000644000175000001440000010451311270677072015411 0ustar timusers GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . kchmviewer-5.3/nsis/installer.nsis0000644000175000001440000001030411365746423016115 0ustar timusers; NSIS script file ;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;-------------------------------- ;General ; The icon for the installer. ; MUI_ICON icon_file ; The icon for the uninstaller. ; MUI_UNICON icon_file Name "KchmViewer" OutFile "InstallKchmViewer.exe" InstallDir "$PROGRAMFILES\Ulduzsoft\KchmViewer" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" SetCompressor lzma ;-------------------------------- ;Variables Var MUI_TEMP Var STARTMENU_FOLDER ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "license.txt" !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKEY_LOCAL_MACHINE !define MUI_STARTMENUPAGE_REGISTRY_KEY "SOFTWARE\Ulduzsoft\KchmViewer" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ;Installer Sections Section "General" General SetOutPath "$INSTDIR" ; Our files CreateDirectory "$INSTDIR\imageformats" CreateDirectory "$INSTDIR\codecs" CreateDirectory "$INSTDIR\iconengines" File /oname=$INSTDIR\imageformats\qgif4.dll qgif4.dll File /oname=$INSTDIR\imageformats\qico4.dll qico4.dll File /oname=$INSTDIR\imageformats\qjpeg4.dll qjpeg4.dll File /oname=$INSTDIR\imageformats\qsvg4.dll qsvg4.dll File /oname=$INSTDIR\imageformats\qtiff4.dll qtiff4.dll File /oname=$INSTDIR\iconengines\qsvgicon4.dll qsvgicon4.dll File /oname=$INSTDIR\codecs\qcncodecs4.dll qcncodecs4.dll File /oname=$INSTDIR\codecs\qjpcodecs4.dll qjpcodecs4.dll File /oname=$INSTDIR\codecs\qkrcodecs4.dll qkrcodecs4.dll File /oname=$INSTDIR\codecs\qtwcodecs4.dll qtwcodecs4.dll File kchmviewer.exe File QtGui4.dll File QtCore4.dll File QtNetwork4.dll File QtWebKit4.dll File QtXmlPatterns4.dll File mingwm10.dll File kchmviewer.exe.manifest ;Store installation folder WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" "$INSTDIR" ;Create uninstaller WriteUninstaller "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\kchmviewer.lnk" "$INSTDIR\kchmviewer.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" ; Our files Delete "$INSTDIR\imageformats\qgif4.dll" Delete "$INSTDIR\imageformats\qico4.dll" Delete "$INSTDIR\imageformats\qjpeg4.dll" Delete "$INSTDIR\imageformats\qmng4.dll" Delete "$INSTDIR\imageformats\qsvg4.dll" Delete "$INSTDIR\imageformats\qtiff4.dll" Delete "$INSTDIR\iconengines\qsvgicon4.dll" Delete "$INSTDIR\codecs\qcncodecs4.dll" Delete "$INSTDIR\codecs\qjpcodecs4.dll" Delete "$INSTDIR\codecs\qkrcodecs4.dll" Delete "$INSTDIR\codecs\qtwcodecs4.dll" Delete "$INSTDIR\kchmviewer.exe" Delete "$INSTDIR\QtGui4.dll" Delete "$INSTDIR\QtCore4.dll" Delete "$INSTDIR\QtNetwork4.dll" Delete "$INSTDIR\QtWebKit4.dll" Delete "$INSTDIR\QtXmlPatterns4.dll" Delete "$INSTDIR\mingwm10.dll" Delete "$INSTDIR\kchmviewer.exe.manifest" Delete "$INSTDIR\uninst.exe" RMDir "$INSTDIR\imageformats" RMDir "$INSTDIR\iconengines" RMDir "$INSTDIR\codecs" RMDir "$INSTDIR" !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\kchmviewer.lnk" Delete "$SMPROGRAMS\$MUI_TEMP" DeleteRegKey /ifempty HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KchmViewer" SectionEnd kchmviewer-5.3/nsis/kchmviewer.exe.manifest0000644000175000001440000000073211022327557017673 0ustar timusers Windows Forms Common Control manifest kchmviewer-5.3/nsis/create_installer.sh0000644000175000001440000000320011365746423017073 0ustar timusers#!/bin/sh # File to get the version from FILE_VERSION=../src/version.h # Generated binary BINARY=../build.win32/bin/kchmviewer.exe # Qt libs QTPATH=/usr/toolchains/windows-x86-mingw/i686-pc-mingw32/lib/ QTPLUGPATH=/usr/toolchains/windows-x86-mingw/i686-pc-mingw32/plugins/ # Start the mojo QTLIBS="QtGui4.dll QtCore4.dll QtNetwork4.dll QtWebKit4.dll QtXmlPatterns4.dll" QTPLUGINS="imageformats/qgif4.dll imageformats/qico4.dll imageformats/qjpeg4.dll imageformats/qmng4.dll imageformats/qsvg4.dll \ imageformats/qtiff4.dll iconengines/qsvgicon4.dll codecs/qcncodecs4.dll codecs/qjpcodecs4.dll codecs/qkrcodecs4.dll codecs/qtwcodecs4.dll" find . -type l -delete for lib in $QTLIBS; do if [ ! -f "$QTPATH/$lib" ]; then echo "Error: file $QTPATH/$lib not found" exit 1 fi ln -s $QTPATH/$lib $lib || exit 1 echo "Added Qt library $lib" done for plug in $QTPLUGINS; do if [ ! -f "$QTPLUGPATH/$plug" ]; then echo "Error: plugin $QTPLUGPATH/$plug not found" exit 1 fi file=`basename $plug` ln -s "$QTPLUGPATH/$plug" $file || exit 1 echo "Added Qt plugin $plug" done ln -s "$QTPATH/../bin/mingwm10.dll" mingwm10.dll cp $BINARY kchmviewer.exe export NSISDIR=/home/tim/bin/nsis # Get current, and save the next version VERSION_MAJOR=`sed -n 's/^\#define\s\+APP_VERSION_MAJOR\s\+\([0-9]\+\)/\1/p' $FILE_VERSION` VERSION_MINOR=`sed -n 's/^\#define\s\+APP_VERSION_MINOR\s\+\([0-9]\+\)/\1/p' $FILE_VERSION` VERSION="$VERSION_MAJOR.$VERSION_MINOR" INSTNAME="InstallKchmviewer-$VERSION.exe" echo "Creating $INSTNAME" makensis installer.nsis || exit 1 # Remove stuff rm kchmviewer.exe find . -type l -delete mv InstallKchmViewer.exe $INSTNAME kchmviewer-5.3/README0000644000175000001440000001053711364464524013134 0ustar timusers1. OVERVIEW KchmViewer is a chm (MS HTML help file format) viewer, written in C++. Unlike most existing CHM viewers for Unix, it uses Trolltech Qt widget library, and does not depend on KDE or GNOME. It has full KDE4 support. The main advantage of KchmViewer is extended support for non-English languages. Unlike others, KchmViewer in most cases correctly detects chm file encoding, correctly shows tables of context of Russian, Korean, Chinese and Japanese help files. It also correctly searches text in non-English help files, including Korean, Chinese and Japanese. KchmViewer is written by Georgy Yunaev (gyunaev@ulduzsoft.com), and is licensed under GNU GPL license. Please do NOT use this email for bug reporting; see below. 2. FEATURES - Standalone viewer, depends on Qt4 only. Does not require KDE, GNOME or wxWidgets toolkit. - Could be optionally built with KDE4 support, using KHTML and KDE dialogs. - Completely safe and harmless. Does not support JavaScript in any way, optionally warns you before opening an external web page, or switching to another help file. - Correctly detects and shows encoding of any valid chm file. - Correctly shows non-English chm files, including Cyrillic, Chinese, Japanese and others. - Correctly searches in non-English chm files using chm built-in search index. - Shows an appropriate image for every TOC entry. - Has complete chm index support, including multiple index entries, cross-links and parent/child entries in index. - Persistent bookmarks support. Allows to store bookmarks even if "Favorites" window was not enabled for this chm file. Also stores the screen position for every bookmark. You can also edit/delete bookmarks. - For any opened chm file, stores the last opened window, search history, bookmark history, font size and so on, so when you open this file again, everything is always on the place. - Has easy and powerful search-in-page support. - Allows to increase or decrease the font size, so physically handicapped people can read texts easily. - Has standard Back/Forward/Home navigation. - Can print the opened pages on a standard printer (usually via CUPS). - Has complex search query support. You can use search queries like "lazy people" +learn -not. 3. INSTALLATION Usually kchmviewer is distributed in source code archive, so you need to compile it first. It requires Qt version 4.4 or higher. Note that you need to install qt4-devel and qt4-tools packages (the last one might be included in qt4-devel in your distribution), not just qt package. Also make sure you have chmlib-devel (some distros have it as libchm-devel) package installed. KDE build will check for its presence, but qmake does not have necessary functionality to do so. If you are getting errors regarding missing chm_lib.h file this means chmlib-devel is not installed. 3.1. Qt-only version To compile Qt-only version of kchmviewer, follow the procedure: > tar zxf kchmviewer-.tar.gz > cd kchmviewer- > qmake > make The compiled binary is in bin/kchmviewer. You could copy it somewhere, or use it as-is. It does not require installation. If QtWebKit module is not found, you will get the following error: > kchmviewwindow_qtwebkit.h:25:21: error: QWebView: No such file or directory Either install QtWebKit module, or remove "webkit" from QT+= line in src/src.pro 3.2 KDE4 version To compile the version of kchmviewer with KDE4 support, follow the procedure: > tar zxf kchmviewer-.tar.gz > mkdir build > cd build > cmake .. > make > sudo make install For KDE version the installation is required, since the KHTML KIO slave cannot be used in place. 4. USAGE Usage of kchmviewer is simple: > kchmviewer mychmfile.chm for the rest of command-line options, see kchmviewer --help 5. BUG REPORTING Please use kchmviewer@ulduzsoft.com for bug reporting. 6. THANKS Thanks to: - Jed Wing, the author of chmlib. This library is used by kchmviewer to access chm content. - Razvan Cojocaru, the author of xchm. I used some ideas and chm processing code from xchm. - Peter Volkov for various bug reports and improvement suggestions. - All the users, who report bugs, and suggest features. You help making kchmviewer better. 7. LICENSE kchmviewer is distributed under GNU GPL license version 3. kchmviewer-5.3/templates/0000755000175000001440000000000011514013420014222 5ustar timuserskchmviewer-5.3/templates/h0000644000175000001440000000300510340772766014417 0ustar timusers/*************************************************************************** * Copyright (C) 2004-2005 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ kchmviewer-5.3/templates/cpp0000644000175000001440000000300510340772766014752 0ustar timusers/*************************************************************************** * Copyright (C) 2004-2005 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ kchmviewer-5.3/src/0000755000175000001440000000000011514013420013013 5ustar timuserskchmviewer-5.3/src/mainwindow.h0000644000175000001440000001350711313604004015347 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "libchmfile.h" #include "kde-qt.h" #include "viewwindow.h" #include "checknewversion.h" #include "ui_mainwindow.h" //! Those events could be sent to main window to do useful things. See handleUserEvents() class UserEvent : public QEvent { public: UserEvent( const QString& action, const QStringList& args = QStringList() ) : QEvent( QEvent::User ), m_action(action), m_args(args) { } QString m_action; QStringList m_args; }; class RecentFiles; class ToolbarManager; class NavigationPanel; class MainWindow : public QMainWindow, public Ui::MainWindow { Q_OBJECT public: // "Open page" parameter flags enum { OPF_CONTENT_TREE = 1 << 0, //! Locate this page in the content tree OPF_ADD2HISTORY = 1 << 1, //! Add the previous page into the history OPF_NEW_TAB = 1 << 2, //! Open the page in a new tab OPF_BACKGROUND = 1 << 3 //! Open the page in a new tab in background }; public: MainWindow(); ~MainWindow(); bool openPage ( const QString &url, unsigned int flags = OPF_CONTENT_TREE ); LCHMFile * chmFile() const { return m_chmFile; } const QString& getOpenedFileName () { return m_chmFilename; } const QString& getOpenedFileBaseName () { return m_chmFileBasename; } ViewWindow * currentBrowser() const; Settings * currentSettings() const { return m_currentSettings; } ViewWindowMgr* viewWindowMgr() const { return m_viewWindowMgr; } NavigationPanel * navigator() const { return m_navPanel; } void showInStatusBar (const QString& text); void setTextEncoding (const LCHMTextEncoding * enc); QMenu * tabItemsContextMenu(); // Called from WindowMgr when another browser tab is activated void browserChanged( ViewWindow * newbrowser ); // Adds some main window actions to the provided popup menu void setupPopupMenu( QMenu * menu ); // Returns true if currently opened file has TOC/index bool hasTableOfContents() const; bool hasIndex() const; public slots: // Navigation toolbar icons void navSetBackEnabled( bool enabled ); void navSetForwardEnabled( bool enabled ); void onOpenPageInNewTab(); void onOpenPageInNewBackgroundTab(); // Actions void actionOpenFile(); void actionPrint(); void actionEditCopy(); void actionEditSelectAll(); void actionFindInPage(); void actionExtractCHM(); void actionChangeSettings(); void actionFontSizeIncrease(); void actionFontSizeDecrease(); void actionViewHTMLsource(); void actionToggleFullScreen(); void actionShowHideNavigator(bool); void navigatorVisibilityChanged( bool visible ); void actionLocateInContentsTab(); void actionEditToolbars(); void actionNavigateBack(); void actionNavigateForward(); void actionNavigateHome(); void actionAboutApp(); void actionAboutQt(); void actionSwitchToContentTab(); void actionSwitchToIndexTab(); void actionSwitchToSearchTab(); void actionSwitchToBookmarkTab(); void actionOpenRecentFile( const QString& file ); void actionEncodingChanged( QAction * action ); // Link activation. MainWindow decides whether we should follow this link or not // by setting up follow_link appropriately. void activateLink( const QString & link, bool& follow_link ); void updateToolbars(); void updateActions(); void checkNewVersionAvailable(); protected slots: // Called from the timer in main constructor void firstShow(); // checknewversion void newVerAvailError( int ); void newVerAvailable( NewVersionMetaMap metadata ); protected: // Reimplemented functions void closeEvent ( QCloseEvent * e ); bool event ( QEvent * e ); private: bool parseCmdLineArgs(); void setupActions(); void setupLangEncodingMenu(); bool loadFile( const QString &fileName, bool call_open_page = true ); void closeFile(); void refreshCurrentBrowser(); bool handleUserEvent( const UserEvent * event ); private: QString m_chmFilename; QString m_chmFileBasename; Settings * m_currentSettings; LCHMFile * m_chmFile; QList m_tempFileKeeper; QActionGroup * m_encodingActions; QMenu * m_contextMenu; RecentFiles * m_recentFiles; ViewWindowMgr * m_viewWindowMgr; NavigationPanel * m_navPanel; ToolbarManager * m_toolbarMgr; private: // This is used for application automatic testing enum auto_test_state_t { STATE_OFF, STATE_INITIAL, STATE_OPEN_INDEX, STATE_SHUTDOWN }; auto_test_state_t m_autoteststate; private slots: void runAutoTest(); }; extern MainWindow * mainWindow; #endif // MAINWINDOW_H kchmviewer-5.3/src/version.h0000644000175000001440000000255211514010547014664 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef INCLUDE_VERSION_H #define INCLUDE_VERSION_H #define APP_VERSION_MAJOR 5 #define APP_VERSION_MINOR 3 #endif /* INCLUDE_VERSION_H */ kchmviewer-5.3/src/tab_bookmarks.ui0000644000175000001440000000253711365252422016212 0ustar timusers TabBookmarks 0 0 257 296 9 6 0 6 &Add Edi&t &Del kchmviewer-5.3/src/tab_bookmarks.cpp0000644000175000001440000001501611312131010016330 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "mainwindow.h" #include "viewwindow.h" #include "treeviewitem.h" #include "version.h" #include "tab_bookmarks.h" class BookmarkItem : public QListWidgetItem { public: BookmarkItem( TabBookmarks * widget, QListWidget* parent, const QString& name, const QString& url, int pos ) : QListWidgetItem( parent ) { m_name = name; m_url = url; m_scroll_y = pos; m_action = new QAction( name, widget ); m_action->setData( qVariantFromValue( (void*) this ) ); QObject::connect( m_action, SIGNAL( triggered() ), widget, SLOT( actionBookmarkActivated() ) ); } void setName( const QString& name ) { m_name = name; } // Visualization virtual QVariant data ( int role ) const { switch ( role ) { case Qt::ToolTipRole: case Qt::WhatsThisRole: case Qt::DisplayRole: return m_name; } return QVariant(); } QString m_name; QString m_url; int m_scroll_y; QAction * m_action; }; TabBookmarks::TabBookmarks( QWidget *parent ) : QWidget( parent ), Ui::TabBookmarks() { // UIC code setupUi( this ); connect( list, SIGNAL( itemDoubleClicked ( QListWidgetItem* ) ), this, SLOT( onItemDoubleClicked ( QListWidgetItem* ) ) ); connect( btnAdd, SIGNAL( clicked () ), this, SLOT( onAddBookmarkPressed( ) ) ); connect( btnDel, SIGNAL( clicked () ), this, SLOT( onDelBookmarkPressed( ) ) ); connect( btnEdit, SIGNAL( clicked () ), this, SLOT( onEditBookmarkPressed( ) ) ); m_menuBookmarks = 0; m_contextMenu = 0; m_listChanged = false; // Activate custom context menu, and connect it list->setContextMenuPolicy( Qt::CustomContextMenu ); connect( list, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); } void TabBookmarks::onAddBookmarkPressed( ) { bool ok; QString url = ::mainWindow->currentBrowser()->getOpenedPage(); QString title = ::mainWindow->chmFile()->getTopicByUrl(url); QString name = QInputDialog::getText( this, i18n( "%1 - add a bookmark") . arg(QCoreApplication::applicationName()), i18n( "Enter the name for this bookmark:" ), QLineEdit::Normal, title, &ok ); if ( !ok || name.isEmpty() ) return; BookmarkItem * item = new BookmarkItem ( this, list, name, url, ::mainWindow->currentBrowser()->getScrollbarPosition() ); m_menuBookmarks->addAction( item->m_action ); m_listChanged = true; } void TabBookmarks::onDelBookmarkPressed( ) { BookmarkItem * item = (BookmarkItem *) list->currentItem(); if ( item ) { m_menuBookmarks->removeAction( item->m_action ); delete item; m_listChanged = true; } } void TabBookmarks::onEditBookmarkPressed( ) { BookmarkItem * item = (BookmarkItem *) list->currentItem(); if ( item ) { bool ok; QString name = QInputDialog::getText( this, i18n( "%1 - edit the bookmark name") . arg(QCoreApplication::applicationName()), i18n( "Enter the name for this bookmark:" ), QLineEdit::Normal, item->m_name, &ok ); if ( !ok || name.isEmpty() ) return; item->setName( name ); item->m_action->setText( name ); m_listChanged = true; update(); } } void TabBookmarks::restoreSettings( const Settings::bookmark_saved_settings_t & settings ) { for ( int i = 0; i < settings.size(); i++ ) { BookmarkItem * item = new BookmarkItem( this, list, settings[i].name, settings[i].url, settings[i].scroll_y ); m_menuBookmarks->addAction( item->m_action ); } } void TabBookmarks::saveSettings( Settings::bookmark_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < list->count(); i++ ) { BookmarkItem * treeitem = (BookmarkItem *) list->item( i ); settings.push_back( Settings::SavedBookmark( treeitem->m_name, treeitem->m_url, treeitem->m_scroll_y) ); } } void TabBookmarks::invalidate( ) { for ( int i = 0; i < list->count(); i++ ) m_menuBookmarks->removeAction( ((BookmarkItem *) list->item( i ))->m_action ); list->clear(); } void TabBookmarks::createMenu( QMenu * menuBookmarks ) { m_menuBookmarks = menuBookmarks; } void TabBookmarks::onItemDoubleClicked(QListWidgetItem * item) { if ( !item ) return; BookmarkItem * treeitem = (BookmarkItem *) item; if ( ::mainWindow->currentBrowser()->getOpenedPage() != treeitem->m_url ) ::mainWindow->openPage( treeitem->m_url, MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); ::mainWindow->currentBrowser()->setScrollbarPosition( treeitem->m_scroll_y ); } void TabBookmarks::actionBookmarkActivated() { QAction *action = qobject_cast< QAction * >(sender()); BookmarkItem * item = (BookmarkItem *) action->data().value< void* > (); if ( !item ) return; if ( ::mainWindow->currentBrowser()->getOpenedPage() != item->m_url ) ::mainWindow->openPage( item->m_url, MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); ::mainWindow->currentBrowser()->setScrollbarPosition( item->m_scroll_y ); } void TabBookmarks::onContextMenuRequested(const QPoint & point) { BookmarkItem * item = (BookmarkItem *) list->itemAt( point ); if( item ) { ::mainWindow->currentBrowser()->setTabKeeper( item->m_url ); ::mainWindow->tabItemsContextMenu()->popup( list->viewport()->mapToGlobal( point ) ); } } kchmviewer-5.3/src/toolbarmanager.cpp0000644000175000001440000001025211313604004016515 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "toolbareditor.h" #include "toolbarmanager.h" QString ToolbarManager::separatorName() { return ".separator."; } QString ToolbarManager::actionName( QAction * action ) { if ( action->isSeparator() ) return ToolbarManager::separatorName(); else return action->objectName(); } bool ToolbarManager::hasAction( const QList& actions, QAction* action ) { foreach ( QAction* act, actions ) if ( ToolbarManager::actionName( act ) == ToolbarManager::actionName( action ) ) return true; return false; } ToolbarManager::ToolbarManager( QObject * parent, const QString& settingpath ) : QObject( parent ) { m_settingsRoot = settingpath; } ToolbarManager::~ToolbarManager() { } void ToolbarManager::setAvailableActions( QList availableActions ) { m_availableActions = availableActions; } void ToolbarManager::queryAvailableActions( QObject * source ) { m_availableActions.clear(); // Enumerate through all available actions, and add them QObjectList objs = source->children(); for ( QObjectList::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( !strcmp( (*it)->metaObject()->className(), "QAction" ) ) m_availableActions.push_back( (QAction*) *it ); } void ToolbarManager::addManaged( QToolBar * toolbar ) { m_toolbars.push_back( toolbar ); } void ToolbarManager::applyActions( QToolBar * toolbar, const QStringList& actions ) { // Apply the actions to the toolbar toolbar->clear(); foreach( QString name, actions ) { if ( name == separatorName() ) { toolbar->addSeparator(); continue; } foreach ( QAction* action, m_availableActions ) { if ( actionName( action ) == name ) { toolbar->addAction( action ); break; } } } } void ToolbarManager::load() { if ( m_availableActions.isEmpty() ) qWarning( "ToolbarManager::load(): available action list is empty, did you forget to call setAvailableActions()?" ); QSettings settings; foreach( QToolBar * toolbar, m_toolbars ) { QString settingName = m_settingsRoot + toolbar->objectName(); // Do we have stored settings for this toolbar? if ( !settings.contains( settingName ) ) continue; applyActions( toolbar, settings.value( settingName ).toStringList() ); } } void ToolbarManager::save() { QSettings settings; foreach( QToolBar * toolbar, m_toolbars ) { QString settingName = m_settingsRoot + toolbar->objectName(); QStringList names; foreach ( QAction* action, toolbar->actions() ) { if ( action->isSeparator() ) names.push_back( separatorName() ); else if ( hasAction( m_availableActions, action ) ) names.push_back( actionName( action ) ); } settings.setValue( settingName, names ); } } void ToolbarManager::editDialog() { ToolbarEditor dlg; dlg.setAvailableActions( m_availableActions ); dlg.addToolbars( m_toolbars ); if ( dlg.exec() == QDialog::Rejected ) return; foreach( QToolBar * toolbar, m_toolbars ) applyActions( toolbar, dlg.actionsForToolbar( toolbar ) ); } kchmviewer-5.3/src/viewwindow_qtextbrowser.cpp0000644000175000001440000002140511365746506020602 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include "libchmurlfactory.h" #include "kde-qt.h" #include "mainwindow.h" #include "viewwindowmgr.h" #include "viewwindow_qtextbrowser.h" ViewWindow_QTextBrowser::ViewWindow_QTextBrowser( ViewWindowTabs * parent ) : QTextBrowser ( parent ), ViewWindow ( parent ) { m_zoomfactor = 0; invalidate(); #if QT_VERSION >= 0x040300 setOpenLinks( false ); #endif connect( this, SIGNAL( anchorClicked ( const QUrl& ) ), this, SLOT( onAnchorClicked ( const QUrl& ) ) ); } ViewWindow_QTextBrowser::~ViewWindow_QTextBrowser() { } bool ViewWindow_QTextBrowser::openPage (const QString& url) { setSource (url); return true; } void ViewWindow_QTextBrowser::setSource ( const QUrl & name ) { if ( m_allowSourceChange ) { // Do URI decoding, qtextbrowser does stupid job. QString fixedname = decodeUrl( name.toString() ); QTextBrowser::setSource (fixedname); } else m_allowSourceChange = true; } void ViewWindow_QTextBrowser::setZoomFactor( int zoom ) { m_zoomfactor = zoom; if ( zoom < 0 ) QTextBrowser::zoomOut( -zoom ); else if ( zoom > 0 ) QTextBrowser::zoomIn( zoom); } void ViewWindow_QTextBrowser::invalidate( ) { m_zoomfactor = 0; m_allowSourceChange = true; reload(); ViewWindow::invalidate( ); } int ViewWindow_QTextBrowser::getScrollbarPosition( ) { return verticalScrollBar()->sliderPosition(); } void ViewWindow_QTextBrowser::setScrollbarPosition( int pos ) { verticalScrollBar()->setSliderPosition( pos); } void ViewWindow_QTextBrowser::addZoomFactor( int value ) { setZoomFactor( value); } void ViewWindow_QTextBrowser::onAnchorClicked(const QUrl & url) { #if QT_VERSION < 0x040300 emit linkClicked( url.toString(), m_allowSourceChange ); #else bool q; emit linkClicked( url.toString(), q ); #endif } bool ViewWindow_QTextBrowser::printCurrentPage( ) { QPrinter printer( QPrinter::HighResolution ); //printer.setFullPage(true); QPrintDialog dlg( &printer, this ); if ( dlg.exec() != QDialog::Accepted ) { ::mainWindow->showInStatusBar( i18n( "Printing aborted") ); return false; } document()->print( &printer ); ::mainWindow->showInStatusBar( i18n( "Printing finished") ); return true; } void ViewWindow_QTextBrowser::clipSelectAll( ) { selectAll(); } void ViewWindow_QTextBrowser::clipCopy( ) { copy (); } // Shamelessly stolen from Qt QString ViewWindow_QTextBrowser::decodeUrl( const QString &input ) { QString temp; int i = 0; int len = input.length(); int a, b; QChar c; while (i < len) { c = input[i]; if (c == '%' && i + 2 < len) { a = input[++i].unicode(); b = input[++i].unicode(); if (a >= '0' && a <= '9') a -= '0'; else if (a >= 'a' && a <= 'f') a = a - 'a' + 10; else if (a >= 'A' && a <= 'F') a = a - 'A' + 10; if (b >= '0' && b <= '9') b -= '0'; else if (b >= 'a' && b <= 'f') b = b - 'a' + 10; else if (b >= 'A' && b <= 'F') b = b - 'A' + 10; temp.append( (QChar)((a << 4) | b ) ); } else { temp.append( c ); } ++i; } return temp; } QMenu * ViewWindow_QTextBrowser::createPopupMenu( const QPoint & pos ) { QMenu * menu = getContextMenu( anchorAt( pos ), this ); menu->exec( viewport()->mapToGlobal( pos ) ); return 0; } QVariant ViewWindow_QTextBrowser::loadResource(int type, const QUrl & name) { QString data, file, path = name.toString( QUrl::StripTrailingSlash ); // Retreive the data from chm file LCHMFile * chm = ::mainWindow->chmFile(); // Does the file point to another URL? LCHMFile newfile; if ( LCHMUrlFactory::isNewChmURL (path, mainWindow->getOpenedFileName(), file, data) ) { if ( !newfile.loadFile( file ) ) { qWarning( "External resource %s cannot be loaded from file %s\n", qPrintable( data ), qPrintable( file ) ); return QVariant(); } chm = &newfile; path = data; } if ( !chm ) return 0; int pos = path.indexOf('#'); if ( pos != -1 ) path = path.left (pos); path = makeURLabsolute( path, false ); // To handle a single-image pages, we need to generate the HTML page to show // this image. We did it in KCHMViewWindow::handleStartPageAsImage; now we need // to generate the HTML page, and set it. if ( LCHMUrlFactory::handleFileType( path, data ) ) return QVariant( QString( data ) ); if ( type == QTextDocument::HtmlResource || type == QTextDocument::StyleSheetResource ) { if ( !chm->getFileContentAsString( &data, path ) ) qWarning( "Needed page %s is not present in this CHM archive\n", qPrintable( path ) ); // A "fix" (actually hack) for CHM files people sent to me. I have no idea why QTextBrowser cannot show it. if ( type == QTextDocument::HtmlResource ) data.remove( "" ); return QVariant( QString( data ) ); } else if ( type == QTextDocument::ImageResource ) { QImage img; QByteArray buf; QString fpath = decodeUrl( path ); if ( chm->getFileContentAsBinary( &buf, fpath ) ) { if ( !img.loadFromData ( (const uchar *) buf.data(), buf.size() ) ) qWarning( "Needed file %s is not present in this CHM archive\n", qPrintable( path ) ); } return QVariant( img ); } qWarning("loadResource: Unknown type %d", type); return QVariant(); } void ViewWindow_QTextBrowser::find(const QString & text, int flags) { m_searchText = text; m_flags = flags; find( false, false ); } void ViewWindow_QTextBrowser::onFindNext() { find( true, false ); } void ViewWindow_QTextBrowser::onFindPrevious() { find( false, true ); } void ViewWindow_QTextBrowser::find( bool forward, bool backward ) { QTextDocument *doc = document(); QTextCursor c = textCursor(); QTextDocument::FindFlags options; ::mainWindow->viewWindowMgr()->indicateFindResultStatus( ViewWindowMgr::SearchResultFound ); if ( c.hasSelection() ) c.setPosition( forward ? c.position() : c.anchor(), QTextCursor::MoveAnchor ); QTextCursor newCursor = c; if ( !m_searchText.isEmpty() ) { if ( backward ) options |= QTextDocument::FindBackward; if ( m_flags & SEARCH_CASESENSITIVE ) options |= QTextDocument::FindCaseSensitively; if ( m_flags & SEARCH_WHOLEWORDS ) options |= QTextDocument::FindWholeWords; newCursor = doc->find( m_searchText, c, options ); if ( newCursor.isNull() ) { QTextCursor ac( doc ); ac.movePosition( options & QTextDocument::FindBackward ? QTextCursor::End : QTextCursor::Start ); newCursor = doc->find( m_searchText, ac, options ); if ( newCursor.isNull() ) { ::mainWindow->viewWindowMgr()->indicateFindResultStatus( ViewWindowMgr::SearchResultNotFound ); newCursor = c; } else ::mainWindow->viewWindowMgr()->indicateFindResultStatus( ViewWindowMgr::SearchResultFoundWrapped ); } } setTextCursor( newCursor ); } void ViewWindow_QTextBrowser::contextMenuEvent(QContextMenuEvent * e) { // From Qt Assistant QMenu *m = new QMenu(0); QString link = anchorAt( e->pos() ); if ( !link.isEmpty() ) { m->addAction( i18n("Open Link in a new tab\tShift+LMB"), ::mainWindow, SLOT( onOpenPageInNewTab() ) ); m->addAction( i18n("Open Link in a new background tab\tCtrl+LMB"), ::mainWindow, SLOT( onOpenPageInNewBackgroundTab() ) ); m->addSeparator(); setTabKeeper( link ); } ::mainWindow->setupPopupMenu( m ); m->exec( e->globalPos() ); delete m; } void ViewWindow_QTextBrowser::mouseReleaseEvent ( QMouseEvent * event ) { if ( event->button() == Qt::MidButton ) { QString link = anchorAt( event->pos() ); if ( !link.isEmpty() ) { setTabKeeper( link ); ::mainWindow->onOpenPageInNewBackgroundTab(); return; } } QTextBrowser::mouseReleaseEvent( event ); } kchmviewer-5.3/src/treeviewitem.h0000644000175000001440000000414211311334060015677 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TREEVIEWITEM_H #define TREEVIEWITEM_H #include #include #include #include #include #include "libchmfile.h" //! This is a list item used both in Index and Table Of Content trees class IndexTocItem : public QTreeWidgetItem { public: IndexTocItem( QTreeWidgetItem* parent, QTreeWidgetItem* after, const QString& name, const QString& aurl, int image); IndexTocItem( QTreeWidget* parent, QTreeWidgetItem* after, const QString& name, const QString& url, int image); QString getUrl() const; // Overridden methods int columnCount () const; QVariant data ( int column, int role ) const; private: QString m_name; QString m_url; int m_image_number; }; void kchmFillListViewWithParsedData( QTreeWidget * list, const QVector< LCHMParsedEntry >& data, QMap * map ); #endif kchmviewer-5.3/src/tab_search.h0000644000175000001440000000440611311334060015264 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TAB_SEARCH_H #define TAB_SEARCH_H #include "kde-qt.h" #include "settings.h" #include "ui_tab_search.h" #include "libchmsearchengine.h" class TabSearch : public QWidget, public Ui::TabSearch { Q_OBJECT public: TabSearch( QWidget * parent = 0 ); void invalidate(); void restoreSettings (const Settings::search_saved_settings_t& settings); void saveSettings( Settings::search_saved_settings_t& settings ); void execSearchQueryInGui( const QString& query ); bool searchQuery( const QString& query, QStringList * results ); private slots: void onContextMenuRequested ( const QPoint &point ); void onHelpClicked( const QString & ); void onReturnPressed (); void onDoubleClicked( QTreeWidgetItem * item, int ); // For index generation void onProgressStep( int value, const QString& stepName ); private: bool initSearchEngine(); private: QMenu * m_contextMenu; LCHMSearchEngine* m_searchEngine; bool m_searchEngineInitDone; // For index generation QProgressDialog * m_genIndexProgress; }; #endif kchmviewer-5.3/src/dialog_topicselector.ui0000644000175000001440000000363411365252422017571 0ustar timusers DialogTopicSelector 0 0 218 258 Multiple topics 9 6 Please select the topic to open: Qt::AlignCenter Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() DialogTopicSelector accept() 66 330 -3 275 buttonBox rejected() DialogTopicSelector reject() 151 327 277 293 kchmviewer-5.3/src/dialog_setup.ui0000644000175000001440000005337211513541431016052 0ustar timusers DialogSetup 0 0 704 464 0 0 KchmViewer settings false true 6 9 0 General behavior 6 9 6 0 If started with no arguments 6 9 Start with nothing loaded Pop up the "open file" dialog Open the &last used CHM file, if exist Alt+L History 6 9 6 0 Store history information for false 10 latest files false Remembers the information about the files, which were opened. Remembers last opened page, search history, font size, bookmarks and so on. R&emember extra information for history files Alt+E CHM security settings 6 9 When external link clicked 6 9 Alwa&ys open it in external browser Alt+Y Ask for confirmation Do not open the link When link pointed to a new CHM file clicked 6 9 Always open a new CHM file Ask for confirmation Do not open a new CHM file Qt::Vertical 20 40 Version-specific settings 6 9 KDE version settings 6 9 To show HTML content, use 6 9 &QTextBrowser-based widget Alt+Q &KHTMLPart-based widget Alt+K Qt &Webkit (requires Qt 4.4 or higher) KHTMLPart security 9 6 Enable &refresh Alt+R Enable &Java Alt+J Enable &plugins Alt+P Enable Java&Script Alt+S Qt::Vertical 20 40 Advanced View HTML source command uses 6 9 Built-in HTML source viewer E&xternal program, specified below Alt+X 6 0 External program: false &Browse Other Use right-to-left layout direction (Arabic and Hebrew layouts) Automatically detect encoding for KHTMLPart and WebKit browsers (not recommended) If this option is enabled, the application will check for updates (when new version of application is released). If a new version is available, the program will show a messagebox dialog informing you about new version. This check will only performed once in 24 hours. No user information is requested or transmitted from your computer during this check. Perform a check whether a new version is available (once a week) Toolbars Small icons Large icons Large icons and text Just text Qt::Horizontal 40 20 Qt::Vertical 567 21 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok m_radioOnBeginOpenDialog m_radioOnBeginOpenLast m_historySize m_rememberHistoryInfo m_radioExtLinkOpenAlways m_radioExtLinkAsk m_radioExtLinkOpenNever m_radioNewChmOpenAlways m_radioNewChmAsk m_radioNewChmOpenNever m_radioUseQtextBrowser m_radioUseKHTMLPart m_enableJS m_enableJava m_enablePlugins m_enableRefresh m_advViewSourceInternal m_advViewSourceExternal m_advExternalProgramName buttonBox tabWidget m_radioUseKHTMLPart toggled(bool) groupKhtmlSecurity setEnabled(bool) 57 271 318 214 m_advViewSourceExternal toggled(bool) m_advExternalProgramName setEnabled(bool) 44 113 148 143 m_radioUseQtextBrowser toggled(bool) groupKhtmlSecurity setDisabled(bool) 57 243 318 214 buttonBox accepted() DialogSetup accept() 481 326 445 346 buttonBox rejected() DialogSetup reject() 557 316 598 262 kchmviewer-5.3/src/tab_search.ui0000644000175000001440000000601711365252422015464 0ustar timusers TabSearch 0 0 210 409 Form1 9 6 0 6 Type in word(s) to search for: 0 0 0 0 <a href="help">Help</a> Qt::RichText 0 6 7 0 2 0 true 10 &Go false false false true 2 Title Location kchmviewer-5.3/src/dialog_setup.cpp0000644000175000001440000001773411311611120016206 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "kde-qt.h" #include "config.h" #include "dialog_setup.h" #include "mainwindow.h" #include "version.h" DialogSetup::DialogSetup(QWidget *parent) : QDialog(parent), Ui::DialogSetup() { setupUi( this ); connect( btnBrowse, SIGNAL( clicked() ), this, SLOT( browseExternalEditor() ) ); // Set up the parameters switch ( pConfig->m_startupMode ) { case Config::STARTUP_DO_NOTHING: rbStartWithNothing->setChecked( true ); break; case Config::STARTUP_LOAD_LAST_FILE: m_radioOnBeginOpenLast->setChecked( true ); break; case Config::STARTUP_POPUP_OPENFILE: m_radioOnBeginOpenDialog->setChecked( true ); break; } m_historySize->setValue ( pConfig->m_numOfRecentFiles ); m_rememberHistoryInfo->setChecked ( pConfig->m_HistoryStoreExtra ); m_radioExtLinkOpenAlways->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_ALWAYS_OPEN ); m_radioExtLinkAsk->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_ASK_USER ); m_radioExtLinkOpenNever->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_DONT_OPEN ); m_radioNewChmOpenAlways->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_ALWAYS_OPEN ); m_radioNewChmAsk->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_ASK_USER ); m_radioNewChmOpenNever->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_DONT_OPEN ); #if !defined (USE_KDE) m_radioUseKHTMLPart->setEnabled ( false ); #endif #if !defined (QT_WEBKIT_LIB) m_radioUseQtWebkit->setEnabled ( false ); #endif switch ( pConfig->m_usedBrowser ) { default: m_radioUseQtextBrowser->setChecked ( true ); break; #if defined (USE_KDE) case Config::BROWSER_KHTMLPART: m_radioUseKHTMLPart->setChecked( true ); break; #endif #if defined (QT_WEBKIT_LIB) case Config::BROWSER_QTWEBKIT: m_radioUseQtWebkit->setChecked( true ); break; #endif } m_enableJS->setChecked ( pConfig->m_kdeEnableJS ); m_enablePlugins->setChecked ( pConfig->m_kdeEnablePlugins ); m_enableJava->setChecked ( pConfig->m_kdeEnableJava ); m_enableRefresh->setChecked ( pConfig->m_kdeEnableRefresh ); m_advExternalProgramName->setText( pConfig->m_advExternalEditorPath ); m_advViewSourceExternal->setChecked ( !pConfig->m_advUseInternalEditor ); m_advViewSourceInternal->setChecked ( pConfig->m_advUseInternalEditor ); m_numOfRecentFiles = pConfig->m_numOfRecentFiles; boxAutodetectEncoding->setChecked( pConfig->m_advAutodetectEncoding ); boxLayoutDirectionRL->setChecked( pConfig->m_advLayoutDirectionRL ); switch ( pConfig->m_toolbarMode ) { case Config::TOOLBAR_SMALLICONS: rbToolbarSmall->setChecked( true ); break; case Config::TOOLBAR_LARGEICONS: rbToolbarLarge->setChecked( true ); break; case Config::TOOLBAR_LARGEICONSTEXT: rbToolbarLargeText->setChecked( true ); break; case Config::TOOLBAR_TEXTONLY: rbToolbarText->setChecked( true ); break; } cbCheckForUpdates->setChecked( pConfig->m_advCheckNewVersion ); } DialogSetup::~DialogSetup() { } void DialogSetup::accept() { if ( rbStartWithNothing->isChecked() ) pConfig->m_startupMode = Config::STARTUP_DO_NOTHING; else if ( m_radioOnBeginOpenLast->isChecked() ) pConfig->m_startupMode = Config::STARTUP_LOAD_LAST_FILE; else pConfig->m_startupMode = Config::STARTUP_POPUP_OPENFILE; pConfig->m_numOfRecentFiles = m_historySize->value(); pConfig->m_HistoryStoreExtra = m_rememberHistoryInfo->isChecked(); if ( m_radioExtLinkOpenAlways->isChecked () ) pConfig->m_onExternalLinkClick = Config::ACTION_ALWAYS_OPEN; else if ( m_radioExtLinkAsk->isChecked () ) pConfig->m_onExternalLinkClick = Config::ACTION_ASK_USER; else pConfig->m_onExternalLinkClick = Config::ACTION_DONT_OPEN; if ( m_radioNewChmOpenAlways->isChecked () ) pConfig->m_onNewChmClick = Config::ACTION_ALWAYS_OPEN; else if ( m_radioNewChmAsk->isChecked () ) pConfig->m_onNewChmClick = Config::ACTION_ASK_USER; else pConfig->m_onNewChmClick = Config::ACTION_DONT_OPEN; // Check the changes bool need_restart = false; if ( pConfig->m_kdeEnableJS != m_enableJS->isChecked() ) { need_restart = true; pConfig->m_kdeEnableJS = m_enableJS->isChecked(); } if ( pConfig->m_kdeEnablePlugins != m_enablePlugins->isChecked() ) { need_restart = true; pConfig->m_kdeEnablePlugins = m_enablePlugins->isChecked(); } if ( pConfig->m_kdeEnableJava != m_enableJava->isChecked() ) { need_restart = true; pConfig->m_kdeEnableJava = m_enableJava->isChecked(); } if ( pConfig->m_kdeEnableRefresh != m_enableRefresh->isChecked() ) { need_restart = true; pConfig->m_kdeEnableRefresh = m_enableRefresh->isChecked(); } int new_browser = Config::BROWSER_QTEXTBROWSER; if ( m_radioUseKHTMLPart->isChecked() ) new_browser = Config::BROWSER_KHTMLPART; else if ( m_radioUseQtWebkit->isChecked() ) new_browser = Config::BROWSER_QTWEBKIT; if ( new_browser != pConfig->m_usedBrowser ) { need_restart = true; pConfig->m_usedBrowser = new_browser; } Config::ToolbarMode newmode; if ( rbToolbarSmall->isChecked() ) newmode = Config::TOOLBAR_SMALLICONS; else if ( rbToolbarLarge->isChecked() ) newmode = Config::TOOLBAR_LARGEICONS; else if ( rbToolbarLargeText->isChecked() ) newmode = Config::TOOLBAR_LARGEICONSTEXT; else newmode = Config::TOOLBAR_TEXTONLY; if ( newmode != pConfig->m_toolbarMode ) { pConfig->m_toolbarMode = newmode; ::mainWindow->updateToolbars(); } pConfig->m_advExternalEditorPath = m_advExternalProgramName->text(); pConfig->m_advUseInternalEditor = m_advViewSourceExternal->isChecked(); pConfig->m_advUseInternalEditor = m_advViewSourceInternal->isChecked(); if ( pConfig->m_numOfRecentFiles != m_numOfRecentFiles ) need_restart = true; // Autodetect encoding if ( pConfig->m_advAutodetectEncoding != boxAutodetectEncoding->isChecked() ) need_restart = true; pConfig->m_advAutodetectEncoding = boxAutodetectEncoding->isChecked(); pConfig->m_advCheckNewVersion = cbCheckForUpdates->isChecked(); // Layout direction management bool layout_rl = boxLayoutDirectionRL->isChecked(); if ( layout_rl != pConfig->m_advLayoutDirectionRL ) { pConfig->m_advLayoutDirectionRL = layout_rl; need_restart = true; } pConfig->save(); if ( need_restart ) QMessageBox::information( this, QCoreApplication::applicationName(), i18n( "Changing those options requires restarting the application to take effect." ) ); QDialog::accept(); } void DialogSetup::browseExternalEditor() { #if defined (USE_KDE) QString exec = KFileDialog::getOpenFileName( KUrl(), i18n("*|Executables"), this, i18n("Choose an editor executable")); #else QString exec = QFileDialog::getOpenFileName(this, i18n("Choose an editor executable"), QString::null, i18n( "Executables (*)") ); #endif if ( !exec.isEmpty() ) m_advExternalProgramName->setText( exec ); } kchmviewer-5.3/src/tab_contents.cpp0000644000175000001440000000751411365746451016236 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "kde-qt.h" #include "libchmfile.h" #include "libchmurlfactory.h" #include "mainwindow.h" #include "treeviewitem.h" #include "tab_contents.h" TabContents::TabContents( QWidget *parent ) : QWidget( parent ), Ui::TabContents() { setupUi( this ); m_contextMenu = 0; tree->setFocus(); tree->header()->hide(); // Handle clicking on m_contentsWindow element connect( tree, SIGNAL( itemClicked ( QTreeWidgetItem *, int ) ), this, SLOT( onClicked ( QTreeWidgetItem *, int ) ) ); // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); if ( ::mainWindow->chmFile() ) refillTableOfContents(); } TabContents::~TabContents() { } void TabContents::refillTableOfContents( ) { ShowWaitCursor wc; QVector< LCHMParsedEntry > data; if ( !::mainWindow->chmFile()->parseTableOfContents( &data ) || data.size() == 0 ) { qWarning ("CHM toc present but is empty; wrong parsing?"); return; } kchmFillListViewWithParsedData( tree, data, &m_urlListMap ); } IndexTocItem * TabContents::getTreeItem( const QString & url ) { QMap::const_iterator it; // First try to find non-normalized URL (present in some ugly CHM files) it = m_urlListMap.find( LCHMUrlFactory::makeURLabsoluteIfNeeded(url) ); if ( it == m_urlListMap.end() ) { QString fixedstr = ::mainWindow->chmFile()->normalizeUrl( url ); it = m_urlListMap.find( fixedstr ); } if ( it == m_urlListMap.end() ) return 0; return *it; } void TabContents::showItem( IndexTocItem * item ) { tree->setCurrentItem( item ); tree->scrollToItem( item ); } void TabContents::onClicked(QTreeWidgetItem * item, int) { bool unused; if ( !item ) return; IndexTocItem * treeitem = (IndexTocItem*) item; ::mainWindow->activateLink( treeitem->getUrl(), unused ); } void TabContents::onContextMenuRequested(const QPoint & point) { IndexTocItem * treeitem = (IndexTocItem *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } void TabContents::search( const QString & text ) { QList items = tree->findItems( text, Qt::MatchWildcard | Qt::MatchRecursive ); bool unused; if ( items.isEmpty() ) return; IndexTocItem * treeitem = (IndexTocItem *) items.first(); ::mainWindow->activateLink( treeitem->getUrl(), unused ); } kchmviewer-5.3/src/viewwindow.cpp0000644000175000001440000002161511365452772015753 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ // Do not use tr() or i18n() in this file - this class is not derived from QObject. #include #include #include #include "libchmfile.h" #include "libchmurlfactory.h" #include "config.h" #include "viewwindow.h" #include "mainwindow.h" #include "viewwindowmgr.h" ViewWindow::ViewWindow( ViewWindowTabs * parent ) { invalidate(); m_contextMenu = 0; m_contextMenuLink = 0; m_historyMaxSize = 25; m_parentTabWidget = parent; } ViewWindow::~ViewWindow() { } void ViewWindow::invalidate( ) { m_base_url = "/"; m_openedPage = QString::null; m_newTabLinkKeeper = QString::null; m_historyCurrentPos = 0; m_history.clear(); updateNavigationToolbar(); } QString ViewWindow::makeURLabsolute ( const QString & url, bool set_as_base ) { QString p1, p2, newurl = url; if ( !LCHMUrlFactory::isRemoteURL (url, p1) && !LCHMUrlFactory::isJavascriptURL (url) && !LCHMUrlFactory::isNewChmURL (url, mainWindow->getOpenedFileName(), p1, p2) ) { newurl = QDir::cleanPath (url); // Normalize url, so it becomes absolute if ( newurl[0] != '/' ) { if ( m_base_url != "/" ) newurl = m_base_url + "/" + newurl; else newurl = "/" + newurl; } newurl = QDir::cleanPath (newurl); if ( set_as_base ) { m_base_url = newurl; // and set up new baseurl int i = newurl.lastIndexOf('/'); if ( i != -1 ) m_base_url = QDir::cleanPath (newurl.left (i + 1)); } } //qDebug ("ViewWindow::makeURLabsolute (%s) -> (%s)", url.ascii(), newurl.ascii()); return newurl; } bool ViewWindow::openUrl ( const QString& origurl ) { QString chmfile, page, newurl = origurl; if ( origurl.isEmpty() ) return true; // URL could be a complete ms-its link. The file should be already loaded (for QTextBrowser), // or will be loaded (for kio slave). We care only about the path component. if ( LCHMUrlFactory::isNewChmURL( newurl, mainWindow->getOpenedFileName(), chmfile, page ) ) { // If a new chm file is opened here, and we do not use KCHMLPart, we better abort if ( chmfile != ::mainWindow->getOpenedFileBaseName() && pConfig->m_usedBrowser != Config::BROWSER_KHTMLPART ) qFatal("ViewWindow::openUrl(): opened new chm file %s while current is %s", qPrintable( chmfile ), qPrintable( ::mainWindow->getOpenedFileName() ) ); // It is OK to have a new file in chm for KHTMLPart newurl = page; } makeURLabsolute (newurl); handleStartPageAsImage( newurl ); if ( openPage (newurl) ) { m_newTabLinkKeeper = QString::null; m_openedPage = newurl; // If m_openedPage contains #, strip it, and everything after it int hash = m_openedPage.indexOf( '#' ); if ( hash != -1 ) m_openedPage = m_openedPage.left( hash ); mainWindow->viewWindowMgr()->setTabName( this ); return true; } return false; } void ViewWindow::handleStartPageAsImage( QString & link ) { // Handle pics if ( link.endsWith( ".jpg", Qt::CaseInsensitive ) || link.endsWith( ".jpeg", Qt::CaseInsensitive ) || link.endsWith( ".gif", Qt::CaseInsensitive ) || link.endsWith( ".png", Qt::CaseInsensitive ) || link.endsWith( ".bmp", Qt::CaseInsensitive ) ) link += LCHMUrlFactory::getInternalUriExtension(); } QMenu * ViewWindow::createStandardContextMenu( QWidget * parent ) { QMenu * contextMenu = new QMenu( parent ); contextMenu->addAction( "&Copy", ::mainWindow, SLOT(slotBrowserCopy()) ); contextMenu->addAction( "&Select all", ::mainWindow, SLOT(slotBrowserSelectAll()) ); return contextMenu; } QMenu * ViewWindow::getContextMenu( const QString & link, QWidget * parent ) { if ( link.isEmpty() ) { // standard context menu if ( !m_contextMenu ) m_contextMenu = createStandardContextMenu( parent ); return m_contextMenu; } else { // Open in New Tab context menu // standard context menu if ( !m_contextMenuLink ) { m_contextMenuLink = createStandardContextMenu( parent ); m_contextMenuLink->addSeparator(); m_contextMenuLink->addAction( "&Open this link in a new tab", ::mainWindow, SLOT(onOpenPageInNewTab()), QKeySequence("Shift+Enter") ); m_contextMenuLink->addAction( "&Open this link in a new background tab", ::mainWindow, SLOT(onOpenPageInNewBackgroundTab()), QKeySequence("Ctrl+Enter") ); } setTabKeeper( link ); return m_contextMenuLink; } } QString ViewWindow::getTitle() const { QString title = ::mainWindow->chmFile()->getTopicByUrl( m_openedPage ); if ( title.isEmpty() ) title = m_openedPage; return title; } void ViewWindow::navigateForward() { if ( m_historyCurrentPos < m_history.size() ) { m_historyCurrentPos++; ::mainWindow->openPage( m_history[m_historyCurrentPos].getUrl() ); setScrollbarPosition( m_history[m_historyCurrentPos].getScrollPosition() ); // By default navigation starts with empty array, and a new entry is added when // you change the current page (or it may not be added). So to have the whole system // worked, the m_historyCurrentPos should never be m_history.size() - 1, it should be // either greater or lesser. // // This is a dirty hack - but the whole navigation system now looks to me like // it was written by some drunk monkey - which is probably not far from The Real Truth. // Shame on me - Tim. if ( m_historyCurrentPos == (m_history.size() - 1) ) m_historyCurrentPos++; } updateNavigationToolbar(); } void ViewWindow::navigateBack( ) { if ( m_historyCurrentPos > 0 ) { // If we're on top of list, and pressing Back, the last page is still // not in list - so add it, if it is not still here if ( m_historyCurrentPos == m_history.size() ) { if ( m_history[m_historyCurrentPos-1].getUrl() != m_openedPage ) m_history.push_back( UrlHistory( m_openedPage, getScrollbarPosition() ) ); else { // part 2 of the navigation hack - see navigateForward() comment m_history[m_historyCurrentPos-1].setScrollPosition( getScrollbarPosition() ); m_historyCurrentPos--; } } m_historyCurrentPos--; ::mainWindow->openPage( m_history[m_historyCurrentPos].getUrl() ); setScrollbarPosition( m_history[m_historyCurrentPos].getScrollPosition() ); } updateNavigationToolbar(); } void ViewWindow::navigateHome( ) { ::mainWindow->openPage( ::mainWindow->chmFile()->homeUrl() ); } void ViewWindow::addNavigationHistory( const QString & url, int scrollpos ) { // shred the 'forward' history if ( m_historyCurrentPos < m_history.size() ) m_history.erase( m_history.begin() + m_historyCurrentPos, m_history.end() ); // do not grow the history if already max size if ( m_history.size() >= m_historyMaxSize ) m_history.pop_front(); m_history.push_back( UrlHistory( url, scrollpos ) ); m_historyCurrentPos = m_history.size(); updateNavigationToolbar(); } void ViewWindow::updateNavigationToolbar( ) { // Dump navigation for debugging #if 0 qDebug("\nNavigation dump (%d entries, current pos %d)", m_history.size(), m_historyCurrentPos ); for ( unsigned int i = 0; i < m_history.size(); i++ ) qDebug("[%02d]: %s [%d]", i, m_history[i].getUrl().ascii(), m_history[i].getScrollPosition()); #endif if ( mainWindow ) { mainWindow->navSetBackEnabled( m_historyCurrentPos > 0 ); mainWindow->navSetForwardEnabled( m_historyCurrentPos < (m_history.size() - 1) ); } } void ViewWindow::setTabKeeper( const QString & link ) { // If we clicked on relative link, make sure we convert it to absolute right now, // because later we will not have access to this view window variables m_newTabLinkKeeper = link; if ( m_newTabLinkKeeper[0] == '#' && !m_openedPage.isEmpty() ) { // Clean up opened page URL int pos = m_openedPage.indexOf('#'); QString fixedpath = pos == -1 ? m_openedPage : m_openedPage.left (pos); m_newTabLinkKeeper = fixedpath + m_newTabLinkKeeper; } m_newTabLinkKeeper = makeURLabsolute( m_newTabLinkKeeper, false ); } kchmviewer-5.3/src/viewwindow_qtextbrowser.h0000644000175000001440000000770211311334060020226 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef VIEWWINDOW_QTEXTBROWSER_H #define VIEWWINDOW_QTEXTBROWSER_H #include "kde-qt.h" #include "viewwindow.h" class ViewWindow_QTextBrowser : public QTextBrowser, public ViewWindow { Q_OBJECT public: ViewWindow_QTextBrowser( ViewWindowTabs * parent ); ~ViewWindow_QTextBrowser(); //! Open a page from current chm archive virtual bool openPage (const QString& url); //! Invalidate current view, doing all the cleanups etc. virtual void invalidate(); //! Return current ZoomFactor. virtual int getZoomFactor() const { return m_zoomfactor; } //! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result. virtual void setZoomFactor (int zoom); //! Relatively changes ZoomFactor. Most common values are -1 and 1. virtual void addZoomFactor (int value); //! Popups the print dialog, and prints the current page on the printer. virtual bool printCurrentPage(); //! Select the content of the whole page virtual void clipSelectAll(); //! Copies the selected content to the clipboard virtual void clipCopy(); //! Implements "find in page" functionality virtual void find( const QString& text, int flags ); virtual void onFindNext(); virtual void onFindPrevious(); /*! * Return current scrollbar position in view window. Saved on program exit. * There is no restriction on returned value, except that giving this value to * setScrollbarPosition() should move the scrollbar in the same position. */ virtual int getScrollbarPosition(); //! Sets the scrollbar position. virtual void setScrollbarPosition(int pos); virtual QObject * getQObject() { return this; } virtual QWidget * getQWidget() { return this; } static QString decodeUrl( const QString &url ); signals: /*! * Emitted when the user clicked on the link, before the page changed. * If linkClicked() sets follow_link to false, the current page should NOT change. * Otherwise it should be changed to the new link value. */ void linkClicked ( const QString & newlink, bool& follow_link ); private slots: virtual void onAnchorClicked ( const QUrl& url); private: // Overloaded to provide custom context menu void contextMenuEvent( QContextMenuEvent *e ); void mouseReleaseEvent ( QMouseEvent * event ); void find( bool forward, bool backward ); QMenu * createPopupMenu ( const QPoint & pos ); // Overriden to change the source void setSource ( const QUrl & name ); // Overriden to load resources QVariant loadResource ( int type, const QUrl & name ); int m_zoomfactor; bool m_allowSourceChange; // Search data QString m_searchText; int m_flags; }; #endif /* KCHMVIEWWINDOW_QTEXTBROWSER_H */ kchmviewer-5.3/src/kde/0000755000175000001440000000000011514013420013556 5ustar timuserskchmviewer-5.3/src/kde/viewwindow_khtmlpart.cpp0000644000175000001440000001076511311626155020575 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include "kde-qt.h" #include "mainwindow.h" #include "config.h" #include "viewwindowmgr.h" #include "viewwindow_khtmlpart.h" QWidget * ViewWindow_KHTMLPart::getQWidget() { return view(); } ViewWindow_KHTMLPart::ViewWindow_KHTMLPart( ViewWindowTabs * parent ) : KHTMLPart ( parent ), ViewWindow ( parent ) { m_zoomfactor = 0; m_currentEncoding = 0; invalidate(); connect( browserExtension(), SIGNAL( openUrlRequest( const KUrl&, const KParts::OpenUrlArguments&, const KParts::BrowserArguments& ) ), this, SLOT ( onOpenURLRequest( const KUrl &, const KParts::OpenUrlArguments &, const KParts::BrowserArguments& )) ); connect( this, SIGNAL ( popupMenu ( const QString &, const QPoint &) ), this, SLOT ( onPopupMenu ( const QString &, const QPoint &) ) ); } ViewWindow_KHTMLPart::~ViewWindow_KHTMLPart() { } bool ViewWindow_KHTMLPart::openPage (const QString& url) { // Set or change the encoding if ( m_currentEncoding != ::mainWindow->chmFile()->currentEncoding() && pConfig->m_advAutodetectEncoding ) { m_currentEncoding = ::mainWindow->chmFile()->currentEncoding(); setEncoding ( m_currentEncoding->qtcodec, TRUE ); } QString fullurl = "ms-its:" + ::mainWindow->getOpenedFileName() + "::" + url; KHTMLPart::openUrl ( KUrl(fullurl) ); return true; } void ViewWindow_KHTMLPart::setZoomFactor( int zoom ) { m_zoomfactor = zoom; // Default ZoomFactor is 100, any increase or decrease should modify this value. KHTMLPart::setFontScaleFactor ( 100 + (m_zoomfactor * 10) ); } void ViewWindow_KHTMLPart::invalidate( ) { m_zoomfactor = 0; setJScriptEnabled ( pConfig->m_kdeEnableJS ); setJavaEnabled ( pConfig->m_kdeEnableJava ); setMetaRefreshEnabled ( pConfig->m_kdeEnableRefresh ); setPluginsEnabled ( pConfig->m_kdeEnablePlugins ); ViewWindow::invalidate( ); } int ViewWindow_KHTMLPart::getScrollbarPosition( ) { return view()->contentsY (); } void ViewWindow_KHTMLPart::setScrollbarPosition( int pos ) { view()->scrollBy (0, pos); } void ViewWindow_KHTMLPart::addZoomFactor( int value ) { setZoomFactor( m_zoomfactor + value); } bool ViewWindow_KHTMLPart::printCurrentPage() { view()->print(); return true; } void ViewWindow_KHTMLPart::onOpenURLRequest( const KUrl &url, const KParts::OpenUrlArguments &, const KParts::BrowserArguments& ) { bool notused; emit linkClicked ( url.prettyUrl(), notused ); } void ViewWindow_KHTMLPart::slotLinkClicked( const QString & newlink ) { bool notused; emit linkClicked (newlink, notused); } void ViewWindow_KHTMLPart::clipSelectAll() { selectAll (); } void ViewWindow_KHTMLPart::clipCopy() { QString text = selectedText(); if ( !text.isEmpty() ) QApplication::clipboard()->setText( text ); } void ViewWindow_KHTMLPart::onPopupMenu ( const QString &url, const QPoint & point ) { QMenu * menu = getContextMenu( url, view() ); menu->exec( point ); } void ViewWindow_KHTMLPart::find( const QString& text, int flags ) { long options = 0; if ( flags & SEARCH_CASESENSITIVE ) options |= KFind::CaseSensitive; if ( flags & SEARCH_WHOLEWORDS ) options |= KFind::WholeWordsOnly; findText ( text, options, ::mainWindow, 0 ); } void ViewWindow_KHTMLPart::onFindNext() { findTextNext( false ); } void ViewWindow_KHTMLPart::onFindPrevious() { findTextNext( true ); } kchmviewer-5.3/src/kde/viewwindow_khtmlpart.h0000644000175000001440000000730011311626155020231 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef VIEWWINDOW_KHTMLPART_H #define VIEWWINDOW_KHTMLPART_H #include #include "kde-qt.h" #include "viewwindow.h" #include "libchmtextencoding.h" /** @author Georgy Yunaev */ class ViewWindow_KHTMLPart : public KHTMLPart, public ViewWindow { Q_OBJECT public: ViewWindow_KHTMLPart( ViewWindowTabs * parent ); ~ViewWindow_KHTMLPart(); //! Open a page from current chm archive virtual bool openPage (const QString& url); //! Invalidate current view, doing all the cleanups etc. virtual void invalidate(); //! Return current ZoomFactor. virtual int getZoomFactor() const { return m_zoomfactor; } //! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result. virtual void setZoomFactor (int zoom); //! Relatively changes ZoomFactor. Most common values are -1 and 1. virtual void addZoomFactor (int value); //! Popups the print dialog, and prints the current page on the printer. virtual bool printCurrentPage(); //! Select the content of the whole page virtual void clipSelectAll(); //! Copies the selected content to the clipboard virtual void clipCopy(); //! Implements "find in page" functionality virtual void find( const QString& text, int flags ); virtual void onFindNext(); virtual void onFindPrevious(); /*! * Return current scrollbar position in view window. Saved on program exit. * There is no restriction on returned value, except that giving this value to * setScrollbarPosition() should move the scrollbar in the same position. */ virtual int getScrollbarPosition(); //! Sets the scrollbar position. virtual void setScrollbarPosition(int pos); virtual QObject * getQObject() { return this; } virtual QWidget * getQWidget(); signals: /*! * Emitted when the user clicked on the link, before the page changed. * If linkClicked() sets follow_link to false, the current page should NOT change. * Otherwise it should be changed to the new link value. */ void linkClicked ( const QString & newlink, bool& follow_link ); private slots: virtual void slotLinkClicked ( const QString & newlink); virtual void onOpenURLRequest( const KUrl &, const KParts::OpenUrlArguments &, const KParts::BrowserArguments& ); virtual void onPopupMenu ( const QString & url, const QPoint & point ); private: void setSource ( const QString & name ); int m_zoomfactor; const LCHMTextEncoding * m_currentEncoding; }; #endif /* VIEWWINDOW_KHTMLPART_H */ kchmviewer-5.3/src/mainwindow.ui0000644000175000001440000004556211313604004015543 0ustar timusers MainWindow 0 0 873 591 kchmviewer 0 0 873 25 &Settings &Bookmarks &File &Edit &View &Windows Help General toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false Navigation toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false View toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false :/images/icon_print.png:/images/icon_print.png &Print... Print Print current page Prints currently opened page. Ctrl+P :/images/find_close.png:/images/find_close.png &Quit Exit Exits the application Ctrl+Q :/images/icon_copy.png:/images/icon_copy.png C&opy Copy Copies selected content to clipboard Ctrl+C image8image8 &Select All Paste Selects everything in the document Ctrl+V :/images/icon_find.png:/images/icon_find.png &Find... Find text in currently opened page Enters the Find in page mode Ctrl+F :/images/dryicons_save.png:/images/dryicons_save.png E&xtract CHM content... Extract the CHM content to the directory Exctracts the CHM archive content to the specified directory. All the files are extracted. :/images/dryicon_process.png:/images/dryicon_process.png &Application settings... Change the application settings Change the application settings :/images/icon_add_bookmark.png:/images/icon_add_bookmark.png &Add bookmark Bookmark Adds a bookmark for currently opened page Adds a bookmark for currently opened page. Remembers the opened page, and scroll position. Bookmarks are accessible through Bookmarks menu or tab. Ctrl+B :/images/icon_font_increase.png:/images/icon_font_increase.png &Increase font size Larger Increase the font size Increases the document font size. The new font size will be stored. Ctrl+= :/images/icon_font_decrease.png:/images/icon_font_decrease.png &Decrease font size Smaller Decrease the font size Decreases the document font size. The new font size will be stored. Ctrl+- :/images/icon_view_source.png:/images/icon_view_source.png See &HTML View HTML source of current page Shows the HTML source of currently opened page Ctrl+U true :/images/dryicons_window.png:/images/dryicons_window.png Enable &full screen mode Enters or leaves the fullscreen mode F11 false true true :/images/icon_locate_in_content.png:/images/icon_locate_in_content.png Show &navigator window Show navigator dock window Shows or hides the size window (with Content, Index, Search and Bookmark tabs) F9 false :/images/icon_locate_in_content.png:/images/icon_locate_in_content.png &Locate Locate the current page in contents window If the current page is present in the Table of Contents, locate it there. Ctrl+L :/images/dryicons_replace.png:/images/dryicons_replace.png Set &encoding Changes the current document encoding. :/images/icon_open_file.png:/images/icon_open_file.png &Open... Open a CHM file Opens a new CHM file :/images/icon_back.png:/images/icon_back.png Back Navigate back Navigate back in navigation history :/images/icon_forward.png:/images/icon_forward.png Forward Navigate forward Navigate forward in navigation history :/images/icon_home.png:/images/icon_home.png Home Navigate home Navigate to the document Home page, as specified in the document. :/images/icon_prev_page.png:/images/icon_prev_page.png Previous Go to the previous page in the Table of Contents Go to the previous page in the <b>Table of Contents</b><br><br><i>Shortcut: Ctrl+Left Arrow</i> :/images/icon_next_page.png:/images/icon_next_page.png Next Go to the next page in the Table of Contents Go to the next page in the <b>Table of Contents</b><br><br><i>Shortcut: Ctrl+Right Arrow</i> :/images/closetab.png:/images/closetab.png &Close window Close current window Closes currently opened window Ctrl+W About kchmviewer... About Qt :/images/find_wrap.png:/images/find_wrap.png Check for updates :/images/dryicons_window.png:/images/dryicons_window.png Edit toolbars... kchmviewer-5.3/src/tab_index.ui0000644000175000001440000000216711365252422015330 0ustar timusers TabIndex 0 0 173 382 Form1 9 6 10 false true 1 1 kchmviewer-5.3/src/toolbareditor.ui0000644000175000001440000001015311313604004016224 0ustar timusers ToolbarEditor 0 0 497 386 Dialog Select a toolbar Editing the toolbar 1 0 Drag the actions to the toolbar list to add them to the toolbar. Drag them from toolbar list to remove them from the toolbar. Qt::AlignCenter 0 2 Available actions true QAbstractItemView::DragDrop 0 2 Toolbar actions true QAbstractItemView::DragDrop Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ToolbarEditor accept() 248 254 157 274 buttonBox rejected() ToolbarEditor reject() 316 260 286 274 kchmviewer-5.3/src/viewwindow_qtwebkit.h0000644000175000001440000000761311311334060017310 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef VIEWWINDOW_QTWEBKIT_H #define VIEWWINDOW_QTWEBKIT_H #include #include "kde-qt.h" #include "viewwindow.h" class ViewWindow_QtWebKit : public QWebView, public ViewWindow { Q_OBJECT public: ViewWindow_QtWebKit( ViewWindowTabs * parent ); ~ViewWindow_QtWebKit(); //! Open a page from current chm archive virtual bool openPage (const QString& url); //! Invalidate current view, doing all the cleanups etc. virtual void invalidate(); //! Return current ZoomFactor. virtual int getZoomFactor() const { return m_zoomfactor; } //! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result. virtual void setZoomFactor (int zoom); //! Relatively changes ZoomFactor. Most common values are -1 and 1. virtual void addZoomFactor (int value); //! Popups the print dialog, and prints the current page on the printer. virtual bool printCurrentPage(); //! Select the content of the whole page virtual void clipSelectAll(); //! Copies the selected content to the clipboard virtual void clipCopy(); //! Implements "find in page" functionality virtual void find( const QString& text, int flags ); virtual void onFindNext(); virtual void onFindPrevious(); /*! * Return current scrollbar position in view window. Saved on program exit. * There is no restriction on returned value, except that giving this value to * setScrollbarPosition() should move the scrollbar in the same position. */ virtual int getScrollbarPosition(); //! Sets the scrollbar position. virtual void setScrollbarPosition(int pos); virtual QObject * getQObject() { return this; } virtual QWidget * getQWidget() { return this; } static QString decodeUrl( const QString &url ); signals: /*! * Emitted when the user clicked on the link, before the page changed. * If linkClicked() sets follow_link to false, the current page should NOT change. * Otherwise it should be changed to the new link value. */ void linkClicked ( const QString & newlink, bool& follow_link ); private slots: virtual void onAnchorClicked ( const QUrl& url); private: // Overloaded to provide custom context menu void contextMenuEvent( QContextMenuEvent *e ); void mouseReleaseEvent ( QMouseEvent * event ); void find( bool forward, bool backward ); QMenu * createPopupMenu ( const QPoint & pos ); // Overriden to change the source void setSource ( const QUrl & name ); QString anchorAt( const QPoint & pos ); int m_zoomfactor; bool m_allowSourceChange; // Search data QString m_searchText; int m_flags; }; #endif /* KCHMVIEWWINDOW_QTWEBKIT_H */ kchmviewer-5.3/src/keyeventfilter.cpp0000644000175000001440000000370511311334060016565 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include "keyeventfilter.h" KeyEventFilter gKeyEventFilter; KeyEventFilter::KeyEventFilter() : QObject() { m_shiftPressed = false; m_ctrlPressed = false; } bool KeyEventFilter::eventFilter( QObject *, QEvent *e ) { // Handle KeyPress and KeyRelease events if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { bool * ptr = 0; QKeyEvent *k = (QKeyEvent *) e; // We're interested only in Shift and Control if ( k->key() == Qt::Key_Shift ) ptr = &m_shiftPressed; else if ( k->key() == Qt::Key_Control ) ptr = &m_ctrlPressed; // Set it if ( ptr ) *ptr = e->type() == QEvent::KeyPress ? true : false; } return FALSE; // Standard event processing } kchmviewer-5.3/src/tab_search.cpp0000644000175000001440000002047111513542712015630 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "libchmfile.h" #include "mainwindow.h" #include "config.h" #include "treeviewitem.h" #include "tab_search.h" class SearchTreeViewItem : public QTreeWidgetItem { public: SearchTreeViewItem( QTreeWidget * tree, const QString& name, const QString& url ) : QTreeWidgetItem( tree ), m_name( name ), m_url( url ) {} QString getUrl() const { return m_url; } protected: // Overriden members int columnCount () const { return 2; } // Overriden member QVariant data ( int column, int role ) const { switch( role ) { // Item name case Qt::DisplayRole: case Qt::ToolTipRole: case Qt::WhatsThisRole: if ( column == 0 ) return m_name; else return m_url; } return QVariant(); } private: QString m_name; QString m_url; }; TabSearch::TabSearch( QWidget * parent ) : QWidget( parent ), Ui::TabSearch() { // UIC stuff setupUi( this ); // Clickable Help label connect( lblHelp, SIGNAL( linkActivated( const QString & ) ), this, SLOT( onHelpClicked(const QString & ) ) ); // Go Button connect( btnGo, SIGNAL( clicked () ), this, SLOT( onReturnPressed() ) ); // Pressing 'Return' in the combo box line edit connect( searchBox->lineEdit(), SIGNAL( returnPressed() ), this, SLOT( onReturnPressed() ) ); // Clicking on tree element connect( tree, SIGNAL( itemDoubleClicked( QTreeWidgetItem *, int ) ), this, SLOT( onDoubleClicked( QTreeWidgetItem *, int ) ) ); // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); searchBox->setFocus(); m_contextMenu = 0; m_genIndexProgress = 0; m_searchEngineInitDone = false; m_searchEngine = new LCHMSearchEngine(); connect( m_searchEngine, SIGNAL( progressStep( int, const QString& ) ), this, SLOT( onProgressStep( int, const QString& ) ) ); } void TabSearch::invalidate( ) { tree->clear(); searchBox->clear(); searchBox->lineEdit()->clear(); delete m_genIndexProgress; m_genIndexProgress = 0; m_searchEngineInitDone = false; } void TabSearch::onReturnPressed( ) { QStringList results; QString text = searchBox->lineEdit()->text(); if ( text.isEmpty() ) return; tree->clear(); if ( searchQuery( text, &results ) ) { if ( !results.empty() ) { for ( int i = 0; i < results.size(); i++ ) { new SearchTreeViewItem ( tree, ::mainWindow->chmFile()->getTopicByUrl( results[i] ), results[i] ); } ::mainWindow->showInStatusBar( i18n( "Search returned %1 result(s)" ) . arg(results.size()) ); } else ::mainWindow->showInStatusBar( i18n( "Search returned no results") ); } else ::mainWindow->showInStatusBar( i18n( "Search failed") ); } void TabSearch::onDoubleClicked( QTreeWidgetItem * item, int ) { if ( !item ) return; SearchTreeViewItem * treeitem = (SearchTreeViewItem *) item; ::mainWindow->openPage( treeitem->getUrl(), MainWindow::OPF_ADD2HISTORY ); } void TabSearch::restoreSettings( const Settings::search_saved_settings_t & settings ) { for ( int i = 0; i < settings.size(); i++ ) searchBox->addItem (settings[i]); } void TabSearch::saveSettings( Settings::search_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < searchBox->count(); i++ ) settings.push_back( searchBox->itemText(i) ); } void TabSearch::onHelpClicked( const QString & ) { QWhatsThis::showText ( mapToGlobal( lblHelp->pos() ), i18n( "

    The improved search engine allows you to search for a word, symbol or phrase, which is set of words and symbols included in quotes. Only the documents which include all the terms specified in th search query are shown; no prefixes needed.

    Unlike MS CHM internal search index, my improved search engine indexes everything, including special symbols. Therefore it is possible to search (and find!) for something like $q = new ChmFile();. This search also fully supports Unicode, which means that you can search in non-English documents.

    If you want to search for a quote symbol, use quotation mark instead. The engine treats a quote and a quotation mark as the same symbol, which allows to use them in phrases.") ); } bool TabSearch::initSearchEngine( ) { ShowWaitCursor waitcursor; QString indexfile = ::mainWindow->currentSettings()->searchIndexFile(); // First try to read the index if exists QFile file( indexfile ); if ( file.open( QIODevice::ReadOnly ) ) { QDataStream stream( &file ); ::mainWindow->statusBar()->showMessage( i18n( "Reading dictionary..." ) ); qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); if ( m_searchEngine->loadIndex( stream ) ) { m_searchEngineInitDone = true; return true; } } // So the index cannot be read or does not exist. Create a new one. // Show the user what we gonna do m_genIndexProgress = new QProgressDialog( this ); m_genIndexProgress->setWindowTitle( i18n( "Generating search index..." ) ); m_genIndexProgress->setLabelText( i18n( "Generating search index..." ) ); m_genIndexProgress->setMaximum( 100 ); m_genIndexProgress->reset(); m_genIndexProgress->show(); ::mainWindow->statusBar()->showMessage( tr( "Generating search index..." ) ); // Show 'em qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); // Since we gonna save it, reopen the file file.close(); if ( !file.open( QIODevice::WriteOnly ) ) { QMessageBox::critical( 0, "Cannot save index", tr("The index cannot be saved into file %1") .arg( file.fileName() ) ); return false; } // Run the generation QDataStream stream( &file ); m_searchEngine->generateIndex( ::mainWindow->chmFile(), stream ); delete m_genIndexProgress; m_genIndexProgress = 0; if ( m_searchEngine->hasIndex() ) { m_searchEngineInitDone = true; return true; } m_searchEngineInitDone = false; return false; } void TabSearch::execSearchQueryInGui( const QString & query ) { searchBox->lineEdit()->setText( query ); onReturnPressed(); } bool TabSearch::searchQuery( const QString & query, QStringList * results ) { if ( !m_searchEngineInitDone ) { if ( !initSearchEngine() ) return false; } if ( !m_searchEngine->hasIndex() ) { QMessageBox::information ( this, "No index present", "The index is not present" ); return false; } if ( query.isEmpty() ) return false; ShowWaitCursor waitcursor; bool result; result = m_searchEngine->searchQuery( query, results, ::mainWindow->chmFile() ); return result; } void TabSearch::onContextMenuRequested( const QPoint & point ) { SearchTreeViewItem * treeitem = (SearchTreeViewItem *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } void TabSearch::onProgressStep(int value, const QString & stepName) { if ( m_genIndexProgress ) { m_genIndexProgress->setLabelText( stepName ); m_genIndexProgress->setValue( value ); } } kchmviewer-5.3/src/viewwindowmgr.h0000644000175000001440000000754011365746573016134 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef VIEWWINDOWMGR_H #define VIEWWINDOWMGR_H #include "kde-qt.h" #include "settings.h" #include "ui_window_browser.h" // A small overriden class to handle a middle click // We cannot embed it into .cpp because of O_OBJECT :( class ViewWindowTabs : public QTabWidget { Q_OBJECT public: ViewWindowTabs( QWidget * parent ); virtual ~ViewWindowTabs(); signals: void mouseMiddleClickTab( int tab ); protected: void mouseReleaseEvent ( QMouseEvent * event ); }; class ViewWindowTabs; class ViewWindowMgr : public QWidget, public Ui::TabbedBrowser { Q_OBJECT public: enum SearchResultStatus { SearchResultFound, SearchResultNotFound, SearchResultFoundWrapped }; ViewWindowMgr( QWidget *parent ); ~ViewWindowMgr( ); // Returns a handle to a currently viewed window. // Guaranteeed to return a valid handle, or aborts. ViewWindow * current(); // Adds a new tab, creating a new browser window ViewWindow * addNewTab( bool set_active ); // Sets the tab name and updates Windows menu void setTabName( ViewWindow* window ); void invalidate(); // Creates a Window menu void createMenu( MainWindow * parent, QMenu * menuWindow, QAction * actionCloseWindow ); // Saves and restores current settings between sessions void restoreSettings( const Settings::viewindow_saved_settings_t& settings ); void saveSettings( Settings::viewindow_saved_settings_t& settings ); void setCurrentPage( int index ); int currentPageIndex() const; public slots: void onCloseCurrentWindow(); void onCloseWindow( int num ); void onActivateFind(); void onFindNext(); void onFindPrevious(); void indicateFindResultStatus( SearchResultStatus status ); protected slots: void openNewTab(); void onTabChanged( int newtabIndex ); void updateCloseButtons(); void activateWindow(); void editTextEdited( const QString & text ); private: void find(); typedef struct { QWidget * widget; ViewWindow * window; QAction * action; } TabData; void closeAllWindows(); void closeWindow( QWidget * widget ); TabData * findTab( QWidget * widget ); // Storage of all available windows QList< TabData > m_Windows; typedef QList< TabData >::iterator WindowsIterator; QToolButton * m_closeButton; QMenu * m_menuWindow; QAction * m_actionCloseWindow; // Window menu actions. Contains one action per window. They are not // linked permanently - if a middle window is deleted, all the following // actions will be relinked and replaced. QList< QAction* > m_actions; ViewWindowTabs * m_tabWidget; }; #endif /* INCLUDE_KCHMVIEWWINDOWMGR_H */ kchmviewer-5.3/src/dialog_about.ui0000644000175000001440000001414511311605470016017 0ustar timusers DialogAbout 0 0 455 256 About kchmviewer 0 About appplication :/images/kchmviewer.png 1 1 About text true Thanks <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; font-style:italic;">I would like to thank:</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- <a href="http://qt.nokia.com"><span style=" text-decoration: underline; color:#0000ff;">Trolltech</span></a> (now Nokia) for Qt library;</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- <a href="http://dryicons.com"><span style=" text-decoration: underline; color:#0000ff;">Dryicons</span></a> for nice free icons;</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Jed Wing, the author of chmlib.</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Razvan Cojocaru, the author of xchm.</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Peter Volkov for significant QA (more than 20 reported bugs!)</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- And of course <span style=" font-weight:600;">everyone</span>, who report bugs, and suggest features.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> true Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() DialogAbout accept() 222 363 157 274 buttonBox rejected() DialogAbout reject() 290 369 286 274 buttonBox clicked(QAbstractButton*) DialogAbout accept() 371 367 410 391 kchmviewer-5.3/src/settings.h0000644000175000001440000000534111311334060015030 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef SETTINGS_H #define SETTINGS_H #include #include class Settings { public: Settings(); bool loadSettings (const QString& filename); bool saveSettings ( ); void removeSettings ( const QString& filename ); QString searchIndexFile() const { return m_searchIndex; } class SavedBookmark { public: SavedBookmark() { scroll_y = 0; } SavedBookmark ( const QString& n, const QString& u, int y) : name(n), url(u), scroll_y(y) {}; QString name; QString url; int scroll_y; }; class SavedViewWindow { public: SavedViewWindow() { scroll_y = 0; zoom = 0; } SavedViewWindow ( const QString& u, int y, int z) : url(u), scroll_y(y), zoom(z) {}; QString url; int scroll_y; int zoom; }; typedef QList search_saved_settings_t; typedef QList bookmark_saved_settings_t; typedef QList viewindow_saved_settings_t; int m_window_size_x; int m_window_size_y; int m_window_size_splitter; int m_activetabsystem; int m_activetabwindow; QString m_activeEncoding; search_saved_settings_t m_searchhistory; bookmark_saved_settings_t m_bookmarks; viewindow_saved_settings_t m_viewwindows; private: void getFilenames(const QString & helpfilename, QString * settingsfile, QString * indexfile ); unsigned int m_currentfilesize; unsigned int m_currentfiledate; QString m_settingsFile; QString m_searchIndex; }; #endif kchmviewer-5.3/src/toolbareditor.cpp0000644000175000001440000002316111313604004016374 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include "toolbarmanager.h" #include "toolbareditor.h" static const char *ACTION_MIME_FORMAT = "application/vnd.action.list"; // // A subclassed list model which supports toolbars // class ActionListModel : public QAbstractListModel { public: ActionListModel( ToolbarEditor * editor, const QStringList& actions, bool actionSource ) : QAbstractListModel( editor ) { m_editor = editor; m_actions = actions; m_actionSource = actionSource; } int rowCount ( const QModelIndex & ) const { return m_actions.size(); } QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const { if ( !index.isValid() || index.row() < 0 || index.row() >= m_actions.size() ) return QVariant(); if ( m_actions[ index.row() ] == ToolbarManager::separatorName() ) { if ( role == Qt::DisplayRole ) return "--- separator ---"; return QVariant(); } QAction * action = m_editor->findAction( m_actions[ index.row() ] ); if ( !action ) return QVariant(); switch ( role ) { case Qt::DisplayRole: case Qt::ToolTipRole: return action->toolTip(); case Qt::DecorationRole: return action->icon(); } return QVariant(); } Qt::ItemFlags flags ( const QModelIndex& index ) const { if ( index.isValid() ) return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled; else return Qt::ItemIsDropEnabled; } Qt::DropActions supportedDropActions() const { return Qt::MoveAction; } // Required for drag and drop bool insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) { int start = row; int end = row + count - 1; emit beginInsertRows ( parent, start, end ); for ( ; count > 0; count-- ) m_actions.insert( row, 0 ); emit endInsertRows(); return true; } // Required for drag and drop bool removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) { // Do not remove a row with separator if ( m_actionSource && m_actions[row ] == ToolbarManager::separatorName() ) return true; int start = row; int end = row + count - 1; emit beginRemoveRows( parent, start, end ); for ( ; count > 0; count-- ) m_actions.removeAt( row ); emit endRemoveRows(); return true; } // Set drag type for drag/drop QStringList mimeTypes() const { QStringList types; types << ACTION_MIME_FORMAT; return types; } QMimeData * mimeData( const QModelIndexList &indexes ) const { if ( indexes.size() != 1 || !indexes[0].isValid() ) return 0; QMimeData *mimeData = new QMimeData(); mimeData->setData( ACTION_MIME_FORMAT, m_actions[ indexes[0].row() ].toAscii() ); return mimeData; } bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (action == Qt::IgnoreAction) return true; if ( !data->hasFormat( ACTION_MIME_FORMAT ) ) return false; // Our list has only one column if ( column > 0 ) return false; // We initially examine the row number supplied to see if we can use it to insert items into the model, // regardless of whether the parent index is valid or not. // If the parent model index is valid, the drop occurred on an item. In this simple list model, we find // out the row number of the item and use that value to insert dropped items into the top level of the model. int beginRow; if ( row != -1 ) beginRow = row; else if ( parent.isValid() ) beginRow = parent.row(); else beginRow = rowCount(QModelIndex()); QByteArray actionName = data->data( ACTION_MIME_FORMAT ); // Do not add this_is_separator to the source actionlist again if ( m_actionSource && actionName == ToolbarManager::separatorName() ) return true; // The strings can then be inserted into the underlying data store. For consistency, this can be done // through the model's own interface. insertRows( beginRow, 1, QModelIndex() ); m_actions[ beginRow ] = actionName; emit dataChanged( index( beginRow, 0, QModelIndex() ), index( beginRow, 0, QModelIndex() ) ); return true; } QStringList actions() const { return m_actions; } private: ToolbarEditor * m_editor; QStringList m_actions; bool m_actionSource; }; ToolbarEditor::ToolbarEditor( QWidget *parent ) : QDialog(parent), Ui::ToolbarEditor() { setupUi( this ); m_allowActionsWithoutIcons = true; m_activeToolbar = 0; connect( boxToolbars, SIGNAL(activated(int)), this, SLOT(toolbarSelected(int)) ); } ToolbarEditor::~ToolbarEditor() { } void ToolbarEditor::addToolbar( QToolBar * toolbar ) { m_toolbars.push_back( toolbar ); } void ToolbarEditor::addToolbars( QList toolbars ) { foreach( QToolBar * t, toolbars ) m_toolbars.push_back( t ); } void ToolbarEditor::setAvailableActions( QList availableActions ) { m_availableActions = availableActions; } int ToolbarEditor::exec() { if ( m_toolbars.size() == 0 ) qFatal("ToolbarEditor::exec: no toolbars selected, and editing is disabled. Aborting."); // Hide the group allowing to edit toolbar list if we do not allow editing, and there // is only one toolbar if ( m_toolbars.size() == 1 ) groupEditToolbars->hide(); // Init the toolbar(s) actions foreach( QToolBar* toolbar, m_toolbars ) { initToolbarActions( toolbar ); // Add a toolbar into the combobox boxToolbars->addItem( toolbar->windowTitle() ); } m_activeToolbar = m_toolbars.front(); setupViews( m_activeToolbar ); return QDialog::exec(); } QAction * ToolbarEditor::findAction( const QString& objectname ) const { foreach ( QAction* action, m_availableActions ) if ( ToolbarManager::actionName( action ) == objectname ) return action; return 0; } void ToolbarEditor::initToolbarActions( QToolBar * toolbar ) { QStringList selected; foreach ( QAction* action, toolbar->actions() ) { if ( action->isSeparator() ) selected.push_back( ToolbarManager::separatorName() ); else if ( ToolbarManager::hasAction( m_availableActions, action ) ) selected.push_back( ToolbarManager::actionName( action ) ); } m_selected[ toolbar ] = selected; } void ToolbarEditor::setupViews( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) qFatal("ToolbarEditor::setupViews: invalid toolbar"); QStringList actions = m_selected[ toolbar ]; // Create the list of available actions QStringList available; foreach( QAction* action, m_availableActions ) { if ( !actions.contains( ToolbarManager::actionName( action ) ) ) { if ( m_allowActionsWithoutIcons || !action->icon().isNull() ) available.push_back( ToolbarManager::actionName( action ) ); } } if ( !available.contains( ToolbarManager::separatorName() ) ) available.push_back( ToolbarManager::separatorName() ); // Init models for available and selected actions ActionListModel * newModelAvailable = new ActionListModel( this, available, true ); ActionListModel * newModelSelected = new ActionListModel( this, actions, false ); // Set them, and get the old models ActionListModel * oldModelAvailable = (ActionListModel*) listAvailable->model(); ActionListModel * oldModelSelected = (ActionListModel*) listActions->model(); listActions->setModel( newModelSelected ); listAvailable->setModel( newModelAvailable ); // Remove old models delete oldModelAvailable; delete oldModelSelected; m_activeToolbar = toolbar; } void ToolbarEditor::toolbarSelected( int index ) { if ( index == -1 ) return; QToolBar * selected = m_toolbars[ index ]; if ( selected == m_activeToolbar ) return; // Copy the settings from active toolbar, and switch to new toolbar updateToolbarActions( m_activeToolbar ); setupViews( selected ); } void ToolbarEditor::updateToolbarActions( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) qFatal("ToolbarEditor::updateToolbarActions: invalid toolbar"); ActionListModel * model = (ActionListModel*) listActions->model(); m_selected[ toolbar ] = model->actions(); } QStringList ToolbarEditor::actionsForToolbar( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) return QStringList(); else return m_selected[ toolbar ]; } void ToolbarEditor::accept() { // Copy the last settings updateToolbarActions( m_activeToolbar ); // Reset models delete listAvailable->model(); delete listActions->model(); listActions->setModel( 0 ); listAvailable->setModel( 0 ); QDialog::accept(); } kchmviewer-5.3/src/viewwindow.h0000644000175000001440000001232511311334060015372 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef VIEWWINDOW_H #define VIEWWINDOW_H #include "kde-qt.h" class ViewWindowTabs; class ViewWindow { public: enum { SEARCH_CASESENSITIVE = 0x10, SEARCH_WHOLEWORDS = 0x20 }; ViewWindow ( ViewWindowTabs * parent ); virtual ~ViewWindow(); //! Open a page from current chm archive bool openUrl (const QString& url ); QString getBaseUrl() const { return m_base_url; } QString getOpenedPage() const { return m_openedPage; } QString getNewTabLink() const { return m_newTabLinkKeeper; } QString makeURLabsolute ( const QString &url, bool set_as_base = true ); public: // virtual members, which should be implemented by viewers //! Invalidate current view, doing all the cleanups etc. virtual void invalidate(); //! Popups the print dialog, and prints the current page on the printer. virtual bool printCurrentPage() = 0; //! Search function. find() starts new search, onFindNext and onFindPrevious continue it virtual void find( const QString& text, int flags ) = 0; virtual void onFindNext() = 0; virtual void onFindPrevious() = 0; //! Return current ZoomFactor. virtual int getZoomFactor() const = 0; //! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result. virtual void setZoomFactor (int zoom) = 0; //! Relatively changes ZoomFactor. Most common values are -1 and 1. virtual void addZoomFactor (int value) = 0; virtual QObject * getQObject() = 0; virtual QWidget * getQWidget() = 0; /*! * Return current scrollbar position in view window. Saved on program exit. * There is no restriction on returned value, except that giving this value to * setScrollbarPosition() should move the scrollbar in the same position. */ virtual int getScrollbarPosition() = 0; //! Sets the scrollbar position. virtual void setScrollbarPosition(int pos) = 0; //! Select the content of the whole page virtual void clipSelectAll() = 0; //! Copies the selected content to the clipboard virtual void clipCopy() = 0; //! Returns the window title virtual QString getTitle() const; //! Navigation stuff virtual void navigateBack(); virtual void navigateHome(); virtual void navigateForward(); //! Navigation auxiliary stuff virtual void setHistoryMaxSize (unsigned int size) { m_historyMaxSize = size; } virtual void addNavigationHistory( const QString & url, int scrollpos ); virtual void updateNavigationToolbar(); //! Keeps the tab URL between link following void setTabKeeper ( const QString& link ); protected: /* signals */ /*! * Emitted when the user clicked on the link, before the page changed. * If linkClicked() return false, the current page should NOT change. * Otherwise it should be changed to the new link value. */ virtual void linkClicked ( const QString & newlink, bool& follow_link ) = 0; protected: virtual bool openPage ( const QString& url ) = 0; virtual void handleStartPageAsImage( QString& link ); QMenu * getContextMenu( const QString& link, QWidget * parent ); QMenu * createStandardContextMenu( QWidget * parent ); private: //! History class UrlHistory { public: UrlHistory() { scrollbarpos = 0; } UrlHistory( const QString& _url, int _scrollbarpos ) : url(_url), scrollbarpos(_scrollbarpos) {} const QString& getUrl() const { return url; } int getScrollPosition() const { return scrollbarpos; } void setScrollPosition( int pos ) { scrollbarpos = pos; } private: QString url; int scrollbarpos; }; int m_historyMaxSize; int m_historyCurrentPos; QMenu * m_contextMenu; QMenu * m_contextMenuLink; QList m_history; QString m_openedPage; QString m_lastOpenedPage; QString m_base_url; // The parent tab browser ViewWindowTabs * m_parentTabWidget; // This member keeps a "open new tab" link between getContextMenu() // call and appropriate slot call QString m_newTabLinkKeeper; }; #endif kchmviewer-5.3/src/dialog_setup.h0000644000175000001440000000307711311334060015653 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef DIALOG_SETUP_H #define DIALOG_SETUP_H #include #include class DialogSetup : public QDialog, public Ui::DialogSetup { Q_OBJECT public: DialogSetup( QWidget *parent = 0 ); ~DialogSetup(); public slots: void browseExternalEditor(); void accept(); private: int m_numOfRecentFiles; }; #endif kchmviewer-5.3/src/dbus_interface.cpp0000644000175000001440000000477211311361434016514 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include "dbus_interface.h" #include "mainwindow.h" #include "navigationpanel.h" #include "tab_search.h" DBusInterface::DBusInterface( QObject *parent ) : QObject( parent ) { QDBusConnection::sessionBus().registerObject( "/application", this, QDBusConnection::ExportScriptableSlots ); } DBusInterface::~DBusInterface() { } void DBusInterface::loadHelpFile( const QString & filename, const QString & page2open ) { QStringList args; args.push_back( filename ); args.push_back( page2open ); qApp->postEvent( ::mainWindow, new UserEvent( "loadAndOpen", args ) ); } void DBusInterface::openPage( const QString & page2open ) { QStringList args; args.push_back( page2open ); qApp->postEvent( ::mainWindow, new UserEvent( "openPage", args ) ); } void DBusInterface::guiFindInIndex( const QString & word ) { QStringList args; args.push_back( word ); qApp->postEvent( ::mainWindow, new UserEvent( "findInIndex", args ) ); } void DBusInterface::guiSearchQuery( const QString & query ) { QStringList args; args.push_back( query ); qApp->postEvent( ::mainWindow, new UserEvent( "searchQuery", args ) ); } QStringList DBusInterface::searchQuery( const QString & query ) { return ::mainWindow->navigator()->searchQuery( query ); } kchmviewer-5.3/src/treeviewitem.cpp0000644000175000001440000001362011311334060016233 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include "treeviewitem.h" #include "mainwindow.h" #include "dialog_chooseurlfromlist.h" IndexTocItem::IndexTocItem( QTreeWidgetItem * parent, QTreeWidgetItem * after, const QString& name, const QString& aurl, int image) : QTreeWidgetItem( parent, after ), m_name(name), m_url(aurl), m_image_number(image) { } IndexTocItem::IndexTocItem( QTreeWidget * parent, QTreeWidgetItem * after, const QString& name, const QString& aurl, int image) : QTreeWidgetItem( parent, after ), m_name(name), m_url(aurl), m_image_number(image) { } QString IndexTocItem::getUrl( ) const { if ( m_url.indexOf ('|') == -1 ) return m_url; // Create a dialog with URLs, and show it, so user can select an URL he/she wants. QStringList urls = m_url.split( '|' ); QStringList titles; LCHMFile * xchm = ::mainWindow->chmFile(); for ( int i = 0; i < urls.size(); i++ ) { QString title = xchm->getTopicByUrl (urls[i]); if ( title.isEmpty() ) { qWarning( "Could not get item name for url '%s'", qPrintable( urls[i] ) ); titles.push_back(QString::null); } else titles.push_back(title); } DialogChooseUrlFromList dlg( ::mainWindow ); return dlg.getSelectedItemUrl( urls, titles ); } int IndexTocItem::columnCount() const { return 1; } QVariant IndexTocItem::data(int column, int role) const { int imagenum; if ( column != 0 ) return QVariant(); switch( role ) { // Item name case Qt::DisplayRole: return m_name; // Item image case Qt::DecorationRole: if ( m_image_number != LCHMBookIcons::IMAGE_NONE && m_image_number != LCHMBookIcons::IMAGE_INDEX ) { // If the item has children, we change the book image to "open book", or next image automatically if ( childCount() ) { if ( isExpanded() ) imagenum = (m_image_number == LCHMBookIcons::IMAGE_AUTO) ? 1 : m_image_number; else imagenum = (m_image_number == LCHMBookIcons::IMAGE_AUTO) ? 0 : m_image_number + 1; } else imagenum = (m_image_number == LCHMBookIcons::IMAGE_AUTO) ? 10 : m_image_number; const QPixmap *pix = ::mainWindow->chmFile()->getBookIconPixmap( imagenum ); if ( !pix || pix->isNull() ) abort(); return *pix; } break; // Item foreground color case Qt::ForegroundRole: // For Index URL it means that there is URL list in m_url if ( m_url.indexOf( '|' ) != -1 ) return QBrush( QColor( Qt::red ) ); // For Index URLs it means that this is "see also" URL else if ( !m_url.isEmpty() && m_url[0] == ':' ) return QBrush( QColor( Qt::lightGray ) ); break; case Qt::ToolTipRole: case Qt::WhatsThisRole: return m_name; } return QVariant(); } void kchmFillListViewWithParsedData( QTreeWidget * list, const QVector< LCHMParsedEntry >& data, QMap * map ) { QVector< IndexTocItem *> lastchild; QVector< IndexTocItem *> rootentry; bool warning_shown = false; if ( map ) map->clear(); list->clear(); for ( int i = 0; i < data.size(); i++ ) { int indent = data[i].indent; // Do we need to add another indent? if ( indent >= rootentry.size() ) { int maxindent = rootentry.size() - 1; // Resize the arrays lastchild.resize( indent + 1 ); rootentry.resize( indent + 1 ); if ( indent > 0 && maxindent < 0 ) qFatal("Invalid fisrt TOC indent (first entry has no root entry), aborting."); // And init the rest if needed if ( (indent - maxindent) > 1 ) { if ( !warning_shown ) { qWarning("Invalid TOC step, applying workaround. Results may vary."); warning_shown = true; } for ( int j = maxindent; j < indent; j++ ) { lastchild[j+1] = lastchild[j]; rootentry[j+1] = rootentry[j]; } } lastchild[indent] = 0; rootentry[indent] = 0; } // Create the node IndexTocItem * item; QString url = data[i].urls.join ("|"); if ( indent == 0 ) item = new IndexTocItem( list, lastchild[indent], data[i].name, url, data[i].imageid ); else { // New non-root entry. It is possible (for some buggy CHMs) that there is no previous entry: previoous entry had indent 1, // and next entry has indent 3. Backtracking it up, creating missing entries. if ( rootentry[indent-1] == 0 ) qFatal("Child entry indented as %d with no root entry!", indent); item = new IndexTocItem( rootentry[indent-1], lastchild[indent], data[i].name, url, data[i].imageid ); } // Hack: if map is 0, we have index, so make it open if ( map ) { for ( int li = 0; li < data[i].urls.size(); li++ ) map->insert( data[i].urls[li], item ); } else item->setExpanded( true ); lastchild[indent] = item; rootentry[indent] = item; } list->update(); } kchmviewer-5.3/src/tab_contents.h0000644000175000001440000000361511311362726015667 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TAB_CONTENTS_H #define TAB_CONTENTS_H #include "kde-qt.h" #include "treeviewitem.h" #include "ui_tab_contents.h" class TabContents : public QWidget, public Ui::TabContents { Q_OBJECT public: TabContents( QWidget *parent = 0 ); ~TabContents(); void refillTableOfContents(); void showItem( IndexTocItem * item ); void search( const QString& text ); IndexTocItem * getTreeItem( const QString& url ); public slots: void onContextMenuRequested ( const QPoint &point ); void onClicked ( QTreeWidgetItem * item, int column ); private: QMenu * m_contextMenu; QMap m_urlListMap; }; #endif /* INCLUDE_KCHMCONTENTSWINDOW_H */ kchmviewer-5.3/src/main.cpp0000644000175000001440000000755211513541304014462 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "kde-qt.h" #include "mainwindow.h" #include "config.h" #include "keyeventfilter.h" #include "dbus_interface.h" #include "version.h" #if !defined (WIN32) #include #endif #if defined (USE_KDE) #include #endif #if defined (Q_WS_MAC) #include "kchmviewerapp.h" #else typedef QApplication KchmviewerApp; #endif MainWindow * mainWindow; int main( int argc, char ** argv ) { #if defined (USE_KDE) KCmdLineOptions options; options.add( "autotestmode", ki18n("Perform auto testing") ); options.add( "shortautotestmode", ki18n("Perform short auto testing") ); options.add( "+[chmfile]", ki18n("A CHM file to show") ); options.add( "search ", ki18n("'--search ' specifies the search query to search, and activate the first entry if found") ); options.add( "sindex ", ki18n("'--sindex ' specifies the word to find in index, and activate if found") ); options.add( "stoc ", ki18n("'--stoc ' specifies the word(s) to find in TOC, and activate if found. Wildcards allowed.") ); KAboutData aboutdata ( "kchmviewer", QByteArray(), ki18n("kchmviewer"), qPrintable( QString("%1.%2") .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR) ), ki18n("CHM file viewer"), KAboutData::License_GPL, ki18n("(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com"), ki18n("Please report bugs to kchmviewer@ulduzsoft.com"), "http://www.kchmviewer.net", "kchmviewer@ulduzsoft.com"); KCmdLineArgs::init (argc, argv, &aboutdata); KCmdLineArgs::addCmdLineOptions( options ); KApplication app; #else KchmviewerApp app( argc, argv ); app.addLibraryPath ( "qt-plugins" ); #endif // Set data for QSettings QCoreApplication::setOrganizationName("Ulduzsoft"); QCoreApplication::setOrganizationDomain("kchmviewer.net"); QCoreApplication::setApplicationName("kchmviewer"); // Configuration pConfig = new Config(); app.installEventFilter( &gKeyEventFilter ); #if !defined (WIN32) && !defined(Q_WS_MAC) if ( QDBusConnection::sessionBus().isConnected() ) { if ( QDBusConnection::sessionBus().registerService(SERVICE_NAME) ) { DBusInterface * dbusiface = new DBusInterface(); QDBusConnection::sessionBus().registerObject( "/", dbusiface, QDBusConnection::ExportAllSlots ); } else qWarning( "Cannot register service %s on session bus. Going without D-BUS support.", SERVICE_NAME ); } else qWarning( "Cannot connect to the D-BUS session bus. Going without D-BUS support." ); #endif mainWindow = new MainWindow(); mainWindow->show(); app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) ); return app.exec(); } kchmviewer-5.3/src/recentfiles.h0000644000175000001440000000553011313604004015473 0ustar timusers/************************************************************************** * Karlyriceditor - a lyrics editor for Karaoke songs * * Copyright (C) 2009 George Yunaev, support@karlyriceditor.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef RECENTFILES_H #define RECENTFILES_H #include #include #include #include // This class assumes QSettings object can be created using default constructor, i.e. // QCoreApplication::setOrganizationName( ... ); // QCoreApplication::setOrganizationDomain( ... ); // QCoreApplication::setApplicationName( ... ); // have been called. // // This class is based on Qt example // class RecentFiles : public QObject { Q_OBJECT public: // A constructor specifies the menu to add recent files to, and the action to add it before. RecentFiles( QMenu * menu, QAction * before, int maxfiles = 5, const QString& settingsname = QString::null ); virtual ~RecentFiles(); signals: void openRecentFile( const QString& file ); public slots: // Sets the current file to the recent file. Does the following: // - Adds it to the top of recent files list, or moves it to the top; // - Removes the last entry, if necessary; void setCurrentFile( const QString& file ); // Removes the current file from the recent files. Useful, for example, // when attempt to open a recent project failed. void removeRecentFile( const QString& file ); // Returns the last added recent file QString latestFile(); protected: // Override those functions in a derived class to store/load the // list of recent files from a different place QStringList loadRecentFiles(); void saveRecentFiles( const QStringList& files ); private slots: void actionRecent(); void updateMenu(); private: QString m_settingsName; QAction * m_separator; QVector< QAction* > m_actions; }; #endif // RECENTFILES_H kchmviewer-5.3/src/recentfiles.cpp0000644000175000001440000000715311313604004016031 0ustar timusers/************************************************************************** * Karlyriceditor - a lyrics editor for Karaoke songs * * Copyright (C) 2009 George Yunaev, support@karlyriceditor.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include "recentfiles.h" RecentFiles::RecentFiles( QMenu * menu, QAction * before, int maxfiles, const QString& settingsname ) { if ( maxfiles < 1 ) qFatal( "RecentFiles::RecentFiles: maxfiles (%d) is < 1 ", maxfiles ); m_settingsName = settingsname.isEmpty() ? "recentFileList" : settingsname; m_actions.resize( maxfiles ); // Create the actions for ( int i = 0; i < maxfiles; ++i ) { m_actions[i] = new QAction( this ); m_actions[i]->setVisible(false); connect( m_actions[i], SIGNAL(triggered()), this, SLOT(actionRecent()) ); } // Add them to the menu for ( int i = 0; i < maxfiles; ++i ) menu->insertAction( before, m_actions[i] ); // Add a separator after the last action m_separator = menu->insertSeparator( before ); // Update the actions menu updateMenu(); } RecentFiles::~RecentFiles() { } void RecentFiles::setCurrentFile( const QString& file ) { QStringList files = loadRecentFiles(); files.removeAll( file ); files.prepend( file ); while ( files.size() > m_actions.size() ) files.removeLast(); saveRecentFiles( files ); updateMenu(); } void RecentFiles::removeRecentFile( const QString& file ) { QStringList files = loadRecentFiles(); files.removeAll( file ); saveRecentFiles( files ); updateMenu(); } void RecentFiles::actionRecent() { QAction *action = qobject_cast(sender()); if ( action ) emit openRecentFile( action->data().toString() ); } void RecentFiles::updateMenu() { QStringList files = loadRecentFiles(); int numRecentFiles = qMin( files.size(), m_actions.size() ); for ( int i = 0; i < m_actions.size(); ++i ) { if ( i < numRecentFiles ) { QString text = tr("&%1 %2").arg(i + 1).arg( QFileInfo( files[i] ).fileName() ); m_actions[i]->setText(text); m_actions[i]->setToolTip( files[i] ); m_actions[i]->setData(files[i]); m_actions[i]->setVisible(true); } else m_actions[i]->setVisible(false); } m_separator->setVisible( numRecentFiles > 0 ); } QString RecentFiles::latestFile() { QStringList files = loadRecentFiles(); if ( files.isEmpty() ) return QString::null; else return files[0]; } QStringList RecentFiles::loadRecentFiles() { QSettings settings; return settings.value( m_settingsName ).toStringList(); } void RecentFiles::saveRecentFiles( const QStringList& files ) { QSettings settings; settings.setValue( m_settingsName, files ); } kchmviewer-5.3/src/tab_index.cpp0000644000175000001440000001130511311361434015462 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "libchmfile.h" #include "mainwindow.h" #include "treeviewitem.h" #include "tab_index.h" TabIndex::TabIndex ( QWidget * parent ) : QWidget( parent ), Ui::TabIndex() { // UIC stuff setupUi( this ); tree->headerItem()->setHidden( true ); connect( text, SIGNAL( textChanged (const QString &) ), this, SLOT( onTextChanged(const QString &) ) ); connect( text, SIGNAL( returnPressed() ), this, SLOT( onReturnPressed() ) ); connect( tree, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *, int ) ), this, SLOT( onDoubleClicked ( QTreeWidgetItem *, int) ) ); // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); m_indexListFilled = false; m_lastSelectedItem = 0; m_contextMenu = 0; text->setFocus(); } void TabIndex::onTextChanged ( const QString & newvalue) { QList items = tree->findItems( newvalue, Qt::MatchStartsWith ); if ( !items.isEmpty() ) { m_lastSelectedItem = items[0]; tree->setCurrentItem( m_lastSelectedItem ); tree->scrollToItem( m_lastSelectedItem ); } else m_lastSelectedItem = 0; } void TabIndex::showEvent( QShowEvent * ) { if ( !::mainWindow->chmFile() || m_indexListFilled ) return; m_indexListFilled = true; refillIndex(); } void TabIndex::onReturnPressed( ) { bool unused; if ( !m_lastSelectedItem ) return; IndexTocItem * treeitem = (IndexTocItem*) m_lastSelectedItem; ::mainWindow->activateLink( treeitem->getUrl(), unused ); } void TabIndex::invalidate( ) { tree->clear(); m_indexListFilled = false; m_lastSelectedItem = 0; } void TabIndex::onDoubleClicked ( QTreeWidgetItem * item, int ) { if ( !item ) return; IndexTocItem * treeitem = (IndexTocItem*) item; // Prevent opened index tree item from closing; because the tree open/close // procedure will be triggered after the slots are called, we change the tree // state to "collapsed", so the slot handler expands it again. if ( item->isExpanded() ) item->setExpanded( false ); QString url = treeitem->getUrl(); if ( url.isEmpty() ) return; if ( url[0] == ':' ) // 'see also' link { QList items = tree->findItems( url.mid(1), Qt::MatchFixedString ); if ( !items.isEmpty() ) { m_lastSelectedItem = items[0]; tree->setCurrentItem( m_lastSelectedItem ); tree->scrollToItem( m_lastSelectedItem ); } else m_lastSelectedItem = 0; } else ::mainWindow->openPage( url, MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); } void TabIndex::refillIndex( ) { ShowWaitCursor wc; QVector< LCHMParsedEntry > data; if ( !::mainWindow->chmFile()->parseIndex( &data ) || data.size() == 0 ) { qWarning ("CHM index present but is empty; wrong parsing?"); return; } kchmFillListViewWithParsedData( tree, data, 0 ); } void TabIndex::search( const QString & index ) { if ( !::mainWindow->chmFile() ) return; if ( !m_indexListFilled ) { m_indexListFilled = true; refillIndex(); } text->setText( index ); onTextChanged( index ); } void TabIndex::onContextMenuRequested(const QPoint & point) { IndexTocItem * treeitem = (IndexTocItem *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } kchmviewer-5.3/src/resources/0000755000175000001440000000000011514013420015025 5ustar timuserskchmviewer-5.3/src/resources/kchmviewer.png0000644000175000001440000001242110664477035017724 0ustar timusersPNG  IHDR@@iq pHYs+IDATxytŕ?ՋvjK%/,66 ILxɄ,B 0o83 ! !!dbc˛d$wVV7%;69=sT~[ު_ N 9!'+g_F4x?]>ȍ"lƑU%AB ~^ǝG Ywl! oSpox~86E&lDž{_-}>g_{_? B`X<((ᮋ|Mۈڛ_||^E0 P`kW+HgڶM'\* JX{S%KDh(YZj,T d ,ˡ7_vާYN72GS#*adYN{t1uh lG8^%E* ]Ckyp(LQf~_.}Gp/%:Fڂ v=Y*%\Bi C&2eP- o&=5$k/{;fp#׋p"F¶j/9{AmCwȢkDARh*jn' hwQ!`H07`;4,O??}`$b3? d`4`d1r _n.0n#lWw\|MMl|X=-Ae!s)WPO@ G }j$4,&&mlv,K`:Â~ ̄Ipɸņ V-EbFLiv>cCgaQ={rLz.t:{ 0iq."Y.i9@0( sROq ϣT{0$iKA,f6 le"Q/gh|2 ha/>B:GP’*G 'Ê) 3ǯ9U0-_oMb'G0۱1,B_sW1hcYY^+E{|,l?$a:-}؎sta#!Э8FM C|@d$.a6I&WK }1 vlASrrWRF$(4AқC]D7ˇ,˘E8E$B0,sGPUq2uܧaZ2<~N^3ID4edE$Avl-ؔ9d3'E^‚J<H$L7ӿRK11N:m|X(ţ#Krr0@W4lqxsM#Yŋx}HΪ3+Y4p?޾1"v/ 3F0V.s5.Ez4 4e{nv7|E<ؓifpy}HwNg8͛X걃], 03WyKz۷o;ZwL[tDUGUVj瑛!3y{GF r34HCʠ;cLk%?3MM0 O?DeN >s j_{Q<+ &dirm8f9~,FW4dI"a[Eb(_IVv&gֶ &3MrdƸ9n_j<\_iBl0 ͏훯YwYtiQbɝ7V6N61miL +Y'li0uHM !H "pr2ANn0cQe;C7]Q% >n$+Ωzv?h,N- ridh:`*aaXa$m8!DŜiXSMRlbpdqPD1NxlV5M'eYN>q n_vN◷?xTgnغc;~ 2U4VS/CFJtڴ4x˱1-6Ӟ{6wdjs5G$wvlx>wqn[w˒:{v$j TM>H"#24sYTR?+qVJ[5j:vI0``913i[!qqr2=gG1C@ $sx#Go7>hԹ {{J@W"yА͢ |.OzmL#" .I39 6Eeۘ~}LĢD8B8Tsar躞!V[ Wv!-w̖66˿K;澊PYܔf擯`/$Qt=>,zPʩ"',ȒȨ2GFd-'SdP,JdPf/`"'低Ѽ`^=FIfKg+Z_~#|8n; ,lF,Ki»rg|]Q((>0@v>`)kPնluBtO"KAέ]BUմ&#8\y誆Kq_kRfwoyP(| bgWHԶmc&7:q6BAOUa\.7Յe}epiM '6I(P[P94mHOg?7s+jqi:R){ 7[GQd O+nADދ8bvT=xm-vf. R3fS/]0l3AҡӱA@ 9z1.+SG"!V_.+,nH**) ?O7D2Ir[:[7LuTِspd1ý+v1}*+ȒPtݷP/L`|߽fW-g|}K;CÔri(MQdUUQU]gqLuCf geAע*![#}\Zbkz2P,x,LdY0,EQґ#U+B⛿9s=2)G:w S%gsV2Ò1R#`0>{Yԃ"\͕-D Tt?ܛܱWwMiV|4p,rnÑ1=>._ VP{Ph4MIx@+woh_44)I4cޭaff\?yS#t޿,#T"Ǔ5K8$}$on_y Mg17/p`UU@/frlu7[)._# p/xMSɣ&3k=-^x sg& j/1[6Z;Lq Xw=GS'|] FY{.X0n幭a8:×HeAɬm$h؏?3uwcs\n^Dkj.nhNN!4% x~kmN 3s˷|ʟ. r%qpD"=u^&5EsYV6g]~\/K_p?w%.mlƴ&hzV7wx 岰0Dq.ţwk+d\mZcfZۙ*)<߹.+vh V{tIg/3WDP, 8|>kgg"?o 9!'䄜OZ/7bIENDB`kchmviewer-5.3/src/resources/find_wrap.png0000644000175000001440000000076410665224266017535 0ustar timusersPNG  IHDR r| pHYs  tIME  + bKGDIDAT(ύ=KQǥXڐYC(.QZOo؋YӋ:Q)jE3yy8G4<;=w5)8Ϛoh@EyUхRe(ƽ;\xPN W]͡jK*Y̠Œ ctpq|Rb&n1{c]X0u\x@n niaZF0< g1>!b&6MyHr~4 wLaj)6RdK #~ ;GkɆ0Ӫ$ w7m[pIo{gM뗴N!kko5(8z|GhEIENDB`kchmviewer-5.3/src/resources/icon_find_next.png0000644000175000001440000000333410664477035020551 0ustar timusersPNG  IHDR szz pHYs+IDATXŗmW>o+;, KE i`[SI Zf-qcI7kMP7YjS#1  lٙefaΰ Mm ֮>se꾫7 r̙ c vRWSTYIIלvc= ţ2 z:w)kحcBπFSc-˫ɻ- $SP־ YJL$!=^I,汕S$(C* qٲDt(fƺ)NU"2i,K⹟YZҹAgou 1NXđw%YJ1Q:fZ6>4}߷uTml].|'2Гdwj,ihTbuOދ{]DWJF1N|`r r"*T!Kˤ@ 'gM"rx\-\-[|$31XPJJ !tN93ߟ4kDs_5qSq\zH ?- tψ?3o [`Uv07p0DWV775?htf!pPqxa}Ց˦i:ŋi}ps1Ieh=ʂuTŹcYB7x|֫NO=d=7o7ǩ/ϋɼ^C.aY˲وK&w' _S`hO;Fm  _@8Wd̸innfsppP}KOk&Xnxl51 C;96{L14$C]ׅ)M2{>Dww}:ѫTy쓵T߶'n\.ϟߠEpׯAp0~P۶m[範a= ,[,1t.YP 9o!Yp eY&gQZ6Kʱp!51d=VZ( 5 F^p6l۾dɒIooLR !DK*zw̌&4cx<ssU^AK)3Rj\wPo(uĢSΖR߈4ۑZU07뫎\R恬˲!ejN{{{e:6Kl1@Ўoñ}}GCPok[v qaOLLL~֭߿mpϞ=/ew)DB;wn@MԩSK)5y3wJ"֯=r1Ș&g^-GIR: A7nܸ !L5s *8x 4 ׯ_Ϝ8q#9RWW0P UeYH)9~{ a1amm Rjg<+bsFTX۬j78!䍴kR0%*!DdYAʭ\;JD]YYyee4)%(p:oUR+9Rܣ( @:N/ie2ĕ+WZ3o#x<8|g/^@"XRXLBVWWqmC?4M<}_ sC&Co<ϗr9a;{H Amm-pv/R]`ϟ?UUF199 Ujۿ+V nHʥ{Wx1a_?x ]ݫ(JGccc>S u.]ѣ;Xl g*l;OU[UK[m 5M\J rCC63syYk5|Q֧2XF~ZSk20 *po_jxO/OUJZkcEr҂4MjVZ~u<}[|Fkt]~-E AP`Z9?+]'6{s#O"bkgzq)Nw4!:IS@>-HZ~CeE>3C$p2=ru? 8̑1 Mey1]CߍFG'9q/Dh`+#"]j״@񞋄pjWc i$R;vo5}z3|'O~FΈ!a}aAjIg^Q~d +A"رv(++ټysݓO>YiӦ|̙3Q =, OuuV "ƅ+WHji;wۍvQ* mP"aBkTK&bS|r3*5 v0WGYe՘>QcSigsO_~g;Hj);<4J)X@lF][)[YG~rR$?S4M}cm۶8q@7cA-ӟ_"t:MotZ6Q\]E0TFnͲ ^4---@P hP`hhJ,#b0Rs=øeYD"P4hQ ~nD0L#">R_tww<0hRh!R04ԇPk,z\G6T]2b-XPvRFfeq,̙sj6Vё.={Bj7w(N:M4F9+W;w܂b;~A^||IRN,D6d2A۶}x1HZDk膴]vm bB 4st|xܕN8n*鍗  tqs->c~j2D@ĵ֮`ALK!b`Xb1qzT 7;dk(0)05;jF2Y k!y![@!Cn#wIH~ xۋҜ o;f냧GTw cil5!7yv$`hMy_j{K`Tw L]3[֮LMj-WƜX{.j/JEVVOz?:Xݎρ,J 30IENDB`kchmviewer-5.3/src/resources/icon_add_bookmark.png0000644000175000001440000000266410664477035021215 0ustar timusersPNG  IHDR szz pHYs+fIDATXk, VD`Zقj IC U{K^>CЖ| )M5Ql!mUb#"$Vº}wf :+M{'y9&+H{>)_ ywQi 0Zy(0DRTY-pFCl*M^AD1^پ>(O@TP v;R|^OSu,&Sn,N)Et1Ğ\Ucf.aSFq2xh/ݮ3Y(>qmcxp\<uzIENDB`kchmviewer-5.3/src/resources/icon_next_page.png0000644000175000001440000000323410664477035020544 0ustar timusersPNG  IHDR szz pHYs+NIDATXŗ]l\G3kNvi1ChdN4RJ i+ Ty!<K *"RJ mR&@Q^7kw]^{m׉8_3ĽtsA- PXFPHzvΌ FyjPdg+tRmʬBuww%+yjϲu ~C7>c_(D%^#EsM=Ϳ~ĉ^qVw"z/i,w"ȁ0PL,d2A)b3o5o_*&˗{0k>5_9C?+l/ .~bbjy"Z?dƔRQAM#`h ^č/xCK0. \v&7 ! ;wf {i KڹSڴ%Xc4* FW]7MǺxN)e|s*=3Cu&*ȃ;Ҕ  W7^}M~9jE]uiBij+yDEhy9˲K&^E;6>ch ~In4N.dqlcc_ht*H@ϱkݑԞCEEj`3ihcg,y]߈xN3G)e~GV#U>>rTN_Y1kb,3>r9.P+$t_~ :x{{\K fR0 nNNBЪ5ttdo= ]Dks.m,HbO'O PaKmJ8o*sصn!Ŧ~poykӛjxehuz osk. 'w:.5ƕ+WDFC <ǡFgUe~}Kk7*"_{2MdR/@+G|kCU;%rSQ Fj ŸkMٵÇ{KMZPpʷT֯HT_) _J_e2[Kl-m!k °~(sGr?Py(4{khw.bt3As|6Oi*dὌ`hmi=w~U. wKgWC7784;=ϋJ.i{o[ΰZTVJ?YP eI0@UbPh< n; ^ (]PR vPn$B|Gv ]Z …m!j!ZK8C#!l˅|RJ t vV}?wXQql+n /;7 ~PgM.oeB8`Kd E) ȏ+Mq6 =ѝ5i/. #y阒OD[mټDC_?9j$R;3TJ]_LzzRe;7A4Z^E|w[MQc&PQ0C?}Y,D"{ 56NLx2[1'56^ ~^Ju'H$988Ѷ0YLLCDkޯu M ,^9!DZӴ'/"LƇ/G51>SO]]5q' ;A\o}ߟ0 cr``T٥СCa}\iw#IZKtɪ*ʿN?ȁeYZZZKiky__l?x =kض!"hDӌ1axgB<`T{x<~kݺu+U>NcBK)zw-X<5sht*H@ϱkݑԞCEEj`3ihcg,y]߈xN3G)e~GV#U>>rTN_Y1kb,3>r9.P+$t_~ :x{{\K fR0 nNNBЪ5ttdo= ]Dks.m,HbO'O PaKmJ8o*sصn!Ŧ~poykӛjxehuz osk. 'w:.5ƕ+WDFC <ǡFgUe~}Kk7*"_{2MdR/@+G|kCU;%rSQ Fj ŸkMٵÇ{KMZPpʷT֯HT_) _J_e2[Kl-m!k °~(sGr?Py(4{khw.bt3As|6Oi*dὌ`hmi=w~U. wKgWC7784;=ϋJ.i{o[ΰZTVJ?YP eI0@UbPh< n; ^ (]PR vPn$B|Gv ]Z …m!j!ZK8C#!l˅|RJ t vV}?wXQql+n /;7 ~PgM.oeB8`Kd E) ȏ+Mq6 =ѝ5i/. #y阒OD[mټDC_?9j$R;3TJ]_LzzRe;7A4Z^E|w[MQc&PQ0C?}Y,D"{ 56NLx2[1'56^ ~^Ju'H$988Ѷ0YLLCDkޯu M ,^9!DZӴ'/"LƇ/G51>SO]]5q' ;A\o}ߟ0 cr``T٥СCa}\iw#IZKtɪ*ʿN?ȁeYZZZKiky__l?x =kض!"hDӌ1axgB<`T{x<~kݺu+U>NcBK)zw-X<5s closetab.png icon_add_bookmark.png icon_back.png icon_find_next.png icon_find_prev.png icon_font_decrease.png icon_font_increase.png icon_forward.png icon_home.png icon_locate_in_content.png icon_next_page.png icon_open_file.png icon_prev_page.png icon_print.png icon_view_source.png kchmviewer.png kchmviewer-5.3/src/resources/dryicons_save.png0000644000175000001440000000265011311605470020415 0ustar timusersPNG  IHDR szzsBIT|d pHYs B4tEXtSoftwareAdobe FireworksON&IDATXWKU[b 3&%BI 5011Fƅ$ QW0 0j3ӏ{9.&twU:=w>x]oJ)qDh5 XqcL0D 3C:YT ?tnSGO̼4uaÆzViVkEHX۷Oa 2uo~:3%(G9|G#$`f\CZEgC+ "PJA)~͛ 0Z[b|ca&(B-g9'NǦ$I)lRe14qn_|TT"^~Uƛ4MQ.E4şׯs?`ǟL0(lp֌eT XDPTpVr:fه=k 1km$ז:k519ɫ`osW^.Kq,fGp΁G E"JDt|/ @p;RZQ($|/B^Vץ"jPo4"kȲ WQ* T3QJmۧ@D(%%,זiL bd<Ř$ 1qLNNbPv?0{(/^0&^8ۦ" Zkd6û }jI`_."S[vasq`nCV]OB륍!ąbH熉@0J^h s伉@Cr8paYVxn^DQUP]:%:y$骈Bpak?}O}N|i|u4tJD`Ys87Ơh@k׸ Nny#j&, \V3{9Y;Q Du2qy7dV#>tDp0u> ôfwނdb,#`Zr]1 wDa"T8ku1Q 3DW $ ( T7:4ʬvxz(DȾRy`(U"k-%04NΛQ 6҃ap01 Z "$fMzkf 4GqUTJ/ 6W"}/n?ʲ z<^n]aNV;lZ)]JϜv "_(IENDB`kchmviewer-5.3/src/resources/icon_forward.png0000644000175000001440000000333410664477035020237 0ustar timusersPNG  IHDR szz pHYs+IDATXŗmW>o+;, KE i`[SI Zf-qcI7kMP7YjS#1  lٙefaΰ Mm ֮>se꾫7 r̙ c vRWSTYIIלvc= ţ2 z:w)kحcBπFSc-˫ɻ- $SP־ YJL$!=^I,汕S$(C* qٲDt(fƺ)NU"2i,K⹟YZҹAgou 1NXđw%YJ1Q:fZ6>4}߷uTml].|'2Гdwj,ihTbuOދ{]DWJF1N|`r r"*T!Kˤ@ 'gM"rx\-\-[|$31XPJJ !tN93ߟ4kDs_5qSq\zH ?- tψ?3o [`Uv07p0DWV775?htf!pPqxa}Ց˦i:ŋi}ps1Ieh=ʂuTŹcYB7x|֫NO=d=7o7ǩ/ϋɼ^C.aY˲وK&w' _S`hO;Fm  _@8Wd̸innfsppP}KOk&Xnxl51 C;96{L14$C]ׅ)M2{>Dww}:ѫTy쓵T߶'n\.ϟߠEpׯAp0~P۶m[範a= ,[,1t.YP 9o!Yp eY&gQZ6Kʱp!51d=VZ( 5 F^p6l۾dɒIooLR !DK*zw̌&4cx<ssU^AK)3Rj\wPo(uĢSΖR߈4ۑZU07뫎\R恬˲!ejN{{{e:6=7mib=: QhC,GFr󴞾ѧyg=쳙f흍' xqᢏ|M澟bY{T psǖloܴ3oŸ+Ƈ9xkn߿xT¼]>yDlolB/^*Ծ5y!VnI&Aj?BS+tk+ߦ{Cv wP \k]c?f%=`uSV+%nO&f ֘nCzx'?>we~=}1!Hs[N]e~^==и>x ;4J|!W >޾:6П`|os}hd1;AC]~} "1vrؿ#a@,+IENDB`kchmviewer-5.3/src/resources/find_previous.png0000644000175000001440000000160210665224266020430 0ustar timusersPNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATH͖kHaǏZ4 n&vS, i%`rf 2B@$dm]RDPT%NM7]1ܲ)ά7ޝFt5>ss "MH%`7Y<nxDC3&%@LI<<ҽ*)$XJ8,8x<^1:U/d "f$C^9(a)vB*I`Yy`cu/&sB| e; {1mPOa ⳛz%1.Nt'9ɒxmѐ@8 ~B+)ԕDcdh>g2(L!uhuoJѴl/fP%B9Lc_= 9U."B}Mc^PvmJyYR{| z0S4S % *ah]Q^; 1]9]%Ai3 UxiZqB̉\1P2XE֑ulF|~7b>Dm*~K`O<J"'4jO sL> <ā &YBK,j!=Öfhj:NiFhΜw9OSُ}yqL$v7s;< 2̯H/mz랡LTeu}Ojx}qw߻hN6$'dAn~ Q'|qރ=ϓ,g&C٭]o<`vFF[oX'{g/zlSoREkM#o{Ȟ~1׾.i|evأs:fm߸~9wՆW)Cq; Xn3krE e :&X2ˡM[y%fc,ֆMə5rvE}ce!6H9Un롳#`\yzaĔ$0)3bƂC9[aiX/Z-~D@`^oWE SXcP\:r D閏g?"\A<2$?Ne &1>2`@M4)Rm>[~~agP -kVdUYk:6e@jVx{;']RM? doр녚ߨxkK+?%s ha1nm7&r;He|ok{O@pq_>p"v\`P|( OwdI( 4E)ڢ H JY&fnSPn"d±A} 13 10'FY8MRff{3ZcTjDʍաҀJ*и=I1S G *|@xp7{dG+9~B P,C&g)T W>ŲTT  =UFP!s6Cһ@= BP):k 8ف i.fꈡX˚REShJ%EU}T#@eoA; } T"CLT\z{:HškL\q 2-RB¹P.7(8$"!B_7,ᱞP2E04# * )`TFPoh22UkI#b&B}@}RZAE Wa .pʢ 3@C6Wc$#)\wlf*c{ :{^–5sP!)rp] 2)8ĭtaޜfc}kcx&O8>.萁(gynMZ4jyR\)2H*tT ѻ$Jӏjop$E D%2.M[oq[Ȁq,B5Ѻ_x7$^:_2Z廏L_C7vqА:1٨: 8}l\8-0|qp!iƿw߫иf{!pqKNlAm8NT<=<^y2(6r0vՇٿL@ eW>0-z;D71 Jk6Qx5S0 ;HO^aM4fB|r1@D HFK,ɧs'C.7IENDB`kchmviewer-5.3/src/resources/kchmviewer.icns0000644000175000001440000012051411513541304020060 0ustar timusersicnsLil32 ج+>$ 8A,206 &C.7_w\4873= T0hV1=8G<2F)d봤T/908;G>$ =;4ɩyr*=676,7Q1?@8.[YTcUԤ/D4;/6//B\J91>+b RԸ2\-36I&8>H;25680L |/C(4-J\ |O,:7:<:97?)w<3J$=lk45-/02251Fvryp7 `_dX[TOIITRaxxtAAAǾu~|=BD  ٸrFK 翇\fңFO2 nڟfY貓JͥDQ‡nZ⧂FXݹP[r? (i1d]} D{-u QQ߬]= @h\"5jΚT Y\- M}&  #Xu; jn:3ne&*В~\% -㔃}L 7ּƃ{x %[~ߨŀы $Y]qařGUk|bbńssȘxsbZtʒXYXħiȹªzhǺv )Ǹº؁!"Ūӿ؇՗%Ȩɻ׊_ ٵѽԐ̴]s˨Ӛ˲p/חԵ\ Vօ95v|%.Ќa$ܳ[ (ȉ-!юW# '±T 6@ D[/ So]g[R--e^eif`RS  {_؀]lgt_H "pWYd\fjr_9 )hed^hdbaWfe G`nc\r_f]cZDctg]h[仱Z`bq8bkXrd^ace]y஻d[qcSeehfdch[ҷؾǨչgHKc[\]__b]tʬٓRs|~yvrpzvȘ`UlŽ\!¸diŬhsĘz۷juJ ګxêoٺQcǘ{黜\suŝzN @^y&_W vuvPi|̛H۲p}vB  r> ,0l8mk a)f' Kğ; Kؙ> Lۋ _>>YX KH >@? @I- `>>fC*_՟ L> K`* Kؙ> K> Up"it32SPzAMqb-/1,/>lP47O0-Ca8A7AV7V70*9T2^76Xs70Xx_74,-NnP79-+DlF977?m6J7 7,:h2X7׿7^|1`7 ˯78Z`0p778W\27ɲѯ76RL57ܲ}powwvjdh{ٰ7-+5TzA=7ﺏtvqZm΀ٯ7=1-+3Ps5L7}reUuЬ7 JIB91+**Gl.S7tztKg7BA?:3.*(hm0\7 rzϨqD`ఔ7 ==:987540EW5j7to ]@bǭ7 :8875421-=L27yf nlBAޯ7 5443110.,?E57hn~}{zywvtu Y\R3F㽭7 42210..-+)@z9?7o_pqonljigeb\XURO LLJ44ϭ7 00/.--/*)(E§OB-G7a]gdca_][YWUSQOMK\ @=;3*K٭7.-,++*?C*)HɣuO805,I7YXXURRQONMKIHECBDY 60/,$)ޱ7+ *?_D)OϠ wE4,3FI/P7qPHB<:9:?GMPPNMLM` *&$# ݸ7+ -D`U/Rҝ o>2,3G`qH2Z7[B2'" (A  ۻ7+ .LbX0UԚ gK/-5CXkso;17 M35 4ڼ7+ 4Vc]1W֗bJ+-3?Raffd_757J*' ٺ7++-A`ca8Zה\A*-2>JUZXXY\S3;7 S'᷷W ׵7+2Qfde@\֑vF:+,/8BKMNNOQRVH-<7 k&m   կ7+,A`edfHZ؏2''*1:ADDEFFHJJNE-?7#[   4έ7+6XhffhR_־K(-/29;<>>?BBCF>.A7%*)k?S% pé77+3Nhihii^fԴ##VE),-05889:<=@4.C7b*曀e Ҷ+1Iekijdxж#;'++-24577?0/@7 D:' &27 ]˭+2JfmkfmD ʑ>%**+/019/0?7(p$ z){2 "к++,6PhnmkmgkJ ˟C%''*.2.2=7A(]  Ǭ+.5~}|{R#"'xJC*,,+*Ŀ~}}||}|}J$")~J<.bfa\~ E$#)B-7D~{ F$#&<`wZ~@~ÿ D%$$8m,ҾȨ<¿ >%$#84,h +|һ:@%$,t?22-],wé5¿B&$-F.0-F1Yͺ1 ?&%-S,.,AF;HϽpck|¿<&%/o-++9FEBʩzPGPh8'&0/++5}PS:ֿa>4@[vÿ8'&15++-dD^2ϭ|R7/8On5(&4@+[C*ÑcE4-4Jkà5('7E*++OB*ϬvR>1,3Mr̡5('7D++,:A-^C8/+8Z~ӥ4)(905829?7ЩpK>5,/Fnۧ!4)(;̛~wzj.8En8ٿ[C;1-8]᪐%3)(=֭{}r4;F~SX=ϢoN@5.3T櫐'4))@޶}}~N7ZN/۾[G;21P뫑'2*)Bƚ~O1w> ҬmNB73Q׬1*)Dʢ G2;݉#YH<5W/**Hڪ~Ž;;,MԦoO@An.**J俑}yt϶0Mj0*2_]EW),+*Jŝ~taRWtצ,e X2,*@x'֥mQ{,+*Lѥ}eK9>[Ā ޡ,eN-*-H$q+,++NṖz^C24Kq*~p;+*3_Ѯ,-++NġvX=21=Y{3Y/+-./7C[AlxG.*,Hy't*++PZ5-2=Om; R9,*,L $n*++DQ3/9E\4 J2+*3a *j)*+774=Kn3 nC/+**)/NN,-+l ݣ_4)-Bz'1*.O^7**/NٳE,-+n q?+)8c 2*)T٧S6+*1T@,-+p njM-)5J"4+*KՏH1++37,-,s ԒS2)0Br4+)D?,,-,u n9),7f4+*?c9 }H.*1P4**= ыN.),=Y5*): a5)*7Q6*); o>,*5N|6,,; ͆P/*.@s6-,;ܠ\5*+9Z7-,7|=,+3T6-,5xB,*.Iy8-,2|L-)+Ah8--1ʊO.*+9U ;--.tR.*-5Q;-+,1Jq:--Ai}}|}~}Ն΅~ѐΈ ¾„ŵзƵַݸʏ̽˴ݶײȇ »ς̫մ ~~ѽγƵ~zxѻŰ且 ~ٽ ׼ʹ {꿳 îⶑ ~zґδ ᜡĵ }{ 񎖖մ ~}z§د 򄊋}ߵ~{ɣϭê {~xz㹌 {Ϡ ȭ񱡘р pyxusp⿳ ҝ ͧ젒rljkv isokki± Ԛ ǣ 钁f[XW[ nlkb]abñ ֗Ƞ v^WWVabef]WQXZה r_XXWbɀƶZY`^YUQQVT޽֑x obYXXaǀFIJKMQUXYXUSQQRURܷ؏ l]]fhdZXX[SVVYVTSRQRRdյƚ`acl%ee\YYauw^jjmqgbchgg`TRRK˰QIn_`al#`_Z[yʽ_RPJٽQ;37k]aak W`\\sV[_NdjmPF|ҴЇC90X ȗj]``k S][gƀ`W]deILՇE?5^ ˝m]a_j gR[YfJLMRVPMP MG>ϴډID;c ͢o^aj ZOYXTQSXYXWVRJ<ջ܈NJ?g Ϩra| _GUYZYX WUPF=°߉TMEkѫ }AJSWXY XWTPI;PƲWSJjѯײf>AIOPQPNIB8HijZVNoұӻ^H>9;APrҿ]YStӳ¿ɸb]Vxբ ؀ׁɺe_\ 藉ȿfb`6heb~>¿kfeJ_|lhgFό liiC nijψ~@ olj~< qli ɺ:qnpƂހϿ5ürnq̐υĶ0Ǿ ߃tos՗֑Ŭ ۂtqsǐFηـurv%Ǩx~øׂwrwƅCӹ|yÁxtzٌB~˥y|Ɓxu}⏀<~Ӹ|zǹсzw掁֊<ҁɤw|ɺт{xϊ(Թwx˻!Ђ}zò‰8Ǡu{̼Ё}z͹y|=Ӵxx}ͼς}{Խt}/ƞs{ͽ'̂~}´ø{} ָvv}‚ξȁ}ȷ {~̉#ʣ}vxā~~̸ſwӂִwt~ٽϼvȠsƒŶմv ͜'صy~ɹx€ ڵz$ɝ+vyzӺ'ǻ}u'vt隁({uy蔀 Ρ.wt鑇 ~1{s}凜'|wuშ Ϛ $~}ws|؂ ~ *}|us΁ Ө2}~ytzɈ Ǣ 휀xݸ;癀×{ݖ̀  Ԫ{|ͱ2Ӓ ݳ|{(~{}Ǝ ś{'~~ٹ ͧ{}ż ~}Ǚȫ ۸}}"~㹔 伕}}ֵ Ԧ{~~ʡ د~~~ 㷒~}~} ˟}~} է~ň ᶔ~ňƜ~ĉ԰~ƈת~NJخy{Ɗ Բ Nj ʋʊgrVVXUWdu[cqWVk`fcg{^wcYT`w[}c^xcZyc]WXstcaWVjlacޒcf`nc ܏cYf\zcےcZcۓc~Yc۔caz~[c ەcbwq]c ەcZX_wiec ݕcg^ZX]s̲_qc  ەc rpkd]XWUk[vcڔckjhd^YUQ[cݔc ggedba_]Zhz^c ڒc eccb`_][Wcr\c ܑc a``_]][YVdl_c َc `_^]][ZYWUdbgc ڍc ]]\[ZZ\WVRh§siXmc یc[\[ZZWhiUSjɣvaY_Ync  ݌cZ YhjSpϠ l]W\lqZvc ӊcZ XmzXsҝ f\W]oo\~cȺ ՊcZ [s~ZvԚ nYX`l}d[c ɮ ։cZZX`{[x֗nXX_ixc_cϿ؇ֱӈcZZXj`zהhWX^hr{~}}~y^fc˻ȸ˄cZ\wg|֑``VW\ckrtuuvwx{qZgc κ܂cZYjn{؏PCDK[djllmonprrtnXic۶ۀcZX`}xhFIKQbefhhikklniYkc%첱Ҹ˺ccZX]uӻ:7ceFHIP_bcdefgja[lc#᯦΂ZX\qм:)#)UDHHO]`abbi_\jc ⧬ި۲ڳہZX\r{.(!N ɔTCGGN[]^d\]ic(¤ܮ֭ӱҨZXY`vz0,$T ˟YCFEMZa]_gc몣ջ XYf}z1/)X ͢[BFQ][^c䢟pw53,[ Ϩ^E\[^c 㤘 ԍw850]ѫaZ]c鵒ؑv;93[ѯhZ\[c֧v=;6^ұgZ[Wcݼպu?=9cӳgZZcomЉwCA;gՑ^ZZWc~|ywuqomĉtDBAsZc~|yurqrɊqEDC|BxXZZ\¿ʻqFFECz\XZZ_¿nHGGFQVYWXWhIHIJe[ eIIJfW`D eJIKcpw@ eMKJ\ YͶ> aLKI_`W U¬:bLLQi^_X~V߀ɴ5cMLPżlY]ZkV\waNMQvW[[gȑSej£}_NNR؍WZZaFmf̱jhu\OOTWZZ_Pwaßv]\iƱ]ROU]XZZD[ѴiYX`ṯZSPXfXZZ~CTǜvaYW^pѵZSQ[kYZXtBTѳj^YW]r׵[TR^iZZWcɊAWƚq_][Ya~ܹ\US`Z^a\a?`Ҳc][YZl⺦!\VTcֱYak8Ön^^ZWa缨%[VTb޾[[cv{=ѭe^\X]x뽨'[VUeƩc[|s/”n_^Z\t𽩀'ZWVgѱ¸gXf Գ}d^[\v߾YYViַ bYc#ƙla[[|YWWl⼢žZaVrծf\dXYWnͪϺTl[W\ĕo^qWZYoҳqpÀ ֮R} }_YWg'خ~gVZYpڹp`]pÀ ܬT{t\WXn$œ+WZZuȭj[XdSfYW]Ҵ,XZXsѶ{f\X[nY|\XXd,XZZ{}e[YY_y]iYXXn-XZXsh\Y[[hy] bUW\v.WZXtr^XZ[_|sf {^UU_1VZXveXX\]men[WWm'WZXw}^WX\d{_ weYWWp $UZZnu\W[^m[ p_XU\ *TYZa^Y[b|[ ȍm^XWd2TWY_]_kd d[XWp WZY`f{էjl;u]ZW[y|W\[izYSY+`\XW_xY\[ ʒeTV^~ñ2b^_\WYktX\[ ՞lUS]w(ZY_`fWSVooY\X ~ZRWj'[WWp`WWXpٶhY\X cSS_ \WTtwbXWZuŧdY\Y ҤpUT\o"]XUoܦo^XX\_[\Y ݨuZSXh^XTi˟hY[Z[ Nj_RU`^XWdd ͗mVU\s^YWb ۢpVTWe|_WV_ 輁\SWbu`WV` njeUT_ubYY` ؠsWUXh`\[`}\TUb|aZY^ǗcUU^v`ZY\͒gUTXnb\[[ЖoSSUhb\\[ϠqXWYez d\\XsXWZbw dZ\XXZ^pcZZht8mk@icnV Bkchmviewer-5.3/src/resources/dryicon_process.png0000644000175000001440000000572011311605470020753 0ustar timusersPNG  IHDR szz pHYs   cHRMz%u0`:o_F VIDATxڔW[pu=ӳ],H,X`H A[\U(Erَ,L*?N\|XSK(ŲE[)SaJ"!L)HH ]}<JEU]3ӷ=}ιǎⓆm۠R )%8zw'sI(p~ 8O)mCUUB>ǁD>0ٻo_w0B0P151QS*8]"9=G-!|>#GF9eYH=@HH˲ܟ;p;}o<񕯌Dlm9vGkF=;lrܲ,UBU*m&::Ιp\ _꩓{T*|Rdײ !@)8b8p7mjRTU9TUB{Y,CQס:KK*`+x?ox<B3RQw֭~EQ( >O[µ5FOnض qiJo]5ךqM)UUr5\~4ޮI)iZZZ|-(w* `~?ZWKRBbxg^yDJhni9}ۯRJ 8~!)Cϝ{%]`(UU f% ButVťT*9Q__}Gwwa׋T2y19 ݿĶmM|h90>66Sd0??)KFM8L&2*2 _4!dhGWܵ8dJٵ457}Gpho`wD"4X\\D[[bvpC40Pm#>UES,NR;vxlkJo]Lu~ Hnx^ܸq\zitzLeJ4"fgf\>RMMNhYִ4gg3y)pGU9cHH& 4q%^^Y^V0f?/#X{ duLӄQ6@)E8\ TZou˲&EsםRRj ˓/G~Prʕ+?\/:iZ1B\f2?YkbZ(tCAd2F[J&~z39ι4-( @ ! A)%<nB|n55%$2S9׷{h.^/Jp4@JRTrl`߾ܹM98|(B`e9@^3 TΑXZ:\.8sǟxE˶`6997l B!`Lpa,v(WR*)PfCH!&K*lۆp(%XYYAX@TB\iY eU+f <(%pZul<X* Nr\ ˶Aٜp$gzQ,Ac i"R_PI &T(L@!8wnEӴMm*]!׳,rKCCO׏$!<{y 5jjj/eV4nk:XZ|R=jFR olhc e@`a!k(%yYM-+Jy]JR\ՕjUB={~)ٰ[X;:;7 ICJ@0]/"ʥӫf%c%Sz{ eYޮBT* ׳\*hnnȤ\m(|cǎ/ݷT~r!D8>fiPZR}/wʬeи*Ƕ&x< ˲077T*%וDQbmcc#4MhY6VWV01>vԷKfYιݻ&''UREA% ۱H,.KCl񢧧BHB)~bf:jkkkG*@BJXP{Z3J_i?񸽦i&t-!e#[C!_aP,J077|n hniA*Ԅsܛ-ˎE"L48/1tmtyС=n&ν_<ۣbi, .fbx<b_˓c㟛~nii1 : 77i^V  ~ۯ͝朣.]ZZ%v ƪDfeRIE@A}}= |pȵWﻵp4 =X(eänzBJ?S,4MCRhkkwn-)p{ܘ~d.'n3C2E}b|<my>D"ulG*|s4rEQӖo۶|ow`**SgrŽ/zXzYՎ<ޡ ~ !PƆ%!TQnQY˲`U5UUo]p7oXgȪRB7\r11>wh[[x<~sH026l˂!N|'΋.$w}OlNc۷?{D2x[UN d5SUO@~KoD"4Q]'vǪ>~ZQ(U mّёcL$q2kY]VW3TIENDB`kchmviewer-5.3/src/resources/dryicons_replace.png0000644000175000001440000000573111311605470021075 0ustar timusersPNG  IHDR szz pHYs  gAMA|Q cHRMz%u0`:o_F OIDATxڌWkpy~vG:ёe lLPc`Slgn;6Ni`ڙNi22$m͸L61wK2.nG>wv?l3cݝ}#Gp5Ue^|i9A$!%O*"p=Rlbr{׭>V^rί^h)Sl*#?Nc<wƐ{>Py ~ط/e;Hcc TE{tCe cp=-˻;kz@eEti*0ΝzgJ)oôkKe `]ppw`Y4,4$$B+S.G(Zє޵]K[.omE )(98`#.n単F]p +GS5D/ OR"?}9MU?ݾu[ʼn3m'\(p|.؁.~D[R0 @G޵#q=؎{J)IAA9gǃA}%[g3N4M(2JLнO_քwGDc"J*Nò3Eϱlq :7j]3ư@&'[k ˦k>ד~è(Cf.L6O(%ePss%H6"Y_ ea B@&.VTkWڳ5iEB@y4Ds00˿1+$7_XqA2gr8{ ʱ)P]Uz(RJx]װ#PPtfŢMUh&_zȩrF!AJ _2~^֎p8=swE18r0 9<߇tu5 kxؙlΐ>6H6ԁ / xϟXcۓR">r"5$KC:޷"D1cʼ24 m r!@6_X* dCݳۿixۖcLPQ"926١I0C[ki{ <$ p=a8r"Z {:1ϛ` -ּ{yБS7v: l=/{'P֦ێ PJ2BL&(>qidbWEYRv=3Wpf'@in, ޴mw]jM!/ J4BTUqU! ,p@emjplQŁT6\GӦ{JC}c&A>6>voelv*W0ұ(K_lYKsYrʛn"B^2׷%){W\|7qa1g?zg^=XD؎ USCc/L|/gmɾh *8BHMN5׽MGHh8?ZOK qH 45+vk_k{v!Է]]1S꽸'/OlՔ)!e!GQ6_ xDB9pߦ kR>MgV{.UB aNھC iH)D% D939*VnH%c|Z}:E8wwU([[O.ioOUUUՓR҅EIS)zDQE.a)}@5M}*\R.ioޫ ظ;3YDH)BbxךOX/!A9>l˄(m^hnp"StpO\+?%jߢi٨,۾m7~\HH+q T4&bCmW-À2 >C\U9*0M[ w[}? Nxm- ٜ}uB!p]sf)K< hR㢱>(Ǜ~dn0+ `0 !MU | T>xRt||sl|?l۵Xue'|$۶ wq%?fDѦ@Ji̟-2]&Z_2Wo\z4ٴIENDB`kchmviewer-5.3/src/resources/find_next.png0000644000175000001440000000237610665224266017543 0ustar timusersPNG  IHDRw=gAMAOX2iCCPICC ProfilexMKQ;"fpW1(!RP-" &3';W[@JJq%]!+Mqql r|3`'1YNW&8jxý;A,Jݩnw \[.n:7ʀhn B[M(- =@a/G@%  `5` 8_v+h/xuS^<ق?+S-JY]! FY{]S8J]ws!fs}f? A#|>0wZC۰`AO& es&a<ԩLxCm#7# wԮtYN岬V*/ps<IDATH_hE?3W\cҞZMAKF<y4iZ r E_@jbT/T 5-V(%Zl+K.ݽݝa[&Z/>HȒF5-mlmw>1t&y.V͢nM\;eH uDWͦLkjZѓ˲~5eXH(ze~πbm&҄8נ=93T:Xڃ@)YpĊ̓u5Bd*N1;>I$9N< ?k ELZ P4s}Ґ=Z@&H sg0˧Y9+ JD.@ڸ` aǡ,]*@8 _A l V4?RRE(}'I%i&iʉjHK@;G`4CrPL% 4A(4ZMXD70@πz xI>4=[q>!M]ܗ^%p]ywo{)tphzqFy@#uGa 6X!qV5 G@鶹EׁrVY HnGtn+ +@ @2iasW u_.-09e3(N vU$#h:4EK@=Q|FX-F2/~$IENDB`kchmviewer-5.3/src/resources/icon_home.png0000644000175000001440000000350210664477035017520 0ustar timusersPNG  IHDR szz pHYs+IDATXŗo?3eC \І"ҼjFnڇVQkyKj")rժ?00>02fAݣ3{BxHuc9~}) G{|}fe&I::ZyGz$)cck0ITN2-uB*jΰsG}/ǎ ժz_ރhmmm|\lرf] [.551@mTWǭb#co!.?R)z>[lMLC5lW ~t-Rz0SBT__^S#'z~7!TrfkM }9vC ӹ!S@gc̻ `5vW8q/{*~4kXCW%mhb꫿[bMBV1^wҭglnfM ^7!El]ocW{S +lO2EkAW=ϳKå MX7OY>/&[kKRlSTOs;SӬd۲3~Md7@K}߯kڎ/ERSiJr4|OHT7M*e4L|ƉPhHsR^PiSg_|IZS?6tz XQWj!0]oHbU9V@Og5!\>c9F+.IQC5E/rKa%rRJ|*@ HS0tr[oQ*o_FQ=+u- 0F^s@޲,t &w'&9 C+}gn*z嬭(3'Lʜ뺹\;zf29lczܸ !*Y}t}:w^4-w騢%QO7nG]y?Ҏܚ(I&,tM<4\ky "?A0%JSz(V-ڑMc%*d">qX5,5U~933O$MMMŕm}&2B+zw/'Lh/l>Y8;{7I)sRjAoCק{Wcvv@]HsZ"U87oOH) @uݜeY*/8lq~`*IENDB`kchmviewer-5.3/src/resources/dryicons_window.png0000644000175000001440000000174211311605470020767 0ustar timusersPNG  IHDR szzsBIT|d pHYs B4tEXtSoftwareAdobe FireworksON`IDATXŗnEs_F!+@V`E6*+x x@BIX$cssXtUf2;ңRMuUU]-λW6? T8<9l9Ν.|yOn߸%NR*Aq&?~=ro4:!ѽpČ{=8wv#6s= Se.l&Oy rŜ2f^.QaT/CB۵;ACAf,ΰh<<|/đ#Q RW- 7ch̷ ФZw r ,=@zyw9%ilGǣ)WP  0|wA.i4mqVhEZgf;*p26N^nDSwlGBcEWZXR sPIrAbwU_{2bt0<~3KDAzyu}E꤀ 0n8UkedbHf\[r\ fM ;Z SQ4m9 U 86JH^!-dYyaEVHmB7b idV(6Y:ٜKpsG)LDƭ/H۟6) r^XK 4DET JPxozILҤqE DsB Ю  ]B%*Ũ ,+2|&bxRZYp:p0tOfzOozea DƳsILK>&..̳AU>(*{䳻Ȼ<I8[IENDB`kchmviewer-5.3/src/resources/addtab.png0000644000175000001440000000056510664477035017005 0ustar timusersPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<cPLTEjjj QWjof s+n+p+{+~+..69r9t9u9u9z999999999W&'tRNSWIDATmG  @@R@8SwU0y(۾o2Qic#FGA$Y.M6?H^/65@"`=@;]ttvJP7``s= +mkIENDB`kchmviewer-5.3/src/resources/icon_prev_page.png0000644000175000001440000000322210664477035020537 0ustar timusersPNG  IHDR szz pHYs+DIDATXŗ_h\3{%[J j,H쇸N`\WK)B >-5P?%%ı]+v$LKR)WZnv޽+j]K6^^s7s̜O<}?sX(aBPӨ`:܋g!>O !) A S5P\;x<%`^E_Aj`l#aZ߽@ށ ؎ 8ˠգNӶˏxvַ4:M*`S+s. ^RO4xqz+vżUM_l*~!P[ 2%d~k Dr5 C)7 T0 P}J_ezbS""ZBPR$@pRő_?Dh ̇BGΞI""<,>N"P{~)̇ޞR84 >uM52NGJRTuu]K)"BYBB8aؾۦi:5ÀA1IENDB`kchmviewer-5.3/src/resources/Info.plist0000644000175000001440000000217511513541304017010 0ustar timusers CFBundleExecutable kchmviewer CFBundleIconFile kchmviewer.icns CFBundleIdentifier www.kchmviewer.net CFBundleInfoDictionaryVersion 5.2 CFBundleName kchmviewer CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 5.2 SUFeedURL http://www.kchmviewer.net CFBundleDocumentTypes CFBundleTypeExtensions chm CHM CFBundleTypeIconFile kchmviewer.icns CFBundleTypeName CHM CFBundleTypeOSTypes CHM CFBundleTypeRole Viewer kchmviewer-5.3/src/resources/icon_locate_in_content.png0000644000175000001440000000141510664477035022260 0ustar timusersPNG  IHDR szz pHYs+IDATX͗=kA\c!`g N!`ig'K`+)-_aMa {wfwޛHp{惁lOkzΤETD%xDI T1(h ?z|i™eT -=HYǎI/05 ++ŷ|x=Wr e e q\f\$~ "' Jˀfdoe_s` .N6oV}3' s2_kMOHh 6ؖ틍ԃt.uI:bwg/,F8ܹ2]^~;y{{"贈u{&5}q1 -Â7kSj"d 4GuUՊ zܖU%׊^%̺RP`hؐE_؆1i mx8a2]hK|Z#ӫ@͟s~pk&XQM"Jچ͙__TλR tϧDw n@h4uvO#7gf69*=}4NY=fYq0QT S ߤ5<:8mKy,N3 }4SL/e%pp̘,rIENDB`kchmviewer-5.3/src/resources/icon_view_source.png0000644000175000001440000000141710664477035021125 0ustar timusersPNG  IHDR szz pHYs+IDATX͗=kTAYIBPK{AH4Q) b`+) 4V66,=sܯݻIΙ;s{Νa[۪zd* J"*q@" y,?[ ν7_%ՋzY4M Cg!⣸0?uD p3,lq-$swo]Eb0(Bځ:Lo3:Gy` .F Ԃ7˞$t|)-V"^>"DV Um< ?\G"oe$'*x"8g},8<93w0,,c? I=KEL&S#^;fVx~j^zϲ?D .deRp).`TVWfjM(65/jVڮ_M 5P|6"e m%)hY֪嶲hƝן*V&@x_X#%)$%,e~8ɖK$jςI'zR>pqz4@4d 0/B9 addtab.png closetab.png find_close.png find_next.png find_previous.png find_wrap.png icon_add_bookmark.png icon_back.png icon_copy.png icon_find.png icon_find_next.png icon_find_prev.png icon_font_decrease.png icon_font_increase.png icon_forward.png icon_home.png icon_locate_in_content.png icon_next_page.png icon_open_file.png icon_prev_page.png icon_print.png icon_view_source.png kchmviewer.png dryicon_process.png dryicons_replace.png dryicons_save.png dryicons_window.png kchmviewer-5.3/src/resources/icon_font_increase.png0000644000175000001440000000333410664477035021412 0ustar timusersPNG  IHDR szz pHYs+IDATXmlgri ökc,uA׆d!Dp#4&3Y24ĶM‹QBÍky)vyv~xBaWry]뺯!x:u6C)Z(EmiӔy(Ð t577#oi2 ݩIX°ZR J)R}wsA@;6mڸc8z{ |`'H&80%x~'_pjmm-]ȑ{3481B!(ࠌ3 5 wnԔnޱ$ MN$*+0 6e)JZp=PJJ%d Hjk+U J9Ԛ nYlD"a!a[H&l8 6.OBHRTŠZ`/i* 0]^tWv) ee ېu}$6 )`}R "%>Y[%(H; 2ђCrSJRBHT0B ,Z wBSEe%(`4jgY*  H!` ضt9`hi=\CGZz>~Hv,8| CsB@PimI.!e a z a_۷'atAE*i!02Ic R(@)Tqg<л#irje TTK 804ꗻjh؝[c!/ 79S@)yzxw(`f}\ HC0xzvWKp]XG.52<;V:nD,BPp 8qffHGc/gD.7,#xyZ#P x_CJ-%?>z&&&Q)q@B#~?NG{?DjF|n%,ӈ$Ѥl'L&aCn!r/0益d^]4l-?jI'ס32fOQy\8J]6|>sHv5"aqIumwyGm۷2B9/YTYƍq `~7:zzd' czWonJc&?tYצ<|&PGs޺5u[uot9\z. !x1==פq0oX>sޞt}}߉*n#WNs \F7O3 ozsBߌ ^< f#G!mĺ&їbAY[/A[/_?vmǻ AVEJX|5z U/,p}p׬󭭥:ƙ֪ ewm>9LJ}v>S8u҆u-_]ot#<\ = z^)񇡜Ϳ1C+UkpGįX ϯ||:͹qɧ*>,~~m݃},JT4T4nИ>ؿ.$~QIENDB`kchmviewer-5.3/src/resources/closetab.png0000644000175000001440000000064110664477035017355 0ustar timusersPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE888H M `cm p!q#s$s%t%x'z6~*,:,,../02@@3CF}龁tRNSWIDATe1nAgƜG" mAER% o$m2J.K(MZ0:A x+:@jAMv٤)^bT`W>G Io]͉w K:>D_^IENDB`kchmviewer-5.3/src/resources/icon_copy.png0000644000175000001440000000255710665677742017563 0ustar timusersPNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT]u3;;ZfV At!TzEDY݈AzTRvETDdd;ٮ_:33s|_ϓ"<{Mx]1RJ |nn;}9[p"/}?9p}_Vr(t_^}x g>ݟ[m=W>tϬ$!ڝ[PYO󰺙KYmr<|;O_|RDK|QtTu}ʡSsc3/Mk{gm7[=OY1 bb:aeIeq}yˇ>W~o4nܱa'm~{>h04DD6}NGu( '>4'ڶ]J)-ZbBH=ݲQy͙g,,;rhdڵ+,[) PѼKΔC WCzw I)g-?lvv^Ɏv+Z=7x Qأ:<0@3Gyhۛq-SeY;O=ڲzvn{~A ̑eJ b R(FL[^[WFxəKӋ`@!JԔ+XҝevEgZyퟶk8"2bLM('tnlWk_m^z:o@ ;Dg|z}ԋkNw>TufT[?$n2Z7NWUMon  1(X7toq[7?qe)c Èh E_=PUn9uɥ8u* E20NDdp/_IENDB`kchmviewer-5.3/src/toolbarmanager.h0000644000175000001440000000602311313604004016163 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TOOLBARMANAGER_H #define TOOLBARMANAGER_H #include #include #include #include #include // This class manages application toolbars, including the following: // - Stores and restores the toolbars, including their position and content; // - Allows toolbar editing; class ToolbarManager : public QObject { Q_OBJECT public: // Returns the name of the separator object which should be used in place // of separators where needed. static QString separatorName(); static QString actionName( QAction * action ); static bool hasAction( const QList& actions, QAction* action ); ToolbarManager( QObject * parent = 0, const QString& settingpath = "/tooolbars" ); virtual ~ToolbarManager(); // Set the actions available in all toolbars. Actions which are stored for toolbars // must be present in this list, or they will be ignored. void setAvailableActions( QList availableActions ); // Query the actions available to set in toolbar from the provided QObject as children // of this object. Typically (always for UIC-generated files) all actions have application // MainWindow as their parent. void queryAvailableActions( QObject * source ); // Adds a toolbar to the list of managed toolbars void addManaged( QToolBar * toolbar ); // Loads the managed toolbars actions; keeps toolbars intact if nothing is loaded void load(); // Saves the managed toolbars actions void save(); // Shows the edit toolbars dialog void editDialog(); private: void applyActions( QToolBar * toolbar, const QStringList& actions ); // Keeps available actions QList m_availableActions; // Keeps the managed toolbars QList< QToolBar *> m_toolbars; // Setting name QString m_settingsRoot; }; #endif // TOOLBARMANAGER_H kchmviewer-5.3/src/navigatorpanel.ui0000644000175000001440000000170011311400213016355 0ustar timusers NavigatorPanel 0 0 400 300 Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Navigator panel 0 Tab 1 kchmviewer-5.3/src/dialog_chooseurlfromlist.h0000644000175000001440000000360011311334060020266 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef DIALOG_CHOOSEURLFROMLIST_H #define DIALOG_CHOOSEURLFROMLIST_H #include #include "ui_dialog_topicselector.h" class DialogChooseUrlFromList : public QDialog, public Ui::DialogTopicSelector { Q_OBJECT public: DialogChooseUrlFromList( QWidget* parent ); // Shows the dialog with titles, and let the user to select the title. // Obviously urls.size() == titles.size(). Returns the appropriate URL // for the selected title, or empty string if no title selected, or dialog canceled. QString getSelectedItemUrl( const QStringList& urls, const QStringList& titles ); private slots: void onDoubleClicked( QListWidgetItem * item ); }; #endif kchmviewer-5.3/src/kde-qt.cpp0000644000175000001440000000374411311315004014712 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "kde-qt.h" #if defined (USE_KDE) KQProgressModalDialog::KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator ) : KProgressDialog( creator, captionText, labelText ) { setAllowCancel( true ); showCancelButton( true ); setAutoClose( true ); setButtonText( cancelButtonText ); progressBar()->setMaximum( totalSteps ); setMinimumDuration( 1 ); } #else KQProgressModalDialog::KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator ) : QProgressDialog( labelText, cancelButtonText, 0, totalSteps, creator ) { setWindowTitle( captionText ); setMinimumDuration( 1 ); } #endif kchmviewer-5.3/src/tab_index.h0000644000175000001440000000357511311334060015134 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TAB_INDEX_H #define TAB_INDEX_H #include "kde-qt.h" #include "ui_tab_index.h" class TabIndex : public QWidget, public Ui::TabIndex { Q_OBJECT public: TabIndex( QWidget * parent = 0 ); void invalidate(); void search( const QString& index ); private slots: void onTextChanged ( const QString & newvalue); void onReturnPressed (); void onDoubleClicked ( QTreeWidgetItem * item, int column ); void onContextMenuRequested ( const QPoint &point ); private: virtual void showEvent ( QShowEvent * ); void refillIndex(); QMenu * m_contextMenu; QTreeWidgetItem * m_lastSelectedItem; bool m_indexListFilled; }; #endif kchmviewer-5.3/src/toolbareditor.h0000644000175000001440000000646711313604004016053 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TOOLBAREDITOR_H #define TOOLBAREDITOR_H #include #include #include #include #include #include #include "ui_toolbareditor.h" class ToolbarEditor : public QDialog, public Ui::ToolbarEditor { Q_OBJECT public: // Returns true if an action name in the list actionsForToolbar() is a separator static bool isSeparatorName( const QString& name ); public: ToolbarEditor( QWidget *parent = 0 ); ~ToolbarEditor(); // Add a toolbar to the list of toolbars to be editer void addToolbar( QToolBar * toolbar ); // Add toolbars to the list of toolbars to be editer void addToolbars( QList toolbars ); // Set the actions available to select in toolbars. Actions present in toolbars must be // present in this list, or they will not be shown. void setAvailableActions( QList availableActions ); // Enables or disables showing actions without icons in the available/selected lists. // Enabled by default. void setAllowActionsWithoutIcons( bool allow ); // Returns a list of selected actions for a specific toolbar QStringList actionsForToolbar( QToolBar * toolbar ); public slots: void toolbarSelected( int index ); void accept(); int exec(); private: friend class ActionListModel; QAction * findAction( const QString& objectname ) const; // Adds the existing toolbar actions into the internal storage void initToolbarActions( QToolBar * toolbar ); // Copies the changed toolbar actions from the list into the internal storage void updateToolbarActions( QToolBar * toolbar ); // Shows the current toolbar actions in views void setupViews( QToolBar * toolbar ); private: // A list of all available actions QList m_availableActions; // A vector of edited toolbars to preserve the order QList< QToolBar* > m_toolbars; // A map of edited toolbars with selected actions QMap< QToolBar*, QStringList > m_selected; // Currently shown actions for toolbar QToolBar * m_activeToolbar; // Params bool m_allowActionsWithoutIcons; }; #endif // TOOLBAREDITOR_H kchmviewer-5.3/src/dbus_interface.h0000644000175000001440000000465111311361434016155 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef DBUS_INTERFACE_H #define DBUS_INTERFACE_H #include #include #include #define SERVICE_NAME "net.kchmviewer.application" class DBusInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "net.kchmviewer.application") public: DBusInterface( QObject *parent = 0 ); ~DBusInterface(); public Q_SLOTS: //! Loads a CHM file \a filename , and opens the URL \a url. Use URL "/" to open default homepage Q_SCRIPTABLE void loadHelpFile( const QString& filename, const QString& url ); //! Opens a specific \a url inside the loaded CHM file Q_SCRIPTABLE void openPage( const QString& url ); //! Tries to find word in index, opening the index window and scrolling it there Q_SCRIPTABLE void guiFindInIndex( const QString& word ); //! Executes a search in GUI. \a query contains the complete search query. Q_SCRIPTABLE void guiSearchQuery( const QString& query ); //! Executes a search; GUI is not involved and user sees nothing. //! \a query contains the complete search query. //! Returns a list of URLs, or empty array if nothing os Q_SCRIPTABLE QStringList searchQuery( const QString& query ); }; #endif // DBUSIFACE_H kchmviewer-5.3/src/CMakeLists.txt0000644000175000001440000000214211365763536015602 0ustar timusersINCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/src ) # Project files SET( kchmviewerSources checknewversion.cpp config.cpp dbus_interface.cpp dialog_chooseurlfromlist.cpp dialog_setup.cpp kde-qt.cpp keyeventfilter.cpp main.cpp mainwindow.cpp navigationpanel.cpp recentfiles.cpp settings.cpp tab_bookmarks.cpp tab_contents.cpp tab_index.cpp tab_search.cpp treeviewitem.cpp toolbarmanager.cpp toolbareditor.cpp viewwindow.cpp viewwindowmgr.cpp viewwindow_qtextbrowser.cpp kde/viewwindow_khtmlpart.cpp ) # UI files KDE4_ADD_UI_FILES( kchmviewerSources dialog_about.ui dialog_setup.ui dialog_topicselector.ui mainwindow.ui navigatorpanel.ui tab_bookmarks.ui tab_contents.ui tab_index.ui tab_search.ui toolbareditor.ui window_browser.ui ) # Resources QT4_ADD_RESOURCES( kchmviewerResources resources/images.qrc ) KDE4_ADD_EXECUTABLE( kchmviewer ${kchmviewerSources} ${kchmviewerResources} ) TARGET_LINK_LIBRARIES( kchmviewer chmfile ${LIBCHM_LIBRARY} ${KDE4_KDEUI_LIBS} ${KDE4_KHTML_LIBS} ${KDE4_KFILE_LIBS} ) INSTALL( TARGETS kchmviewer DESTINATION ${KDE4_BIN_INSTALL_DIR} ) kchmviewer-5.3/src/kchmviewerapp.h0000644000175000001440000000062711513541304016044 0ustar timusers#ifndef KCHMVIEWERAPP_H #define KCHMVIEWERAPP_H #include #include class KchmviewerApp : public QApplication { Q_OBJECT public: KchmviewerApp(int &argc, char **argv, int version= QT_VERSION); virtual ~KchmviewerApp(); bool event(QEvent*); private slots: void onTimer(); private: QString m_filePath; int m_nResend; }; #endif // KCHMVIEWERAPP_H kchmviewer-5.3/src/tab_bookmarks.h0000644000175000001440000000410111311334060015777 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef TAB_BOOKMARK_H #define TAB_BOOKMARK_H #include "kde-qt.h" #include "settings.h" #include "ui_tab_bookmarks.h" class TabBookmarks : public QWidget, public Ui::TabBookmarks { Q_OBJECT public: TabBookmarks( QWidget *parent ); void createMenu( QMenu * menuBookmarks ); void restoreSettings ( const Settings::bookmark_saved_settings_t& settings ); void saveSettings ( Settings::bookmark_saved_settings_t& settings ); void invalidate(); public slots: void onAddBookmarkPressed (); private slots: void actionBookmarkActivated(); void onDelBookmarkPressed( ); void onEditBookmarkPressed( ); void onItemDoubleClicked ( QListWidgetItem* ); void onContextMenuRequested ( const QPoint &point ); private: QMenu * m_menuBookmarks; QMenu * m_contextMenu; QString m_bookmarkFileName; bool m_listChanged; }; #endif kchmviewer-5.3/src/viewwindowmgr.cpp0000644000175000001440000002531411365746573016466 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "config.h" #include "mainwindow.h" #include "viewwindow.h" #include "viewwindowmgr.h" #include "viewwindow_qtextbrowser.h" #if defined (USE_KDE) #include "kde/viewwindow_khtmlpart.h" #endif #if defined (QT_WEBKIT_LIB) #include "viewwindow_qtwebkit.h" #endif // A small overriden class to handle a middle click ViewWindowTabs::ViewWindowTabs( QWidget * parent ) : QTabWidget( parent ) { } ViewWindowTabs::~ViewWindowTabs() { } void ViewWindowTabs::mouseReleaseEvent ( QMouseEvent * event ) { if ( event->button() == Qt::MidButton) { int tab = tabBar()->tabAt( event->pos() ); if ( tab != -1 ) emit mouseMiddleClickTab( tab ); } } ViewWindowMgr::ViewWindowMgr( QWidget *parent ) : QWidget( parent ), Ui::TabbedBrowser() { // UIC setupUi( this ); // Create the tab widget m_tabWidget = new ViewWindowTabs( this ); verticalLayout->insertWidget( 0, m_tabWidget, 10 ); // on current tab changed connect( m_tabWidget, SIGNAL( currentChanged(int) ), this, SLOT( onTabChanged(int) ) ); connect( m_tabWidget, SIGNAL( mouseMiddleClickTab( int ) ), this, SLOT( onCloseWindow(int) ) ); // Create a close button m_closeButton = new QToolButton( this ); m_closeButton->setCursor( Qt::ArrowCursor ); m_closeButton->setAutoRaise( true ); m_closeButton->setIcon( QIcon( ":/images/closetab.png" ) ); m_closeButton->setToolTip( i18n("Close current page") ); m_closeButton->setEnabled( false ); connect( m_closeButton, SIGNAL( clicked() ), this, SLOT( onCloseCurrentWindow() ) ); // Put it there m_tabWidget->setCornerWidget( m_closeButton, Qt::TopRightCorner ); // Create a "new tab" button QToolButton * newButton = new QToolButton( this ); newButton->setCursor( Qt::ArrowCursor ); newButton->setAutoRaise( true ); newButton->setIcon( QIcon( ":/images/addtab.png" ) ); newButton->setToolTip( i18n("Add page") ); connect( newButton, SIGNAL( clicked() ), this, SLOT( openNewTab() ) ); // Put it there m_tabWidget->setCornerWidget( newButton, Qt::TopLeftCorner ); // Hide the search frame frameFind->setVisible( false ); labelWrapped->setVisible( false ); // Search Line edit connect( editFind, SIGNAL( textEdited ( const QString & ) ), this, SLOT( editTextEdited( const QString & ) ) ); // Search toolbar buttons connect( toolClose, SIGNAL(clicked()), frameFind, SLOT( hide()) ); connect( toolPrevious, SIGNAL(clicked()), this, SLOT( onFindPrevious()) ); connect( toolNext, SIGNAL(clicked()), this, SLOT( onFindNext()) ); } ViewWindowMgr::~ViewWindowMgr( ) { } void ViewWindowMgr::createMenu( MainWindow *, QMenu * menuWindow, QAction * actionCloseWindow ) { m_menuWindow = menuWindow; m_actionCloseWindow = actionCloseWindow; } void ViewWindowMgr::invalidate() { closeAllWindows(); addNewTab( true ); } ViewWindow * ViewWindowMgr::current() { TabData * tab = findTab( m_tabWidget->currentWidget() ); if ( !tab ) abort(); return tab->window; } ViewWindow * ViewWindowMgr::addNewTab( bool set_active ) { ViewWindow * viewvnd; switch ( pConfig->m_usedBrowser ) { default: viewvnd = new ViewWindow_QTextBrowser( m_tabWidget ); break; #if defined (USE_KDE) case Config::BROWSER_KHTMLPART: viewvnd = new ViewWindow_KHTMLPart( m_tabWidget ); break; #endif #if defined (QT_WEBKIT_LIB) case Config::BROWSER_QTWEBKIT: viewvnd = new ViewWindow_QtWebKit( m_tabWidget ); break; #endif } editFind->installEventFilter( this ); // Create the tab data structure TabData tabdata; tabdata.window = viewvnd; tabdata.action = new QAction( "window", this ); // temporary name; real name is set in setTabName tabdata.widget = viewvnd->getQWidget(); connect( tabdata.action, SIGNAL( triggered() ), this, SLOT( activateWindow() ) ); m_Windows.push_back( tabdata ); m_tabWidget->addTab( tabdata.widget, "" ); Q_ASSERT( m_Windows.size() == m_tabWidget->count() ); // Set active if it is the first tab if ( set_active || m_Windows.size() == 1 ) m_tabWidget->setCurrentWidget( tabdata.widget ); // Handle clicking on link in browser window connect( viewvnd->getQObject(), SIGNAL( linkClicked (const QString &, bool &) ), ::mainWindow, SLOT( activateLink(const QString &, bool &) ) ); // Set up the accelerator if we have room if ( m_Windows.size() < 10 ) tabdata.action->setShortcut( QKeySequence( i18n("Alt+%1").arg( m_Windows.size() ) ) ); // Add it to the "Windows" menu m_menuWindow->addAction( tabdata.action ); return viewvnd; } void ViewWindowMgr::closeAllWindows( ) { // No it++ - we removing the window by every closeWindow call while ( m_Windows.begin() != m_Windows.end() ) closeWindow( m_Windows.first().widget ); } void ViewWindowMgr::setTabName( ViewWindow * window ) { TabData * tab = findTab( window->getQWidget() ); if ( tab ) { QString title = window->getTitle(); // Trim too long string if ( title.length() > 25 ) title = title.left( 22 ) + "..."; m_tabWidget->setTabText( m_tabWidget->indexOf( window->getQWidget() ), title ); tab->action->setText( title ); updateCloseButtons(); } } void ViewWindowMgr::onCloseCurrentWindow( ) { // Do not allow to close the last window if ( m_Windows.size() == 1 ) return; TabData * tab = findTab( m_tabWidget->currentWidget() ); closeWindow( tab->widget ); } void ViewWindowMgr::onCloseWindow( int num ) { // Do not allow to close the last window if ( m_Windows.size() == 1 ) return; TabData * tab = findTab( m_tabWidget->widget( num )); if ( tab ) closeWindow( tab->widget ); } void ViewWindowMgr::closeWindow( QWidget * widget ) { WindowsIterator it; for ( it = m_Windows.begin(); it != m_Windows.end(); ++it ) if ( it->widget == widget ) break; if ( it == m_Windows.end() ) qFatal( "ViewWindowMgr::closeWindow called with unknown widget!" ); m_menuWindow->removeAction( it->action ); m_tabWidget->removeTab( m_tabWidget->indexOf( it->widget ) ); delete it->window; delete it->action; m_Windows.erase( it ); updateCloseButtons(); // Change the accelerators, as we might have removed the item in the middle int count = 1; for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end() && count < 10; ++it, count++ ) (*it).action->setShortcut( QKeySequence( i18n("Alt+%1").arg( count ) ) ); } void ViewWindowMgr::restoreSettings( const Settings::viewindow_saved_settings_t & settings ) { // Destroy automatically created tab closeWindow( m_Windows.first().widget ); for ( int i = 0; i < settings.size(); i++ ) { ViewWindow * window = addNewTab( false ); window->openUrl( settings[i].url ); // will call setTabName() window->setScrollbarPosition( settings[i].scroll_y ); window->setZoomFactor( settings[i].zoom ); } } void ViewWindowMgr::saveSettings( Settings::viewindow_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < m_tabWidget->count(); i++ ) { QWidget * p = m_tabWidget->widget( i ); TabData * tab = findTab( p ); if ( !tab ) abort(); settings.push_back( Settings::SavedViewWindow( tab->window->getOpenedPage(), tab->window->getScrollbarPosition(), tab->window->getZoomFactor()) ); } } void ViewWindowMgr::updateCloseButtons( ) { bool enabled = m_Windows.size() > 1; m_actionCloseWindow->setEnabled( enabled ); m_closeButton->setEnabled( enabled ); } void ViewWindowMgr::onTabChanged( int newtabIndex ) { if ( newtabIndex == -1 ) return; TabData * tab = findTab( m_tabWidget->widget( newtabIndex ) ); if ( tab ) { tab->window->updateNavigationToolbar(); mainWindow->browserChanged( tab->window ); tab->widget->setFocus(); } } void ViewWindowMgr::openNewTab() { ::mainWindow->openPage( current()->getOpenedPage(), MainWindow::OPF_NEW_TAB | MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); } void ViewWindowMgr::activateWindow() { QAction *action = qobject_cast< QAction * >(sender()); for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end(); ++it ) { if ( it->action != action ) continue; QWidget *widget = it->widget; m_tabWidget->setCurrentWidget(widget); break; } } ViewWindowMgr::TabData * ViewWindowMgr::findTab(QWidget * widget) { for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end(); ++it ) if ( it->widget == widget ) return (it.operator->()); return 0; } void ViewWindowMgr::setCurrentPage(int index) { m_tabWidget->setCurrentIndex( index ); } int ViewWindowMgr::currentPageIndex() const { return m_tabWidget->currentIndex(); } void ViewWindowMgr::indicateFindResultStatus( SearchResultStatus status ) { QPalette p = editFind->palette(); if ( status == SearchResultNotFound ) p.setColor( QPalette::Active, QPalette::Base, QColor(255, 102, 102) ); else p.setColor( QPalette::Active, QPalette::Base, Qt::white ); editFind->setPalette( p ); labelWrapped->setVisible( status == SearchResultFoundWrapped ); } void ViewWindowMgr::onActivateFind() { frameFind->show(); labelWrapped->setVisible( false ); editFind->setFocus( Qt::ShortcutFocusReason ); editFind->selectAll(); } void ViewWindowMgr::find() { int flags = 0; if ( checkCase->isChecked() ) flags |= ViewWindow::SEARCH_CASESENSITIVE; if ( checkWholeWords->isChecked() ) flags |= ViewWindow::SEARCH_WHOLEWORDS; current()->find( editFind->text(), flags ); if ( !frameFind->isVisible() ) frameFind->show(); } void ViewWindowMgr::editTextEdited(const QString &) { find(); } void ViewWindowMgr::onFindNext() { current()->onFindNext(); } void ViewWindowMgr::onFindPrevious() { current()->onFindPrevious(); } kchmviewer-5.3/src/viewwindow_qtwebkit.cpp0000644000175000001440000002501711513544622017654 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ // Only compile this file if Qt WEBKIT is present #if defined (QT_WEBKIT_LIB) #include #include #include #include #include #include #include "libchmurlfactory.h" #include "kde-qt.h" #include "config.h" #include "mainwindow.h" #include "viewwindowmgr.h" #include "viewwindow_qtwebkit.h" // // A network reply to emulate data transfer from CHM file // class KCHMNetworkReply : public QNetworkReply { public: KCHMNetworkReply( const QNetworkRequest &request, const QUrl &url ) { setRequest( request ); setOpenMode( QIODevice::ReadOnly ); m_data = loadResource( url ); m_length = m_data.length(); setHeader( QNetworkRequest::ContentLengthHeader, QByteArray::number(m_data.length()) ); QMetaObject::invokeMethod(this, "metaDataChanged", Qt::QueuedConnection); if ( m_length ) QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); } virtual qint64 bytesAvailable() const { return m_data.length() + QNetworkReply::bytesAvailable(); } virtual void abort() { } protected: virtual qint64 readData(char *buffer, qint64 maxlen) { qint64 len = qMin(qint64(m_data.length()), maxlen); if (len) { qMemCopy(buffer, m_data.constData(), len); m_data.remove(0, len); } return len; } QByteArray loadResource( const QUrl &url ) { QString data, file, path = url.toString( QUrl::StripTrailingSlash ); // Retreive the data from chm file LCHMFile * chm = ::mainWindow->chmFile(); // Does the file point to another URL? LCHMFile newfile; // Does the file have a file name, or just a path with ms-its prefix? if ( !path.contains( "::" ) ) { // Just the prefix, so strip it path.remove( 0, 7 ); } else if ( path.startsWith( "ms-its:", Qt::CaseInsensitive ) ) { // A broken? implementation inserts mandatory / path before the file name here. Remove it. if ( path[7] == '/' ) path.remove( 7, 1 ); if ( LCHMUrlFactory::isNewChmURL ( path, mainWindow->getOpenedFileName(), file, data) ) { if ( !newfile.loadFile( file ) ) { qWarning( "External resource %s cannot be loaded from file %s\n", qPrintable( data ), qPrintable( file ) ); return QByteArray(); } chm = &newfile; path = data; } } if ( !chm ) return QByteArray(); int pos = path.indexOf('#'); if ( pos != -1 ) path = path.left (pos); // To handle a single-image pages, we need to generate the HTML page to show // this image. We did it in KCHMViewWindow::handleStartPageAsImage; now we need // to generate the HTML page, and set it. if ( LCHMUrlFactory::handleFileType( path, data ) ) return qPrintable( data ); QByteArray buf; if ( path.endsWith( ".html", Qt::CaseInsensitive ) || path.endsWith( ".htm", Qt::CaseInsensitive ) ) { // If encoding autodetection is enabled, decode it. Otherwise pass as binary. if ( pConfig->m_advAutodetectEncoding ) { if ( !chm->getFileContentAsString( &data, path ) ) qWarning( "Could not resolve file %s\n", qPrintable( path ) ); setHeader( QNetworkRequest::ContentTypeHeader, "text/html" ); buf = qPrintable( data ); } else { if ( !chm->getFileContentAsBinary( &buf, path ) ) qWarning( "Could not resolve file %s\n", qPrintable( path ) ); setHeader( QNetworkRequest::ContentTypeHeader, "text/html" ); } } else { QString fpath = ViewWindow_QtWebKit::decodeUrl( path ); if ( !chm->getFileContentAsBinary( &buf, fpath ) ) qWarning( "Could not resolve file %s\n", qPrintable( path ) ); setHeader( QNetworkRequest::ContentTypeHeader, "binary/octet" ); } return buf; } private: QByteArray m_data; qint64 m_length; }; // // A network manager to emulate data transfer from CHM file // class KCHMNetworkAccessManager : public QNetworkAccessManager { public: KCHMNetworkAccessManager( QObject *parent ) : QNetworkAccessManager(parent) { } protected: virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0) { const QString scheme = request.url().scheme(); if ( scheme == QLatin1String("ms-its") ) return new KCHMNetworkReply( request, request.url() ); return QNetworkAccessManager::createRequest(op, request, outgoingData); } }; // // Webkit browser // ViewWindow_QtWebKit::ViewWindow_QtWebKit( ViewWindowTabs * parent ) : QWebView ( parent ), ViewWindow ( parent ) { m_zoomfactor = 1; invalidate(); page()->setNetworkAccessManager(new KCHMNetworkAccessManager(this)); page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); connect( this, SIGNAL( linkClicked ( const QUrl& ) ), this, SLOT( onAnchorClicked ( const QUrl& ) ) ); } ViewWindow_QtWebKit::~ViewWindow_QtWebKit() { } bool ViewWindow_QtWebKit::openPage (const QString& url) { if ( m_allowSourceChange ) { // Do URI decoding, qtextbrowser does stupid job. QString fixedname = decodeUrl( url ); if ( !fixedname.startsWith( "ms-its:", Qt::CaseInsensitive ) ) fixedname = "ms-its:" + fixedname; load( fixedname ); } else m_allowSourceChange = true; return true; } void ViewWindow_QtWebKit::setZoomFactor( int zoom ) { m_zoomfactor = zoom; setTextSizeMultiplier ( 1.0 + m_zoomfactor * 0.5 ); } void ViewWindow_QtWebKit::invalidate( ) { m_zoomfactor = 1; m_allowSourceChange = true; setTextSizeMultiplier( 1.0 ); reload(); ViewWindow::invalidate( ); } int ViewWindow_QtWebKit::getScrollbarPosition( ) { return page()->currentFrame()->scrollBarValue( Qt::Vertical ); } void ViewWindow_QtWebKit::setScrollbarPosition( int pos ) { page()->currentFrame()->setScrollBarValue( Qt::Vertical, pos ); } void ViewWindow_QtWebKit::addZoomFactor( int value ) { setZoomFactor( m_zoomfactor + value ); } void ViewWindow_QtWebKit::onAnchorClicked(const QUrl & url) { emit linkClicked( url.path(), m_allowSourceChange ); } bool ViewWindow_QtWebKit::printCurrentPage( ) { QPrinter printer( QPrinter::HighResolution ); QPrintDialog dlg( &printer, this ); if ( dlg.exec() != QDialog::Accepted ) { ::mainWindow->showInStatusBar( i18n( "Printing aborted") ); return false; } print( &printer ); ::mainWindow->showInStatusBar( i18n( "Printing finished") ); return true; } void ViewWindow_QtWebKit::clipSelectAll( ) { QMessageBox::information( 0, "Not implemented", "Not implemented" ); // selectAll(); } void ViewWindow_QtWebKit::clipCopy( ) { triggerPageAction( QWebPage::Copy ); } // Shamelessly stolen from Qt QString ViewWindow_QtWebKit::decodeUrl( const QString &input ) { QString temp; int i = 0; int len = input.length(); int a, b; QChar c; while (i < len) { c = input[i]; if (c == '%' && i + 2 < len) { a = input[++i].unicode(); b = input[++i].unicode(); if (a >= '0' && a <= '9') a -= '0'; else if (a >= 'a' && a <= 'f') a = a - 'a' + 10; else if (a >= 'A' && a <= 'F') a = a - 'A' + 10; if (b >= '0' && b <= '9') b -= '0'; else if (b >= 'a' && b <= 'f') b = b - 'a' + 10; else if (b >= 'A' && b <= 'F') b = b - 'A' + 10; temp.append( (QChar)((a << 4) | b ) ); } else { temp.append( c ); } ++i; } return temp; } QMenu * ViewWindow_QtWebKit::createPopupMenu( const QPoint & pos ) { QMenu * menu = getContextMenu( anchorAt( pos ), this ); menu->exec( pos ); return 0; } void ViewWindow_QtWebKit::find(const QString & text, int flags) { m_searchText = text; m_flags = flags; find( false, false ); } void ViewWindow_QtWebKit::onFindNext() { find( true, false ); } void ViewWindow_QtWebKit::onFindPrevious() { find( false, true ); } void ViewWindow_QtWebKit::find( bool , bool backward ) { QWebPage::FindFlags flags = QWebPage::FindWrapsAroundDocument; if ( backward ) flags |= QWebPage::FindBackward; if ( m_flags & SEARCH_CASESENSITIVE ) flags |= QWebPage::FindCaseSensitively; if ( findText( m_searchText, flags ) ) ::mainWindow->viewWindowMgr()->indicateFindResultStatus( ViewWindowMgr::SearchResultFound ); else ::mainWindow->viewWindowMgr()->indicateFindResultStatus( ViewWindowMgr::SearchResultNotFound ); } void ViewWindow_QtWebKit::contextMenuEvent(QContextMenuEvent * e) { // From Qt Assistant QMenu *m = new QMenu(0); QString link = anchorAt( e->pos() ); if ( !link.isEmpty() ) { m->addAction( i18n("Open Link in a new tab\tShift+LMB"), ::mainWindow, SLOT( onOpenPageInNewTab() ) ); m->addAction( i18n("Open Link in a new background tab\tCtrl+LMB"), ::mainWindow, SLOT( onOpenPageInNewBackgroundTab() ) ); m->addSeparator(); setTabKeeper( link ); } ::mainWindow->setupPopupMenu( m ); m->exec( e->globalPos() ); delete m; } QString ViewWindow_QtWebKit::anchorAt(const QPoint & pos) { QWebHitTestResult res = page()->currentFrame()->hitTestContent( pos ); if ( !res.linkUrl().isValid() ) return QString::null; return res.linkUrl().path(); } void ViewWindow_QtWebKit::mouseReleaseEvent ( QMouseEvent * event ) { if ( event->button() == Qt::MidButton ) { QString link = anchorAt( event->pos() ); if ( !link.isEmpty() ) { setTabKeeper( link ); ::mainWindow->onOpenPageInNewBackgroundTab(); return; } } QWebView::mouseReleaseEvent( event ); } #endif // #if defined (QT_WEBKIT_LIB) kchmviewer-5.3/src/kchmviewerapp.cpp0000644000175000001440000000206611513541304016376 0ustar timusers#include "kchmviewerapp.h" #include "mainwindow.h" KchmviewerApp::KchmviewerApp(int &argc, char **argv, int version) : QApplication(argc, argv, version) { } KchmviewerApp::~KchmviewerApp() { } bool KchmviewerApp::event(QEvent* ev) { if (ev->type() == QEvent::FileOpen) { m_nResend = 0; m_filePath = static_cast(ev)->file(); onTimer(); return true; } return QApplication::event(ev); } void KchmviewerApp::onTimer() { MainWindow *main; foreach (QWidget *widget, QApplication::topLevelWidgets()) { main = dynamic_cast(widget); if (main != 0) { break; } } if (main == 0) { qWarning("resending %s", m_filePath.toStdString().c_str()); if (m_nResend >= 30) { qWarning("aborting loading of %s", m_filePath.toStdString().c_str()); return; } QTimer::singleShot(250, this, SLOT(onTimer())); ++m_nResend; return; } main->loadFile(m_filePath); } kchmviewer-5.3/src/mainwindow.cpp0000644000175000001440000010747611365452772015737 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include #include "kde-qt.h" #include "libchmfile.h" #include "libchmfileimpl.h" #include "libchmurlfactory.h" #include "mainwindow.h" #include "config.h" #include "treeviewitem.h" #include "settings.h" #include "viewwindow.h" #include "viewwindowmgr.h" #include "keyeventfilter.h" #include "dialog_setup.h" #include "recentfiles.h" #include "navigationpanel.h" #include "toolbarmanager.h" #include "version.h" #include "ui_dialog_about.h" MainWindow::MainWindow() : QMainWindow ( 0 ), Ui::MainWindow() { const unsigned int WND_X_SIZE = 900; const unsigned int WND_Y_SIZE = 700; const unsigned int SPLT_X_SIZE = 300; // Delete the pointer when the window is closed setAttribute( Qt::WA_DeleteOnClose ); // UIC stuff setupUi( this ); // Set up layout direction if ( pConfig->m_advLayoutDirectionRL ) qApp->setLayoutDirection( Qt::RightToLeft ); else qApp->setLayoutDirection( Qt::LeftToRight ); m_chmFile = 0; m_autoteststate = STATE_OFF; m_currentSettings = new Settings(); // Create the view window, which is a central widget m_viewWindowMgr = new ViewWindowMgr( this ); setCentralWidget( m_viewWindowMgr ); // Create a navigation panel m_navPanel = new NavigationPanel( this ); // Add navigation dock m_navPanel->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); addDockWidget( Qt::LeftDockWidgetArea, m_navPanel, Qt::Vertical ); // Set up toolbar manager m_toolbarMgr = new ToolbarManager( this ); m_toolbarMgr->queryAvailableActions( this ); m_toolbarMgr->addManaged( mainToolbar ); m_toolbarMgr->addManaged( navToolbar ); m_toolbarMgr->addManaged( viewToolbar ); m_toolbarMgr->load(); // Set up other things setupActions(); updateToolbars(); setupLangEncodingMenu(); // Resize main window and dock resize( WND_X_SIZE, WND_Y_SIZE ); m_navPanel->resize( SPLT_X_SIZE, m_navPanel->height() ); statusBar()->show(); qApp->setWindowIcon( QPixmap(":/images/kchmviewer.png") ); m_recentFiles = new RecentFiles( menu_File, file_exit_action, pConfig->m_numOfRecentFiles ); connect( m_recentFiles, SIGNAL(openRecentFile(QString)), this, SLOT(actionOpenRecentFile(QString)) ); // Basically disable everything updateActions(); // Check for a new version if needed if ( pConfig->m_advCheckNewVersion ) { QSettings settings; if ( settings.contains( "advanced/lastupdate" ) ) { QDateTime lastupdate = settings.value( "advanced/lastupdate" ).toDateTime(); if ( lastupdate.secsTo( QDateTime::currentDateTime() ) >= 86400 * 7 ) // seven days checkNewVersionAvailable(); } } QTimer::singleShot( 0, this, SLOT( firstShow()) ); } MainWindow::~MainWindow() { // Temporary files cleanup while ( !m_tempFileKeeper.isEmpty() ) delete m_tempFileKeeper.takeFirst(); } void MainWindow::checkNewVersionAvailable() { // Create a New version available object if necessary. This object will auto-delete itself CheckNewVersion * pNewVer = new CheckNewVersion(); connect( pNewVer, SIGNAL(error(int)), this, SLOT(newVerAvailError(int)) ); connect( pNewVer, SIGNAL(newVersionAvailable( NewVersionMetaMap )), this, SLOT(newVerAvailable(NewVersionMetaMap)) ); pNewVer->setUrl( "http://www.kchmviewer.net/latestversion.txt" ); pNewVer->start(); } bool MainWindow::loadFile ( const QString &loadFileName, bool call_open_page ) { QString fileName = loadFileName; // Strip file:// prefix if any if ( fileName.startsWith( "file://" ) ) fileName.remove( 0, 7 ); LCHMFile * new_chmfile = new LCHMFile(); if ( new_chmfile->loadFile( fileName ) ) { // The new file is opened, so we can close the old one if ( m_chmFile ) { closeFile( ); delete m_chmFile; } m_chmFile = new_chmfile; updateActions(); // Show current encoding in status bar showInStatusBar( i18n("Detected file encoding: %1 ( %2 )") .arg( m_chmFile->currentEncoding()->family) .arg( m_chmFile->currentEncoding()->qtcodec) ); // Make the file name absolute; we'll need it later QDir qd; qd.setPath (fileName); m_chmFilename = qd.absolutePath(); // Qt's 'dirname' does not work well QFileInfo qf ( m_chmFilename ); pConfig->m_lastOpenedDir = qf.dir().path(); m_chmFileBasename = qf.fileName(); // Apply settings to the navigation dock m_navPanel->updateTabs( m_chmFile ); // and to navigation buttons nav_actionPreviousPage->setEnabled( m_chmFile->hasTableOfContents() ); nav_actionNextPageToc->setEnabled( m_chmFile->hasTableOfContents() ); navSetBackEnabled( false ); navSetForwardEnabled( false ); m_viewWindowMgr->invalidate(); refreshCurrentBrowser(); if ( m_currentSettings->loadSettings (fileName) ) { const LCHMTextEncoding * encoding = m_chmFile->impl()->lookupByQtCodec( m_currentSettings->m_activeEncoding ); if ( encoding ) setTextEncoding( encoding ); m_navPanel->applySettings( m_currentSettings ); if ( call_open_page ) { m_viewWindowMgr->restoreSettings( m_currentSettings->m_viewwindows ); m_viewWindowMgr->setCurrentPage( m_currentSettings->m_activetabwindow ); if ( m_chmFile->hasTableOfContents() ) actionLocateInContentsTab(); } // Restore the main window size resize( m_currentSettings->m_window_size_x, m_currentSettings->m_window_size_y ); m_navPanel->resize( m_currentSettings->m_window_size_splitter, m_navPanel->height() ); m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); } else { m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); setTextEncoding( m_chmFile->currentEncoding() ); if ( call_open_page ) openPage( m_chmFile->homeUrl() ); } m_recentFiles->setCurrentFile( m_chmFilename ); return true; } else { QMessageBox mbox( i18n("%1 - failed to load the chm file") . arg(QCoreApplication::applicationName() ), i18n("Unable to load the chm file %1") . arg(fileName), QMessageBox::Critical, QMessageBox::Ok, Qt::NoButton, Qt::NoButton); mbox.exec(); statusBar()->showMessage( i18n("Could not load file %1").arg(fileName), 2000 ); delete new_chmfile; return false; } } void MainWindow::refreshCurrentBrowser( ) { QString title = m_chmFile->title(); if ( title.isEmpty() ) title = QCoreApplication::applicationName(); // KDE adds application name automatically, so we don't need it here #if !defined (USE_KDE) else title = (QString) QCoreApplication::applicationName() + " - " + title; #endif setWindowTitle( title ); currentBrowser()->invalidate(); m_navPanel->refresh(); } void MainWindow::activateLink ( const QString & link, bool& follow_link ) { if ( link.isEmpty() ) return; if ( gKeyEventFilter.isShiftPressed() ) { openPage( link, OPF_NEW_TAB | OPF_CONTENT_TREE ); follow_link = false; } else if ( gKeyEventFilter.isCtrlPressed() ) { openPage( link, OPF_NEW_TAB | OPF_BACKGROUND ); follow_link = false; } else // If the openPage failed, we do not need to follow the link. follow_link = openPage( link, OPF_CONTENT_TREE | OPF_ADD2HISTORY ); } bool MainWindow::openPage( const QString & srcurl, unsigned int flags ) { QString otherlink, otherfile, url = srcurl; if ( url == "/" ) url = m_chmFile->homeUrl(); if ( LCHMUrlFactory::isRemoteURL (url, otherlink) ) { switch ( pConfig->m_onExternalLinkClick ) { case Config::ACTION_DONT_OPEN: break; case Config::ACTION_ASK_USER: if ( QMessageBox::question(this, i18n("%1 - remote link clicked - %2") . arg(QCoreApplication::applicationName()) . arg(otherlink), i18n("A remote link %1 will start the external program to open it.\n\nDo you want to continue?").arg( url ), i18n("&Yes"), i18n("&No"), QString::null, 0, 1 ) ) return false; // no break! should continue to open. case Config::ACTION_ALWAYS_OPEN: #if defined (USE_KDE) new KRun ( url, 0 ); #else QDesktopServices::openUrl( url ); #endif break; } return false; // do not change the current page. } // Filter the URLs which do not need to be opened at all by Qt version if ( LCHMUrlFactory::isJavascriptURL (url) ) { QMessageBox::information( this, i18n( "%1 - JavsScript link clicked") . arg(QCoreApplication::applicationName()), i18n( "You have clicked a JavaScript link.\nTo prevent security-related issues JavaScript URLs are disabled in CHM files.") ); return false; } if ( LCHMUrlFactory::isNewChmURL (url, getOpenedFileName(), otherfile, otherlink) ) { if ( otherfile != m_chmFilename ) { if ( QMessageBox::question( this, i18n( "%1 - link to a new CHM file clicked"). arg(QCoreApplication::applicationName()), i18n( "You have clicked a link, which leads to a new CHM file %1.\nThe current file will be closed.\n\nDo you want to continue?").arg( otherfile ), i18n( "&Yes" ), i18n( "&No" ), QString::null, 0, 1 ) ) return false; // Because chm file always contain relative link, and current filename is not changed, // we need to form a new path QStringList event_args; event_args.push_back( otherfile ); event_args.push_back( otherlink ); // url qApp->postEvent( this, new UserEvent( "loadAndOpen", event_args ) ); return false; } else url = otherlink; } ViewWindow * vwnd = currentBrowser(); if ( flags & OPF_NEW_TAB ) vwnd = m_viewWindowMgr->addNewTab( !(flags & OPF_BACKGROUND) ); // Store current page and position to add it to history if we change it int hist_scrollpos = currentBrowser()->getScrollbarPosition(); QString hist_url = currentBrowser()->getOpenedPage(); if ( vwnd->openUrl (url) ) { // Open all the tree items to show current item (if needed) if ( (flags & OPF_CONTENT_TREE) != 0 ) m_navPanel->findUrlInContents( url ); if ( flags & OPF_ADD2HISTORY ) currentBrowser()->addNavigationHistory( hist_url, hist_scrollpos ); } return true; } void MainWindow::firstShow() { if ( !parseCmdLineArgs( ) ) { if ( pConfig->m_startupMode == Config::STARTUP_LOAD_LAST_FILE && !m_recentFiles->latestFile().isEmpty() ) { loadFile( m_recentFiles->latestFile() ); return; } if ( pConfig->m_startupMode == Config::STARTUP_POPUP_OPENFILE ) actionOpenFile(); } } void MainWindow::setTextEncoding( const LCHMTextEncoding * encoding ) { m_chmFile->setCurrentEncoding( encoding ); // Find the appropriate encoding item in "Set encodings" menu const QList encodings = m_encodingActions->actions(); for ( QList::const_iterator it = encodings.begin(); it != encodings.end(); ++it ) { const LCHMTextEncoding * enc = (const LCHMTextEncoding *) (*it)->data().value< void* > (); if ( !strcmp( enc->qtcodec, encoding->qtcodec ) ) { if ( !(*it)->isChecked() ) (*it)->setChecked( true ); break; } } // Because updateView() will call view->invalidate(), which clears the view->getOpenedPage(), // we have to make a copy of it. QString url = currentBrowser()->getOpenedPage(); // Regenerate the content and index trees refreshCurrentBrowser(); currentBrowser()->openUrl( url ); } void MainWindow::closeFile( ) { // Prepare the settings if ( pConfig->m_HistoryStoreExtra ) { m_currentSettings->m_activeEncoding = m_chmFile->currentEncoding()->qtcodec; m_currentSettings->m_activetabwindow = m_viewWindowMgr->currentPageIndex( ); m_currentSettings->m_window_size_x = width(); m_currentSettings->m_window_size_y = height(); m_currentSettings->m_window_size_splitter = m_navPanel->width(); m_navPanel->getSettings( m_currentSettings ); m_viewWindowMgr->saveSettings( m_currentSettings->m_viewwindows ); m_currentSettings->saveSettings( ); } pConfig->save(); } void MainWindow::closeEvent ( QCloseEvent * e ) { // Save the settings if we have something opened if ( m_chmFile ) { closeFile( ); delete m_chmFile; m_chmFile = 0; } // Save toolbars m_toolbarMgr->save(); QMainWindow::closeEvent ( e ); } bool MainWindow::parseCmdLineArgs( ) { QString filename = QString::null, search_query = QString::null; QString search_index = QString::null, search_bookmark = QString::null, search_toc = QString::null; bool do_autotest = false; #if defined (USE_KDE) KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); if ( args->isSet("autotestmode") || args->isSet("shortautotestmode") ) do_autotest = true; search_query = args->getOption ("search"); search_index = args->getOption ("sindex"); search_toc = args->getOption ("stoc"); if ( args->count() > 0 ) filename = args->arg(0); #else // argv[0] in Qt is still a program name for ( int i = 1; i < qApp->argc(); i++ ) { if ( !strcmp (qApp->argv()[i], "-h") || !strcmp (qApp->argv()[i], "--help") ) { fprintf (stderr, "Usage: %s [options] [chmfile]\n" " The following options supported:\n" " --search specifies the search query to search, and activate the first entry if found\n" " --sindex specifies the word to find in index, and activate if found\n" " --stoc specifies the word(s) to find in TOC, and activate if found. Wildcards allowed\n", qApp->argv()[0] ); exit (1); } else if ( !strcmp (qApp->argv()[i], "--autotestmode") || !strcmp (qApp->argv()[i], "--shortautotestmode") ) do_autotest = true; else if ( !strcmp (qApp->argv()[i], "--search") ) search_query = qApp->argv()[++i]; else if ( !strcmp (qApp->argv()[i], "--sindex") ) search_index = qApp->argv()[++i]; else if ( !strcmp (qApp->argv()[i], "--stoc") ) search_toc = qApp->argv()[++i]; else filename = QString::fromLocal8Bit( qApp->argv()[i] ); } #endif if ( !filename.isEmpty() ) { if ( !loadFile( filename ) ) return true; // skip the latest checks, but do not exit from the program if ( !search_index.isEmpty() ) { QStringList event_args; event_args.push_back( search_index ); qApp->postEvent( this, new UserEvent( "findInIndex", event_args ) ); } if ( !search_query.isEmpty() ) { QStringList event_args; event_args.push_back( search_query ); qApp->postEvent( this, new UserEvent( "searchQuery", event_args ) ); } if ( !search_toc.isEmpty() ) { QStringList event_args; event_args.push_back( search_toc ); qApp->postEvent( this, new UserEvent( "findInToc", event_args ) ); } if ( do_autotest ) { if ( filename.isEmpty() ) qFatal ("Could not use Auto Test mode without a chm file!"); m_autoteststate = STATE_INITIAL; showMinimized (); runAutoTest(); } return true; } return false; } ViewWindow * MainWindow::currentBrowser( ) const { return m_viewWindowMgr->current(); } void MainWindow::onOpenPageInNewTab( ) { openPage( currentBrowser()->getNewTabLink(), OPF_NEW_TAB | OPF_CONTENT_TREE ); } void MainWindow::onOpenPageInNewBackgroundTab( ) { openPage( currentBrowser()->getNewTabLink(), OPF_NEW_TAB | OPF_BACKGROUND ); } void MainWindow::browserChanged( ViewWindow * newbrowser ) { m_navPanel->findUrlInContents( newbrowser->getOpenedPage() ); } bool MainWindow::event( QEvent * e ) { if ( e->type() == QEvent::User ) return handleUserEvent( (UserEvent*) e ); return QMainWindow::event( e ); } bool MainWindow::handleUserEvent( const UserEvent * event ) { if ( event->m_action == "loadAndOpen" ) { if ( event->m_args.size() != 1 && event->m_args.size() != 2 ) qFatal("handleUserEvent: event loadAndOpen must receive 1 or 2 args"); QString chmfile = event->m_args[0]; QString openurl = event->m_args.size() > 1 ? event->m_args[1] : "/"; return loadFile( chmfile, false ) && openPage( openurl ); } else if ( event->m_action == "openPage" ) { if ( event->m_args.size() != 1 ) qFatal("handleUserEvent: event openPage must receive 1 arg"); return openPage( event->m_args[0] ); } else if ( event->m_action == "findInIndex" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event findInIndex must receive 1 arg" ); if ( !hasIndex() ) return false; actionSwitchToIndexTab(); m_navPanel->findInIndex( event->m_args[0] ); return true; } else if ( event->m_action == "findInToc" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event findInToc must receive 1 arg" ); if ( !hasTableOfContents() ) return false; actionSwitchToContentTab(); m_navPanel->findTextInContents( event->m_args[0] ); return true; } else if ( event->m_action == "searchQuery" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event searchQuery must receive 1 arg" ); actionSwitchToSearchTab(); m_navPanel->executeQueryInSearch( event->m_args[0] ); return true; } else qWarning( "Unknown user event received: %s", qPrintable( event->m_action ) ); return false; } void MainWindow::runAutoTest() { switch (m_autoteststate) { case STATE_INITIAL: m_autoteststate = STATE_OPEN_INDEX; QTimer::singleShot (500, this, SLOT(runAutoTest()) ); break; // allow to finish the initialization sequence case STATE_OPEN_INDEX: if ( hasIndex() ) m_navPanel->setActive( NavigationPanel::TAB_INDEX ); m_autoteststate = STATE_SHUTDOWN; QTimer::singleShot (500, this, SLOT(runAutoTest()) ); break; case STATE_SHUTDOWN: qApp->quit(); break; default: break; } } void MainWindow::showInStatusBar(const QString & text) { statusBar()->showMessage( text, 2000 ); } void MainWindow::actionNavigateBack() { currentBrowser()->navigateBack(); } void MainWindow::actionNavigateForward() { currentBrowser()->navigateForward(); } void MainWindow::actionNavigateHome() { currentBrowser()->navigateHome(); } void MainWindow::actionOpenFile() { #if defined (USE_KDE) QString fn = KFileDialog::getOpenFileName( pConfig->m_lastOpenedDir, i18n("*.chm|Compressed Help Manual (*.chm)"), this); #else QString fn = QFileDialog::getOpenFileName( this, i18n( "Open a chm file"), pConfig->m_lastOpenedDir, i18n("Compressed Help Manual (*.chm)"), 0, QFileDialog::DontResolveSymlinks ); #endif if ( !fn.isEmpty() ) loadFile( fn ); } void MainWindow::actionPrint() { currentBrowser()->printCurrentPage(); } void MainWindow::actionEditCopy() { currentBrowser()->clipCopy(); } void MainWindow::actionEditSelectAll() { currentBrowser()->clipSelectAll(); } void MainWindow::actionFindInPage() { m_viewWindowMgr->onActivateFind(); } void MainWindow::actionChangeSettings() { DialogSetup dlg ( this ); dlg.exec(); } void MainWindow::actionExtractCHM() { QStringList files; #if defined (USE_KDE) QString outdir = KFileDialog::getExistingDirectory ( KUrl(), this, i18n("Choose a directory to store CHM content") ); #else QString outdir = QFileDialog::getExistingDirectory ( this, i18n("Choose a directory to store CHM content"), QString::null, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); #endif if ( outdir.isEmpty() ) return; outdir += "/"; // Enumerate all the files in archive if ( !m_chmFile || !m_chmFile->enumerateFiles( &files ) ) return; KQProgressModalDialog progress( i18n("Extracting CHM content"), i18n("Extracting files..."), i18n("Abort"), files.size(), this ); for ( int i = 0; i < files.size(); i++ ) { progress.setValue( i ); if ( (i % 3) == 0 ) { qApp->processEvents(); if ( progress.wasCancelled() ) break; } // Extract the file QByteArray buf; if ( m_chmFile->getFileContentAsBinary( &buf, files[i] ) ) { // Split filename to get the list of subdirectories QStringList dirs = files[i].split( '/' ); // Walk through the list of subdirectories, and create them if needed // dirlevel is used to detect extra .. and prevent overwriting files // outside the directory (like creating the file images/../../../../../etc/passwd int i, dirlevel = 0; QStringList dirlist; for ( i = 0; i < dirs.size() - 1; i++ ) { // Skip .. which lead too far above if ( dirs[i] == ".." ) { if ( dirlevel > 0 ) { dirlevel--; dirlist.pop_back(); } } else { dirlist.push_back( dirs[i] ); QDir dir ( outdir + dirlist.join( "/" ) ); if ( !dir.exists() ) { if ( !dir.mkdir( dir.path() ) ) qWarning( "Could not create subdir %s\n", qPrintable( dir.path() ) ); } } } QString filename = outdir + dirlist.join( "/" ) + "/" + dirs[i]; QFile wf( filename ); if ( !wf.open( QIODevice::WriteOnly ) ) { qWarning( "Could not write file %s\n", qPrintable( filename ) ); continue; } wf. write( buf ); wf.close(); } else qWarning( "Could not get file %s\n", qPrintable( files[i] ) ); } progress.setValue( files.size() ); } void MainWindow::actionFontSizeIncrease() { currentBrowser()->addZoomFactor( 1 ); } void MainWindow::actionFontSizeDecrease() { currentBrowser()->addZoomFactor( -1 ); } void MainWindow::actionViewHTMLsource() { QString text; if ( !m_chmFile->getFileContentAsString( &text, currentBrowser()->getOpenedPage() ) || text.isEmpty() ) return; if ( pConfig->m_advUseInternalEditor ) { QTextEdit * editor = new QTextEdit ( 0 ); editor->setPlainText( text ); editor->setWindowTitle( QString("HTML source of %1") .arg( currentBrowser()->getOpenedPage() )); editor->resize( 800, 600 ); editor->show(); } else { QTemporaryFile * tf = new QTemporaryFile(); m_tempFileKeeper.append( tf ); if ( !tf->open() ) { qWarning("Cannot open created QTemporaryFile: something is wrong with your system"); return; } tf->write( text.toUtf8() ); tf->seek( 0 ); // Run the external editor QStringList arguments; arguments.push_back( tf->fileName() ); if ( !QProcess::startDetached( pConfig->m_advExternalEditorPath, arguments, "." ) ) { QMessageBox::warning( 0, "Cannot start external editor", tr("Cannot start external editor %1.\nMake sure the path is absolute!") .arg( pConfig->m_advExternalEditorPath ) ); delete m_tempFileKeeper.takeLast(); } } } void MainWindow::actionToggleFullScreen() { bool fullscreen = view_Toggle_fullscreen_action->isChecked(); if ( fullscreen ) { if ( !isFullScreen() ) { showFullScreen (); // Hiding menu bar disables menu actions. Probably a bug in Qt. //menuBar()->hide(); statusBar()->hide(); } } else { if ( isFullScreen() ) { showNormal(); menuBar()->show(); statusBar()->show(); } } } void MainWindow::actionShowHideNavigator( bool toggle ) { if ( toggle ) m_navPanel->show(); else m_navPanel->hide(); } void MainWindow::navigatorVisibilityChanged( bool visible ) { view_Show_navigator_window->setChecked( visible ); } void MainWindow::actionLocateInContentsTab() { if ( m_navPanel->findUrlInContents( currentBrowser()->getOpenedPage() ) ) m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); else statusBar()->showMessage( i18n( "Could not locate opened topic in content window"), 2000 ); } void MainWindow::actionAboutApp() { QString abouttext = i18n( "kchmviewer version %1.%2

    " "Copyright (C) George Yunaev, 2004-2010
    " "gyunaev@ulduzsoft.com
    " "http://www.kchmviewer.net

    " "Licensed under GNU GPL license version 3." ) .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR); // It is quite funny that the argument order differs #if defined (USE_KDE) KMessageBox::about( this, abouttext, i18n("About kchmviewer") ); #else QDialog dlg; Ui::DialogAbout ui; ui.setupUi( &dlg ); ui.lblAbout->setText( abouttext ); dlg.exec(); #endif } void MainWindow::actionAboutQt() { QMessageBox::aboutQt( this, QCoreApplication::applicationName() ); } void MainWindow::actionSwitchToContentTab() { m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); } void MainWindow::actionSwitchToIndexTab() { m_navPanel->setActive( NavigationPanel::TAB_INDEX ); } void MainWindow::actionSwitchToSearchTab() { m_navPanel->setActive( NavigationPanel::TAB_SEARCH ); } void MainWindow::actionSwitchToBookmarkTab() { m_navPanel->setActive( NavigationPanel::TAB_BOOKMARK ); } void MainWindow::setupActions() { // File menu connect( file_Open_action, SIGNAL( triggered() ), this, SLOT( actionOpenFile() ) ); connect( file_Print_action, SIGNAL( triggered() ), this, SLOT( actionPrint() ) ); connect( file_ExtractCHMAction, SIGNAL( triggered() ), this, SLOT( actionExtractCHM() ) ); connect( file_exit_action, SIGNAL( triggered() ), qApp, SLOT( closeAllWindows() ) ); // Edit connect( edit_Copy_action, SIGNAL( triggered() ), this, SLOT( actionEditCopy() ) ); connect( edit_SelectAll_action, SIGNAL( triggered() ), this, SLOT( actionEditSelectAll() ) ); connect( edit_FindAction, SIGNAL( triggered() ), this, SLOT( actionFindInPage() ) ); // Bookmarks connect( bookmark_AddAction, SIGNAL( triggered() ), m_navPanel, SLOT( addBookmark()) ); // View connect( view_Increase_font_size_action, SIGNAL( triggered() ), this, SLOT( actionFontSizeIncrease() ) ); connect( view_Decrease_font_size_action, SIGNAL( triggered() ), this, SLOT( actionFontSizeDecrease() ) ); connect( view_View_HTML_source_action, SIGNAL( triggered() ), this, SLOT( actionViewHTMLsource() ) ); connect( view_Toggle_fullscreen_action, SIGNAL( triggered() ), this, SLOT( actionToggleFullScreen() ) ); connect( view_Show_navigator_window, SIGNAL( triggered(bool) ), this, SLOT( actionShowHideNavigator(bool) ) ); connect( view_Locate_in_contents_action, SIGNAL( triggered() ), this, SLOT( actionLocateInContentsTab() ) ); // Settings connect( settings_SettingsAction, SIGNAL( triggered() ), this, SLOT( actionChangeSettings() ) ); connect( actionEdit_toolbars, SIGNAL( triggered() ), this, SLOT( actionEditToolbars() ) ); connect( actionCheck_for_updates, SIGNAL(triggered()), this, SLOT(checkNewVersionAvailable()) ); // Help menu connect( actionAbout_kchmviewer, SIGNAL(triggered()), this, SLOT(actionAboutApp()) ); connect( actionAbout_Qt, SIGNAL(triggered()), this, SLOT(actionAboutQt()) ); menuHelp->addSeparator(); // Navigation toolbar connect( nav_action_Back, SIGNAL( triggered() ), this, SLOT( actionNavigateBack() ) ); connect( nav_actionForward, SIGNAL( triggered() ), this, SLOT( actionNavigateForward() ) ); connect( nav_actionHome, SIGNAL( triggered() ), this, SLOT( actionNavigateHome() ) ); connect( nav_actionPreviousPage, SIGNAL( triggered() ), m_navPanel, SLOT( showPrevInToc() ) ); connect( nav_actionNextPageToc, SIGNAL( triggered() ), m_navPanel, SLOT( showNextInToc() ) ); // m_viewWindowMgr fills and maintains 'Window' menu m_viewWindowMgr->createMenu( this, menu_Windows, action_Close_window ); m_navPanel->setBookmarkMenu( menu_Bookmarks ); // Close Window goes directly to the window manager connect( action_Close_window, SIGNAL( triggered() ), m_viewWindowMgr, SLOT( onCloseCurrentWindow() ) ); // Navigation panel visibility connect( m_navPanel, SIGNAL(visibilityChanged(bool)), this, SLOT( navigatorVisibilityChanged(bool) ) ); // "What's this" action QAction * whatsthis = QWhatsThis::createAction( this ); menuHelp->addAction( whatsthis ); viewToolbar->addAction( whatsthis ); // Tab switching actions (void) new QShortcut( QKeySequence( i18n("Ctrl+1") ), this, SLOT( actionSwitchToContentTab() ), SLOT( actionSwitchToContentTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+2") ), this, SLOT( actionSwitchToIndexTab() ), SLOT( actionSwitchToIndexTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+3") ), this, SLOT( actionSwitchToSearchTab() ), SLOT( actionSwitchToSearchTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+4") ), this, SLOT( actionSwitchToBookmarkTab() ), SLOT( actionSwitchToBookmarkTab() ), Qt::ApplicationShortcut ); // Find (/) global shortcut (void) new QShortcut( QKeySequence( i18n("/") ), m_viewWindowMgr, SLOT( onActivateFind() ), SLOT( onActivateFind() ), Qt::ApplicationShortcut ); // Find next global shortcut (void) new QShortcut( QKeySequence( i18n("F3") ), m_viewWindowMgr, SLOT( onFindNext() ), SLOT( onFindNext() ), Qt::ApplicationShortcut ); // Open next page in TOC global shortcut (void) new QShortcut( QKeySequence( i18n("Ctrl+Right") ), m_navPanel, SLOT( showNextInToc() ), SLOT( showNextInToc() ), Qt::ApplicationShortcut ); // Open next page in TOC global shortcut (void) new QShortcut( QKeySequence( i18n("Ctrl+Left") ), m_navPanel, SLOT( showPrevInToc() ), SLOT( showPrevInToc() ), Qt::ApplicationShortcut ); // Context menu m_contextMenu = new QMenu( this ); m_contextMenu->addAction ( "&Open this link in a new tab", this, SLOT( onOpenPageInNewTab() ), QKeySequence( "Shift+Enter" ) ); m_contextMenu->addAction ( "&Open this link in a new background tab", this, SLOT( onOpenPageInNewBackgroundTab() ), QKeySequence( "Ctrl+Enter" ) ); } void MainWindow::updateToolbars() { // Toolbars configuration Qt::ToolButtonStyle buttonstyle = Qt::ToolButtonIconOnly; QSize iconsize = QSize( 32, 32 ); switch ( pConfig->m_toolbarMode ) { case Config::TOOLBAR_SMALLICONS: iconsize = QSize( 16, 16 ); break; case Config::TOOLBAR_LARGEICONS: break; case Config::TOOLBAR_LARGEICONSTEXT: buttonstyle = Qt::ToolButtonTextUnderIcon; break; case Config::TOOLBAR_TEXTONLY: buttonstyle = Qt::ToolButtonTextOnly; break; } mainToolbar->setIconSize( iconsize ); mainToolbar->setToolButtonStyle( buttonstyle ); navToolbar->setIconSize( iconsize ); navToolbar->setToolButtonStyle( buttonstyle ); viewToolbar->setIconSize( iconsize ); viewToolbar->setToolButtonStyle( buttonstyle ); } void MainWindow::navSetBackEnabled(bool enabled) { nav_action_Back->setEnabled( enabled ); } void MainWindow::navSetForwardEnabled(bool enabled) { nav_actionForward->setEnabled( enabled ); } void MainWindow::actionOpenRecentFile( const QString& file ) { loadFile( file ); } void MainWindow::setupLangEncodingMenu() { // Create the language selection menu. QMenu * encodings = new QMenu( this ); // Create the action group m_encodingActions = new QActionGroup( this ); // Add the codepage entries const LCHMTextEncoding * enctable = LCHMFileImpl::getTextEncodingTable(); for ( int idx = 0; (enctable + idx)->family; idx++ ) { const LCHMTextEncoding * enc = enctable + idx; QAction * action = new QAction( this ); QString text = i18n("%1 ( %2 )") .arg( enc->family) .arg( enc->qtcodec ); action->setText( text ); action->setData( qVariantFromValue( (void*) enc ) ); action->setCheckable( true ); // Add to the action group, so only one is checkable m_encodingActions->addAction( action ); // Add to the menu encodings->addAction( action ); } // Set up the Select Codepage action view_Set_encoding_action->setMenu( encodings ); // Connect the action group signal connect( m_encodingActions, SIGNAL( triggered ( QAction * ) ), this, SLOT( actionEncodingChanged( QAction * ) ) ); } void MainWindow::actionEncodingChanged( QAction * action ) { const LCHMTextEncoding * enc = (const LCHMTextEncoding *) action->data().value< void* > (); setTextEncoding( enc ); } QMenu * MainWindow::tabItemsContextMenu() { return m_contextMenu; } void MainWindow::setupPopupMenu( QMenu * menu ) { menu->addAction( action_Close_window ); menu->addSeparator(); menu->addAction( nav_action_Back ); menu->addAction( nav_actionForward ); menu->addAction( nav_actionHome ); menu->addSeparator(); menu->addAction( nav_actionPreviousPage ); menu->addAction( nav_actionNextPageToc ); menu->addSeparator(); menu->addAction( view_Increase_font_size_action ); menu->addAction( view_Decrease_font_size_action ); menu->addSeparator(); menu->addAction( edit_Copy_action ); menu->addAction( edit_FindAction ); } bool MainWindow::hasTableOfContents() const { return m_chmFile && m_chmFile->hasTableOfContents(); } bool MainWindow::hasIndex() const { return m_chmFile && m_chmFile->hasIndexTable(); } void MainWindow::updateActions() { bool enabled = m_chmFile != 0; file_Print_action->setEnabled( enabled ); edit_Copy_action->setEnabled( enabled ); edit_SelectAll_action->setEnabled( enabled ); edit_FindAction->setEnabled( enabled ); file_ExtractCHMAction->setEnabled( enabled ); bookmark_AddAction->setEnabled( enabled ); view_Increase_font_size_action->setEnabled( enabled ); view_Decrease_font_size_action->setEnabled( enabled ); view_View_HTML_source_action->setEnabled( enabled ); view_Locate_in_contents_action->setEnabled( enabled ); view_Set_encoding_action->setEnabled( enabled ); action_Close_window->setEnabled( enabled ); nav_action_Back->setEnabled( enabled ); nav_actionForward->setEnabled( enabled ); nav_actionHome->setEnabled( enabled ); nav_actionPreviousPage->setEnabled( enabled ); nav_actionNextPageToc->setEnabled( enabled ); m_navPanel->setEnabled( enabled ); } void MainWindow::newVerAvailError( int ) { statusBar()->showMessage( tr("Unable to check whether a new version is available"), 2000 ); } void MainWindow::newVerAvailable( NewVersionMetaMap metadata ) { QSettings().setValue( "advanced/lastupdate", QDateTime::currentDateTime() ); // What is the latest version? QString current = QString("%1.%2") .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR); if ( metadata["Version"] != current ) { if ( QMessageBox::question( 0, tr("New version available"), tr("A new version %1 of Kchmviewer is available!

    " "You are currently using version %3.
    " "Do you want to visit the application web site %2?") .arg( metadata["Version"] ) .arg( metadata["URL"] ) .arg( current ), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes ) == QMessageBox::No ) return; QDesktopServices::openUrl ( QUrl(metadata["URL"]) ); } else statusBar()->showMessage( tr("Checked for updates; you are using the latest version of kchmviewer"), 2000 ); } void MainWindow::actionEditToolbars() { m_toolbarMgr->editDialog(); } kchmviewer-5.3/src/navigationpanel.h0000644000175000001440000000550711311400213016345 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef NAVIGATIONPANEL_H #define NAVIGATIONPANEL_H #include #include "ui_navigatorpanel.h" #include "kde-qt.h" class LCHMFile; // This class shows content, index, search and bookmark tabs class NavigationPanel : public QDockWidget, public Ui::NavigatorPanel { Q_OBJECT public: enum { TAB_CONTENTS, TAB_INDEX, TAB_SEARCH, TAB_BOOKMARK }; NavigationPanel( QWidget * parent ); // Sets the bookmark menu (maintained by bookmark tab) void setBookmarkMenu( QMenu * menu ); // Invalidate data in all tabs void invalidate(); // Update tabs content from CHM file data void updateTabs( LCHMFile * file ); // Save/load current file settings void applySettings( Settings * settings ); void getSettings( Settings * settings ); // Active tab get/set int active() const; void setActive( int index ); // Refresh content and index tab contents void refresh(); // Locate URL or text in the contents tab bool findUrlInContents( const QString & url ); void findTextInContents( const QString & text ); // Find text in index tab void findInIndex( const QString& text ); // Find text in search tab void executeQueryInSearch( const QString& text ); // Just find text without using search tab QStringList searchQuery( const QString& text ); public slots: // Add a new bookmark void addBookmark(); // Show previous/next page in table of contents void showPrevInToc(); void showNextInToc(); private: TabContents * m_contentsTab; TabIndex * m_indexTab; TabSearch * m_searchTab; TabBookmarks * m_bookmarksTab; }; #endif // NAVIGATIONPANEL_H kchmviewer-5.3/src/checknewversion.cpp0000644000175000001440000002204611311626155016732 0ustar timusers/************************************************************************** * Karlyriceditor - a lyrics editor for Karaoke songs * * Copyright (C) 2009 George Yunaev, support@karlyriceditor.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #if !defined (WIN32) #include #include #include #include #include #include #else #include #endif #include "checknewversion.h" // Uncomment this to enable debugging messages //#define ENABLE_DEBUG_MESSAGES CheckNewVersion::CheckNewVersion() : QThread() { m_sockfd = -1; m_timeout = 180; m_inputOffset = 0; m_inputBuffer.resize( 8192 ); qRegisterMetaType< NewVersionMetaMap >("NewVersionMetaMap"); } void CheckNewVersion::setUrl( const QString& url ) { m_url = url; } void CheckNewVersion::setCurrentVersion( const QString& version ) { m_currentversion = version; } void CheckNewVersion::closeSocket() { if ( m_sockfd == -1 ) return; #if defined (WIN32) closesocket( m_sockfd ); #else close( m_sockfd ); #endif m_sockfd = -1; } void CheckNewVersion::fatalError( int code ) { #if defined (ENABLE_DEBUG_MESSAGES) #define CASE_PRINT(A) case A: qDebug("CheckNewVersion::fatalError( " #A " )"); break; switch ( code ) { CASE_PRINT( Error_URL_Invalid ); CASE_PRINT( Error_Name_Lookup ); CASE_PRINT( Error_System ); CASE_PRINT( Error_Connecting ); CASE_PRINT( Error_Sending ); CASE_PRINT( Error_Receiving ); CASE_PRINT( Error_HTTPerror ); CASE_PRINT( Error_InvalidFormat ); CASE_PRINT( Error_InvalidSignature ); } #undef CASE_PRINT #endif closeSocket(); emit error( code ); deleteLater(); } void CheckNewVersion::reportStatus( int status ) { #if defined (ENABLE_DEBUG_MESSAGES) #define CASE_PRINT(A) case A: qDebug("CheckNewVersion::reportStatus( " #A " )"); break; switch ( status ) { CASE_PRINT( Status_Resolving ); CASE_PRINT( Status_Connecting ); CASE_PRINT( Status_SendingRequest ); CASE_PRINT( Status_ReceivingResponse ); CASE_PRINT( Status_Proceeding ); CASE_PRINT( Status_Finished ); } #undef CASE_PRINT #endif emit statusChanged( status ); } void CheckNewVersion::run() { m_inputOffset = 0; // Validate the URL QUrl url( m_url ); if ( !url.isValid() || url.scheme() != "http" || url.host().isEmpty() ) { fatalError( Error_URL_Invalid ); return; } // Win32s-specific socket initialization #if defined (WIN32) WORD wVersionRequested = MAKEWORD (1, 1); WSADATA wsaData; if ( WSAStartup (wVersionRequested, &wsaData) != 0 ) { fatalError( Error_System ); return; } #endif // IPv4 address resolving struct sockaddr_in saddr; memset( &saddr, 0, sizeof(saddr) ); saddr.sin_family = AF_INET; saddr.sin_port = htons( url.port(80) ); saddr.sin_addr.s_addr = ::inet_addr ( qPrintable(url.host() ) ); if ( saddr.sin_addr.s_addr == INADDR_NONE ) { reportStatus( Status_Resolving ); struct hostent *hp; #if defined HAVE_GETHOSTBYNAME_R int tmp_errno; struct hostent tmp_hostent; char buf[2048]; if ( ::gethostbyname_r( qPrintable(url.host() ), &tmp_hostent, buf, sizeof(buf), &hp, &tmp_errno) ) hp = 0; #else hp = ::gethostbyname( qPrintable(url.host() ) ); #endif // HAVE_GETHOSTBYNAME_R if ( !hp ) { fatalError( Error_Name_Lookup ); return; } ::memcpy (&saddr.sin_addr, hp->h_addr, (size_t) hp->h_length); } // create the socket m_sockfd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_sockfd < 0 ) { fatalError( Error_System ); return; } reportStatus( Status_Connecting ); // Connect to the HTTP server if ( ::connect( m_sockfd, (struct sockaddr *) &saddr, sizeof(saddr)) ) { fatalError( Error_Connecting ); return; } // Prepare the HTTP request QString request = QString("GET %1 HTTP/1.1\r\n" "Host: %2\r\n" "User-Agent: Qt/New version checker (www.karlyriceditor.com)\r\nConnection: close\r\n\r\n") .arg( url.path() ) .arg( url.host() ); // Send the request reportStatus( Status_SendingRequest ); const char * reqmsg = qPrintable( request ); unsigned int offset = 0, length = strlen( reqmsg ); while ( offset < length ) { int sentamount = ::send( m_sockfd, reqmsg + offset, length - offset, 0 ); if ( sentamount <= 0 ) { fatalError( Error_Sending ); return; } offset += sentamount; } // Receive the response reportStatus( Status_ReceivingResponse ); // First, receive the HTTP header int contentlen = -1; QStringList header; while ( 1 ) { QString line = readLine(); // Has connection closed? if ( m_sockfd == -1 ) { fatalError( Error_Receiving ); return; } // Empty line separates header and body if ( line.isEmpty() ) break; header.push_back( line ); } // Make sure server didn't return error if ( header.isEmpty() || header[0].indexOf( QRegExp( "^http/1.\\d\\s+2\\d\\d", Qt::CaseInsensitive )) == -1 ) { #if defined (ENABLE_DEBUG_MESSAGES) if ( !header.isEmpty() ) qDebug("CheckNewVersion::run: server returned invalid header: %s", qPrintable( header[0]) ); #endif fatalError( Error_HTTPerror ); return; } // Find content-length QRegExp clr( "^content-length: (\\d+)$" ); clr.setCaseSensitivity( Qt::CaseInsensitive ); if ( header.indexOf( clr ) != -1 ) contentlen = clr.cap( 1 ).toInt(); // Read the rest of content until we have contentlen or connection closed while ( contentlen == -1 || contentlen < m_inputOffset ) { int amount = ::recv( m_sockfd, m_inputBuffer.data() + m_inputOffset, m_inputBuffer.size() - m_inputOffset, 0 ); // connection closed? if ( amount == 0 ) break; // read error if ( amount < 0 ) { fatalError( Error_Receiving ); return; } m_inputOffset += amount; } closeSocket(); m_inputBuffer[ m_inputOffset ] ='\0'; // Remove/replace line ends, and convert to a string reportStatus( Status_Proceeding ); m_inputBuffer.replace( '\r', '\n' ); QStringList content_list = QString::fromUtf8( m_inputBuffer ).split( '\n', QString::SkipEmptyParts ); QMap contentMap; // Validate the file, and parse it into map for ( int i = 0; i < content_list.size(); i++ ) { QRegExp reg( "^(\\w+)\\s*:(.*)$" ); if ( content_list[i].indexOf( reg ) == -1 ) { #if defined (ENABLE_DEBUG_MESSAGES) qDebug("CheckNewVersion::run: invalid line found: '%s'", qPrintable( content_list[i] ) ); #endif fatalError( Error_InvalidFormat ); return; } // Decode \n back to 0x0A QString value = reg.cap( 2 ).trimmed(); value.replace( "\\n", "\n" ); value.replace( "\\\\", "\\" ); contentMap[ reg.cap(1) ] = value; } // Validate signature if ( !contentMap.contains( "Signature" ) || !contentMap.contains( "Version" ) || contentMap["Signature"] != "CheckNewVersion1" ) { fatalError( Error_InvalidSignature ); return; } contentMap.remove( "Signature" ); // Do we need to call the callback? if ( m_currentversion.isEmpty() || contentMap["Version"] != m_currentversion ) emit newVersionAvailable( contentMap ); reportStatus( Status_Finished ); deleteLater(); } QString CheckNewVersion::readLine() { while ( 1 ) { // First check if we have a line in buffer already if ( m_inputOffset > 0 ) { for ( int i = 0; i < m_inputOffset - 1; i++ ) { if ( m_inputBuffer[i] == '\r' && m_inputBuffer[i+1] == '\n' ) { // Null-terminate the buffer, and copy the string m_inputBuffer[i] = '\0'; QString line = QString::fromUtf8( m_inputBuffer ); // Now move the rest of the buffer if something left unsigned int amount = i + 2; // removing CRLF too) m_inputOffset -= amount; if ( m_inputOffset > 0 ) memmove( m_inputBuffer.data(), m_inputBuffer.data() + amount, m_inputOffset ); return line; } } } // No line in buffer yet if ( m_inputOffset + 1 > m_inputBuffer.size() ) return QString::null; int bytes = ::recv( m_sockfd, m_inputBuffer.data() + m_inputOffset, m_inputBuffer.size() - m_inputOffset, 0 ); // Error; restart on EINTR, abort on anything else if ( bytes < 0 ) { if ( errno == EINTR ) continue; break; } if ( bytes == 0 ) break; m_inputOffset += bytes; } return QString::null; } kchmviewer-5.3/src/src.pro0000644000175000001440000000413311513541304014333 0ustar timusersINCLUDEPATH += ../lib/libchmfile HEADERS += config.h \ dbus_interface.h \ dialog_chooseurlfromlist.h \ dialog_setup.h \ kde-qt.h \ keyeventfilter.h \ mainwindow.h \ recentfiles.h \ settings.h \ tab_bookmarks.h \ tab_contents.h \ tab_index.h \ tab_search.h \ treeviewitem.h \ version.h \ viewwindow.h \ viewwindowmgr.h \ viewwindow_qtextbrowser.h \ viewwindow_qtwebkit.h \ navigationpanel.h \ checknewversion.h \ toolbarmanager.h \ toolbareditor.h SOURCES += config.cpp \ dbus_interface.cpp \ dialog_chooseurlfromlist.cpp \ dialog_setup.cpp \ kde-qt.cpp \ keyeventfilter.cpp \ main.cpp \ mainwindow.cpp \ recentfiles.cpp \ settings.cpp \ tab_bookmarks.cpp \ tab_contents.cpp \ tab_index.cpp \ tab_search.cpp \ treeviewitem.cpp \ viewwindow.cpp \ viewwindowmgr.cpp \ viewwindow_qtextbrowser.cpp \ viewwindow_qtwebkit.cpp \ navigationpanel.cpp \ checknewversion.cpp \ toolbarmanager.cpp \ toolbareditor.cpp TARGETDEPS += ../lib/libchmfile/libchmfile.a LIBS += ../lib/libchmfile/libchmfile.a -lchm TARGET = ../bin/kchmviewer CONFIG += threads \ warn_on \ qt \ precompile_header \ dbus TEMPLATE = app FORMS += tab_bookmarks.ui \ tab_index.ui \ tab_contents.ui \ tab_search.ui \ dialog_setup.ui \ dialog_topicselector.ui \ mainwindow.ui \ window_browser.ui \ navigatorpanel.ui \ dialog_about.ui \ toolbareditor.ui RESOURCES += resources/images.qrc QT += webkit \ dbus \ network win32-g++: { QT -= dbus HEADERS -= dbus_interface.h SOURCES -= dbus_interface.cpp CONFIG -= dbus LIBS -= -lchm LIBS += -lwsock32 ../lib/libchmfile/chmlib-win32/chmlib.lib DEFINES += USE_PATCHED_CHMLIB } macx-g++: { HEADERS -= dbus_interface.h SOURCES -= dbus_interface.cpp CONFIG -= dbus HEADERS += kchmviewerapp.h SOURCES += kchmviewerapp.cpp QMAKE_INFO_PLIST=resources/Info.plist QMAKE_POST_LINK += cp resources/*.icns ${DESTDIR}/kchmviewer.app/Contents/Resources; } kchmviewer-5.3/src/checknewversion.h0000644000175000001440000001046111311577624016403 0ustar timusers/************************************************************************** * Karlyriceditor - a lyrics editor for Karaoke songs * * Copyright (C) 2009 George Yunaev, support@karlyriceditor.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef CHECKNEWVERSION_H #define CHECKNEWVERSION_H // This class implements checking whether a new application version is available, // and reports its availability via signal. It does not use Qt networking stuff, // and therefore avoids linking with QtNetwork (savings of 1Mb!). // All processing is done in a separate thread, so it does not block the app. // It does not use GUI stuff, so should be safe. // // The proper way to use this class: // // CheckNewVersion * pN = new CheckNewVersion(); // connect( pN, SIGNAL( newVersionAvailable( const QMap&) ), this, SLOT( newVersionAvailable( const QMap&) ) ); // // pN->setUrl( "http://www.example.com/latestversion.txt" ); // pN->setCurrentVersion( "1.12" ); // pN->start(); // // The text file must have the following format: // : // Two field names are required (Signature and Version). Any other names are optional. Any name may be added. // A multiline value string should have all line feed characters replaced by \n, and all single backlashes replaced by two // Signature must be the first field, and must contain the "CheckNewVersion1" value // // An example file with extra fields "URL" and "Changes" added: // // Signature:CheckNewVersion1 // Version:1.12 // URL: http://example.com/latestversion.zip // Changes: new functionality added.\nA bar function added to package foo.\n\nZeta now works. // // #include #include #include typedef QMap NewVersionMetaMap; class CheckNewVersion : public QThread { Q_OBJECT public: enum { Status_Resolving, Status_Connecting, Status_SendingRequest, Status_ReceivingResponse, Status_Proceeding, Status_Finished, }; enum { Error_URL_Invalid, Error_Name_Lookup, Error_System, Error_Connecting, Error_Sending, Error_Receiving, Error_HTTPerror, Error_InvalidFormat, Error_InvalidSignature }; CheckNewVersion(); // Sets the full URL to get the latest version information from. void setUrl( const QString& url ); // Sets the current version. newVersionAvailable() will only be emitted // if current version does not match the version in the downloaded file. // If not called, newVersionAvailable() will be always emitted. void setCurrentVersion( const QString& version ); signals: void newVersionAvailable( const NewVersionMetaMap& metadata ); void statusChanged( int newstatus ); void error( int errorcode ); private: // Reimplemented void run(); // All those functions on error generate the event, and shut down the thread. void fatalError( int code ); // Read the line from socket (or m_inputBuffer). void reportStatus( int status ); // Read the data from socket up to length. May return less than length. QString readLine(); // Closing the socket void closeSocket(); private: QString m_url; QString m_currentversion; int m_sockfd; unsigned int m_timeout; int m_inputOffset; // in m_inputBuffer QByteArray m_inputBuffer; // for socket input }; Q_DECLARE_METATYPE(NewVersionMetaMap); #endif // CHECKNEWVERSION_H kchmviewer-5.3/src/settings.cpp0000644000175000001440000001567411311611120015370 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include #include #include "settings.h" #include "config.h" static qint32 SETTINGS_MAGIC = 0xD8AB4E76; static qint32 SETTINGS_VERSION = 4; /* * The order is important! * To be compatible with next versions, you may add items ONLY before the MARKER_END! */ enum marker_t { MARKER_FILESIZE = 1, MARKER_FILETIME, MARKER_ACTIVETABSYSTEM, MARKER_ACTIVETABWINDOW, MARKER_ACTIVEENCODING, MARKER_SEARCHHISTORY, MARKER_WINDOW_SIZE, MARKER_BOOKMARKS, MARKER_VIEWINDOWS, MARKER_CONTENTSDATA, MARKER_INDEXDATA, MARKER_ACTIVEENCODINGNAME, // This should be the last MARKER_END = 0x7FFF }; // Helpers for serialization of SavedBookmark through QDataStream static inline QDataStream& operator<< ( QDataStream& s, const Settings::SavedBookmark& b ) { s << b.name; s << b.url; s << b.scroll_y; return s; } static inline QDataStream& operator>> ( QDataStream& s, Settings::SavedBookmark& b ) { s >> b.name; s >> b.url; s >> b.scroll_y; return s; } // Helpers for serialization of SavedViewWindow through QDataStream static inline QDataStream& operator<< ( QDataStream& s, const Settings::SavedViewWindow& b ) { // Store the version first. Later we can increase it when adding new members. s << 1; s << b.url; s << b.scroll_y; s << b.zoom; return s; } static inline QDataStream& operator>> ( QDataStream& s, Settings::SavedViewWindow& b ) { qint32 version; s >> version; s >> b.url; s >> b.scroll_y; s >> b.zoom; return s; } Settings::Settings() { m_activetabsystem = 0; m_activetabwindow = 0; m_activeEncoding = "CP1252"; m_window_size_x = 700; m_window_size_y = 500; m_window_size_splitter = 200; } bool Settings::loadSettings( const QString & filename ) { m_activetabsystem = 0; m_activetabwindow = 0; m_activeEncoding = "CP1252"; m_searchhistory.clear(); m_bookmarks.clear(); m_viewwindows.clear(); QFileInfo finfo ( filename ); m_settingsFile = QString::null; m_searchIndex = QString::null; if ( !finfo.size() ) return false; // Init those params, as they'll be used during save the first time even if the file is not here m_currentfilesize = finfo.size(); m_currentfiledate = finfo.lastModified().toTime_t(); getFilenames( filename, &m_settingsFile, &m_searchIndex ); QFile file( m_settingsFile ); if ( !file.open (QIODevice::ReadOnly) ) return false; // it's ok, file may not exist QDataStream stream (&file); // Read and check header qint32 data; bool complete_read = false; stream >> data; // magic if ( data != SETTINGS_MAGIC ) { qWarning ("file %s has bad magic value, ignoring it.", qPrintable( file.fileName()) ); return false; } stream >> data; // version if ( data > SETTINGS_VERSION ) { qWarning ("file %s has unsupported data version %d, ignoring it.", qPrintable( file.fileName()), data); return false; } // Read everything by marker while ( 1 ) { stream >> data; // marker if ( data == MARKER_END ) { complete_read = true; break; } switch (data) { case MARKER_FILESIZE: stream >> m_currentfilesize; if ( m_currentfilesize != finfo.size() ) { m_currentfilesize = finfo.size(); return false; } break; case MARKER_FILETIME: stream >> m_currentfiledate; if ( m_currentfiledate != finfo.lastModified().toTime_t() ) { m_currentfiledate = finfo.lastModified().toTime_t(); return false; } break; case MARKER_ACTIVETABSYSTEM: stream >> m_activetabsystem; break; case MARKER_ACTIVETABWINDOW: stream >> m_activetabwindow; break; // Not used anymore case MARKER_ACTIVEENCODING: stream >> data; break; case MARKER_ACTIVEENCODINGNAME: stream >> m_activeEncoding; break; case MARKER_WINDOW_SIZE: stream >> m_window_size_x; stream >> m_window_size_y; stream >> m_window_size_splitter; break; case MARKER_SEARCHHISTORY: stream >> m_searchhistory; break; case MARKER_BOOKMARKS: stream >> m_bookmarks; break; case MARKER_VIEWINDOWS: stream >> m_viewwindows; break; } } return complete_read; } bool Settings::saveSettings( ) { QFile file( m_settingsFile ); if ( !file.open (QIODevice::WriteOnly) ) { qWarning ("Could not write settings into file %s: %s", qPrintable( file.fileName()), qPrintable( file.errorString() )); return false; } QDataStream stream (&file); // Save header stream << SETTINGS_MAGIC; stream << SETTINGS_VERSION; // Save size and last-modified stream << MARKER_FILESIZE; stream << m_currentfilesize; stream << MARKER_FILETIME; stream << m_currentfiledate; // Save generic settings stream << MARKER_ACTIVETABSYSTEM; stream << m_activetabsystem; // Save generic settings stream << MARKER_ACTIVETABWINDOW; stream << m_activetabwindow; stream << MARKER_ACTIVEENCODINGNAME; stream << m_activeEncoding; // Save search history vector stream << MARKER_SEARCHHISTORY; stream << m_searchhistory; // Save window size and splitter position stream << MARKER_WINDOW_SIZE; stream << m_window_size_x; stream << m_window_size_y; stream << m_window_size_splitter; stream << MARKER_BOOKMARKS; stream << m_bookmarks; stream << MARKER_VIEWINDOWS; stream << m_viewwindows; stream << MARKER_END; return true; } void Settings::removeSettings( const QString & filename ) { QString settingsfile, idxfile; getFilenames( filename, &settingsfile, &idxfile ); QFile::remove( settingsfile ); QFile::remove( idxfile ); } void Settings::getFilenames(const QString & helpfilename, QString * settingsfile, QString * indexfile ) { QFileInfo finfo ( helpfilename ); QString prefix = pConfig->m_datapath + "/" + finfo.baseName(); *settingsfile = prefix + ".kchmviewer"; *indexfile = prefix + ".idx"; } kchmviewer-5.3/src/window_browser.ui0000644000175000001440000001345611270715430016446 0ustar timusers ********************************************************************* ** ** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved. ** ** This file is part of the Qt Assistant of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ********************************************************************* TabbedBrowser 0 0 749 664 TabbedBrowser QFrame::StyledPanel QFrame::Raised 6 0 :/images/find_close.png:/images/find_close.png true 0 0 150 0 Previous :/images/find_previous.png:/images/find_previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/images/find_next.png:/images/find_next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive Whole words 0 20 1050 20 <img src=":/images/find_wrap.png">&nbsp;Search wrapped Qt::RichText true Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 81 21 kchmviewer-5.3/src/kde-qt.h0000644000175000001440000000773311311361434014371 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef KDE_QT_H #define KDE_QT_H #if defined (USE_KDE) #define KQ_CLASSNAME(name) K##name #define KQ_DECLARECLASS(name) class KQ##name : public K##name #include #include #include #include #include #include #include #include #include #include #include #include #include #include #else /* !USE_KDE */ #define KQ_CLASSNAME(name) Q##name #include #include #include #include #include #include #include #include #include #include #include #define i18n(A) tr(A) #endif /* USE_KDE */ // common non-wrapped UI classes #include #include #include #include #include #include #include #include // common utility classes #include #include #include #include #include #include #include #include #include #include // events #include #include #include #include class KQMainWindow : public KQ_CLASSNAME(MainWindow) { public: KQMainWindow ( QWidget * parent, Qt::WFlags f ) : KQ_CLASSNAME(MainWindow) (parent, f) {}; }; class KQProgressModalDialog : public KQ_CLASSNAME(ProgressDialog) { public: KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator = 0 ); // Seems like people have fun making classes incompatible #if defined (USE_KDE) void setValue( int value ) { progressBar()->setValue( value ); } #else bool wasCancelled() { return wasCanceled(); } #endif }; class KQTabWidget : public KQ_CLASSNAME(TabWidget) { public: KQTabWidget (QWidget *parent = 0 ) : KQ_CLASSNAME(TabWidget) (parent) {} }; #include #include #include #include #include #include #include #include #include #include #include class ShowWaitCursor { public: ShowWaitCursor() { QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) ); } ~ShowWaitCursor() { QApplication::restoreOverrideCursor(); } }; // Forward declarations class MainWindow; class ViewWindow; class TabIndex; class TabSearch; class TabBookmarks; class TabContents; class Settings; class ViewWindow; class ViewWindowMgr; #endif /* KDE_QT_H */ kchmviewer-5.3/src/dialog_chooseurlfromlist.cpp0000644000175000001440000000400011311334060020614 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "kde-qt.h" #include "dialog_chooseurlfromlist.h" #include "treeviewitem.h" DialogChooseUrlFromList::DialogChooseUrlFromList( QWidget* parent ) : QDialog( parent ), Ui::DialogTopicSelector() { setupUi( this ); // List doubleclick connect( list, SIGNAL( itemDoubleClicked ( QListWidgetItem * ) ), this, SLOT( onDoubleClicked( QListWidgetItem * ) ) ); } void DialogChooseUrlFromList::onDoubleClicked( QListWidgetItem * item ) { if ( item ) accept(); } QString DialogChooseUrlFromList::getSelectedItemUrl( const QStringList & urls, const QStringList & titles ) { for ( int i = 0; i < urls.size(); i++ ) list->addItem( titles[i] ); if ( exec() == QDialog::Accepted && list->currentRow() != -1 ) return urls[ list->currentRow() ]; return QString::null; } kchmviewer-5.3/src/tab_contents.ui0000644000175000001440000000120311365252422016044 0ustar timusers TabContents 0 0 257 424 Form1 9 6 kchmviewer-5.3/src/config.h0000644000175000001440000000470211312127404014440 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef CONFIG_H #define CONFIG_H #include #include #include "recentfiles.h" extern const char * APP_PATHINUSERDIR; class Config { public: enum choose_action_t { ACTION_ALWAYS_OPEN, ACTION_ASK_USER, ACTION_DONT_OPEN }; enum UsedBrowser { BROWSER_QTEXTBROWSER = 0, BROWSER_KHTMLPART, BROWSER_QTWEBKIT }; enum ToolbarMode { TOOLBAR_SMALLICONS, TOOLBAR_LARGEICONS, TOOLBAR_LARGEICONSTEXT, TOOLBAR_TEXTONLY }; enum StartupMode { STARTUP_DO_NOTHING, STARTUP_LOAD_LAST_FILE, STARTUP_POPUP_OPENFILE }; Config(); void save(); public: QString m_datapath; QString m_lastOpenedDir; StartupMode m_startupMode; choose_action_t m_onNewChmClick; choose_action_t m_onExternalLinkClick; int m_numOfRecentFiles; bool m_HistoryStoreExtra; int m_usedBrowser; ToolbarMode m_toolbarMode; bool m_kdeEnableJS; bool m_kdeEnableJava; bool m_kdeEnablePlugins; bool m_kdeEnableRefresh; bool m_advUseInternalEditor; QString m_advExternalEditorPath; bool m_advLayoutDirectionRL; bool m_advAutodetectEncoding; bool m_advCheckNewVersion; }; extern Config * pConfig; #endif kchmviewer-5.3/src/navigationpanel.cpp0000644000175000001440000001343311311407470016711 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include "navigationpanel.h" #include "tab_contents.h" #include "tab_index.h" #include "tab_search.h" #include "tab_bookmarks.h" #include "settings.h" #include "mainwindow.h" NavigationPanel::NavigationPanel( QWidget * parent ) : QDockWidget( parent ), Ui::NavigatorPanel() { setupUi( this ); // There are tabs in UI-creared widget m_tabWidget->clear(); // Add the required tabs m_searchTab = new TabSearch(m_tabWidget); m_tabWidget->addTab( m_searchTab, i18n( "Search" ) ); m_bookmarksTab = new TabBookmarks( m_tabWidget ); m_tabWidget->addTab( m_bookmarksTab, i18n("Bookmarks") ); // Those tabs will be added later m_contentsTab = 0; m_indexTab = 0; } void NavigationPanel::setBookmarkMenu( QMenu * menu ) { m_bookmarksTab->createMenu( menu ); } void NavigationPanel::invalidate() { if ( m_contentsTab ) { m_tabWidget->removeTab( m_tabWidget->indexOf( m_contentsTab ) ); delete m_contentsTab; m_contentsTab = 0; } if ( m_indexTab ) { m_tabWidget->removeTab( m_tabWidget->indexOf( m_indexTab ) ); delete m_indexTab; m_indexTab = 0; } m_searchTab->invalidate(); m_bookmarksTab->invalidate(); } void NavigationPanel::updateTabs( LCHMFile * file ) { invalidate(); // Insert index first if ( file->hasIndexTable() ) { m_indexTab = new TabIndex(m_tabWidget); m_tabWidget->insertTab( 0, m_indexTab, i18n( "Index" ) ); } if ( file->hasTableOfContents() ) { m_contentsTab = new TabContents( m_tabWidget ); m_tabWidget->insertTab( 0, m_contentsTab, i18n( "Contents" ) ); } } void NavigationPanel::applySettings( Settings * settings ) { m_searchTab->restoreSettings( settings->m_searchhistory ); m_bookmarksTab->restoreSettings( settings->m_bookmarks ); } void NavigationPanel::getSettings( Settings * settings ) { m_searchTab->saveSettings( settings->m_searchhistory ); m_bookmarksTab->saveSettings( settings->m_bookmarks ); } void NavigationPanel::refresh() { if ( m_contentsTab ) m_contentsTab->refillTableOfContents(); // gyunaev: do we need it? Not sure. // if ( m_indexTab->isVisible() ) // m_indexTab->refillIndex(); } bool NavigationPanel::findUrlInContents( const QString & url ) { if ( !m_contentsTab ) return false; IndexTocItem * treeitem = m_contentsTab->getTreeItem( url ); if ( treeitem ) { IndexTocItem * itemparent = treeitem; while ( (itemparent = (IndexTocItem*) itemparent->parent()) != 0 ) itemparent->setExpanded(true); m_contentsTab->showItem( treeitem ); return true; } return false; } void NavigationPanel::addBookmark() { m_bookmarksTab->onAddBookmarkPressed(); } void NavigationPanel::showPrevInToc() { if ( !m_contentsTab ) return; // Try to find current list item IndexTocItem * current = m_contentsTab->getTreeItem( ::mainWindow->currentBrowser()->getOpenedPage() ); if ( !current ) return; QTreeWidgetItemIterator lit( current ); lit--; if ( *lit ) ::mainWindow->openPage( ((IndexTocItem *) (*lit) )->getUrl(), MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); } void NavigationPanel::showNextInToc() { if ( !m_contentsTab ) return; // Try to find current list item IndexTocItem * current = m_contentsTab->getTreeItem( ::mainWindow->currentBrowser()->getOpenedPage() ); if ( !current ) return; QTreeWidgetItemIterator lit( current ); lit++; if ( *lit ) ::mainWindow->openPage( ((IndexTocItem *) (*lit) )->getUrl(), MainWindow::OPF_CONTENT_TREE | MainWindow::OPF_ADD2HISTORY ); } int NavigationPanel::active() const { QWidget * cur = m_tabWidget->currentWidget(); if ( cur == m_bookmarksTab ) return TAB_BOOKMARK; else if ( cur == m_searchTab ) return TAB_SEARCH; else if ( cur == m_indexTab ) return TAB_INDEX; return TAB_CONTENTS; } void NavigationPanel::setActive( int index ) { switch ( index ) { case TAB_CONTENTS: if ( m_contentsTab ) m_tabWidget->setCurrentWidget( m_contentsTab ); break; case TAB_INDEX: if ( m_indexTab ) m_tabWidget->setCurrentWidget( m_indexTab ); break; case TAB_SEARCH: m_tabWidget->setCurrentWidget( m_searchTab ); break; case TAB_BOOKMARK: m_tabWidget->setCurrentWidget( m_bookmarksTab ); break; } } void NavigationPanel::findTextInContents( const QString & text ) { if ( m_contentsTab ) m_contentsTab->search( text ); } void NavigationPanel::findInIndex( const QString& text ) { if ( m_indexTab ) m_indexTab->search( text ); } void NavigationPanel::executeQueryInSearch( const QString& text ) { m_searchTab->execSearchQueryInGui( text ); } QStringList NavigationPanel::searchQuery( const QString& text ) { QStringList res; m_searchTab->searchQuery( text, &res ); return res; } kchmviewer-5.3/src/keyeventfilter.h0000644000175000001440000000363111311334060016230 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #ifndef KEYEVENTFILTER_H #define KEYEVENTFILTER_H #include #include /*!* * This class must be installed as a global event handler. Its responsibility * is to intercept keyboard events, and store the Shift and Ctrl keys state information. * Unfortunately it seems to be the only way to do it in Qt. */ class KeyEventFilter : public QObject { public: KeyEventFilter(); bool isShiftPressed() const { return m_shiftPressed; } bool isCtrlPressed() const { return m_ctrlPressed; } private: bool eventFilter( QObject *, QEvent *e ); bool m_shiftPressed; bool m_ctrlPressed; }; extern KeyEventFilter gKeyEventFilter; #endif /* INCLUDE_KCHMKEYEVENTFILTER_H */ kchmviewer-5.3/src/config.cpp0000644000175000001440000001071711312127553015003 0ustar timusers/************************************************************************** * Kchmviewer - a CHM file viewer with broad language support * * Copyright (C) 2004-2010 George Yunaev, kchmviewer@ulduzsoft.com * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ #include #include #include "kde-qt.h" #include "config.h" #include "settings.h" #include "mainwindow.h" Config * pConfig; const char * APP_PATHINUSERDIR = ".kchmviewer"; Config::Config() { QDir dir; m_datapath = QDir::homePath () + "/" + APP_PATHINUSERDIR; dir.setPath (m_datapath); if ( !dir.exists() && !dir.mkdir(m_datapath) ) qWarning( "Could not create directory %s", qPrintable( m_datapath )); QSettings settings; m_startupMode = (Config::StartupMode) settings.value( "general/onstartup", STARTUP_DO_NOTHING ).toInt(); m_onNewChmClick = (Config::choose_action_t) settings.value( "general/onnewchm", ACTION_ASK_USER ).toInt(); m_onExternalLinkClick = (Config::choose_action_t) settings.value( "general/onexternal", ACTION_ASK_USER ).toInt(); m_numOfRecentFiles = settings.value( "general/maxrecentfiles", 10 ).toInt(); m_HistoryStoreExtra = settings.value( "general/extrahistory", true ).toBool(); m_usedBrowser = settings.value( "general/usebrowser", BROWSER_QTEXTBROWSER ).toInt(); m_kdeEnableJS = settings.value( "browser/enablejs", false ).toBool(); m_kdeEnableJava = settings.value( "browser/enablejava", false ).toBool(); m_kdeEnablePlugins = settings.value( "browser/enableplugins", true ).toBool(); m_kdeEnableRefresh = settings.value( "browser/enablerefresh", false ).toBool(); m_advUseInternalEditor = settings.value( "advanced/internaleditor", true ).toBool(); m_advLayoutDirectionRL = settings.value( "advanced/layoutltr", false ).toBool(); m_advAutodetectEncoding = settings.value( "advanced/autodetectenc", false ).toBool(); m_advExternalEditorPath = settings.value( "advanced/editorpath", "/usr/bin/kate" ).toString(); m_advCheckNewVersion = settings.value( "advanced/checknewver", true ).toBool(); m_toolbarMode = (Config::ToolbarMode) settings.value( "advanced/toolbarmode", TOOLBAR_LARGEICONSTEXT ).toInt(); m_lastOpenedDir = settings.value( "advanced/lastopendir", "." ).toString(); // Reset webkit browser to qtextbrowser when older version is running #if !defined (QT_WEBKIT_LIB) if ( m_usedBrowser == BROWSER_QTWEBKIT ) m_usedBrowser = BROWSER_QTEXTBROWSER; #endif } void Config::save( ) { QSettings settings; settings.setValue( "general/onstartup", m_startupMode ); settings.setValue( "general/onnewchm", m_onNewChmClick ); settings.setValue( "general/onexternal", m_onExternalLinkClick ); settings.setValue( "general/maxrecentfiles", m_numOfRecentFiles ); settings.setValue( "general/extrahistory", m_HistoryStoreExtra ); settings.setValue( "general/usebrowser", m_usedBrowser ); settings.setValue( "browser/enablejs", m_kdeEnableJS ); settings.setValue( "browser/enablejava", m_kdeEnableJava ); settings.setValue( "browser/enableplugins", m_kdeEnablePlugins ); settings.setValue( "browser/enablerefresh", m_kdeEnableRefresh ); settings.setValue( "advanced/internaleditor", m_advUseInternalEditor ); settings.setValue( "advanced/layoutltr", m_advLayoutDirectionRL ); settings.setValue( "advanced/autodetectenc", m_advAutodetectEncoding ); settings.setValue( "advanced/editorpath", m_advExternalEditorPath ); settings.setValue( "advanced/checknewver", m_advCheckNewVersion ); settings.setValue( "advanced/toolbarmode", m_toolbarMode ); settings.setValue( "advanced/lastopendir", m_lastOpenedDir ); } kchmviewer-5.3/tests/0000755000175000001440000000000011514013420013366 5ustar timuserskchmviewer-5.3/tests/autotest.sh0000644000175000001440000000076311311400213015573 0ustar timusers#!/bin/sh CHMDIR="/mnt/ebooks /mnt/disk_d/Docs" #KCHMVIEWER="../src/kchmviewer" KCHMVIEWER="../bin/kchmviewer" COMMONLOG="autotest.log" FATALLOG="fatal.log" CMDOPTIONS="--nocrashhandler" #find $CHMDIR -iname "*.chm" -print -exec find $CHMDIR -iname "*.chm" -print | while read file; do echo "Testing file $file" echo "File $file" >> $COMMONLOG $KCHMVIEWER $CMDOPTIONS --shortautotestmode "$file" >>$COMMONLOG 2>&1 if test $? != 0; then echo "$file FAILED, exit code $?!" >> FATALLOG fi done kchmviewer-5.3/tests/autotest-dcop.sh0000644000175000001440000000217110575614066016541 0ustar timusers#!/bin/sh CHMDIR="/mnt/ebooks /mnt/disk_d/Docs" KCHMVIEWER="kde/src/kchmviewer" #KCHMVIEWER="../build/src/kchmviewer" COMMONLOG="autotest.log" FATALLOG="fatal.log" CMDOPTIONS="--nocrashhandler" find $CHMDIR -iname "*.chm" -print | while read file; do echo "Testing file $file" echo "File $file" >> $COMMONLOG $KCHMVIEWER $CMDOPTIONS "$file" >>$COMMONLOG 2>&1 & pid=$! dname="kchmviewer-$pid" while [ -z `dcop $dname qt interfaces 2>/dev/null | head -n 1` ]; do sleep 1; done dcop $dname KCHMDCOPIface guiFindInIndex a if test $? != 0; then echo "dcop Index failed" >> FATALLOG kill $pid continue fi res=`dcop $dname KCHMDCOPIface searchQuery 1 | head -n 1` if test $? != 0; then echo "dcop Search failed" >> FATALLOG kill $pid continue fi if test -z "$res"; then echo "File $file: dcop search returned empty string" >> FATALLOG kill $pid continue fi dcop $dname KCHMDCOPIface guiSearchQuery this if test $? != 0; then echo "dcop guiSearch failed" >> FATALLOG kill $pid continue fi sleep 1 dcop $dname MainApplication-Interface quit wait $pid if test $? != 0; then echo "$file FAILED, exit code $?!" >> FATALLOG fi done