From fb1c5286ceaab21af850864bbd02a0c9763d9509 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 09:13:10 -0700 Subject: [PATCH 01/12] Fix #7960 (Updated recipe for La Nacion) --- resources/recipes/lanacion.recipe | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/recipes/lanacion.recipe b/resources/recipes/lanacion.recipe index 19f6c1c897..050cb2e79c 100644 --- a/resources/recipes/lanacion.recipe +++ b/resources/recipes/lanacion.recipe @@ -78,4 +78,6 @@ class Lanacion(BasicNewsRecipe): ] def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] return self.adeify_images(soup) From d76a416eb2b97708d7f493b6bc82c54ce6f724b0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 09:54:00 -0700 Subject: [PATCH 02/12] PocketBook 701 driver: Swap the main memory and card drives on windows --- src/calibre/devices/eb600/driver.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/calibre/devices/eb600/driver.py b/src/calibre/devices/eb600/driver.py index bc8b87533c..246b753fa8 100644 --- a/src/calibre/devices/eb600/driver.py +++ b/src/calibre/devices/eb600/driver.py @@ -266,3 +266,12 @@ class POCKETBOOK701(USBMS): VENDOR_NAME = 'ANDROID' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '__UMS_COMPOSITE' + def windows_sort_drives(self, drives): + if len(drives) < 2: return drives + main = drives.get('main', None) + carda = drives.get('carda', None) + if main and carda: + drives['main'] = carda + drives['carda'] = main + return drives + From 4f9b1dd20a3f60b38b943434afc24b73662d4244 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 11:16:11 -0700 Subject: [PATCH 03/12] E-book viewer: Remove workaround for font-face rules as QtWebKit supports loading fonts directly as of Qt 4.7 --- src/calibre/ebooks/oeb/iterator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calibre/ebooks/oeb/iterator.py b/src/calibre/ebooks/oeb/iterator.py index 10180541a1..6820709b3e 100644 --- a/src/calibre/ebooks/oeb/iterator.py +++ b/src/calibre/ebooks/oeb/iterator.py @@ -257,7 +257,6 @@ class EbookIterator(object): s.max_page = s.start_page + s.pages - 1 self.toc = self.opf.toc - self.find_embedded_fonts() self.read_bookmarks() return self From a5410546c14f4326d5f07da8f82dad0d0f535a3f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 11:53:06 -0700 Subject: [PATCH 04/12] Fix #7973 (Support for LG Optimus S (LS670) Running Android 2.2.1) --- src/calibre/devices/android/driver.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index f2a5752bd4..fecfa88ea5 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -24,7 +24,7 @@ class ANDROID(USBMS): 0xc92 : [0x100], 0xc97: [0x226]}, # Eken - 0x040d : { 0x8510 : [0x0001] }, + 0x040d : { 0x8510 : [0x0001], 0x0851 : [0x1] }, # Motorola 0x22b8 : { 0x41d9 : [0x216], 0x2d67 : [0x100], 0x41db : [0x216], @@ -49,8 +49,9 @@ class ANDROID(USBMS): # Dell 0x413c : { 0xb007 : [0x0100, 0x0224]}, - # Eken? - 0x040d : { 0x0851 : [0x0001]}, + # LG + 0x1004 : { 0x61cc : [0x100] }, + } EBOOK_DIR_MAIN = ['eBooks/import', 'wordplayer/calibretransfer', 'Books'] EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of directories to ' @@ -59,7 +60,7 @@ class ANDROID(USBMS): EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN) VENDOR_NAME = ['HTC', 'MOTOROLA', 'GOOGLE_', 'ANDROID', 'ACER', - 'GT-I5700', 'SAMSUNG', 'DELL', 'LINUX'] + 'GT-I5700', 'SAMSUNG', 'DELL', 'LINUX', 'GOOGLE'] WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE', '__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897', 'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959', 'SAMSUNG_ANDROID', From c4ff92af86e14d8627ef58266a69737aaea414a7 Mon Sep 17 00:00:00 2001 From: John Schember Date: Sun, 19 Dec 2010 17:19:30 -0500 Subject: [PATCH 05/12] GUI: Dialog to ask the user where they want to delete selected books from when they are listed on a connected device. --- src/calibre/gui2/actions/delete.py | 27 +++- .../gui2/dialogs/confirm_delete_location.py | 41 +++++++ .../gui2/dialogs/confirm_delete_location.ui | 116 ++++++++++++++++++ src/calibre/gui2/library/views.py | 4 +- 4 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 src/calibre/gui2/dialogs/confirm_delete_location.py create mode 100644 src/calibre/gui2/dialogs/confirm_delete_location.ui diff --git a/src/calibre/gui2/actions/delete.py b/src/calibre/gui2/actions/delete.py index a0f49a7e9a..24dd1d3e5c 100644 --- a/src/calibre/gui2/actions/delete.py +++ b/src/calibre/gui2/actions/delete.py @@ -12,6 +12,7 @@ from PyQt4.Qt import QMenu, QObject, QTimer from calibre.gui2 import error_dialog from calibre.gui2.dialogs.delete_matching_from_device import DeleteMatchingFromDeviceDialog from calibre.gui2.dialogs.confirm_delete import confirm +from calibre.gui2.dialogs.confirm_delete_location import confirm_location from calibre.gui2.actions import InterfaceAction single_shot = partial(QTimer.singleShot, 10) @@ -223,7 +224,31 @@ class DeleteAction(InterfaceAction): rows = view.selectionModel().selectedRows() if not rows or len(rows) == 0: return + # Library view is visible. if self.gui.stack.currentIndex() == 0: + # Ask the user if they want to delete the book from the library or device if it is in both. + if self.gui.device_manager.is_device_connected: + on_device = False + on_device_ids = self._get_selected_ids() + for id in on_device_ids: + res = self.gui.book_on_device(id) + if res[0] or res[1] or res[2]: + on_device = True + if on_device: + break + if on_device: + loc = confirm_location('

' + _('Some of the selected books are on the attached device. ' + 'Where do you want the selected files deleted from?'), + self.gui) + if not loc: + return + elif loc == 'dev': + self.remove_matching_books_from_device() + return + elif loc == 'both': + self.remove_matching_books_from_device() + # The following will run if the selected books are not on a connected device. + # The user has selected to delete from the library or the device and library. if not confirm('

'+_('The selected books will be ' 'permanently deleted and the files ' 'removed from your calibre library. Are you sure?') @@ -239,7 +264,7 @@ class DeleteAction(InterfaceAction): else: self.__md = MultiDeleter(self.gui, rows, partial(self.library_ids_deleted, current_row=row)) - + # Device view is visible. else: if not confirm('

'+_('The selected books will be ' 'permanently deleted ' diff --git a/src/calibre/gui2/dialogs/confirm_delete_location.py b/src/calibre/gui2/dialogs/confirm_delete_location.py new file mode 100644 index 0000000000..58580ad4d8 --- /dev/null +++ b/src/calibre/gui2/dialogs/confirm_delete_location.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' \ + '2010, John Schember ' +__docformat__ = 'restructuredtext en' + +from functools import partial + +from calibre.gui2.dialogs.confirm_delete_location_ui import Ui_Dialog +from PyQt4.Qt import QDialog, Qt, QPixmap, QIcon + +class Dialog(QDialog, Ui_Dialog): + + def __init__(self, msg, name, parent): + QDialog.__init__(self, parent) + self.setupUi(self) + + self.loc = None + self.msg.setText(msg) + self.name = name + self.buttonBox.setFocus(Qt.OtherFocusReason) + self.button_lib.clicked.connect(partial(self.set_loc, 'lib')) + self.button_device.clicked.connect(partial(self.set_loc, 'dev')) + self.button_both.clicked.connect(partial(self.set_loc, 'both')) + + def set_loc(self, loc): + self.loc = loc + self.accept() + + def choice(self): + return self.loc + + +def confirm_location(msg, name, parent=None, pixmap='dialog_warning.png'): + d = Dialog(msg, name, parent) + d.label.setPixmap(QPixmap(I(pixmap))) + d.setWindowIcon(QIcon(I(pixmap))) + d.resize(d.sizeHint()) + if d.exec_() == d.Accepted: + return d.choice() + return None diff --git a/src/calibre/gui2/dialogs/confirm_delete_location.ui b/src/calibre/gui2/dialogs/confirm_delete_location.ui new file mode 100644 index 0000000000..70d6bc631b --- /dev/null +++ b/src/calibre/gui2/dialogs/confirm_delete_location.ui @@ -0,0 +1,116 @@ + + + Dialog + + + + 0 + 0 + 459 + 300 + + + + Where do you want to delete from? + + + + :/images/dialog_warning.png:/images/dialog_warning.png + + + + + + + + :/images/dialog_warning.png + + + + + + + TextLabel + + + true + + + + + + + + + + + Library + + + + + + + Device + + + + + + + Library and Device + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel + + + + + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 0e0cc0eec2..a6285c6656 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -123,8 +123,8 @@ class BooksView(QTableView): # {{{ elif action == 'show': h.setSectionHidden(idx, False) if h.sectionSize(idx) < 3: - sz = h.sectionSizeHint(idx) - h.resizeSection(idx, sz) + sz = h.sectionSizeHint(idx) + h.resizeSection(idx, sz) elif action == 'ascending': self.sortByColumn(idx, Qt.AscendingOrder) elif action == 'descending': From 7bc9608367f528632be7cf589878e26a4259a5c4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 17:41:12 -0700 Subject: [PATCH 06/12] Fix #7966 (Request for Samsung Galaxy Tab Support) --- src/calibre/devices/android/driver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index fecfa88ea5..492b00617d 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -64,9 +64,9 @@ class ANDROID(USBMS): WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE', '__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897', 'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959', 'SAMSUNG_ANDROID', - 'SCH-I500_CARD', 'SPH-D700_CARD', 'MB810'] + 'SCH-I500_CARD', 'SPH-D700_CARD', 'MB810', 'GT-P1000'] WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897', - 'FILE-STOR_GADGET', 'SGH-T959', 'SAMSUNG_ANDROID'] + 'FILE-STOR_GADGET', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD'] OSX_MAIN_MEM = 'HTC Android Phone Media' From ff466758af508b73259c8ea037339229e057b498 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 17:46:00 -0700 Subject: [PATCH 07/12] ... --- src/calibre/devices/misc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/misc.py b/src/calibre/devices/misc.py index 68f4dba9a9..52952356f8 100644 --- a/src/calibre/devices/misc.py +++ b/src/calibre/devices/misc.py @@ -104,7 +104,7 @@ class PDNOVEL(USBMS): VENDOR_NAME = 'ANDROID' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '__UMS_COMPOSITE' - THUMBNAIL_HEIGHT = 144 + THUMBNAIL_HEIGHT = 130 EBOOK_DIR_MAIN = 'eBooks' SUPPORTS_SUB_DIRS = False From 9582cded9d429a86cba155ded434b32e78a3a5aa Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 18:57:11 -0700 Subject: [PATCH 08/12] More work on the comments editor --- imgsrc/{edit_copy.svg => edit-copy.svg} | 0 imgsrc/edit-cut.svg | 831 +++++ imgsrc/edit-paste.svg | 3302 +++++++++++++++++ imgsrc/swap.svg | 722 ---- .../images/{edit_copy.png => edit-copy.png} | Bin resources/images/edit-cut.png | Bin 0 -> 11657 bytes resources/images/edit-paste.png | Bin 0 -> 4949 bytes resources/images/edit-redo.png | Bin 0 -> 3383 bytes resources/images/edit-undo.png | Bin 0 -> 1986 bytes resources/images/format-text-subscript.png | Bin 0 -> 7332 bytes resources/images/format-text-superscript.png | Bin 0 -> 7279 bytes resources/images/swap.png | Bin 13638 -> 10850 bytes src/calibre/gui2/comments_editor.py | 64 +- src/calibre/gui2/viewer/main.ui | 2 +- 14 files changed, 4183 insertions(+), 738 deletions(-) rename imgsrc/{edit_copy.svg => edit-copy.svg} (100%) create mode 100644 imgsrc/edit-cut.svg create mode 100644 imgsrc/edit-paste.svg delete mode 100644 imgsrc/swap.svg rename resources/images/{edit_copy.png => edit-copy.png} (100%) create mode 100644 resources/images/edit-cut.png create mode 100644 resources/images/edit-paste.png create mode 100644 resources/images/edit-redo.png create mode 100644 resources/images/edit-undo.png create mode 100644 resources/images/format-text-subscript.png create mode 100644 resources/images/format-text-superscript.png diff --git a/imgsrc/edit_copy.svg b/imgsrc/edit-copy.svg similarity index 100% rename from imgsrc/edit_copy.svg rename to imgsrc/edit-copy.svg diff --git a/imgsrc/edit-cut.svg b/imgsrc/edit-cut.svg new file mode 100644 index 0000000000..f078b52e04 --- /dev/null +++ b/imgsrc/edit-cut.svg @@ -0,0 +1,831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imgsrc/edit-paste.svg b/imgsrc/edit-paste.svg new file mode 100644 index 0000000000..d22a8bb7dd --- /dev/null +++ b/imgsrc/edit-paste.svg @@ -0,0 +1,3302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/imgsrc/swap.svg b/imgsrc/swap.svg deleted file mode 100644 index aa62316b34..0000000000 --- a/imgsrc/swap.svg +++ /dev/null @@ -1,722 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/images/edit_copy.png b/resources/images/edit-copy.png similarity index 100% rename from resources/images/edit_copy.png rename to resources/images/edit-copy.png diff --git a/resources/images/edit-cut.png b/resources/images/edit-cut.png new file mode 100644 index 0000000000000000000000000000000000000000..b995283754579ac4e4ddbf15ca791fa58bd45c90 GIT binary patch literal 11657 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 literal 0 HcmV?d00001 diff --git a/resources/images/edit-paste.png b/resources/images/edit-paste.png new file mode 100644 index 0000000000000000000000000000000000000000..b790efec251c872ec2687e4729c8292dc928b463 GIT binary patch literal 4949 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 N002ovPDHLkV1fjvU2OmW literal 0 HcmV?d00001 diff --git a/resources/images/edit-undo.png b/resources/images/edit-undo.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d7e8ba56eeb0e4ea9083e4979a7f7b79448b39 GIT binary patch literal 1986 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 literal 0 HcmV?d00001 diff --git a/resources/images/format-text-superscript.png b/resources/images/format-text-superscript.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc31ab7838535ae4c837f2f384dfedbeeca4206 GIT binary patch literal 7279 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 ZP}x7vs+-mlvcUWj2&t^0RIXqa@<0C}zl;C? literal 0 HcmV?d00001 diff --git a/resources/images/swap.png b/resources/images/swap.png index e5aeb60e223db413010b0539566c2cfaff0c89bd..7f8d40ca1d4dfd5da26db107bede17d1f817f140 100644 GIT binary patch literal 10850 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 literal 13638 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 - :/images/edit_copy.png:/images/edit_copy.png + :/images/edit-copy.png:/images/edit-copy.png Copy to clipboard From dd05c065e2df0194e34c88d11014f6e75f6ee939 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 22:07:49 -0700 Subject: [PATCH 09/12] ... --- resources/images/format-indent-less.png | Bin 0 -> 1303 bytes resources/images/format-indent-more.png | Bin 0 -> 3668 bytes resources/images/format-justify-center.png | Bin 0 -> 1072 bytes resources/images/format-justify-fill.png | Bin 0 -> 1021 bytes resources/images/format-justify-left.png | Bin 0 -> 1099 bytes resources/images/format-justify-right.png | Bin 0 -> 1105 bytes resources/images/format-list-ordered.png | Bin 0 -> 4237 bytes resources/images/format-list-unordered.png | Bin 0 -> 3863 bytes src/calibre/gui2/comments_editor.py | 50 +++++++++++++++++++-- 9 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 resources/images/format-indent-less.png create mode 100644 resources/images/format-indent-more.png create mode 100644 resources/images/format-justify-center.png create mode 100644 resources/images/format-justify-fill.png create mode 100644 resources/images/format-justify-left.png create mode 100644 resources/images/format-justify-right.png create mode 100644 resources/images/format-list-ordered.png create mode 100644 resources/images/format-list-unordered.png diff --git a/resources/images/format-indent-less.png b/resources/images/format-indent-less.png new file mode 100644 index 0000000000000000000000000000000000000000..8662c348717820a1b9176d51a6e1623a4612b55b GIT binary patch literal 1303 zcmV+y1?c*TP)5NQI!Kq+A9cgDs96lRgC0FoLT`Ehy$0pgs8

|L)}&rau! z;%wyZ?kskUw-O(EdSmZ;_kHu;d^59)Oeux`Gh}9G1Oi3i;r9tnKPw?m;2NRk9trj}&^Ath!6N+t59%|BziWP3bTB80a? z;Sjr4sGw{56J5*SyLt20@2&(MOh35Xb)ob5#fx3dt*xyrfG`vaI=f*B1K|O2lUQIO z$!?>^&vu)gkH;hcG$g=`Qi~B`-eUegZHu*OxsAr}-=ru&ETSG{v!DL;Vt0sj@U>e= z!ij()N4{)t?`Xc%+sA_r$^ggC>w52fh;47FfB*CHHUNC?NI-3F`ZykovtBPi&|sP- zMAaz7qVXH9CB*7Iim4B(v{LqG6b;ptfR@h(viI%yG{|PN?ka?eV4BB)%|NkO1d9+4 z0$dTmkw7l@3Ub;js2Acb35drNq7uRw-3eHD(53fvLxbHH8K@UJ+B?MrP>uxzkfmb= zI?i{(2VEc5wLH)SDG(4Ki~tqfpus9+5zh=zbitKT%42jVKq=v81r-u6Zz34PE@L2{ z&!GxctuV1z{2gV$63VC}3Pm0EUhYCQkk8A03DhW~#61J;=Pp#OLWW_Wy_*aWk&IG7 z5DkQcF^VU$Agd5X6%r2OK+7l<&cr@4u)e+yYinyz3r0ppsv5=?^->{X@sTdV=H@2M z&CQ)U0qj>IoQZv8V0?TWCMG7J7VPiugBvtWgW1_xn4Fxfq~JY>DfO2D-1MN;0~;F~ zFf%jbNRU#o3N>skWR^@=TwH|Z>b}D~AlOp+sh+K^EtsF5hiVXsM9Kts zou|_q`~jJwDBuUg&yEbe7skfMs#YOX7&Js%TN`}+)g4H#Bw=BpvO{=0C*M*6^&dp7 zAcVlt(Gd(>8-UAweK7sqG#ngc!2|yH#HWc|E(fwK!#8)og&r89?A31m9Tdt^`c8wDc_b?2GR1ZY-m~ zl~3w<3JjyTPU$a(vyY1r9D5Yf$ck_8wKTyAnvHQhy8%4h|4PrgnCAhS)`-IH}-86h%S98boiK{e7j!-<1jQ zjxbFVC#XvQwpAX->mZo|lkF$jZ1!F+XJ`K_aYn!&{soWHf>$Snx~u>I N002ovPDHLkV1m^9Pd@+v literal 0 HcmV?d00001 diff --git a/resources/images/format-indent-more.png b/resources/images/format-indent-more.png new file mode 100644 index 0000000000000000000000000000000000000000..e1244ef47cbba4056b6a73340b84e45d2111e029 GIT binary patch literal 3668 zcmZu!c{tSH_kWL>rm;_`217HJk}W$$j7ed##aL5_u_U`9Y7EA{f9zY0EK!LTBkQ0- zcAqe^jt~)j?6QpS^!xjFp6A^2+;h%zo_p>+&wZT}XJ(?$%^}1A006h4fu1=_lKwIb z%342aJ9V=JBmirOhq34p%q5n!XZJO*4Pg1x|1t)O~9ZL(9N;PgZ4?AJ9-cgGf0_=YHv4m248&dqh9;9|gP-9jJV zc}bN?POlwy_pt;ulDxh!CcBuM(meNoBc5T$-atn}5BP(tY46RB9N3eyw^Q>>9A+&_a}8cVpl?@?P?u&sRl z^U#{!yt4H)GLrXYGjr7vrbHLBZD67A*%?dhJJFZUU1@ z%yDHa2^k~{_#%(ulXT17;ou8k7N1M55Dsr+(T8Awpbe}npZj#cIuYLv$ z1}pUHZLz^Lcw*pe8RiN&T|`s{$rlM5TumkI{{BAR{CGOtJia6sqm)K=LO3Q`zJAwG z#>Z;!PcRL}yJy-ya{{Ed1ax{Yra%-H^e2w}U}xee^@}}nzTm>t zo0W5)U)F3jd5P#x6ynONmRDB5&Rpg=*;{Y9D)1ax1j{G;$>7T`G#cR876i-0QeMxN z{iuKDh%?%WQdP@aH?e!4>J@gpCBZsEtf>OnPL4=L1AIL)V4>$~kr@fz zR#oAe1;qeEAwchcEcw? zXoz{2@WI%hcEDUrj!f#UlTj&99w8@Z@KL=YHIZ00^RD*}!VX|KwvGBwvf@fC&+eVX zSq;@&etl?x&ADk#1~SVs!U<9H>gm}hcrA=z7NH0)9Uibc-aZZ1;OWY;G}NW$;lJu7 z6KthUB}ko2fG3Bkjp{&2df((D1=z`W+y&3EP8W2_oi{e@(9*E#*De4SmeEbnzzSm~ zzAS8HF3`j?MCsB^08pN2;wJ*Mi;TaP_#rKx&)kW1-vIoj`P@}u2YWAk z-VZf@6%-Lk!V?Ej12j=!2^3X!7#z7h5Yb|%Bn459-Q!t&fHj2-3j%{g)anP_&{$nm zSv`OK1w`1AQh3or02r8e6w&QHd`a-iyasOK!3gU%`iW4Vfz5J-7o&+zWD@HT++oCW zZm8j6pl=Mr7#zb78Tq&6?#F~YHGU%8=9aaa;W7d>6?`2Oc-8DQAMrA#6Y6{LkrpF% zPTJ}bvwKB5Dl3+P(%S)Dii3rKwmgj+*%9Cur=mOxD;Y#ion;jvKezp2H!cvIBjL!X4dRqqy^ zf-F7qU4R?kC|4IOiBq1EFzZw#)tedb$D&|*s+@@ab1h>vp5u=>!h;XD=;E0U8wXBF z(2-XaYFBLd-5M{F{)@-n7yA$i8{swE0sJiD)8L&DUYmvu|dm>V^l<{Bca_INqSp9-;?`pv@YNrkEm8TxEmJxUbZpU2<2=& zmXpD@zrFJL_!(qJmfTH66%_%4GFR7#tSFfScYO8G_mjuVnSCpP-RGV@iYU}P)6wvo zDOqjbyGcIEsZTK{_IJy~Bi-w&;7+8%o) zdZFz$CLQXV=}lSkU!OD7+S*JHJ{sK*Pnq^I;)X=w`9|*ADmb?~lXB-4J4kGx?ug7Y zAhOEBG52&uQufS@)5JR`NP2p@NVZJQVPI`-v~tF6%*HH$+0aD+C0{+X);o)Bnhye$ znJ$kfmO*__E^EH*NSM2tR+$m4E)02X<0nJ)ehB*+D3nD&=l8bV*p-|3pg1my`scLX zkSN$V844YLdZ#<`rr)?%EeL4u=ul+QEYq#8fc=pPT}gMEmm&&Lvp%7=;?6LVwS6m~ zN!3ZL3s`8Qdbzx_9i@sKP$m=A9eHbH8>0p>Cz}r|w?51!J1Mj)C@O|`XJ1$j2|pX_ z=`9dRej*RzBBp0Q)N?s;heJWU-4DWPN5~0&lWOTPmwJ$dsayoK1k@CIk z+4I$=5&|zJnO6+GnQR#4+w=7`&_$IBi0|C{R9QR!(MFD z7_8VFH0{d8#nr+}N=b0CDIvBq6r`KP$oHhrY>!(aSu`H=eQkV~fnMz3b zORGxg0`j!HJ%$B_@+~n9tMxL0xi{X19WmW`;Y9eThA2Go%NN7Rru?h+7esDLk3PQc zo-U6{{{rzY_6U~>0ZqO2Jv{JEDzAD9fA%`Qn^zKCE)e-?L(YlyTe;5-Ram5TRap}e zs^OxFYZkP!G|C>w=08$mv)1XSw?u|L@Jk@d1Yu_fzy`B%tbp&NEbkTLj&&&V3K(3sKOmUtVi6xYY0l<*vj z!4oLGSeC|7d}wFi;~6^Fhz&q?u%CmX$U_-b+$g3(yCWicy~N%ji4TVnjB*m9BrfS= zdYqtN}n*&dzd+*5iz z`);d4&1v6>s-!BAM)C&LYuq=9(Gm_u7rZ#j!6R}Bf;*4w2=^Li6wp@a?R3ECYj9M6 z=1qC)v-d9XbPN{jU(vW_oYS~9lF#Z9u^QE~oYY%==D6G2p89yU`b-&X@5P@#ziIkR zX|bvSm5DBBG1^nm<_sFa1FUh$7IrjgMKLaNTLoeO_(~ijBw)Fja7*_T; zvda%_qn_+XUyTZ^3f~u*sL40x#}3J5Y8p!&g_ZT==it~>T&ZK;Ss40$!v3w23`T+Y z(|+;%Ua_bBzc2dFb)IGQsL!|C+uK*&64UOfH4OS8H@COj6cWdxHl?SjUcs}`8sE3? z**#?caSuf%5o}Y8=HyrUf16inN|0Ij%1Ml;GU4EsJ0k6 zxY}fP^abKR|qlm4StY4r#i$wTfByRM4w~LvOTg^xc$MwW!d-WeYSw5pP{z!l?o9S&;2MDWo?)d|Raz;0 z+?s0!s*qK!DtGr=@mZ)+sRXMKAp}ZQSGEGRS`B%Ggb?70fI+9>W2&7V} z2m}O1`5PIJH?@h0iP(D~%d(h9tblwg5g$bICMQ7E-bzSRh^VhZ9-+5;4s2{}BnohB zY)n#xfGOkyt|9^XA|^Lj1I1!7Q37XYXYpl}5E6F)MO28W{6;1)-r>z0#yDI?HBIAR zb*O59jcq@IE1+rE0_$QdRW!$O*ombbSb;{Pxw-Rkhm}gn=~MhvM6O%g45|Qhx(g@A zC$B;4Gb1A-$TUrUS_u^q$E^M+@}MZriG_v-MSq(ZlTRDlw)xlkfX#*(vJiAm%x!dZ zbhxjtZw}6hpTk8maIC{Gl1`_&!yFX3aMA9M{Qm?2xDouMv0ktHV~hLy;W~_rQ>|9F q;CyU;dwaX(p!@#E9`^)pX@3Ce*7TttJS^4#0000d)ROWLq|mtLh3vy5e0o7N*9C>`~w=Q zgq{W@6e<6Jr)Vi?Xh>ljsBW@Eb}&`opW9jhN!$MRm^;=sVb3ogJ5f*NxjmpQJ3-eFD{-}I{gddzjB z*tTtESr(JalylAiTG)WKS`fz9zstB4c^tzSRBSsoUds;rs=wz~D@*h93!iS{ZQBDY z?^m9U-hWUU85!*z92`Ud4hsSwCu~U|3Xp0R0<*0sR{d66Y+2~>J4`l7KnQdkiJ<4` z|B5-rB8+8I^Y>)43^=ggt@~#58vy3^7yF&ZO8^!H*fUe zBi8@rv-k7Yk9XMh=2ik;Z_lfIe;)68z)Z7dv&nK^j`ipAFBA6wuJ@cwy{XbF@TXR< zd5J1ityGM>`w_k>E0@d3Dg*$Ss)n%{sMqU^184{+MPOP2Yinz%f}ES1(=H*zm`s4n z!4SNO1f(2O1dydR14l!ly3*}pf&g#?PfpNP72=@HfI@GsjEWFrf{Y3Q>Qkng zrIt4ko0!-G>+9>Of}EY5B{INC8P(dx#zxl&&@u{i1`ZDoQzdYDd8y9;P%!I6)Wp0IfoXJqytpuy2u3qfKaK6o8b`?d|PU0Zva(6XyW& zN*Q7|jX;Evej`&p$%@5dsszr@&pUgiWP+Zci$)U=WYgfRW&cy zb(x{2uw^otvQAd$6PxA4;a89*seBW1p)<v(JVz82$iB2&oX*PD+$W^dwP=D3Kxo zf{uoUDxs$V2}R03KnO%jL5&L|Q6;>D<$@+8QIyDOeCP9HZZmUmI^=l0*2O0;5@U^K zeRsZ{Z)fJ)T^5~l&Tg~lsCNLA0@bF0Q;NT!S5M|}Eg&o$(5pw8CHFPYZ`E9cF-EZUbbWdZ9lmMV| z?jR7f4%&a(4z{`1CUyJoiN_f@VEic-Uw`}YeF_Ko=@Noy3Lvh>-VY7k>rJOJuG6X% zI1S#&!$+*YkT-t){`mnfy=@A>=`&sTmzio(tJPS-NU;7y@`W&kFy9jtdR3{F zRDk(YozJDew7K>sQ0sstERoMtsDi!7cv;g2T0&5E3=;+ARuq2bokjhes zd=vw4=%!%wPft(T#>Pfy0OsfCe488eG~)W9Nec=70pd=kQA|?29A%9iG>0)Ogf$JPy`$)jW(6Dvop52xfyK9 ztLp&(1ffw7M__JlE-(w(woTfZ2!M=6xx|Ssibg)lCo+{;h!YD*i&$X*sM48O5P_4E z6PJm?5-RdkDkUvrhqq!OxLQgylk@X)wzaht8h}_VMgXJ{0O?FDh`{XZY^ZA?%d*St^CMK9+7<5`mdFLIoHd?POvfeqd$KgWT zc+KmR(uTI1hlhs@eX}q_R)qj^x!jk@$;oE`uzYcGF@-NlR4NsE2~9Mll!Ih_^{+Qt z`ke=W2EsjQtX8Xy_NF%8r}q$;GE(>+o{z0$vsv*$H_7z_Z|?qA;toK2@)v4a98?34 RPpAL@002ovPDHLkV1lGZ;e-GH literal 0 HcmV?d00001 diff --git a/resources/images/format-justify-right.png b/resources/images/format-justify-right.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3d8d6ee16fefae0af2a7b45c2d5126a80f5e10 GIT binary patch literal 1105 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 Date: Sun, 19 Dec 2010 22:15:05 -0700 Subject: [PATCH 10/12] ... --- resources/images/edit-select-all.png | Bin 0 -> 2197 bytes src/calibre/gui2/comments_editor.py | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 resources/images/edit-select-all.png diff --git a/resources/images/edit-select-all.png b/resources/images/edit-select-all.png new file mode 100644 index 0000000000000000000000000000000000000000..4393bc9dc7fe05ce4d2db5d8630cc4b88e25a4bc GIT binary patch literal 2197 zcmV;G2x|9I$xVq`f|JIv9miRFy=!~_ zcV_2@Ge_B8jczxCcGoIB_RXDpcV_4N?m6GNXC@9fj)RY~g#g(Cfq())!T*=pwAi+U zl|3MXf0A0k9di3{&3VxFsQuL?;o|`YoTn3iqwBhu;$LA8otIrI4o3--P{>`_uYAzu zp<%bwbpzE}jjy4LseyZ7*sDY(FghV_* z=>;s0eSmxC*yOQ40r5QnpAeE*NUJ|+t*(xC*YE&-C~%2@cdl?MJ(P$uf(JazsYxNz zZ0mUY);-Lh&H!HE5~;nz24YbS=~x8AtT>$+j$teUGI;K{%QYmTDz4w&MXk{RY&TOV zh-s>utWh~^(yC^VpH4!dpTGQb9Yq?OwguC)F_ns=R&PN!OnmmSlJMRnG$1_pf#A6% z6H(mUt{{_$VQF?6^;Qpk(_&Ix0<~DkA*cip3M#m@bAZRs&BC&55Pl@$DuYeNHN+zt zQt^l<8AwD%_J9EYV1)#c)7c~(+j&1s(nLsvjn`B)j5L9iJ`-a>Kr)}t{X{H-7jyM? z58-f#R#C-qvxj6%MK~11z$9|OP!j(lJq_&g`S}TXK!{NyqMH`hxAsw*&0%x5Mg%&z zL}9YMcZ5^f1cys5lR&R$px3u>odAC6Q_H9vHKB#W2nH2O1U)9Vf7HNUt%*k$XD~}i zAuzEJlE91Oci!7Yxz<2OH;_rjDBcykd3_Tzxg>6G?cs}`Jdb_KK5yOJVZoBXUGLCJ z?~>5Ne7r>H1PgeXt;>C%ZJ$5t)g5#h8hlY&d*Y; zACO3UhKVQvE=;HK?>l8qxn#V79X8q&Dmv<|4sz)P>x1?P$s>~$F=Qf9O=T~fo1ek- zR1$T{LS4P@&T}}#DSSE|0~bmKC`4{5N#u@OBwPy@&lV}`)cM@yh12l2@zbb8B%e!C zSA2gy#dQt{kX)S(EPpCBnB%Y-ViV0m5^y0{aoq0eupIDiD}nb1#h!Va(ycHi$OYbs zcwn%Ry}NNAOT`>E?o|=d!Z@NZTBkkW<4XnJpeW`ETpO8WgftT5uSrBTyh8=xrR6#3 zhJ}u!s8^F%JNO$Y(B=aHf#+gvb4Z zI*T_$tKT#FB-R4daL^M*aq_^O`>LCnXp_5mLhpsd9fx^Z0G?|rZi8bsul5{n5&>V6MO?1dsT^ovU_NB{dAZfmF_n%F0WQFQVtGy` zpajPVA(;phc=P%OZ(zw-gzKGzo9nYFymz;P8Okdq54X2k(;fzCqVT zc|i~BZQS0e;PUb;PVrM*Z$L_u zu@G8bnBf|qYJ09O2d=)bRPfaRJ!jim5Nh5wk#Wc0^ewL zc-4<;RXX25E|bOCg(A+C=Af!7Hn%qIZ$I~~m1}F)e!<|!s)fA9fd2fC|Iowz8FchM z-gxU4rn5=dw$0gTA)jSImaF{c0*m=6u9e=sv&-Zosse+=T5q%ftAm%G{|1w`ER(#^ zcELL@tbG6K>gwuG1^5v}JWR+A{e156B^GkuH1V-BGwv}HI8)3G!izK#VnLEtI7{V; zWK;`r=#=#iw4jBh`JxB>*48Fo`tjA5|MZ8~f9M0=r<52L{{UB_Bx1iZLCW=ymhvzR z1I=a&fovSdihM})hZ5D z6O}**=g-c2z`yd#SH3R5k3nF3lSNG-#%a^&_t_JfOa_`3;h4WlVe^`_@*gSznZ&>o zmTAGJtBMy;igN>^GnJ-rCyQuLStX5#SqXnl>sa>3?0EfC48NMnH?9 zT-)Aw_US7xuHU%v+tI-L|Ea+js1+yvrv@TCE7bl@_wIpgG6ZB2)K2~nHzq>hqip{L Xd$*Y6|7Q;K00000NkvXXu0mjfY8MXk literal 0 HcmV?d00001 diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index bf8fb4a930..32e93d0a77 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -74,6 +74,7 @@ class EditorWidget(QWebView): _('Align justified'), False), ('Undo', 'undo', 'edit-undo', _('Undo'), False), ('Redo', 'redo', 'edit-redo', _('Redo'), False), + ('RemoveFormat', 'remove_format', 'trash', _('Remove formatting'), False), ('Copy', 'copy', 'edit-copy', _('Copy'), False), ('Paste', 'paste', 'edit-paste', _('Paste'), False), ('Cut', 'cut', 'edit-cut', _('Cut'), False), @@ -81,6 +82,8 @@ class EditorWidget(QWebView): _('Increase Indentation'), False), ('Outdent', 'outdent', 'format-indent-less', _('Decrease Indentation'), False), + ('SelectAll', 'select_all', 'edit-select-all', + _('Select all'), False), ]: ac = PageAction(wac, icon, text, checkable, self) setattr(self, 'action_'+name, ac) @@ -159,6 +162,8 @@ class Editor(QWidget): self.toolbar1.addAction(self.editor.action_undo) self.toolbar1.addAction(self.editor.action_redo) + self.toolbar1.addAction(self.editor.action_select_all) + self.toolbar1.addAction(self.editor.action_remove_format) self.toolbar1.addSeparator() for x in ('copy', 'cut', 'paste'): From b358edb5e0b3a919fda021cc8efafa5fe38b1d22 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2010 22:33:26 -0700 Subject: [PATCH 11/12] E-book viewer: Add a right click menu item 'Inspect' that allows you to inspect the underlying HTML/CSS source of the currently displayed content --- src/calibre/gui2/viewer/documentview.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index f131dd522d..d5f881d4b4 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -188,6 +188,7 @@ class Document(QWebPage): # Miscellaneous settings.setAttribute(QWebSettings.LinksIncludedInFocusChain, True) + settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True) self.set_user_stylesheet() self.misc_config() From 4c564132ca5a59951cc6e213aec280076337922a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 20 Dec 2010 00:08:40 -0700 Subject: [PATCH 12/12] Add a source code editor to the comments editor --- src/calibre/gui2/comments_editor.py | 263 +++++++++++++++++++++++++++- 1 file changed, 255 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index 32e93d0a77..547dd51848 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -9,15 +9,16 @@ __docformat__ = 'restructuredtext en' from lxml import html from lxml.html import soupparser -from PyQt4.Qt import QApplication, QFontInfo, QSize, QWidget, \ - QToolBar, QVBoxLayout, QAction, QIcon, QWebPage, Qt +from PyQt4.Qt import QApplication, QFontInfo, QSize, QWidget, QPlainTextEdit, \ + QToolBar, QVBoxLayout, QAction, QIcon, QWebPage, Qt, QTabWidget, \ + QSyntaxHighlighter, QColor, QChar from PyQt4.QtWebKit import QWebView from calibre.ebooks.chardet import xml_to_unicode from calibre import xml_replace_entities -class PageAction(QAction): +class PageAction(QAction): # {{{ def __init__(self, wac, icon, text, checkable, view): QAction.__init__(self, QIcon(I(icon+'.png')), text, view) @@ -41,8 +42,9 @@ class PageAction(QAction): self.setChecked(self.page_action.isChecked()) self.setEnabled(self.page_action.isEnabled()) +# }}} -class EditorWidget(QWebView): +class EditorWidget(QWebView): # {{{ def __init__(self, parent=None): QWebView.__init__(self, parent) @@ -132,6 +134,219 @@ class EditorWidget(QWebView): return property(fget=fget, fset=fset) +# }}} + +# Highlighter {{{ +State_Text = -1 +State_DocType = 0 +State_Comment = 1 +State_TagStart = 2 +State_TagName = 3 +State_InsideTag = 4 +State_AttributeName = 5 +State_SingleQuote = 6 +State_DoubleQuote = 7 +State_AttributeValue = 8 + +class Highlighter(QSyntaxHighlighter): + + def __init__(self, doc): + QSyntaxHighlighter.__init__(self, doc) + self.colors = {} + self.colors['doctype'] = QColor(192, 192, 192) + self.colors['entity'] = QColor(128, 128, 128) + self.colors['tag'] = QColor(136, 18, 128) + self.colors['comment'] = QColor( 35, 110, 37) + self.colors['attrname'] = QColor(153, 69, 0) + self.colors['attrval'] = QColor( 36, 36, 170) + + def highlightBlock(self, text): + state = self.previousBlockState() + len_ = text.length() + start = 0 + pos = 0 + + while pos < len_: + + if state == State_Comment: + start = pos + while pos < len_: + if text.mid(pos, 3) == "-->": + pos += 3; + state = State_Text; + break + else: + pos += 1 + self.setFormat(start, pos - start, self.colors['comment']) + + elif state == State_DocType: + start = pos + while pos < len_: + ch = text.at(pos) + pos += 1 + if ch == QChar('>'): + state = State_Text + break + self.setFormat(start, pos - start, self.colors['doctype']) + + # at '<' in e.g. "foo" + elif state == State_TagStart: + start = pos + 1 + while pos < len_: + ch = text.at(pos) + pos += 1 + if ch == QChar('>'): + state = State_Text + break + if not ch.isSpace(): + pos -= 1 + state = State_TagName + break + + # at 'b' in e.g "

foo
" + elif state == State_TagName: + start = pos + while pos < len_: + ch = text.at(pos) + pos += 1 + if ch.isSpace(): + pos -= 1 + state = State_InsideTag + break + if ch == QChar('>'): + state = State_Text + break + self.setFormat(start, pos - start, self.colors['tag']); + + # anywhere after tag name and before tag closing ('>') + elif state == State_InsideTag: + start = pos + + while pos < len_: + ch = text.at(pos) + pos += 1 + + if ch == QChar('/'): + continue + + if ch == QChar('>'): + state = State_Text + break + + if not ch.isSpace(): + pos -= 1 + state = State_AttributeName + break + + # at 's' in e.g. + elif state == State_AttributeName: + start = pos + + while pos < len_: + ch = text.at(pos) + pos += 1 + + if ch == QChar('='): + state = State_AttributeValue + break + + if ch in (QChar('>'), QChar('/')): + state = State_InsideTag + break + + self.setFormat(start, pos - start, self.colors['attrname']) + + # after '=' in e.g. + elif state == State_AttributeValue: + start = pos + + # find first non-space character + while pos < len_: + ch = text.at(pos) + pos += 1 + + # handle opening single quote + if ch == QChar("'"): + state = State_SingleQuote + break + + # handle opening double quote + if ch == QChar('"'): + state = State_DoubleQuote + break + + if not ch.isSpace(): + break + + if state == State_AttributeValue: + # attribute value without quote + # just stop at non-space or tag delimiter + start = pos + while pos < len_: + ch = text.at(pos); + if ch.isSpace(): + break + if ch in (QChar('>'), QChar('/')): + break + pos += 1 + state = State_InsideTag + self.setFormat(start, pos - start, self.colors['attrval']) + + # after the opening single quote in an attribute value + elif state == State_SingleQuote: + start = pos + + while pos < len_: + ch = text.at(pos) + pos += 1 + if ch == QChar("'"): + break + + state = State_InsideTag + + self.setFormat(start, pos - start, self.colors['attrval']) + + # after the opening double quote in an attribute value + elif state == State_DoubleQuote: + start = pos + + while pos < len_: + ch = text.at(pos) + pos += 1 + if ch == QChar('"'): + break + + state = State_InsideTag + + self.setFormat(start, pos - start, self.colors['attrval']) + + else: + # State_Text and default + while pos < len_: + ch = text.at(pos) + if ch == QChar('<'): + if text.mid(pos, 4) == "