* Optimized result formatting for lower memory usage and higher speed; however, the...
authorUrban Wallasch <urban.wallasch@freenet.de>
Wed, 16 Jun 2021 09:53:57 +0000 (11:53 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Wed, 16 Jun 2021 09:53:57 +0000 (11:53 +0200)
* Introduced a hard upper limit of 10000 for search results to avoid nasty surprises.

ROADMAP.txt
jiten-pai.py

index 28e34819def6743c04c0f84913dac50063a34d4a..a8a705dd87475d4fd9bd8113829e19e7cb6ce0e9 100644 (file)
@@ -14,8 +14,9 @@ Phase II
 [x] preferences, config file
 [x] history
 [x] Romaji input
-[ ] icons, "About" dialog
+[ ] app icon, "About" dialog
 [ ] README
+[ ] verb de-inflection?
 
 
 Phase III
index 34a8996206068253956bed89b93e387890aa6905..6b9c8f2de7f2200d60bd27ed2f15a2a3d0b5f493 100755 (executable)
@@ -69,6 +69,7 @@ cfg = {
     'dict_idx': 0,
     'dict_all': False,
     'limit': 100,
+    'hardlimit': 10000,
     'do_limit': True,
     'auto_adj': True,
     'jap_opt': [True, False, False, False],
@@ -892,7 +893,7 @@ class jpMainWindow(QMainWindow):
         self.genopt_dolimit.setChecked(cfg['do_limit'])
         self.genopt_limit = QSpinBox()
         self.genopt_limit.setMinimum(1)
-        self.genopt_limit.setMaximum(1000)
+        self.genopt_limit.setMaximum(cfg['hardlimit'])
         self.genopt_limit.setValue(cfg['limit'])
         self.genopt_limit.setMinimumWidth(130)
         self.genopt_limit.setEnabled(cfg['do_limit'])
@@ -1090,7 +1091,7 @@ class jpMainWindow(QMainWindow):
         self.search_box.insertItem(0, term)
         self.search_box.setCurrentIndex(0)
         # result limiting
-        limit = self.genopt_limit.value() if self.genopt_limit.isEnabled() else 0
+        limit = self.genopt_limit.value() if self.genopt_limit.isEnabled() else cfg['hardlimit']
         # search
         self.result_group.setTitle('Search results: ...')
         QApplication.processEvents()
@@ -1119,18 +1120,23 @@ class jpMainWindow(QMainWindow):
                 if not self._search_relax(mode):
                     break;
         # report results
-        self.result_group.setTitle('Search results: %d' % len(result))
+        rlen = len(result)
+        self.result_group.setTitle('Search results: %d' % rlen)
         QApplication.processEvents()
         # format result
+        if rlen > cfg['hardlimit'] / 2:
+            self.result_pane.setPlainText('Formatting...')
+            QApplication.processEvents()
         re_term = re.compile(term, re.IGNORECASE)
         nfmt = '<div style="font-family: %s; font-size: %dpt">' % (cfg['nfont'], cfg['nfont_sz'])
         lfmt = '<span style="font-family: %s; font-size: %dpt;">' % (cfg['lfont'], cfg['lfont_sz'])
         hlfmt = '<span style="color: %s;">' % cfg['hl_col']
-        html = [nfmt]
+        html = [''] * (rlen + 2)
+        html[0] = nfmt
         def hl_repl(match, org=None):
             grp = match.group(0) if org is None else org[match.span()[0]:match.span()[1]]
             return '%s%s</span>' % (hlfmt, grp)
-        for res in result:
+        for idx, res in enumerate(result):
             # highlight matches
             if mode == ScanMode.JAP:
                 res[0] = re_term.sub(lambda m: hl_repl(m, res[0]), kata2hira(res[0]))
@@ -1138,11 +1144,8 @@ class jpMainWindow(QMainWindow):
             else:
                 res[2] = re_term.sub(hl_repl, res[2])
             # construct display line
-            html.append('%s%s</span>' % (lfmt, res[0]))
-            if len(res[1]) > 0:
-                html.append(' (%s)' % res[1])
-            html.append(' %s<br>\n' % res[2])
-        html.append('</div>')
+            html[idx+1] = '%s%s</span>%s %s<br>\n' % (lfmt, res[0], (' (%s)'%res[1] if len(res[1]) > 0 else ''), res[2])
+        html[rlen + 1] = '</div>'
         self.result_pane.setHtml(''.join(html))
         self.result_pane.setEnabled(True)