This commit is contained in:
GRiker 2012-03-16 03:56:01 -07:00
commit bc4547e9d4
87 changed files with 26269 additions and 24757 deletions

View File

@ -19,6 +19,49 @@
# new recipes: # new recipes:
# - title: # - title:
- version: 0.8.43
date: 2012-03-16
new features:
- title: "Template language: Speedup evaluation of general program mode templates by pre-compiling them to python. If you experience errors with this optimization, you can turn it off via Preferences->Tweaks. Also other miscellaneous optimizations in evaluating templates with composite columns."
- title: "MOBI Output: Add an option to not convert all images to JPEG when creating MOBI files. For maximum compatibility of the produced MOBI files, do not use this option."
tickets: [954025]
- title: "Add iPad3 Output Profile"
bug fixes:
- title: "KF8 Input: Add support for KF8 files with obfuscated embedded fonts"
tickets: [953260]
- title: "Make the stars in the book list a little larger on windows >= vista"
- title: "Revised periodical Section layout, for touchscreen devices resolving iBooks problem with tables spanning multiple pages"
- title: "Read dc:contributor metadata from MOBI files"
- title: "MOBI Output: Fix a regression that caused the generated thumbnail embedded in calibre produced MOBI files to be a large, low quality image instead of a small, high quality image. You would have been affected by this bug only if you directly used the output from calibre, without exporting it via send to device or save to disk."
tickets: [954254]
- title: "KF8 Input: Recognize OpenType embedded fonts as well."
tickets: [954728]
- title: "Fix regression in 0.8.41 that caused file:/// URLs to stop working in the news download system on windows."
tickets: [955581]
- title: "When setting metadata in MOBI files fix cover not being updated if the mobi file has its first image record as the cover"
- title: "Fix column coloring rules based on the size column not working"
tickets: [953737]
improved recipes:
- Microwaves and RF
- idg.se
new recipes:
- title: SatMagazine
author: kiavash
- version: 0.8.42 - version: 0.8.42
date: 2012-03-12 date: 2012-03-12

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-11-25 14:01+0000\n" "POT-Creation-Date: 2011-11-25 14:01+0000\n"
"PO-Revision-Date: 2011-12-17 09:29+0000\n" "PO-Revision-Date: 2012-03-11 10:13+0000\n"
"Last-Translator: Jellby <Unknown>\n" "Last-Translator: Jellby <Unknown>\n"
"Language-Team: Spanish <es@li.org>\n" "Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-12-18 04:37+0000\n" "X-Launchpad-Export-Date: 2012-03-12 04:38+0000\n"
"X-Generator: Launchpad (build 14525)\n" "X-Generator: Launchpad (build 14933)\n"
#. name for aaa #. name for aaa
msgid "Ghotuo" msgid "Ghotuo"
@ -1779,7 +1779,7 @@ msgstr "Awiyaana"
#. name for auz #. name for auz
msgid "Arabic; Uzbeki" msgid "Arabic; Uzbeki"
msgstr "Árabe uzbeco" msgstr "Árabe uzbeko"
#. name for ava #. name for ava
msgid "Avaric" msgid "Avaric"
@ -22207,7 +22207,7 @@ msgstr "Roglai septentrional"
#. name for roh #. name for roh
msgid "Romansh" msgid "Romansh"
msgstr "" msgstr "Romanche"
#. name for rol #. name for rol
msgid "Romblomanon" msgid "Romblomanon"
@ -22607,7 +22607,7 @@ msgstr ""
#. name for sci #. name for sci
msgid "Creole Malay; Sri Lankan" msgid "Creole Malay; Sri Lankan"
msgstr "Malo criollo de Sri Lanka" msgstr "Malayo criollo de Sri Lanka"
#. name for sck #. name for sck
msgid "Sadri" msgid "Sadri"
@ -26987,15 +26987,15 @@ msgstr ""
#. name for uzb #. name for uzb
msgid "Uzbek" msgid "Uzbek"
msgstr "Uzbeco" msgstr "Uzbeko"
#. name for uzn #. name for uzn
msgid "Uzbek; Northern" msgid "Uzbek; Northern"
msgstr "Uzbeco septentrional" msgstr "Uzbeko septentrional"
#. name for uzs #. name for uzs
msgid "Uzbek; Southern" msgid "Uzbek; Southern"
msgstr "Uzbeco meridional" msgstr "Uzbeko meridional"
#. name for vaa #. name for vaa
msgid "Vaagri Booli" msgid "Vaagri Booli"
@ -30319,7 +30319,7 @@ msgstr ""
#. name for zhn #. name for zhn
msgid "Zhuang; Nong" msgid "Zhuang; Nong"
msgstr "Zhuang nong" msgstr "Chuang nong"
#. name for zho #. name for zho
msgid "Chinese" msgid "Chinese"

View File

@ -8,31 +8,31 @@ msgstr ""
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-" "Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
"devel@lists.alioth.debian.org>\n" "devel@lists.alioth.debian.org>\n"
"POT-Creation-Date: 2011-11-25 14:01+0000\n" "POT-Creation-Date: 2011-11-25 14:01+0000\n"
"PO-Revision-Date: 2012-03-03 21:35+0000\n" "PO-Revision-Date: 2012-03-14 21:30+0000\n"
"Last-Translator: Иван Старчевић <ivanstar61@gmail.com>\n" "Last-Translator: Иван Старчевић <ivanstar61@gmail.com>\n"
"Language-Team: Serbian <gnu@prevod.org>\n" "Language-Team: Serbian <gnu@prevod.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-04 04:59+0000\n" "X-Launchpad-Export-Date: 2012-03-15 04:45+0000\n"
"X-Generator: Launchpad (build 14886)\n" "X-Generator: Launchpad (build 14933)\n"
"Language: sr\n" "Language: sr\n"
#. name for aaa #. name for aaa
msgid "Ghotuo" msgid "Ghotuo"
msgstr "Ghotuo" msgstr "Готуо"
#. name for aab #. name for aab
msgid "Alumu-Tesu" msgid "Alumu-Tesu"
msgstr "Alumu-Tesu" msgstr "Алуму-Тесу"
#. name for aac #. name for aac
msgid "Ari" msgid "Ari"
msgstr "" msgstr "Ари"
#. name for aad #. name for aad
msgid "Amal" msgid "Amal"
msgstr "Amal" msgstr "Амал"
#. name for aae #. name for aae
msgid "Albanian; Arbëreshë" msgid "Albanian; Arbëreshë"
@ -52,7 +52,7 @@ msgstr "Арабеш; Абу'"
#. name for aai #. name for aai
msgid "Arifama-Miniafia" msgid "Arifama-Miniafia"
msgstr "Орифама-Миниафиа" msgstr "Арифама-Миниафиа"
#. name for aak #. name for aak
msgid "Ankave" msgid "Ankave"
@ -60,15 +60,15 @@ msgstr "Анкаве"
#. name for aal #. name for aal
msgid "Afade" msgid "Afade"
msgstr "" msgstr "Афаде"
#. name for aam #. name for aam
msgid "Aramanik" msgid "Aramanik"
msgstr "" msgstr "Араманик"
#. name for aan #. name for aan
msgid "Anambé" msgid "Anambé"
msgstr "" msgstr "Анамбе"
#. name for aao #. name for aao
msgid "Arabic; Algerian Saharan" msgid "Arabic; Algerian Saharan"
@ -76,11 +76,11 @@ msgstr "Арапски; Алжирска Сахара"
#. name for aap #. name for aap
msgid "Arára; Pará" msgid "Arára; Pará"
msgstr "" msgstr "Арара;Пара"
#. name for aaq #. name for aaq
msgid "Abnaki; Eastern" msgid "Abnaki; Eastern"
msgstr "" msgstr "Абнаки;Источни"
#. name for aar #. name for aar
msgid "Afar" msgid "Afar"
@ -88,39 +88,39 @@ msgstr "Афар"
#. name for aas #. name for aas
msgid "Aasáx" msgid "Aasáx"
msgstr "" msgstr "Асакс"
#. name for aat #. name for aat
msgid "Albanian; Arvanitika" msgid "Albanian; Arvanitika"
msgstr "" msgstr "Албански (арванитска)"
#. name for aau #. name for aau
msgid "Abau" msgid "Abau"
msgstr "" msgstr "Абау"
#. name for aaw #. name for aaw
msgid "Solong" msgid "Solong"
msgstr "" msgstr "Солонг"
#. name for aax #. name for aax
msgid "Mandobo Atas" msgid "Mandobo Atas"
msgstr "" msgstr "Мандобо Атас"
#. name for aaz #. name for aaz
msgid "Amarasi" msgid "Amarasi"
msgstr "" msgstr "Амараси"
#. name for aba #. name for aba
msgid "Abé" msgid "Abé"
msgstr "" msgstr "Абе"
#. name for abb #. name for abb
msgid "Bankon" msgid "Bankon"
msgstr "" msgstr "Банкон"
#. name for abc #. name for abc
msgid "Ayta; Ambala" msgid "Ayta; Ambala"
msgstr "" msgstr "Аита;Амбала"
#. name for abd #. name for abd
msgid "Manide" msgid "Manide"
@ -132,11 +132,11 @@ msgstr "Абнаки; Западни"
#. name for abf #. name for abf
msgid "Abai Sungai" msgid "Abai Sungai"
msgstr "" msgstr "Абаи Сунгаи"
#. name for abg #. name for abg
msgid "Abaga" msgid "Abaga"
msgstr "" msgstr "Абага"
#. name for abh #. name for abh
msgid "Arabic; Tajiki" msgid "Arabic; Tajiki"
@ -148,7 +148,7 @@ msgstr "Абиџи"
#. name for abj #. name for abj
msgid "Aka-Bea" msgid "Aka-Bea"
msgstr "" msgstr "Ака-Беа"
#. name for abk #. name for abk
msgid "Abkhazian" msgid "Abkhazian"
@ -156,31 +156,31 @@ msgstr "Абхазијски"
#. name for abl #. name for abl
msgid "Lampung Nyo" msgid "Lampung Nyo"
msgstr "" msgstr "Лампунг Нио"
#. name for abm #. name for abm
msgid "Abanyom" msgid "Abanyom"
msgstr "" msgstr "Абањјом"
#. name for abn #. name for abn
msgid "Abua" msgid "Abua"
msgstr "" msgstr "Абуа"
#. name for abo #. name for abo
msgid "Abon" msgid "Abon"
msgstr "" msgstr "Абон"
#. name for abp #. name for abp
msgid "Ayta; Abellen" msgid "Ayta; Abellen"
msgstr "" msgstr "Ајта (абелијска)"
#. name for abq #. name for abq
msgid "Abaza" msgid "Abaza"
msgstr "" msgstr "Абаза"
#. name for abr #. name for abr
msgid "Abron" msgid "Abron"
msgstr "" msgstr "Аброн"
#. name for abs #. name for abs
msgid "Malay; Ambonese" msgid "Malay; Ambonese"
@ -188,43 +188,43 @@ msgstr "Малајски; Амбонијски"
#. name for abt #. name for abt
msgid "Ambulas" msgid "Ambulas"
msgstr "" msgstr "Амбулас"
#. name for abu #. name for abu
msgid "Abure" msgid "Abure"
msgstr "" msgstr "Абуре"
#. name for abv #. name for abv
msgid "Arabic; Baharna" msgid "Arabic; Baharna"
msgstr "" msgstr "Арапски (Бахреин)"
#. name for abw #. name for abw
msgid "Pal" msgid "Pal"
msgstr "" msgstr "Пал"
#. name for abx #. name for abx
msgid "Inabaknon" msgid "Inabaknon"
msgstr "" msgstr "Инабакнон"
#. name for aby #. name for aby
msgid "Aneme Wake" msgid "Aneme Wake"
msgstr "" msgstr "Анем Ваке"
#. name for abz #. name for abz
msgid "Abui" msgid "Abui"
msgstr "" msgstr "Абуи"
#. name for aca #. name for aca
msgid "Achagua" msgid "Achagua"
msgstr "" msgstr "Ачагуа"
#. name for acb #. name for acb
msgid "Áncá" msgid "Áncá"
msgstr "" msgstr "Анка"
#. name for acd #. name for acd
msgid "Gikyode" msgid "Gikyode"
msgstr "" msgstr "Гикиод"
#. name for ace #. name for ace
msgid "Achinese" msgid "Achinese"
@ -240,123 +240,123 @@ msgstr "Аколи"
#. name for aci #. name for aci
msgid "Aka-Cari" msgid "Aka-Cari"
msgstr "" msgstr "Ака-Кари"
#. name for ack #. name for ack
msgid "Aka-Kora" msgid "Aka-Kora"
msgstr "" msgstr "Ака-Кора"
#. name for acl #. name for acl
msgid "Akar-Bale" msgid "Akar-Bale"
msgstr "" msgstr "Акар-Бале"
#. name for acm #. name for acm
msgid "Arabic; Mesopotamian" msgid "Arabic; Mesopotamian"
msgstr "" msgstr "Арапски (Месопотамија)"
#. name for acn #. name for acn
msgid "Achang" msgid "Achang"
msgstr "" msgstr "Ачанг"
#. name for acp #. name for acp
msgid "Acipa; Eastern" msgid "Acipa; Eastern"
msgstr "" msgstr "Акипа;Источни"
#. name for acq #. name for acq
msgid "Arabic; Ta'izzi-Adeni" msgid "Arabic; Ta'izzi-Adeni"
msgstr "" msgstr "Арапски; Северни Јемен"
#. name for acr #. name for acr
msgid "Achi" msgid "Achi"
msgstr "" msgstr "Ачи"
#. name for acs #. name for acs
msgid "Acroá" msgid "Acroá"
msgstr "" msgstr "Акроа"
#. name for act #. name for act
msgid "Achterhoeks" msgid "Achterhoeks"
msgstr "" msgstr "Ахтерхекс"
#. name for acu #. name for acu
msgid "Achuar-Shiwiar" msgid "Achuar-Shiwiar"
msgstr "" msgstr "Ачуар-Шивиар"
#. name for acv #. name for acv
msgid "Achumawi" msgid "Achumawi"
msgstr "" msgstr "Ачумави"
#. name for acw #. name for acw
msgid "Arabic; Hijazi" msgid "Arabic; Hijazi"
msgstr "" msgstr "Арапски;Хиџази"
#. name for acx #. name for acx
msgid "Arabic; Omani" msgid "Arabic; Omani"
msgstr "" msgstr "Арапски;Оман"
#. name for acy #. name for acy
msgid "Arabic; Cypriot" msgid "Arabic; Cypriot"
msgstr "" msgstr "Арапски;Кипар"
#. name for acz #. name for acz
msgid "Acheron" msgid "Acheron"
msgstr "" msgstr "Ачерон"
#. name for ada #. name for ada
msgid "Adangme" msgid "Adangme"
msgstr "адангме" msgstr "Адангме"
#. name for adb #. name for adb
msgid "Adabe" msgid "Adabe"
msgstr "" msgstr "Адабе"
#. name for add #. name for add
msgid "Dzodinka" msgid "Dzodinka"
msgstr "" msgstr "Ђодинка"
#. name for ade #. name for ade
msgid "Adele" msgid "Adele"
msgstr "" msgstr "Аделе"
#. name for adf #. name for adf
msgid "Arabic; Dhofari" msgid "Arabic; Dhofari"
msgstr "" msgstr "Арапски;Дофари"
#. name for adg #. name for adg
msgid "Andegerebinha" msgid "Andegerebinha"
msgstr "" msgstr "Андегеребина"
#. name for adh #. name for adh
msgid "Adhola" msgid "Adhola"
msgstr "" msgstr "Адола"
#. name for adi #. name for adi
msgid "Adi" msgid "Adi"
msgstr "" msgstr "Ади"
#. name for adj #. name for adj
msgid "Adioukrou" msgid "Adioukrou"
msgstr "" msgstr "Адиокру"
#. name for adl #. name for adl
msgid "Galo" msgid "Galo"
msgstr "" msgstr "Гало"
#. name for adn #. name for adn
msgid "Adang" msgid "Adang"
msgstr "" msgstr "Аданг"
#. name for ado #. name for ado
msgid "Abu" msgid "Abu"
msgstr "" msgstr "Абу"
#. name for adp #. name for adp
msgid "Adap" msgid "Adap"
msgstr "" msgstr "Адап"
#. name for adq #. name for adq
msgid "Adangbe" msgid "Adangbe"
msgstr "" msgstr "Адангбе"
#. name for adr #. name for adr
msgid "Adonara" msgid "Adonara"
@ -364,59 +364,59 @@ msgstr ""
#. name for ads #. name for ads
msgid "Adamorobe Sign Language" msgid "Adamorobe Sign Language"
msgstr "" msgstr "Адамороб знаковни језик"
#. name for adt #. name for adt
msgid "Adnyamathanha" msgid "Adnyamathanha"
msgstr "" msgstr "Адњаматана"
#. name for adu #. name for adu
msgid "Aduge" msgid "Aduge"
msgstr "" msgstr "Адуге"
#. name for adw #. name for adw
msgid "Amundava" msgid "Amundava"
msgstr "" msgstr "Амундава"
#. name for adx #. name for adx
msgid "Tibetan; Amdo" msgid "Tibetan; Amdo"
msgstr "" msgstr "Тибетански;Амдо"
#. name for ady #. name for ady
msgid "Adyghe" msgid "Adyghe"
msgstr "" msgstr "Адиге"
#. name for adz #. name for adz
msgid "Adzera" msgid "Adzera"
msgstr "" msgstr "Адзера"
#. name for aea #. name for aea
msgid "Areba" msgid "Areba"
msgstr "" msgstr "Ареба"
#. name for aeb #. name for aeb
msgid "Arabic; Tunisian" msgid "Arabic; Tunisian"
msgstr "" msgstr "Арапски;Туниски"
#. name for aec #. name for aec
msgid "Arabic; Saidi" msgid "Arabic; Saidi"
msgstr "" msgstr "Арапски (Горњи Египат)"
#. name for aed #. name for aed
msgid "Argentine Sign Language" msgid "Argentine Sign Language"
msgstr "" msgstr "Аргентински знаковни језик"
#. name for aee #. name for aee
msgid "Pashayi; Northeast" msgid "Pashayi; Northeast"
msgstr "" msgstr "Пашаи (североисточни)"
#. name for aek #. name for aek
msgid "Haeke" msgid "Haeke"
msgstr "" msgstr "Хаеке"
#. name for ael #. name for ael
msgid "Ambele" msgid "Ambele"
msgstr "" msgstr "Амбеле"
#. name for aem #. name for aem
msgid "Arem" msgid "Arem"
@ -460,15 +460,15 @@ msgstr ""
#. name for afd #. name for afd
msgid "Andai" msgid "Andai"
msgstr "" msgstr "Андаи"
#. name for afe #. name for afe
msgid "Putukwam" msgid "Putukwam"
msgstr "" msgstr "Путуквам"
#. name for afg #. name for afg
msgid "Afghan Sign Language" msgid "Afghan Sign Language"
msgstr "" msgstr "Афганистански знаковни језик"
#. name for afh #. name for afh
msgid "Afrihili" msgid "Afrihili"
@ -476,7 +476,7 @@ msgstr "африхили"
#. name for afi #. name for afi
msgid "Akrukay" msgid "Akrukay"
msgstr "" msgstr "Акрукај"
#. name for afk #. name for afk
msgid "Nanubae" msgid "Nanubae"
@ -484,15 +484,15 @@ msgstr ""
#. name for afn #. name for afn
msgid "Defaka" msgid "Defaka"
msgstr "" msgstr "Дефака"
#. name for afo #. name for afo
msgid "Eloyi" msgid "Eloyi"
msgstr "" msgstr "Елоји"
#. name for afp #. name for afp
msgid "Tapei" msgid "Tapei"
msgstr "" msgstr "Тапеи"
#. name for afr #. name for afr
msgid "Afrikaans" msgid "Afrikaans"
@ -500,51 +500,51 @@ msgstr "африканс"
#. name for afs #. name for afs
msgid "Creole; Afro-Seminole" msgid "Creole; Afro-Seminole"
msgstr "" msgstr "Креолски;Афричко-Семинолслки"
#. name for aft #. name for aft
msgid "Afitti" msgid "Afitti"
msgstr "" msgstr "Афити"
#. name for afu #. name for afu
msgid "Awutu" msgid "Awutu"
msgstr "" msgstr "Авуту"
#. name for afz #. name for afz
msgid "Obokuitai" msgid "Obokuitai"
msgstr "" msgstr "Обокуитаи"
#. name for aga #. name for aga
msgid "Aguano" msgid "Aguano"
msgstr "" msgstr "Агвано"
#. name for agb #. name for agb
msgid "Legbo" msgid "Legbo"
msgstr "" msgstr "Легбо"
#. name for agc #. name for agc
msgid "Agatu" msgid "Agatu"
msgstr "" msgstr "Агату"
#. name for agd #. name for agd
msgid "Agarabi" msgid "Agarabi"
msgstr "" msgstr "Агараби"
#. name for age #. name for age
msgid "Angal" msgid "Angal"
msgstr "" msgstr "Ангал"
#. name for agf #. name for agf
msgid "Arguni" msgid "Arguni"
msgstr "" msgstr "Аргуни"
#. name for agg #. name for agg
msgid "Angor" msgid "Angor"
msgstr "" msgstr "Ангор"
#. name for agh #. name for agh
msgid "Ngelima" msgid "Ngelima"
msgstr "" msgstr "Нгелима"
#. name for agi #. name for agi
msgid "Agariya" msgid "Agariya"
@ -588,15 +588,15 @@ msgstr ""
#. name for agt #. name for agt
msgid "Agta; Central Cagayan" msgid "Agta; Central Cagayan"
msgstr "" msgstr "Агта;Централно Кагајански"
#. name for agu #. name for agu
msgid "Aguacateco" msgid "Aguacateco"
msgstr "" msgstr "Агвакатеко"
#. name for agv #. name for agv
msgid "Dumagat; Remontado" msgid "Dumagat; Remontado"
msgstr "" msgstr "Думагат;Ремонтадо"
#. name for agw #. name for agw
msgid "Kahua" msgid "Kahua"
@ -604,27 +604,27 @@ msgstr ""
#. name for agx #. name for agx
msgid "Aghul" msgid "Aghul"
msgstr "" msgstr "Агхул"
#. name for agy #. name for agy
msgid "Alta; Southern" msgid "Alta; Southern"
msgstr "" msgstr "Алта;Јужни"
#. name for agz #. name for agz
msgid "Agta; Mt. Iriga" msgid "Agta; Mt. Iriga"
msgstr "" msgstr "Агта;Мт.Ирига"
#. name for aha #. name for aha
msgid "Ahanta" msgid "Ahanta"
msgstr "" msgstr "Аханта"
#. name for ahb #. name for ahb
msgid "Axamb" msgid "Axamb"
msgstr "" msgstr "Аксамб"
#. name for ahg #. name for ahg
msgid "Qimant" msgid "Qimant"
msgstr "" msgstr "Кимант"
#. name for ahh #. name for ahh
msgid "Aghu" msgid "Aghu"
@ -668,95 +668,95 @@ msgstr ""
#. name for aht #. name for aht
msgid "Ahtena" msgid "Ahtena"
msgstr "" msgstr "Ахтена"
#. name for aia #. name for aia
msgid "Arosi" msgid "Arosi"
msgstr "" msgstr "Ароси"
#. name for aib #. name for aib
msgid "Ainu (China)" msgid "Ainu (China)"
msgstr "" msgstr "Аину(Кина)"
#. name for aic #. name for aic
msgid "Ainbai" msgid "Ainbai"
msgstr "" msgstr "Аинбаи"
#. name for aid #. name for aid
msgid "Alngith" msgid "Alngith"
msgstr "" msgstr "Алнгит"
#. name for aie #. name for aie
msgid "Amara" msgid "Amara"
msgstr "" msgstr "Амара"
#. name for aif #. name for aif
msgid "Agi" msgid "Agi"
msgstr "" msgstr "Аги"
#. name for aig #. name for aig
msgid "Creole English; Antigua and Barbuda" msgid "Creole English; Antigua and Barbuda"
msgstr "" msgstr "Креолски Енглески;Антигва и Барбуда"
#. name for aih #. name for aih
msgid "Ai-Cham" msgid "Ai-Cham"
msgstr "" msgstr "Аи-Чам"
#. name for aii #. name for aii
msgid "Neo-Aramaic; Assyrian" msgid "Neo-Aramaic; Assyrian"
msgstr "" msgstr "Ново-Арамејски;Асирски"
#. name for aij #. name for aij
msgid "Lishanid Noshan" msgid "Lishanid Noshan"
msgstr "" msgstr "Лианид Ношан"
#. name for aik #. name for aik
msgid "Ake" msgid "Ake"
msgstr "" msgstr "Аке"
#. name for ail #. name for ail
msgid "Aimele" msgid "Aimele"
msgstr "" msgstr "Ајмеле"
#. name for aim #. name for aim
msgid "Aimol" msgid "Aimol"
msgstr "" msgstr "Ајмол"
#. name for ain #. name for ain
msgid "Ainu (Japan)" msgid "Ainu (Japan)"
msgstr "" msgstr "Аину(Јапан)"
#. name for aio #. name for aio
msgid "Aiton" msgid "Aiton"
msgstr "" msgstr "Аитон"
#. name for aip #. name for aip
msgid "Burumakok" msgid "Burumakok"
msgstr "" msgstr "Бурумакок"
#. name for aiq #. name for aiq
msgid "Aimaq" msgid "Aimaq"
msgstr "" msgstr "Ајмак"
#. name for air #. name for air
msgid "Airoran" msgid "Airoran"
msgstr "" msgstr "Ајроран"
#. name for ais #. name for ais
msgid "Amis; Nataoran" msgid "Amis; Nataoran"
msgstr "" msgstr "Амис;Натаоран"
#. name for ait #. name for ait
msgid "Arikem" msgid "Arikem"
msgstr "" msgstr "Арикем"
#. name for aiw #. name for aiw
msgid "Aari" msgid "Aari"
msgstr "" msgstr "Аари"
#. name for aix #. name for aix
msgid "Aighon" msgid "Aighon"
msgstr "" msgstr "Аигхон"
#. name for aiy #. name for aiy
msgid "Ali" msgid "Ali"
@ -764,35 +764,35 @@ msgstr ""
#. name for aja #. name for aja
msgid "Aja (Sudan)" msgid "Aja (Sudan)"
msgstr "" msgstr "Аја(Судан)"
#. name for ajg #. name for ajg
msgid "Aja (Benin)" msgid "Aja (Benin)"
msgstr "" msgstr "Аја(Бенин)"
#. name for aji #. name for aji
msgid "Ajië" msgid "Ajië"
msgstr "" msgstr "Ајие"
#. name for ajp #. name for ajp
msgid "Arabic; South Levantine" msgid "Arabic; South Levantine"
msgstr "" msgstr "Арапски;Јужно-Левантински"
#. name for ajt #. name for ajt
msgid "Arabic; Judeo-Tunisian" msgid "Arabic; Judeo-Tunisian"
msgstr "" msgstr "Арапски;Јудео-Туниски"
#. name for aju #. name for aju
msgid "Arabic; Judeo-Moroccan" msgid "Arabic; Judeo-Moroccan"
msgstr "" msgstr "Арапски;Јудео-Марокански"
#. name for ajw #. name for ajw
msgid "Ajawa" msgid "Ajawa"
msgstr "" msgstr "Ајава"
#. name for ajz #. name for ajz
msgid "Karbi; Amri" msgid "Karbi; Amri"
msgstr "" msgstr "Карби;Амри"
#. name for aka #. name for aka
msgid "Akan" msgid "Akan"
@ -800,35 +800,35 @@ msgstr "акан"
#. name for akb #. name for akb
msgid "Batak Angkola" msgid "Batak Angkola"
msgstr "" msgstr "Батак Ангкола"
#. name for akc #. name for akc
msgid "Mpur" msgid "Mpur"
msgstr "" msgstr "Мпур"
#. name for akd #. name for akd
msgid "Ukpet-Ehom" msgid "Ukpet-Ehom"
msgstr "" msgstr "Укпет-Ехом"
#. name for ake #. name for ake
msgid "Akawaio" msgid "Akawaio"
msgstr "" msgstr "Акавајо"
#. name for akf #. name for akf
msgid "Akpa" msgid "Akpa"
msgstr "" msgstr "Акипа"
#. name for akg #. name for akg
msgid "Anakalangu" msgid "Anakalangu"
msgstr "" msgstr "Анакалангу"
#. name for akh #. name for akh
msgid "Angal Heneng" msgid "Angal Heneng"
msgstr "" msgstr "Ангал Хененг"
#. name for aki #. name for aki
msgid "Aiome" msgid "Aiome"
msgstr "" msgstr "Ајоме"
#. name for akj #. name for akj
msgid "Aka-Jeru" msgid "Aka-Jeru"

View File

@ -4,7 +4,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
__appname__ = u'calibre' __appname__ = u'calibre'
numeric_version = (0, 8, 42) numeric_version = (0, 8, 43)
__version__ = u'.'.join(map(unicode, numeric_version)) __version__ = u'.'.join(map(unicode, numeric_version))
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>" __author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"

View File

@ -432,6 +432,15 @@ class iPadOutput(OutputProfile):
''' '''
# }}} # }}}
class iPad3Output(iPadOutput):
screen_size = comic_screen_size = (2048, 1536)
dpi = 264.0
name = 'iPad 3'
short_name = 'ipad3'
description = _('Intended for the iPad 3 and similar devices with a '
'resolution of 1536x2048')
class TabletOutput(iPadOutput): class TabletOutput(iPadOutput):
name = 'Tablet' name = 'Tablet'
short_name = 'tablet' short_name = 'tablet'
@ -755,7 +764,7 @@ class PocketBook900Output(OutputProfile):
output_profiles = [OutputProfile, SonyReaderOutput, SonyReader300Output, output_profiles = [OutputProfile, SonyReaderOutput, SonyReader300Output,
SonyReader900Output, MSReaderOutput, MobipocketOutput, HanlinV3Output, SonyReader900Output, MSReaderOutput, MobipocketOutput, HanlinV3Output,
HanlinV5Output, CybookG3Output, CybookOpusOutput, KindleOutput, HanlinV5Output, CybookG3Output, CybookOpusOutput, KindleOutput,
iPadOutput, KoboReaderOutput, TabletOutput, SamsungGalaxy, iPadOutput, iPad3Output, KoboReaderOutput, TabletOutput, SamsungGalaxy,
SonyReaderLandscapeOutput, KindleDXOutput, IlliadOutput, SonyReaderLandscapeOutput, KindleDXOutput, IlliadOutput,
IRexDR1000Output, IRexDR800Output, JetBook5Output, NookOutput, IRexDR1000Output, IRexDR800Output, JetBook5Output, NookOutput,
BambookOutput, NookColorOutput, PocketBook900Output, GenericEink, BambookOutput, NookColorOutput, PocketBook900Output, GenericEink,

View File

@ -51,8 +51,9 @@ Run an embedded python interpreter.
'with sqlite3 works.') 'with sqlite3 works.')
parser.add_option('-p', '--py-console', help='Run python console', parser.add_option('-p', '--py-console', help='Run python console',
default=False, action='store_true') default=False, action='store_true')
parser.add_option('-m', '--inspect-mobi', parser.add_option('-m', '--inspect-mobi', action='store_true',
help='Inspect the MOBI file at the specified path', default=None) default=False,
help='Inspect the MOBI file(s) at the specified path(s)')
parser.add_option('--test-build', help='Test binary modules in build', parser.add_option('--test-build', help='Test binary modules in build',
action='store_true', default=False) action='store_true', default=False)
@ -232,9 +233,13 @@ def main(args=sys.argv):
if len(args) > 1 and os.access(args[-1], os.R_OK): if len(args) > 1 and os.access(args[-1], os.R_OK):
sql_dump = args[-1] sql_dump = args[-1]
reinit_db(opts.reinitialize_db, sql_dump=sql_dump) reinit_db(opts.reinitialize_db, sql_dump=sql_dump)
elif opts.inspect_mobi is not None: elif opts.inspect_mobi:
from calibre.ebooks.mobi.debug import inspect_mobi from calibre.ebooks.mobi.debug import inspect_mobi
inspect_mobi(opts.inspect_mobi) for path in args[1:]:
prints('Inspecting:', path)
inspect_mobi(path)
print
elif opts.test_build: elif opts.test_build:
from calibre.test_build import test from calibre.test_build import test
test() test()

View File

@ -405,7 +405,7 @@ class MOBIHeader(object): # {{{
class TagX(object): # {{{ class TagX(object): # {{{
def __init__(self, raw, control_byte_count): def __init__(self, raw):
self.tag = ord(raw[0]) self.tag = ord(raw[0])
self.num_values = ord(raw[1]) self.num_values = ord(raw[1])
self.bitmask = ord(raw[2]) self.bitmask = ord(raw[2])
@ -465,8 +465,7 @@ class SecondaryIndexHeader(object): # {{{
num_tagx_entries = len(tag_table) // 4 num_tagx_entries = len(tag_table) // 4
self.tagx_entries = [] self.tagx_entries = []
for i in range(num_tagx_entries): for i in range(num_tagx_entries):
self.tagx_entries.append(TagX(tag_table[i*4:(i+1)*4], self.tagx_entries.append(TagX(tag_table[i*4:(i+1)*4]))
self.tagx_control_byte_count))
if self.tagx_entries and not self.tagx_entries[-1].is_eof: if self.tagx_entries and not self.tagx_entries[-1].is_eof:
raise ValueError('TAGX last entry is not EOF') raise ValueError('TAGX last entry is not EOF')
@ -569,8 +568,7 @@ class IndexHeader(object): # {{{
num_tagx_entries = len(tag_table) // 4 num_tagx_entries = len(tag_table) // 4
self.tagx_entries = [] self.tagx_entries = []
for i in range(num_tagx_entries): for i in range(num_tagx_entries):
self.tagx_entries.append(TagX(tag_table[i*4:(i+1)*4], self.tagx_entries.append(TagX(tag_table[i*4:(i+1)*4]))
self.tagx_control_byte_count))
if self.tagx_entries and not self.tagx_entries[-1].is_eof: if self.tagx_entries and not self.tagx_entries[-1].is_eof:
raise ValueError('TAGX last entry is not EOF') raise ValueError('TAGX last entry is not EOF')
@ -640,57 +638,29 @@ class Tag(object): # {{{
TAG_MAP = { TAG_MAP = {
1: ('offset', 'Offset in HTML'), 1: ('offset', 'Offset in HTML'),
2: ('size', 'Size in HTML'), 2: ('size', 'Size in HTML'),
3: ('label_offset', 'Offset to label in CNCX'), 3: ('label_offset', 'Label offset in CNCX'),
4: ('depth', 'Depth of this entry in TOC'), 4: ('depth', 'Depth of this entry in TOC'),
5: ('class_offset', 'Class offset in CNCX'),
6: ('pos_fid', 'File Index'),
11: ('secondary', '[unknown, unknown, ' 11: ('secondary', '[unknown, unknown, '
'tag type from TAGX in primary index header]'), 'tag type from TAGX in primary index header]'),
# The remaining tag types have to be interpreted subject to the type 21: ('parent_index', 'Parent'),
# of index entry they are present in 22: ('first_child_index', 'First child'),
23: ('last_child_index', 'Last child'),
69 : ('image_index', 'Offset from first image record to the'
' image record associated with this entry'
' (masthead for periodical or thumbnail for'
' article entry).'),
70 : ('desc_offset', 'Description offset in cncx'),
71 : ('author_offset', 'Author offset in cncx'),
72 : ('image_caption_offset', 'Image caption offset in cncx'),
73 : ('image_attr_offset', 'Image attribution offset in cncx'),
} }
INTERPRET_MAP = {
'subchapter': {
21 : ('Parent chapter index', 'parent_index')
},
'article' : {
5 : ('Class offset in cncx', 'class_offset'),
21 : ('Parent section index', 'parent_index'),
69 : ('Offset from first image record num to the'
' image record associated with this article',
'image_index'),
70 : ('Description offset in cncx', 'desc_offset'),
71 : ('Author offset in cncx', 'author_offset'),
72 : ('Image caption offset in cncx',
'image_caption_offset'),
73 : ('Image attribution offset in cncx',
'image_attr_offset'),
},
'chapter_with_subchapters' : {
22 : ('First subchapter index', 'first_child_index'),
23 : ('Last subchapter index', 'last_child_index'),
},
'periodical' : {
5 : ('Class offset in cncx', 'class_offset'),
22 : ('First section index', 'first_child_index'),
23 : ('Last section index', 'last_child_index'),
69 : ('Offset from first image record num to masthead'
' record', 'image_index'),
},
'section' : {
5 : ('Class offset in cncx', 'class_offset'),
21 : ('Periodical index', 'parent_index'),
22 : ('First article index', 'first_child_index'),
23 : ('Last article index', 'last_child_index'),
},
}
def __init__(self, tagx, vals, entry_type, cncx): def __init__(self, tagx, vals, entry_type, cncx):
self.value = vals if len(vals) > 1 else vals[0] if vals else None self.value = vals if len(vals) > 1 else vals[0] if vals else None
self.entry_type = entry_type self.entry_type = entry_type
@ -700,17 +670,12 @@ class Tag(object): # {{{
if tag_type in self.TAG_MAP: if tag_type in self.TAG_MAP:
self.attr, self.desc = self.TAG_MAP[tag_type] self.attr, self.desc = self.TAG_MAP[tag_type]
else: else:
try: print ('Unknown tag value: %d in entry type: %s'%(tag_type,
td = self.INTERPRET_MAP[entry_type] entry_type))
except:
raise ValueError('Unknown entry type: %s'%entry_type)
try:
self.desc, self.attr = td[tag_type]
except:
print ('Unknown tag value: %d'%tag_type)
self.desc = '??Unknown (tag value: %d type: %s)'%( self.desc = '??Unknown (tag value: %d type: %s)'%(
tag_type, entry_type) tag_type, entry_type)
self.attr = 'unknown' self.attr = 'unknown'
if '_offset' in self.attr: if '_offset' in self.attr:
self.cncx_value = cncx[self.value] self.cncx_value = cncx[self.value]
@ -725,40 +690,21 @@ class IndexEntry(object): # {{{
''' '''
The index is made up of entries, each of which is represented by an The index is made up of entries, each of which is represented by an
instance of this class. Index entries typically point to offsets int eh instance of this class. Index entries typically point to offsets in the
HTML, specify HTML sizes and point to text strings in the CNCX that are HTML, specify HTML sizes and point to text strings in the CNCX that are
used in the navigation UI. used in the navigation UI.
''' '''
TYPES = {
# Present in secondary index record
0x01 : 'null',
0x02 : 'publication_meta',
# Present in book type files
0x0f : 'chapter',
0x6f : 'chapter_with_subchapters',
0x1f : 'subchapter',
# Present in periodicals
0xdf : 'periodical',
0xff : 'section',
0x3f : 'article',
}
def __init__(self, ident, entry_type, raw, cncx, tagx_entries, def __init__(self, ident, entry_type, raw, cncx, tagx_entries,
control_byte_count): control_byte_count):
self.index = ident self.index = ident
self.raw = raw self.raw = raw
self.tags = [] self.tags = []
self.entry_type_raw = entry_type self.entry_type = entry_type
self.byte_size = len(raw) self.byte_size = len(raw)
orig_raw = raw orig_raw = raw
try:
self.entry_type = self.TYPES[entry_type]
except KeyError:
raise ValueError('Unknown Index Entry type: %s'%bin(entry_type))
if control_byte_count not in (1, 2): if control_byte_count not in (1, 2):
raise ValueError('Unknown control byte count: %d'% raise ValueError('Unknown control byte count: %d'%
control_byte_count) control_byte_count)
@ -776,7 +722,7 @@ class IndexEntry(object): # {{{
for tag in expected_tags: for tag in expected_tags:
vals = [] vals = []
if tag.tag > 64: if tag.tag > 0b1000000: # 0b1000000 = 64
has_tag = flags & 0b1 has_tag = flags & 0b1
flags = flags >> 1 flags = flags >> 1
if not has_tag: continue if not has_tag: continue
@ -843,10 +789,17 @@ class IndexEntry(object): # {{{
return tag.value return tag.value
return -1 return -1
@property
def pos_fid(self):
for tag in self.tags:
if tag.attr == 'pos_fid':
return tag.value
return [0, 0]
def __str__(self): def __str__(self):
ans = ['Index Entry(index=%s, entry_type=%s, flags=%s, ' ans = ['Index Entry(index=%s, entry_type=%s, flags=%s, '
'length=%d, byte_size=%d)'%( 'length=%d, byte_size=%d)'%(
self.index, self.entry_type, bin(self.flags)[2:], self.index, bin(self.entry_type), bin(self.flags)[2:],
len(self.tags), self.byte_size)] len(self.tags), self.byte_size)]
for tag in self.tags: for tag in self.tags:
if tag.value is not None: if tag.value is not None:

View File

@ -105,9 +105,11 @@ def get_tag_map(control_byte_count, tags, data, start, end):
if value != 0: if value != 0:
if value == mask: if value == mask:
if count_set_bits(mask) > 1: if count_set_bits(mask) > 1:
# If all bits of masked value are set and the mask has more than one bit, a variable width value # If all bits of masked value are set and the mask has more
# will follow after the control bytes which defines the length of bytes (NOT the value count!) # than one bit, a variable width value will follow after
# which will contain the corresponding variable width values. # the control bytes which defines the length of bytes (NOT
# the value count!) which will contain the corresponding
# variable width values.
value, consumed = decint(data[data_start:]) value, consumed = decint(data[data_start:])
data_start += consumed data_start += consumed
ptags.append((tag, None, value, values_per_entry)) ptags.append((tag, None, value, values_per_entry))

View File

@ -352,9 +352,12 @@ def parse_html(data, log=None, decoder=None, preprocessor=None,
title = etree.SubElement(head, XHTML('title')) title = etree.SubElement(head, XHTML('title'))
title.text = _('Unknown') title.text = _('Unknown')
elif not xpath(data, '/h:html/h:head/h:title'): elif not xpath(data, '/h:html/h:head/h:title'):
log.warn('File %s missing <title/> element' % filename)
title = etree.SubElement(head, XHTML('title')) title = etree.SubElement(head, XHTML('title'))
title.text = _('Unknown') title.text = _('Unknown')
# Ensure <title> is not empty
title = xpath(data, '/h:html/h:head/h:title')[0]
if not title.text or not title.text.strip():
title.text = _('Unknown')
# Remove any encoding-specifying <meta/> elements # Remove any encoding-specifying <meta/> elements
for meta in META_XP(data): for meta in META_XP(data):
meta.getparent().remove(meta) meta.getparent().remove(meta)

View File

@ -242,11 +242,18 @@ class PocketBook900(PocketBook):
class iPhone(Device): class iPhone(Device):
name = 'iPad or iPhone/iTouch + Stanza' name = 'iPhone/iTouch'
output_format = 'EPUB' output_format = 'EPUB'
manufacturer = 'Apple' manufacturer = 'Apple'
id = 'iphone' id = 'iphone'
supports_color = True supports_color = True
output_profile = 'ipad'
class iPad(iPhone):
name = 'iPad'
id = 'ipad'
output_profile = 'ipad3'
class Android(Device): class Android(Device):

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff