From a2e6420be4739c185000f5919ee34407238130e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 2 Jan 2020 09:25:52 +0100 Subject: [PATCH 01/87] Initial implementation --- .../globalPlugins/brailleExtender/__init__.py | 6 +++ .../brailleExtender/converter.py | 43 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 addon/globalPlugins/brailleExtender/converter.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 182cedee..00e8a5f9 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -45,6 +45,7 @@ import ui import versionInfo import virtualBuffers +from . import converter from . import configBE config.conf.spec["brailleExtender"] = configBE.getConfspec() from . import utils @@ -1377,6 +1378,10 @@ def script_showBrailleViewSaved(self, gesture): else: ui.message(_("Buffer empty")) script_showBrailleViewSaved.__doc__ = _("Show the saved braille view through a flash message.")+HLP_browseModeInfo + def script_converter(self, gesture): + gui.mainFrame._popupSettingsDialog(converter.Converter) + script_converter.__doc__ = _("Start braille converter") + # section autoTest autoTestPlayed = False autoTestTimer = None @@ -1505,6 +1510,7 @@ def script_addDictionaryEntry(self, gesture): __gestures["kb:nvda+alt+u"] = "translateInBRU" __gestures["kb:nvda+alt+i"] = "charsToCellDescriptions" __gestures["kb:nvda+alt+o"] = "cellDescriptionsToChars" + __gestures["kb:nvda+alt+p"] = "converter" __gestures["kb:nvda+alt+y"] = "addDictionaryEntry" __gestures["kb:nvda+shift+j"] = "toggleAttribra" diff --git a/addon/globalPlugins/brailleExtender/converter.py b/addon/globalPlugins/brailleExtender/converter.py new file mode 100644 index 00000000..f794606a --- /dev/null +++ b/addon/globalPlugins/brailleExtender/converter.py @@ -0,0 +1,43 @@ +# coding: utf-8 +# Part of BrailleExtender addon for NVDA +# Copyright 2016-2019 André-Abush CLAUSE, released under GPL. + +from __future__ import unicode_literals +import gui +import wx +from logHandler import log +import brailleTables +import config + +class Converter(gui.settingsDialogs.SettingsDialog): + + title = "Braille converter" + tables = brailleTables.listTables() + tablesFN = [table.fileName for table in tables if table.output] + + def makeSettings(self, sizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=sizer) + label = _("&Source type") + choices = [ + "BRF", + "Braille Unicode", + "Dot patterns", + "Normal text" + ] + self.sourceType = sHelper.addItem(wx.RadioBox(self, label=label, choices=choices)) + label = _("&Target type") + self.targetType = sHelper.addItem(wx.RadioBox(self, label=label, choices=choices)) + self.sourceType.Bind(wx.EVT_RADIOBOX , self.onTypes) + self.targetType.Bind(wx.EVT_RADIOBOX , self.onTypes) + label = _("Braille table") + choices = [table.displayName for table in self.tables if table.output] + self.brailleTable = sHelper.addLabeledControl(label, wx.Choice, choices=choices) + self.onTypes() + + def onTypes(self, evt=None): + if self.sourceType.GetSelection() == 3 or self.targetType.GetSelection() == 3: + self.brailleTable.Enable() + toSelect = self.tablesFN.index(config.conf["braille"]["translationTable"]) + self.brailleTable.SetSelection(toSelect) + else: + self.brailleTable.Disable() From 6e360dd2d58e1b7444ee384217abec947bed524e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 14 Jan 2020 16:39:32 +0100 Subject: [PATCH 02/87] Various code improvements --- addon/globalPlugins/brailleExtender/patchs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index e195fe37..6b5568ba 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -438,7 +438,7 @@ def _createTablesString(tablesList): configBE.loadPreTable() # applying patches -braille.Region.update = update +#braille.Region.update = update braille.TextInfoRegion.previousLine = previousLine braille.TextInfoRegion.nextLine = nextLine inputCore.InputManager.executeGesture = executeGesture From 2195a969c6cae653b36ae697f56cc47444e9c3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 2 Dec 2019 21:16:19 +0100 Subject: [PATCH 03/87] First implementation of HUC converter HUC8 is hard-enabled in this commit Bug (to fix): - cursor positions broken, - does not work well with Python 2 (we probably disable the feature for NVDA 2019.2 and earlier) TODO: allow to choose/implement between other representation (HUC6, liblouis-style, etc.) --- .../globalPlugins/brailleExtender/__init__.py | 11 +- .../globalPlugins/brailleExtender/configBE.py | 57 ----- addon/globalPlugins/brailleExtender/huc.py | 195 ++++++++++++++++++ addon/globalPlugins/brailleExtender/patchs.py | 174 +++++++++------- .../globalPlugins/brailleExtender/settings.py | 4 - addon/globalPlugins/brailleExtender/utils.py | 36 ---- 6 files changed, 297 insertions(+), 180 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/huc.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 4ff6adcf..9341669f 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -14,6 +14,8 @@ import os import re import subprocess +import sys +isPy3 = True if sys.version_info >= (3, 0) else False import time import urllib import gui @@ -50,6 +52,8 @@ config.conf.spec["brailleExtender"] = configBE.getConfspec() from . import utils from .updateCheck import * +from . import dictionaries +from . import huc from . import patchs from .common import * @@ -131,8 +135,7 @@ def addTextWithFields_edit(self, info, formatConfig, isSelection=False): fn(self, info, conf, isSelection) def update(self): - try: fn(self) - except BaseException as e: log.error("Fatal error: %s" % e) + fn(self) if not attribraEnabled(): return DOT7 = 64 DOT8 = 128 @@ -651,7 +654,7 @@ def script_charsToCellDescriptions(self, gesture): table = '' if self.BRFMode: table = os.path.join(configBE.baseDir, "res", "brf.ctb").encode("UTF-8") t = utils.getTextInBraille('', table) - t = utils.unicodeBrailleToDescription(t) + t = huc.unicodeBrailleToDescription(t) if not t.strip(): return ui.message(_("No text selection")) ui.browseableMessage(t, _("Braille Unicode to cell descriptions")+(" (%.2f s)" % (time.time()-tm))) script_charsToCellDescriptions.__doc__ = _("Convert text selection in braille cell descriptions and display it in a browseable message") @@ -660,7 +663,7 @@ def script_cellDescriptionsToChars(self, gesture): tm = time.time() t = utils.getTextSelection() if not t.strip(): return ui.message(_("No text selection")) - t = utils.descriptionToUnicodeBraille(t) + t = huc.cellDescriptionsToUnicodeBraille(t) ui.browseableMessage(t, _("Cell descriptions to braille Unicode")+(" (%.2f s)" % (time.time()-tm))) script_cellDescriptionsToChars.__doc__ = _("Braille cell description to Unicode Braille. E.g.: in a edit field type '125-24-0-1-123-123'. Then select this text and execute this command") diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 0e85d397..40e1982f 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -347,63 +347,6 @@ def isContractedTable(table): if brailleTables.listTables()[tablePos].contracted: return True return False -def loadPostTable(): - global postTable - postTable = [] - postTableValid = True if config.conf["brailleExtender"]["postTable"] in tablesFN else False - if postTableValid: - postTable.append(os.path.join(brailleTables.TABLES_DIR, config.conf["brailleExtender"]["postTable"]).encode("UTF-8")) - log.debug('Secondary table enabled: %s' % config.conf["brailleExtender"]["postTable"]) - else: - if config.conf["brailleExtender"]["postTable"] != "None": - log.error("Invalid secondary table") - tableChangesFile = os.path.join(configDir, "brailleDicts", "undefinedChar.cti") - defUndefinedChar = "undefined %s\n" % config.conf["brailleExtender"]["undefinedCharRepr"] - if config.conf["brailleExtender"]["preventUndefinedCharHex"] and not os.path.exists(tableChangesFile): - log.debug("File not found, creating undefined char file") - createTableChangesFile(tableChangesFile, defUndefinedChar) - if config.conf["brailleExtender"]["preventUndefinedCharHex"] and os.path.exists(tableChangesFile): - f = open(tableChangesFile, "r") - if f.read() != defUndefinedChar: - log.debug("Difference, creating undefined char file...") - if createTableChangesFile(tableChangesFile, defUndefinedChar): - postTable.append(tableChangesFile.encode("UTF-8")) - else: - postTable.append(tableChangesFile.encode("UTF-8")) - f.close() - - -def createTableChangesFile(f, c): - try: - f = open(f, "w") - f.write(c) - f.close() - return True - except BaseException as e: - log.error("Error while creating tab file (%s)" % e) - return False - -def loadPreTable(): - global preTable - preTable = [] - tableChangesFile = os.path.join(configDir, "brailleDicts", "changes.cti") - defTab = 'space \\t ' + \ - ('0-' * int(config.conf["brailleExtender"]["tabSize_%s" % curBD]))[:-1] + '\n' - if config.conf["brailleExtender"]['tabSpace'] and not os.path.exists(tableChangesFile): - log.debug("File not found, creating table changes file") - createTableChangesFile(tableChangesFile, defTab) - if config.conf["brailleExtender"]['tabSpace'] and os.path.exists(tableChangesFile): - f = open(tableChangesFile, "r") - if f.read() != defTab: - log.debug('Difference, creating tab file...') - if createTableChangesFile(tableChangesFile, defTab): - preTable.append(tableChangesFile.encode("UTF-8")) - else: - preTable.append(tableChangesFile.encode("UTF-8")) - log.debug('Tab as spaces enabled') - f.close() - else: log.debug('Tab as spaces disabled') - def getKeyboardLayout(): if (config.conf["brailleExtender"]["keyboardLayout_%s" % curBD] is not None and config.conf["brailleExtender"]["keyboardLayout_%s" % curBD] in iniProfile['keyboardLayouts'].keys()): diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py new file mode 100644 index 00000000..366777c4 --- /dev/null +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 +# coding: UTF-8 +from __future__ import print_function, unicode_literals +import re +import sys +isPy3 = True if sys.version_info >= (3, 0) else False +if not isPy3: chr = unichr + +HUC6_patterns = { + "⠿": (0x000000, 0x00FFFF), + "⠿": (0x010000, 0x01FFFF), + "⠿…⠇": (0x020000, 0x02FFFF), + "⠿…⠍": (0x030000, 0x03FFFF), + "⠿…⠝": (0x040000, 0x04FFFF), + "⠿…⠕": (0x050000, 0x05FFFF), + "⠿…⠏": (0x060000, 0x06FFFF), + "⠿…⠟": (0x070000, 0x07FFFF), + "⠿…⠗": (0x080000, 0x08FFFF), + "⠿…⠎": (0x090000, 0x09FFFF), + "⠿…⠌": (0x0A0000, 0x0AFFFF), + "⠿…⠜": (0x0B0000, 0x0BFFFF), + "⠿…⠖": (0x0C0000, 0x0CFFFF), + "⠿…⠆": (0x0D0000, 0x0DFFFF), + "⠿…⠔": (0x0E0000, 0x0EFFFF), + "⠿…⠄": (0x0F0000, 0x0FFFFF), + "⠿…⠥": (0x100000, 0x10FFFF), +} + +HUC8_patterns = { + '⣥': (0x000000, 0x00FFFF), + '⣭': (0x010000, 0x01FFFF), + '⣽': (0x020000, 0x02FFFF), + "⣵⠾": (0x030000, 0x03FFFF), + "⣵⢾": (0x040000, 0x04FFFF), + "⣵⢞": (0x050000, 0x05FFFF), + "⣵⡾": (0x060000, 0x06FFFF), + "⣵⣾": (0x070000, 0x07FFFF), + "⣵⣞": (0x080000, 0x08FFFF), + "⣵⡺": (0x090000, 0x09FFFF), + "⣵⠺": (0x0A0000, 0x0AFFFF), + "⣵⢺": (0x0B0000, 0x0BFFFF), + "⣵⣚": (0x0C0000, 0x0CFFFF), + "⣵⡚": (0x0D0000, 0x0DFFFF), + "⣵⢚": (0x0E0000, 0x0EFFFF), + "⣵⠚": (0x0F0000, 0x0FFFFF), + "⣵⣡": (0x100000, 0x10FFFF) +} + +hexVals = [ + "245", '1', "12", "14", + "145", "15", "124", "1245", + "125", "24", "4", "45", + "25", '2', '5', '0' +] + +print_ = print + +def cellDescToChar(cell): + if not re.match("^[0-8]+$", cell): + return '?' + toAdd = 0 + for dot in cell: + toAdd += 1 << int(dot) - 1 if int(dot) > 0 else 0 + return chr(0x2800 + toAdd) + +def charToCellDesc(ch): + """ + Return a description of an unicode braille char + @param ch: the unicode braille character to describe + must be between 0x2800 and 0x28FF included + @type ch: str + @return: the list of dots describing the braille cell + @rtype: str + @example: "d" -> "145" + """ + res = "" + if len(ch) != 1: raise ValueError("Param size can only be one char (currently: %d)" % len(ch)) + p = ord(ch) + if p >= 0x2800 and p <= 0x28FF: p -= 0x2800 + if p > 255: raise ValueError(r"It is not an unicode braille (%d)" % p) + dots ={1: 1, 2: 2, 4: 3, 8: 4, 16: 5, 32: 6, 64: 7, 128: 8} + i = 1 + while p != 0: + if p - (128 / i) >= 0: + res += str(dots[(128/i)]) + p -= (128 / i) + i *= 2 + return res[::-1] if len(res) > 0 else '0' + + +def unicodeBrailleToDescription(t, sep='-'): + return ''.join([('-'+charToCellDesc(ch)) if ord(ch) >= 0x2800 and ord(ch) <= 0x28FF and ch not in ['\n','\r'] else ch for ch in t]).strip(sep) + + +def cellDescriptionsToUnicodeBraille(t): + return re.sub(r'([0-8]+)\-?', lambda m: cellDescToChar(m.group(1)), t) + + +def getPrefixAndSuffix(c, HUC6=False): + ord_ = ord(c) + patterns = HUC6_patterns if HUC6 else HUC8_patterns + for pattern in patterns.items(): + if pattern[1][1] >= ord_: return pattern[0] + return '?' + +def convertHUC6(dots, debug=False): + ref1 = "1237" + ref2 = "4568" + data = dots.split('-') + offset = 0 + linedCells1 = [] + linedCells2 = [] + for cell in data: + for dot in "12345678": + if dot not in cell: + if dot in ref1: linedCells1.append('0') + if dot in ref2: linedCells2.append('0') + else: + dotTemp = '0' + if dot in ref1: + dotIndexTemp = (ref1.index(dot) + offset) % 3 + dotTemp = ref1[dotIndexTemp] + linedCells1.append(dotTemp) + elif dot in ref2: + dotIndexTemp = (ref2.index(dot) + offset) % 3 + dotTemp = ref2[dotIndexTemp] + linedCells2.append(dotTemp) + offset = (offset + 1) % 3 + out = [] + i = 0 + for l1, l2 in zip(linedCells1, linedCells2): + if i % 3 == 0: out.append("") + cellTemp = (l1 if l1 != '0' else '') + (l2 if l2 != '0' else '') + cellTemp = ''.join(sorted(cellTemp)) + out[-1] += cellTemp if cellTemp else '0' + out[-1] = ''.join(sorted([dot for dot in out[-1] if dot != '0'])) + if not out[-1]: out[-1] = '0' + i += 1 + if debug: print_(":convertHUC6:", dots, "->", repr(out)) + out = '-'.join(out) + return out + +def convertHUC8(dots, debug=False): + out = "" + newDots = "037168425" + for dot in dots: out += newDots[int(dot)] + out = ''.join(sorted(out)) + if debug: print_(":convertHUC8:", dots, "->", out) + return out + + +def convert(t, HUC6=False, unicodeBraille=True, debug=False): + out = "" + for c in t: + pattern = getPrefixAndSuffix(c, HUC6) + if not unicodeBraille: pattern = unicodeBrailleToDescription(pattern) + if '…' not in pattern: pattern += '…' + if not unicodeBraille: pattern = pattern.replace('…', "-…") + ord_ = ord(c) + hexVal = hex(ord_)[2:][-4:].upper() + if len(hexVal) < 4: hexVal = ("%4s" % hexVal).replace(' ', '0') + if debug: print_(":hexVal:", c, hexVal) + out_ = "" + beg = "" + for i, l in enumerate(hexVal): + j = int(l, 16) + if i % 2: + end = convertHUC8(hexVals[j], debug) + cleanCell = ''.join(sorted((beg + end))).replace('0', '') + if not cleanCell: cleanCell = '0' + if debug: print_(":cell %d:" % ((i+1)//2), cleanCell) + out_ += cleanCell + else: + if i != 0: out_ += "-" + beg = hexVals[j] + if HUC6: + out_ = convertHUC6(out_, debug) + if ord_ <= 0xFFFF: toAdd = '3' + elif ord_ <= 0x1FFFF: toAdd = '6' + else: toAdd = "36" + patternLastCell = "^.+-([0-6]+)$" + lastCell = re.sub(patternLastCell, r"\1", out_) + newLastCell = ''.join(sorted(toAdd + lastCell)).replace('0', '') + out_ = re.sub("-([0-6]+)$", '-'+newLastCell, out_) + if unicodeBraille: out_ = cellDescriptionsToUnicodeBraille(out_) + out_ = pattern.replace('…', out_.strip('-')) + if out and not unicodeBraille: out += '-' + out += out_ + return out + + +if __name__ == "__main__": + t = input("Text to convert: ") + print("HUC8:\n- %s\n- %s" % (convert(t), convert(t, unicodeBraille=False))) + print("HUC6:\n- %s\n- %s" % (convert(t, HUC6=True), convert(t, HUC6=True, unicodeBraille=False))) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 6b5568ba..caf0e140 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import os +import re import sys import time import api @@ -31,6 +32,7 @@ import addonHandler addonHandler.initTranslation() from . import dictionaries +from . import huc from .utils import getCurrentChar, getTether from .common import * if isPy3: import louisHelper @@ -64,7 +66,7 @@ def sayCurrentLine(): def getCurrentBrailleTables(input_=False): if input_: - if instanceGP.BRFMode and not errorTable: + if instanceGP and instanceGP.BRFMode and not errorTable: tables = [ os.path.join(baseDir, "res", "brf.ctb").encode("UTF-8"), os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") @@ -78,12 +80,12 @@ def getCurrentBrailleTables(input_=False): ] else: if errorTable: - if instanceGP.BRFMode: instanceGP.BRFMode = False + if instanceGP and instanceGP.BRFMode: instanceGP.BRFMode = False tables = [ os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]), os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") ] - elif instanceGP.BRFMode: + elif instanceGP and instanceGP.BRFMode: tables = [ os.path.join(baseDir, "res", "brf.ctb").encode("UTF-8"), os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") @@ -93,10 +95,10 @@ def getCurrentBrailleTables(input_=False): app = appModuleHandler.getAppModuleForNVDAObject(api.getNavigatorObject()) if app and app.appName != "nvda": tables += dictionaries.dictTables - tables += configBE.preTable + [ + tables += [ os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]), os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") - ] + configBE.postTable + ] return tables # globalCommands.GlobalCommands.script_braille_routeTo() @@ -137,79 +139,92 @@ def update(self): try: mode = louis.dotsIO if config.conf["braille"]["expandAtCursor"] and self.cursorPos is not None: mode |= louis.compbrlAtCursor - try: - if isPy3: - self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( - getCurrentBrailleTables(), - self.rawText, - typeform=self.rawTextTypeforms, - mode=mode, - cursorPos=self.cursorPos - ) - else: - text = unicode(self.rawText).replace('\0', '') - braille, self.brailleToRawPos, self.rawToBraillePos, brailleCursorPos = louis.translate(getCurrentBrailleTables(), - text, - # liblouis mutates typeform if it is a list. - typeform=tuple( - self.rawTextTypeforms) if isinstance( - self.rawTextTypeforms, - list) else self.rawTextTypeforms, - mode=mode, - cursorPos=self.cursorPos or 0 - ) - except BaseException as e: - global errorTable - if not errorTable: - log.error("Unable to translate with tables: %s\nDetails: %s" % (getCurrentBrailleTables(), e)) - errorTable = True - if instanceGP.BRFMode: instanceGP.BRFMode = False - instanceGP.errorMessage(_("An unexpected error was produced while using several braille tables. Using default settings to avoid other errors. More information in NVDA log. Thanks to report it.")) - return - if not isPy3: - # liblouis gives us back a character string of cells, so convert it to a list of ints. - # For some reason, the highest bit is set, so only grab the lower 8 - # bits. - self.brailleCells = [ord(cell) & 255 for cell in braille] - # #2466: HACK: liblouis incorrectly truncates trailing spaces from its output in some cases. - # Detect this and add the spaces to the end of the output. - if self.rawText and self.rawText[-1] == " ": - # rawToBraillePos isn't truncated, even though brailleCells is. - # Use this to figure out how long brailleCells should be and thus - # how many spaces to add. - correctCellsLen = self.rawToBraillePos[-1] + 1 - currentCellsLen = len(self.brailleCells) - if correctCellsLen > currentCellsLen: - self.brailleCells.extend( - (0,) * (correctCellsLen - currentCellsLen)) - if self.cursorPos is not None: - # HACK: The cursorPos returned by liblouis is notoriously buggy (#2947 among other issues). - # rawToBraillePos is usually accurate. - try: - brailleCursorPos = self.rawToBraillePos[self.cursorPos] - except IndexError: - pass - else: - brailleCursorPos = None - self.brailleCursorPos = brailleCursorPos - if self.selectionStart is not None and self.selectionEnd is not None: - try: - # Mark the selection. - self.brailleSelectionStart = self.rawToBraillePos[self.selectionStart] - if self.selectionEnd >= len(self.rawText): - self.brailleSelectionEnd = len(self.brailleCells) - else: - self.brailleSelectionEnd = self.rawToBraillePos[self.selectionEnd] - fn = range if isPy3 else xrange - for pos in fn(self.brailleSelectionStart, self.brailleSelectionEnd): - self.brailleCells[pos] |= SELECTION_SHAPE() - except IndexError: pass + if isPy3: + self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( + getCurrentBrailleTables(), + self.rawText, + typeform=self.rawTextTypeforms, + mode=mode, + cursorPos=self.cursorPos + ) else: - if instanceGP.hideDots78: - self.brailleCells = [(cell & 63) for cell in self.brailleCells] + text = unicode(self.rawText).replace('\0', '') + self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, brailleCursorPos = louis.translate(getCurrentBrailleTables(), + text, + # liblouis mutates typeform if it is a list. + typeform=tuple( + self.rawTextTypeforms) if isinstance( + self.rawTextTypeforms, + list) else self.rawTextTypeforms, + mode=mode, + cursorPos=self.cursorPos or 0 + ) except BaseException as e: - log.error("Error with update braille patch, disabling: %s" % e) - errorTable = True + global errorTable + if not errorTable: + log.error("Unable to translate with tables: %s\nDetails: %s" % (getCurrentBrailleTables(), e)) + errorTable = True + if instanceGP.BRFMode: instanceGP.BRFMode = False + instanceGP.errorMessage(_("An unexpected error was produced while using several braille tables. Using default settings to avoid other errors. More information in NVDA log. Thanks to report it.")) + return + if not isPy3: + # liblouis gives us back a character string of cells, so convert it to a list of ints. + # For some reason, the highest bit is set, so only grab the lower 8 + # bits. + self.brailleCells = [ord(cell) & 255 for cell in self.brailleCells] + # #2466: HACK: liblouis incorrectly truncates trailing spaces from its output in some cases. + # Detect this and add the spaces to the end of the output. + if self.rawText and self.rawText[-1] == " ": + # rawToBraillePos isn't truncated, even though brailleCells is. + # Use this to figure out how long brailleCells should be and thus + # how many spaces to add. + correctCellsLen = self.rawToBraillePos[-1] + 1 + currentCellsLen = len(self.brailleCells) + if correctCellsLen > currentCellsLen: + self.brailleCells.extend( + (0,) * (correctCellsLen - currentCellsLen)) + if self.cursorPos is not None: + # HACK: The cursorPos returned by liblouis is notoriously buggy (#2947 among other issues). + # rawToBraillePos is usually accurate. + try: + brailleCursorPos = self.rawToBraillePos[self.cursorPos] + except IndexError: + pass + else: + brailleCursorPos = None + self.brailleCursorPos = brailleCursorPos + if self.selectionStart is not None and self.selectionEnd is not None: + try: + # Mark the selection. + self.brailleSelectionStart = self.rawToBraillePos[self.selectionStart] + if self.selectionEnd >= len(self.rawText): + self.brailleSelectionEnd = len(self.brailleCells) + else: + self.brailleSelectionEnd = self.rawToBraillePos[self.selectionEnd] + fn = range if isPy3 else xrange + for pos in fn(self.brailleSelectionStart, self.brailleSelectionEnd): + self.brailleCells[pos] |= SELECTION_SHAPE() + except IndexError: pass + else: + if instanceGP and instanceGP.hideDots78: + self.brailleCells = [(cell & 63) for cell in self.brailleCells] + HUCProcess(self) + +def HUCProcess(self): + unicodeBrailleRepr = ''.join([chr_(10240+cell) for cell in self.brailleCells]) + AllBraillePos = [m.start() for m in re.finditer("⣿⣥⣿", unicodeBrailleRepr)] + if not AllBraillePos: return + replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in AllBraillePos} + newBrailleCells = [] + alreadyDone = [] + for iBrailleCells, brailleCells in enumerate(self.brailleCells): + brailleToRawPos = self.brailleToRawPos[iBrailleCells] + if brailleToRawPos in alreadyDone: continue + if iBrailleCells in replacements: + newBrailleCells += [ord(c)-10240 for c in replacements[iBrailleCells]] + alreadyDone.append(brailleToRawPos) + else: newBrailleCells.append(self.brailleCells[iBrailleCells]) + self.brailleCells = newBrailleCells #: braille.TextInfoRegion.nextLine() def nextLine(self): @@ -434,9 +449,8 @@ def _createTablesString(tablesList): else: return b",".join([x.encode("UTF-8") if isinstance(x, str) else bytes(x) for x in tablesList]) -configBE.loadPostTable() -configBE.loadPreTable() - +dictionaries.setDictTables() +dictionaries.notifyInvalidTables() # applying patches #braille.Region.update = update braille.TextInfoRegion.previousLine = previousLine @@ -448,3 +462,5 @@ def _createTablesString(tablesList): globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ + +louis.compileString(getCurrentBrailleTables(), b"undefined 12345678-13678-12345678") diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index e64ab2dc..3894f974 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -425,13 +425,11 @@ def postInit(self): self.tables.SetFocus() def onOk(self, evt): config.conf["brailleExtender"]["outputTables"] = ','.join(self.oTables) config.conf["brailleExtender"]["inputTables"] = ','.join(self.iTables) - configBE.loadPreferedTables() config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection()>0 else '?' postTableID = self.postTable.GetSelection() postTable = "None" if postTableID == 0 else configBE.tablesFN[postTableID] config.conf["brailleExtender"]["postTable"] = postTable if hasattr(louis.liblouis, "lou_free"): louis.liblouis.lou_free() - configBE.loadPostTable() config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD] = self.tabSize.Value config.conf["brailleExtender"]["preventUndefinedCharHex"] = self.preventUndefinedCharHex.IsChecked() @@ -439,8 +437,6 @@ def onOk(self, evt): repr_ = re.sub('\-+','-', repr_) if not repr_ or repr_.startswith('-') or repr_.endswith('-'): repr_ = "0" config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ - configBE.loadPreTable() - configBE.loadPostTable() super(BrailleTablesDlg, self).onOk(evt) def getTablesWithSwitches(self): diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index a826d6a2..85683091 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -262,36 +262,6 @@ def getTextInBraille(t = '', table = None): if charToDotsInLouis: return nt return ''.join([chr(ord(ch)-0x8000+0x2800) if ord(ch) > 8000 else ch for ch in nt]) -def cellDescToChar(cell): - if not re.match("^[0-8]+$", cell): return '?' - toAdd = 0 - for dot in cell: toAdd += 1 << int(dot)-1 if int(dot) > 0 else 0 - return chr(10240+toAdd) - -def charToCellDesc(ch): - """ - Return a description of an unicode braille char - @param ch: the unicode braille character to describe - must be between 0x2800 and 0x2999 included - @type ch: str - @return: the list of dots describing the braille cell - @rtype: str - @Example: "d" -> "145" - """ - res = "" - if len(ch) != 1: raise ValueError("Param size can only be one char (currently: %d)" % len(ch)) - p = ord(ch) - if p >= 0x2800 and p <= 0x2999: p -= 0x2800 - if p > 255: raise ValueError(r"It is not an unicode braille (%d)" % p) - dots ={1:1, 2:2, 4:3, 8:4,16:5,32:6,64:7, 128:8} - i = 1 - while p != 0: - if p - (128 / i) >= 0: - res += str(dots[(128/i)]) - p -= (128 / i) - i *= 2 - return res[::-1] if len(res) > 0 else '0' - def combinationDesign(dots, noDot = '⠤'): out = "" i = 1 @@ -332,12 +302,6 @@ def getTableOverview(tbl = ''): t += '\n'+_("One combination available")+": %s" % available return t -def unicodeBrailleToDescription(t, sep = '-'): - return ''.join([charToCellDesc(ch)+'-' if ch not in ['\n','\r'] else ch for ch in t])[:-1].replace("-\n",'\n') - -def descriptionToUnicodeBraille(t): - return re.sub('([0-8]+)\-?', lambda m: cellDescToChar(m.group(1)), t) - def beautifulSht(t, curBD="noBraille", model = True, sep = ' / '): if isinstance(t, list): t = ' '.join(t) t = t.replace(',', ' ') From 1674aa1cb52fe835abf4171bb8f77888cc14b26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 3 Dec 2019 19:36:43 +0100 Subject: [PATCH 04/87] Attempt to fix cursor positions issues --- .../globalPlugins/brailleExtender/__init__.py | 5 --- addon/globalPlugins/brailleExtender/patchs.py | 42 ++++++++++++++----- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 9341669f..3f08ac66 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -22,10 +22,6 @@ import wx from . import settings -from . import dictionaries - -import addonHandler -addonHandler.initTranslation() import api import appModuleHandler import braille @@ -252,7 +248,6 @@ def event_gainFocus(self, obj, nextHandler): if self.backup__brailleTableDict != config.conf["braille"]["translationTable"]: self.backup__brailleTableDict = config.conf["braille"]["translationTable"] dictionaries.setDictTables() - nextHandler() return diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index caf0e140..7fe691b2 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -167,6 +167,7 @@ def update(self): if instanceGP.BRFMode: instanceGP.BRFMode = False instanceGP.errorMessage(_("An unexpected error was produced while using several braille tables. Using default settings to avoid other errors. More information in NVDA log. Thanks to report it.")) return + HUCProcess(self) if not isPy3: # liblouis gives us back a character string of cells, so convert it to a list of ints. # For some reason, the highest bit is set, so only grab the lower 8 @@ -208,23 +209,42 @@ def update(self): else: if instanceGP and instanceGP.hideDots78: self.brailleCells = [(cell & 63) for cell in self.brailleCells] - HUCProcess(self) def HUCProcess(self): unicodeBrailleRepr = ''.join([chr_(10240+cell) for cell in self.brailleCells]) - AllBraillePos = [m.start() for m in re.finditer("⣿⣥⣿", unicodeBrailleRepr)] - if not AllBraillePos: return - replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in AllBraillePos} + allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] + allBraillePosDelimiters = [(pos, pos+3) for pos in allBraillePos] + if not allBraillePos: return + replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]], HUC6=True) for braillePos in allBraillePos} newBrailleCells = [] + newBrailleToRawPos = [] + newRawToBraillePos = [] + lenBrailleToRawPos = len(self.brailleToRawPos) alreadyDone = [] + i = 0 for iBrailleCells, brailleCells in enumerate(self.brailleCells): brailleToRawPos = self.brailleToRawPos[iBrailleCells] - if brailleToRawPos in alreadyDone: continue - if iBrailleCells in replacements: - newBrailleCells += [ord(c)-10240 for c in replacements[iBrailleCells]] - alreadyDone.append(brailleToRawPos) - else: newBrailleCells.append(self.brailleCells[iBrailleCells]) + if iBrailleCells in replacements and not replacements[iBrailleCells].startswith(HUCUnicodePattern[0]): + toAdd = [ord(c)-10240 for c in replacements[iBrailleCells]] + newBrailleCells += toAdd + newBrailleToRawPos += [i] * len(toAdd) + alreadyDone += list(range(iBrailleCells, iBrailleCells+3)) + i += 1 + else: + if iBrailleCells in alreadyDone: continue + newBrailleCells.append(self.brailleCells[iBrailleCells]) + newBrailleToRawPos += [i] + if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[iBrailleCells+1] != brailleToRawPos: + i += 1 + pos = -42 + for i, brailleToRawPos in enumerate(newBrailleToRawPos): + if brailleToRawPos != pos: + pos = brailleToRawPos + newRawToBraillePos.append(i) self.brailleCells = newBrailleCells + self.brailleToRawPos = newBrailleToRawPos + self.rawToBraillePos = newRawToBraillePos + if self.cursorPos: self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] #: braille.TextInfoRegion.nextLine() def nextLine(self): @@ -463,4 +483,6 @@ def _createTablesString(tablesList): louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ -louis.compileString(getCurrentBrailleTables(), b"undefined 12345678-13678-12345678") +HUCDotPattern = "12345678-78-12345678" +louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % HUCDotPattern, "ASCII")) +HUCUnicodePattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) From 3f84d3f6b1db0cc8174ab26d16e627fe26bfcd44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 4 Dec 2019 03:41:41 +0100 Subject: [PATCH 05/87] Updated settings to choose how to display undefined characters + various fixes known issue: restart is required for apply new settings --- .../globalPlugins/brailleExtender/__init__.py | 14 ++++- .../globalPlugins/brailleExtender/configBE.py | 20 +++++- .../brailleExtender/dictionaries.py | 5 +- addon/globalPlugins/brailleExtender/patchs.py | 43 ++++++++++--- .../globalPlugins/brailleExtender/settings.py | 61 +++++++++++++++---- addon/globalPlugins/brailleExtender/utils.py | 6 +- 6 files changed, 121 insertions(+), 28 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 3f08ac66..94bf45d5 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -181,6 +181,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin): def __init__(self): super(globalPluginHandler.GlobalPlugin, self).__init__() patchs.instanceGP = self + self.reloadBrailleTables() settings.instanceGP = self configBE.loadConf() configBE.initGestures() @@ -245,9 +246,7 @@ def event_gainFocus(self, obj, nextHandler): configBE.curBD = braille.handler.display.name self.onReload(None, 1) - if self.backup__brailleTableDict != config.conf["braille"]["translationTable"]: - self.backup__brailleTableDict = config.conf["braille"]["translationTable"] - dictionaries.setDictTables() + if self.backup__brailleTableDict != config.conf["braille"]["translationTable"]: self.reloadBrailleTables() nextHandler() return @@ -293,6 +292,15 @@ def createMenu(self): item = menu.Append(wx.ID_ANY, _("&Website"), _("Open addon's website.")) gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU, self.onWebsite, item) + def reloadBrailleTables(self): + self.backup__brailleTableDict = config.conf["braille"]["translationTable"] + dictionaries.setDictTables() + dictionaries.notifyInvalidTables() + if config.conf["brailleExtender"]["tabSpace"]: + liblouisDef = r"always \t " + ("0-" * configBE.getTabSize()).strip('-') + patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef, "ASCII")) + patchs.setUndefinedChar() + @staticmethod def onDefaultDictionary(evt): gui.mainFrame._popupSettingsDialog(dictionaries.DictionaryDlg, _("Global dictionary"), "default") diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 40e1982f..bf033826 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -36,6 +36,18 @@ CHOICE_focusAndReview = "focusAndReview" NOVIEWSAVED = chr(4) +# undefined char representations +CHOICE_tableBehaviour = 0 +CHOICE_allDots8 = 1 +CHOICE_allDots6 = 2 +CHOICE_emptyCell = 3 +CHOICE_otherDots = 4 +CHOICE_questionMark = 5 +CHOICE_otherSign = 6 +CHOICE_liblouis = 7 +CHOICE_HUC8 = 8 +CHOICE_HUC6 = 9 + dict_ = dict if isPy3 else OrderedDict outputMessage = dict_([ @@ -146,8 +158,9 @@ def getConfspec(): "outputTables": "string(default=%s)" % config.conf["braille"]["translationTable"], "tabSpace": "boolean(default=False)", "tabSize_%s" % curBD: "integer(min=1, default=2, max=42)", - "preventUndefinedCharHex": "boolean(default=False)", + "undefinedCharReprType": "integer(min=0, default=0, max=9)", "undefinedCharRepr": "string(default=0)", + "showNameUndefinedChar": "boolean(default=False)", "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", @@ -356,6 +369,11 @@ def getKeyboardLayout(): def getCustomBrailleTables(): return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] +def getTabSize(): + size = config.conf["brailleExtender"]["tabSize_%s" % curBD] + if size < 0: size = 2 + return size + # remove old config files cfgFile = globalVars.appArgs.configPath + r"\BrailleExtender.conf" cfgFileAttribra = globalVars.appArgs.configPath + r"\attribra-BE.ini" diff --git a/addon/globalPlugins/brailleExtender/dictionaries.py b/addon/globalPlugins/brailleExtender/dictionaries.py index f8346be8..b4c1c821 100644 --- a/addon/globalPlugins/brailleExtender/dictionaries.py +++ b/addon/globalPlugins/brailleExtender/dictionaries.py @@ -18,6 +18,7 @@ from . import configBE from . import utils from .common import * +from . import huc BrailleDictEntry = namedtuple("BrailleDictEntry", ("opcode", "textPattern", "braillePattern", "direction", "comment")) OPCODE_SIGN = "sign" @@ -95,8 +96,8 @@ def saveDict(type_, dict_): def setDictTables(): global dictTables - invalidDictTables.clear() dictTables = getValidPathsDict() + invalidDictTables.clear() if hasattr(louis.liblouis, "lou_free"): louis.liblouis.lou_free() else: return False return True @@ -209,7 +210,7 @@ def getReprTextPattern(textPattern, equiv=True): @staticmethod def getReprBraillePattern(braillePattern, equiv=True): if equiv and re.match("^[0-8\-]+$", braillePattern): - return "%s (%s)" % (utils.descriptionToUnicodeBraille(braillePattern), braillePattern) + return "%s (%s)" % (huc.cellDescriptionsToUnicodeBraille(braillePattern), braillePattern) braillePattern = braillePattern.replace(r"\s", " ").replace(r"\t", " ") return braillePattern diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 7fe691b2..b19290a4 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -9,6 +9,8 @@ import re import sys import time +import unicodedata + import api import appModuleHandler import braille @@ -33,11 +35,14 @@ addonHandler.initTranslation() from . import dictionaries from . import huc -from .utils import getCurrentChar, getTether +from .utils import getCurrentChar, getTether, getTextInBraille from .common import * if isPy3: import louisHelper instanceGP = None +chr_ = chr if isPy3 else unichr +HUCDotPattern = "12345678-78-12345678" +HUCUnicodePattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) SELECTION_SHAPE = lambda: braille.SELECTION_SHAPE errorTable = False @@ -167,7 +172,7 @@ def update(self): if instanceGP.BRFMode: instanceGP.BRFMode = False instanceGP.errorMessage(_("An unexpected error was produced while using several braille tables. Using default settings to avoid other errors. More information in NVDA log. Thanks to report it.")) return - HUCProcess(self) + if config.conf["brailleExtender"]["undefinedCharReprType"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6]: HUCProcess(self) if not isPy3: # liblouis gives us back a character string of cells, so convert it to a list of ints. # For some reason, the highest bit is set, so only grab the lower 8 @@ -210,12 +215,39 @@ def update(self): if instanceGP and instanceGP.hideDots78: self.brailleCells = [(cell & 63) for cell in self.brailleCells] +def setUndefinedChar(t=None): + if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharReprType"] + if t == 0: return + c = ["default", "12345678", "123456", '0', config.conf["brailleExtender"]["undefinedCharRepr"], "questionMark", "sign"] + [HUCDotPattern]*3 + v = c[t] + if v in ["questionMark", "sign"]: + if v == "questionMark": s = '?' + else: s = config.conf["brailleExtender"]["undefinedCharRepr"] + v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) + louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + +def getDescChar(c): + n = '' + try: n = "'%s'" % unicodedata.name(c) + except ValueError: n = r"'\x%.4x'" % ord(c) + return n + +def getHexLiblouisStyle(s): + if config.conf["brailleExtender"]["showNameUndefinedChar"]: + s = getTextInBraille(''.join([getDescChar(c) for c in s])) + else: s = getTextInBraille(''.join([r"'\x%.4x'" % ord(c) for c in s])) + return s + def HUCProcess(self): unicodeBrailleRepr = ''.join([chr_(10240+cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] allBraillePosDelimiters = [(pos, pos+3) for pos in allBraillePos] if not allBraillePos: return - replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]], HUC6=True) for braillePos in allBraillePos} + if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_liblouis: + replacements = {braillePos: getHexLiblouisStyle(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} + else: + HUC6 = True if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_HUC6 else False + replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos} newBrailleCells = [] newBrailleToRawPos = [] newRawToBraillePos = [] @@ -469,8 +501,6 @@ def _createTablesString(tablesList): else: return b",".join([x.encode("UTF-8") if isinstance(x, str) else bytes(x) for x in tablesList]) -dictionaries.setDictTables() -dictionaries.notifyInvalidTables() # applying patches #braille.Region.update = update braille.TextInfoRegion.previousLine = previousLine @@ -483,6 +513,3 @@ def _createTablesString(tablesList): louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ -HUCDotPattern = "12345678-78-12345678" -louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % HUCDotPattern, "ASCII")) -HUCUnicodePattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 3894f974..cea602f6 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -15,6 +15,7 @@ import braille import config import controlTypes +import core import inputCore import keyLabels import louis @@ -28,7 +29,7 @@ from .common import * instanceGP = None -def notImplemented(msg=''): +def notImplemented(msg='', style=wx.OK|wx.ICON_INFORMATION): if not msg: msg = _("The feature implementation is in progress. Thanks for your patience.") gui.messageBox(msg, _("Braille Extender"), wx.OK|wx.ICON_INFORMATION) @@ -405,16 +406,33 @@ def makeSettings(self, settingsSizer): self.postTable.SetSelection(configBE.tablesFN.index(config.conf["brailleExtender"]["postTable"]) if config.conf["brailleExtender"]["postTable"] in configBE.tablesFN else 0) # Translators: label of a dialog. - self.tabSpace = sHelper.addItem(wx.CheckBox(self, label=_("Display tab signs as spaces"))) + self.tabSpace = sHelper.addItem(wx.CheckBox(self, label=_("Display &tab signs as spaces"))) self.tabSpace.SetValue(config.conf["brailleExtender"]["tabSpace"]) # Translators: label of a dialog. - self.tabSize = sHelper.addLabeledControl(_("Number of space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) + self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) # Translators: label of a dialog. - self.preventUndefinedCharHex = sHelper.addItem(wx.CheckBox(self, label=_("Prevent undefined characters with Hexadecimal Unicode value"))) - self.preventUndefinedCharHex.SetValue(config.conf["brailleExtender"]["preventUndefinedCharHex"]) + label = _("Representation of undefined characters") + choices = [ + _("Use braille table behavior"), + _("Dots 1-8 (⣿)"), + _("Dots 1-6 (⠿)"), + _("Empty cell (⠀)"), + _("Other dot patterns (e.g.: 6-123456)"), + _("Question mark (depending output table)"), + _("Other sign/pattern (e.g.: \, ??)"), + _("Hexadecimal, Liblouis style"), + _("Hexadecimal, HUC8"), + _("Hexadecimal, HUC6") + ] + self.undefinedCharReprList = sHelper.addLabeledControl(label, wx.Choice, choices=choices) + self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) + self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprType"]) + self.showNameUndefinedChar = sHelper.addItem(wx.CheckBox(self, label=_("Show the name assigned to the character if possible (english only)"))) + self.showNameUndefinedChar.SetValue(config.conf["brailleExtender"]["showNameUndefinedChar"]) # Translators: label of a dialog. - self.undefinedCharRepr = sHelper.addLabeledControl(_("Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) + self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) + self.onUndefinedCharReprList() self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) @@ -429,15 +447,28 @@ def onOk(self, evt): postTableID = self.postTable.GetSelection() postTable = "None" if postTableID == 0 else configBE.tablesFN[postTableID] config.conf["brailleExtender"]["postTable"] = postTable - if hasattr(louis.liblouis, "lou_free"): louis.liblouis.lou_free() + if ((self.tabSpace.IsChecked() and config.conf["brailleExtender"]["tabSpace"] != self.tabSpace.IsChecked()) + or (self.undefinedCharReprList.GetSelection() != 0 and config.conf["brailleExtender"]["undefinedCharReprType"] != self.undefinedCharReprList.GetSelection())): + restartRequired = True + else: restartRequired = False config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD] = self.tabSize.Value - config.conf["brailleExtender"]["preventUndefinedCharHex"] = self.preventUndefinedCharHex.IsChecked() - repr_ = re.sub("[^0-8\-]", "", self.undefinedCharRepr.Value) - repr_ = re.sub('\-+','-', repr_) - if not repr_ or repr_.startswith('-') or repr_.endswith('-'): repr_ = "0" + config.conf["brailleExtender"]["undefinedCharReprType"] = self.undefinedCharReprList.GetSelection() + repr_ = self.undefinedCharReprEdit.Value + if self.undefinedCharReprList.GetSelection() == configBE.CHOICE_otherDots: + repr_ = re.sub("[^0-8\-]", "", repr_).strip('-') + repr_ = re.sub('\-+','-', repr_) config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ + config.conf["brailleExtender"]["showNameUndefinedChar"] = self.showNameUndefinedChar.IsChecked() + instanceGP.reloadBrailleTables() super(BrailleTablesDlg, self).onOk(evt) + if restartRequired: + res = gui.messageBox( + _("NVDA must be restarted for some new options to take effect. Do you want restart now?"), + _("Braille Extender"), + style=wx.YES_NO|wx.ICON_INFORMATION + ) + if res == wx.YES: core.restart() def getTablesWithSwitches(self): out = [] @@ -493,6 +524,14 @@ def changeSwitch(self, tbl, direction = 1, loop = True): else: return self.setCurrentSelection(tbl, newDir) + def onUndefinedCharReprList(self, evt=None): + selected = self.undefinedCharReprList.GetSelection() + if selected in [configBE.CHOICE_otherDots, configBE.CHOICE_otherSign]: self.undefinedCharReprEdit.Enable() + else: self.undefinedCharReprEdit.Disable() + if selected in [configBE.CHOICE_liblouis]: + self.showNameUndefinedChar.Enable() + else: self.showNameUndefinedChar.Disable() + def onCustomBrailleTablesBtn(self, evt): customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) customBrailleTablesDlg.ShowModal() diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 85683091..98680fda 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -248,15 +248,15 @@ def getKeysTranslation(n): def getTextInBraille(t = '', table = None): if not t: t = getTextSelection() if not t.strip(): return '' - if not table: table = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) + if not table: table = [os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"])] nt = [] res = '' t = t.split("\n") for l in t: l = l.rstrip() if not l: res = '' - elif charToDotsInLouis: res = louis.charToDots([table], l, louis.ucBrl) - else: res = louis.translateString([table], l, None, louis.dotsIO) + elif charToDotsInLouis: res = louis.charToDots(table, l, louis.ucBrl) + else: res = louis.translateString(table, l, None, louis.dotsIO) nt.append(res) nt = '\n'.join(nt) if charToDotsInLouis: return nt From f56d1083533ca87fe3a2cf4279aad21db3066a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 4 Dec 2019 04:32:39 +0100 Subject: [PATCH 06/87] Fixes for NVDA 2019.2.1 and earlier --- addon/globalPlugins/brailleExtender/__init__.py | 4 +++- addon/globalPlugins/brailleExtender/patchs.py | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 94bf45d5..2fb8d68a 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -298,7 +298,9 @@ def reloadBrailleTables(self): dictionaries.notifyInvalidTables() if config.conf["brailleExtender"]["tabSpace"]: liblouisDef = r"always \t " + ("0-" * configBE.getTabSize()).strip('-') - patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef, "ASCII")) + if isPy3: + patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef, "ASCII")) + else: patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef)) patchs.setUndefinedChar() @staticmethod diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index b19290a4..2e172303 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -224,7 +224,10 @@ def setUndefinedChar(t=None): if v == "questionMark": s = '?' else: s = config.conf["brailleExtender"]["undefinedCharRepr"] v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) - louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + if isPy3: + louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + else: louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v)) + def getDescChar(c): n = '' @@ -239,6 +242,7 @@ def getHexLiblouisStyle(s): return s def HUCProcess(self): + if not isPy3: return unicodeBrailleRepr = ''.join([chr_(10240+cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] allBraillePosDelimiters = [(pos, pos+3) for pos in allBraillePos] From c938dc9296f84ab6984279963a05996e22fad21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 10 Jan 2020 16:23:36 +0100 Subject: [PATCH 07/87] Added HUC Braille input, first implementation Default gesture: NVDA+Windows+h / dots(1+2+5+8)+space --- .../Profiles/baum/default/profile.ini | 2 +- .../Profiles/brailliantB/default/profile.ini | 1 + .../Profiles/eurobraille/default/profile.ini | 1 + .../freedomscientific/default/profile.ini | 1 + .../globalPlugins/brailleExtender/__init__.py | 7 ++ addon/globalPlugins/brailleExtender/huc.py | 70 ++++++++++++---- addon/globalPlugins/brailleExtender/patchs.py | 76 +++++++++++++++++- .../brailleExtender/res/sounds/keyPress.wav | Bin 0 -> 27982 bytes 8 files changed, 138 insertions(+), 20 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/res/sounds/keyPress.wav diff --git a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini index bfc547fd..94e58538 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini @@ -60,7 +60,7 @@ reportExtraInfos = b10+b5+b8 getSpeechOutput = b10+b3+b4 addDictionaryEntry = b10+b8+b7+b1+b4+b5 - + HUCInput = b1+b2+b5+b8+b10 [keyboardLayouts] [[l1]] diff --git a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini index 0bf3c1b0..4e4acf9e 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini @@ -52,6 +52,7 @@ nextRotor = space+dot5+dot6 getSpeechOutput = space+dot3+dot4 addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 + HUCInput = space+dot1+dot2+dot5+dot8 [rotor] nextEltRotor = right diff --git a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini index 914da610..1e47ddef 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini @@ -52,6 +52,7 @@ getSpeechOutput = space+dot3+dot4 repeatLastShortcut = dot6+dot7+space addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 + HUCInput = space+dot1+dot2+dot5+dot8 [rotor] nextEltRotor = joystick2Right diff --git a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini index 90e29ad6..db6753ac 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini @@ -52,6 +52,7 @@ nextRotor = braillespacebar+dot5+dot6 getSpeechOutput = braillespacebar+dot3+dot4 addDictionaryEntry = braillespacebar+dot8+dot7+dot1+dot4+dot5 + HUCInput = braillespacebar+dot1+dot2+dot5+dot8 [rotor] nextEltRotor = leftwizwheeldown diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 2fb8d68a..f3bc704f 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -161,6 +161,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin): lastShortcutPerformed = None hideDots78 = False BRFMode = False + HUCInput = False modifiersLocked = False hourDatePlayed = False hourDateTimer = None @@ -672,6 +673,11 @@ def script_cellDescriptionsToChars(self, gesture): ui.browseableMessage(t, _("Cell descriptions to braille Unicode")+(" (%.2f s)" % (time.time()-tm))) script_cellDescriptionsToChars.__doc__ = _("Braille cell description to Unicode Braille. E.g.: in a edit field type '125-24-0-1-123-123'. Then select this text and execute this command") + def script_HUCInput(self, gesture): + self.HUCInput = not self.HUCInput + states = [_("disabled"), _("enabled")] + speech.speakMessage("HUC Braille input %s" % states[int(self.HUCInput)]) + def script_position(self, gesture=None): return ui.message('{0}% ({1}/{2})'.format(round(utils.getPositionPercentage(), 2), utils.getPosition()[0], utils.getPosition()[1])) script_position.__doc__ = _("Get the cursor position of text") @@ -1478,6 +1484,7 @@ def script_addDictionaryEntry(self, gesture): __gestures["kb:nvda+shift+k"] = "reload_brailledisplay2" __gestures["kb:nvda+alt+h"] = "toggleDots78" __gestures["kb:nvda+alt+f"] = "toggleBRFMode" + __gestures["kb:nvda+windows+h"] = "HUCInput" __gestures["kb:nvda+windows+k"] = "reloadAddon" __gestures["kb:volumeMute"] = "toggleVolume" __gestures["kb:volumeUp"] = "volumePlus" diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index 366777c4..acc21664 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -1,10 +1,5 @@ #!/usr/bin/env python3 -# coding: UTF-8 -from __future__ import print_function, unicode_literals import re -import sys -isPy3 = True if sys.version_info >= (3, 0) else False -if not isPy3: chr = unichr HUC6_patterns = { "⠿": (0x000000, 0x00FFFF), @@ -53,6 +48,10 @@ "25", '2', '5', '0' ] +HUC_INPUT_INVALID = 0 +HUC_INPUT_INCOMPLETE = 1 +HUC_INPUT_COMPLETE = 2 + print_ = print def cellDescToChar(cell): @@ -103,7 +102,7 @@ def getPrefixAndSuffix(c, HUC6=False): if pattern[1][1] >= ord_: return pattern[0] return '?' -def convertHUC6(dots, debug=False): +def translateHUC6(dots, debug=False): ref1 = "1237" ref2 = "4568" data = dots.split('-') @@ -136,20 +135,20 @@ def convertHUC6(dots, debug=False): out[-1] = ''.join(sorted([dot for dot in out[-1] if dot != '0'])) if not out[-1]: out[-1] = '0' i += 1 - if debug: print_(":convertHUC6:", dots, "->", repr(out)) + if debug: print_(":translateHUC6:", dots, "->", repr(out)) out = '-'.join(out) return out -def convertHUC8(dots, debug=False): +def translateHUC8(dots, debug=False): out = "" newDots = "037168425" for dot in dots: out += newDots[int(dot)] out = ''.join(sorted(out)) - if debug: print_(":convertHUC8:", dots, "->", out) + if debug: print_(":translateHUC8:", dots, "->", out) return out -def convert(t, HUC6=False, unicodeBraille=True, debug=False): +def translate(t, HUC6=False, unicodeBraille=True, debug=False): out = "" for c in t: pattern = getPrefixAndSuffix(c, HUC6) @@ -165,7 +164,7 @@ def convert(t, HUC6=False, unicodeBraille=True, debug=False): for i, l in enumerate(hexVal): j = int(l, 16) if i % 2: - end = convertHUC8(hexVals[j], debug) + end = translateHUC8(hexVals[j], debug) cleanCell = ''.join(sorted((beg + end))).replace('0', '') if not cleanCell: cleanCell = '0' if debug: print_(":cell %d:" % ((i+1)//2), cleanCell) @@ -174,7 +173,7 @@ def convert(t, HUC6=False, unicodeBraille=True, debug=False): if i != 0: out_ += "-" beg = hexVals[j] if HUC6: - out_ = convertHUC6(out_, debug) + out_ = translateHUC6(out_, debug) if ord_ <= 0xFFFF: toAdd = '3' elif ord_ <= 0x1FFFF: toAdd = '6' else: toAdd = "36" @@ -188,8 +187,49 @@ def convert(t, HUC6=False, unicodeBraille=True, debug=False): out += out_ return out +def splitInTwoCells(dotPattern): + c1 = "" + c2 = "" + for dot in dotPattern: + if dot in ['3', '6', '7', '8']: c2 += dot + elif dot in ['1', '2', '4', '5']: c1 += dot + if c2: c2 = translateHUC8(c2) + if not c1: c1 = '0' + if not c2: c2 = '0' + return [c1, c2] + +def isValidHUCInput(s): + if not s or len(s) < 2: return HUC_INPUT_INCOMPLETE + prefix = s[0:2] if len(s) == 4 else s[0] + s = s[2:] if len(s) == 4 else s[1:] + size = len(s) + if prefix not in HUC8_patterns.keys(): + if s: + if prefix+s[0] in HUC8_patterns.keys(): return HUC_INPUT_INCOMPLETE + return HUC_INPUT_INVALID + if size == 2: return HUC_INPUT_COMPLETE + elif size < 2: return HUC_INPUT_INCOMPLETE + return HUC_INPUT_INVALID + +def backTranslateHUC8(s, debug=False): + if len(s) not in [3, 4]: raise ValueError("Invalid size") + prefix = s[0:2] if len(s) == 4 else s[0] + s = s[2:] if len(s) == 4 else s[1:] + if prefix not in HUC8_patterns.keys(): raise ValueError("Invalid prefix") + out = [] + s = unicodeBrailleToDescription(s) + for c in s.split('-'): + out += splitInTwoCells(c) + return chr(HUC8_patterns[prefix][0]+int(''.join(["%x" % hexVals.index(out) for out in out]), 16)) + +def backTranslateHUC6(s, debug=False): + return '⠃' + +def backTranslate(s, HUC6=False, debug=False): + func = backTranslateHUC6 if HUC6 else backTranslateHUC8 + return func(s, debug=debug) if __name__ == "__main__": - t = input("Text to convert: ") - print("HUC8:\n- %s\n- %s" % (convert(t), convert(t, unicodeBraille=False))) - print("HUC6:\n- %s\n- %s" % (convert(t, HUC6=True), convert(t, HUC6=True, unicodeBraille=False))) + t = input("Text to translate: ") + print("HUC8:\n- %s\n- %s" % (translate(t), translate(t, unicodeBraille=False))) + print("HUC6:\n- %s\n- %s" % (translate(t, HUC6=True), translate(t, HUC6=True, unicodeBraille=False))) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 2e172303..d581f81e 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -10,6 +10,9 @@ import sys import time import unicodedata +import struct +import winUser +import nvwave import api import appModuleHandler @@ -18,6 +21,7 @@ import brailleTables import controlTypes import config +import core from . import configBE import globalCommands import inputCore @@ -251,7 +255,7 @@ def HUCProcess(self): replacements = {braillePos: getHexLiblouisStyle(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} else: HUC6 = True if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_HUC6 else False - replacements = {braillePos: huc.convert(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos} + replacements = {braillePos: huc.translate(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos} newBrailleCells = [] newBrailleToRawPos = [] newRawToBraillePos = [] @@ -405,6 +409,52 @@ def executeGesture(self, gesture): return raise NoInputGestureAction +#: brailleInput.BrailleInputHandler.sendChars() +def sendChars(self, chars: str): + """Sends the provided unicode characters to the system. + @param chars: The characters to send to the system. + """ + inputs = [] + chars = ''.join(c if ord(c) <= 0xffff else ''.join(chr(x) for x in struct.unpack('>2H', c.encode("utf-16be"))) for c in chars) + for ch in chars: + for direction in (0,winUser.KEYEVENTF_KEYUP): + input = winUser.Input() + input.type = winUser.INPUT_KEYBOARD + input.ii.ki = winUser.KeyBdInput() + input.ii.ki.wScan = ord(ch) + input.ii.ki.dwFlags = winUser.KEYEVENTF_UNICODE|direction + inputs.append(input) + winUser.SendInput(inputs) + focusObj = api.getFocusObject() + if keyboardHandler.shouldUseToUnicodeEx(focusObj): + # #10569: When we use ToUnicodeEx to detect typed characters, + # emulated keypresses aren't detected. + # Send TypedCharacter events manually. + for ch in chars: + focusObj.event_typedCharacter(ch=ch) + +#: brailleInput.BrailleInputHandler.emulateKey() +def emulateKey(self, key, withModifiers=True): + """Emulates a key using the keyboard emulation system. + If emulation fails (e.g. because of an unknown key), a debug warning is logged + and the system falls back to sending unicode characters. + @param withModifiers: Whether this key emulation should include the modifiers that are held virtually. + Note that this method does not take care of clearing L{self.currentModifiers}. + @type withModifiers: bool + """ + if withModifiers: + # The emulated key should be the last item in the identifier string. + keys = list(self.currentModifiers) + keys.append(key) + gesture = "+".join(keys) + else: + gesture = key + try: + inputCore.manager.emulateGesture(keyboardHandler.KeyboardInputGesture.fromName(gesture)) + instanceGP.lastShortcutPerformed = gesture + except BaseException: + log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) + self.sendChars(key) #: brailleInput.BrailleInputHandler.emulateKey() def emulateKey(self, key, withModifiers=True): @@ -430,7 +480,7 @@ def emulateKey(self, key, withModifiers=True): self.sendChars(key) #: brailleInput.BrailleInputHandler._translate() -# reason for patching: possibility to lock modifiers, display modifiers in braille during input +# reason for patching: possibility to lock modifiers, display modifiers in braille during input, HUC Braille input def _translate(self, endWord): """Translate buffered braille up to the cursor. Any text produced is sent to the system. @@ -445,7 +495,24 @@ def _translate(self, endWord): self.bufferText = u"" oldTextLen = len(self.bufferText) pos = self.untranslatedStart + self.untranslatedCursorPos - data = u"".join([chr(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) + if instanceGP.HUCInput and self.bufferBraille: + HUCInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) + if HUCInputStr: + res = huc.isValidHUCInput(HUCInputStr) + if res == huc.HUC_INPUT_INCOMPLETE: return + elif res == huc.HUC_INPUT_INVALID: + nvwave.playWaveFile("waves/textError.wav") + self.flushBuffer() + return + try: + res = huc.backTranslate(HUCInputStr) + speech.speakMessage(res) + core.callLater(0, brailleInput.handler.sendChars, res) + nvwave.playWaveFile(os.path.join(configBE.baseDir, "res/sounds/keyPress.wav")) + core.callLater(0, speech.speakMessage, res) + finally: instanceGP.HUCInputStr = "" + return + data = u"".join([chr_(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) mode = louis.dotsIO | louis.noUndefinedDots if (not self.currentFocusIsTextObj or self.currentModifiers) and self._table.contracted: mode |= louis.partialTrans @@ -511,8 +578,9 @@ def _createTablesString(tablesList): braille.TextInfoRegion.nextLine = nextLine inputCore.InputManager.executeGesture = executeGesture NoInputGestureAction = inputCore.NoInputGestureAction -brailleInput.BrailleInputHandler.emulateKey = emulateKey brailleInput.BrailleInputHandler._translate = _translate +brailleInput.BrailleInputHandler.emulateKey = emulateKey +brailleInput.BrailleInputHandler.sendChars = sendChars globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ diff --git a/addon/globalPlugins/brailleExtender/res/sounds/keyPress.wav b/addon/globalPlugins/brailleExtender/res/sounds/keyPress.wav new file mode 100644 index 0000000000000000000000000000000000000000..f194236193b50d6d6e8b7f891ba51cda5bb21177 GIT binary patch literal 27982 zcmW(-1#}z95}cXcm1Jf};>2NQW@gTXneoER%nTQ%3o|DUGcz-TotW8@b_agle|ou> z*wSiurl-5Qs`~zF(y(E}VT5$7)1kqDVPkXq6GA9qWadTuC5aK8_><;M+P3R~e>Q2^ zuvL?KE!u_P?-M3WDA{j(zwv|n^&c^2#DK9S`;Nd>n$-KNzJcGCEnTMkfA6o;;{X4u zRH*{~)%ve?48JQwnzU`$&KG}c-h2Fj3YANiDO<8k>C&WM@3Flv4J9O)ILJP-lAI+Q zNDxU>7u8C&NsUteDn*`@yJQ2^RGBIa_tgOJ?MkYX#Uw8oN`9#vBsZx@-jh2-l1up8 zU3FhoRrSa&HIaN!ajLiKr);W)Dy)X9#cHEUQg2ij(wVsMnThlz=}Z@qucQ+hMXKQH zy@^XLBx&loDyY`UR8d&&6VY;u%!_X+NypPuv^qON`?K6Mf%YP~X=U326>*}g{sotvF>M?#_oIJwo204fK6(zOtJpFOcLFA7T>XjNs znvw-rPp)FI?#r;&$!ZOmk58Na{>i>B>qW%>y}eM#Ps9k`POHV(okzRSe{jt`xX1Nsr%F_*c;Zs(q1Y|H z@|}DHFU$|}fxNRUE=!XlPN6=w3o=(8=SWmOD7A%SlX8Tx9T7bU6 zGX$$6Qi$Wr*@8<=02+zkm@nqgh{1Q`SdG%gJkyi99EydciU2HWw%}TH$>>Ymc zk?zN8=B33*hKf{a^0&M#8)7Y+tNN;>s)Sv%lOrSsd-@(v5kj|7ZK}yM*IB$z_-w#x2qSQb{=K!47mSh51PJAe%SLjCi0nZYJ zeVn7!(q6EYOw!Br5YFEq-1j$mQErpVWHy;s&KC#7ba4r1a1zc$Z8crpQa+?IS&CO7 z>LhRJ6nc%;r@84y@|twRt{zlVWfw{D>7nvGPElbsPGzaGxbsjlgzO;?NC7$P zVxg=cyGFZGNxqTIq%`%X&&XS1$Fmh6eTg?tr6*Q%i+nD_kWWUcnRrcCXVqSummm1= zT=hp@#Wz^8JTdU?B}f)BkHC35uePe{s+cN={kSNvAwC?kmmDPD;#ys09eEw+c`7MK zmeEpl53Po$Z$nqoqVygaO(Mxxtei&1A}3_3?~1BKd0Fn1S@MZ|fjqQPwnv8OE|okg z->aqSBpF6#BPXWftXD)fxQVA+O(xtGtL4KV0prOq9Rm8nr@s z5ii_DW#UVN>3MnsS*jSlL7tGZv@R`(bIxcu?Ldc9j`*odx|89^xrY$}amq%bB~g3j z4eWOpm4H}lP6m-aWGZ&xmijJDIZ#c*3T;poWFy@74|xjL&#RTzI%@;9;#w80x@x3e zIlnoFrjJh_kToLfp?E2((mHgyoFkq1{5AciUR$rLr;7~HUG-G6jJZa4t+%#GY!l5? zYqdt-sP{1X8`J4RTEeVizE6uuTb;QxvnFfB`r5|Zs0b0l479H5@AUJ=3*(7Gp3@_Y z@gD0ul0}dllDRtbJpaWLSq^O{eTFl>nO2bl<*O{>T<5ywYD;I+f5~%l(Mq*Kam^DR z$sS*{Nd2`4mFG3Lw#atNR#x>_0iv2{jT})|byT@|Nq&}GC5N<=S{T;5w$;X3YVEda zh#q1PT}@ZmuG(_iTG>XEU4+TfvIQA~{9BR~msR9sI+4E9?rL3ez4@-ru78oo;^{H! zMINYZhO zAdAUgh}hrwzN?~-IHPK*{d#u&8uEtIY-?^crF)=yFUK&AEyUUj#KkS~N#s{U)F~~u zp6QtCG0Q8Zssl6 zPO?@-%2A}L`fbZ=yI~A6x?)dqiFu+3>Z~XIKx?ybtrjENJ7oO(?hrFtMoR~~N_XPS zpHyziY-Nnu`Vp-tA82(l&$%nA>#{BLV~4f1+TZ#FeKg%bdx}-!yoePgNL%2AW~7zs zpf2Im<|8>tX;PN#M1F0jP1ky}J?s^-hbG6$VLXO6<(K(KRh^t>8SESK${^m3SCm;| zDl+LaoM8u>OmpZtTSYIM`m?Okn5zsQd8Z`M?IBey4?&cjIsdXG-i{wRO^JY2oBn#r?Y4=jT# zBF{Ai$`K@bTV5;`?8zr0r3H9JFO0rNcx`c zVY)T~b^HoxNWLo{Jaco^g;pSLlB^Dh1g^|W<`-T;%)qk@P(JjA%A(0+mexmwu_QiI zH4|f1oE%2FDNoWy`KoAjQa&J8Wez$>R-)PEYq~*Bqyy!1RaQ{qEfeWol0?t;#l$qtr=b*jp0+)0tTM@H*#x-eH!V${u&wGNIVcAxH)5nFs(2n6NwVQ5{nQCjhWst-(Jg8! z$quxXg2=Bg!%>H0MH_jJPZgu&cy$ohsKI(@2gw0Cl9Z>X(PW)Z3yae51`ZrtTFpSFVeeoDJ{aj(BXH{n&OkAM3gRm@NUd>744OYRH!&fIqNW^M1TFIsy;X zoD`FRWV`SopTt(OQVymWY9D(^%4n5H1iMB8SuHJ2i)CM!r>camt0gZ=E{j~mE&|kI zD}qiIzS>DOnw?RD*g~?0oyX3m6SrDI>Y_WTql%Gwh|~mGPlez-HB(t~3-zT%v`OqT z%|b@+q8gJSY8QD1jI;)oIt<9^r#ecm(hF(f#qeVx_Z6ucWmUqMmnO%7T z`5gfsDJOkZdl`><{|{=NM!u*LB!JYT5$GlCt2Go*(aLrhv;OJ~{j{D_`iavpGOPvysb zL<6&j^~(Ce%L%8L!VhszKH3VCM|o>jn~c;w*bO=uz4CPtLni|dXOOny0g%8Y>xpWp z+ECPeAlZYgJS(j?)F;q3tczr%liWq_%O3QP=s{kKcR+_P$t|*-&PKQMR<#Bmo=;D) zby`7IK-;RuNP`$#wJ~zsVhbj<>chTRp`Ioa?q^jtpU+RRR5)4Aq7! zFRiD(#TI7YXfNv^_VzxnJx>Qr_ca2de4_mlymg;to;$RS^t}1UrQGFRL1tZ7a9Y2V zl-T2cb|)4{jLvH1eCpOLgKreswXu3So2q%adOF`GCnruxI2*etW9a(Gs>m4$yk)qI<1+rqpORn zl(Zchbv$FZjX__MgPll`r zU6ZYAQb6kSyWJin-JWu<$;U6BucsBrY~rwcw$J$^XODbM^Dgr~>+#$*EhD>cqT@-4 z9ff<8BE^;znO*R5(LzOz2h|Vi8Mh>E$A`Ng*8Obyv);FUU$5VrdH3O^r59hmcE0+{ zbeQY4J6d@*i&YCK8_+4+uJCn!#e5xswf&n$KFj$m=ZKucgP(+q@c!&KOFU<%6B}p5 z$HXRzKTDF=WCiiz`cB6S_SX2Jd)rTB?-KE(Se_E!ir*`-u=wTTD+=7me<|o*z$ec% z`&;kD9$h?U+2$~d^pTI`5@(>#5^yL)G3~rNg=e7xw9$-XbyJOU(OPv15K8pe2~W z>&R^h>ymSNUi5BV?0E5b-*vt|asGdN-M=z-`w-6%+fKGg-nMFH70sv}{qpCX=nub) z)Qu^F;x5Gv`sw<$Bax-{$z;~ItoyP*&ExefU_`{1?8OSa4cMK15dXriSu54F(BEOj za(;+-Dc6bMxGjH=s>YXnI6&?!d5!$Jze)ob?(ko?1(7(Z+#n?rbvn zLr4%kN{6^!JMW}dOzj;r{`=u?>)&@yc=q#GMpFFOghjuyegu4K^1J+xe>0n;RU{4N zU}Lf_y9o3s08pXFV{r?Q@66b$GPG&1|z2wx**XO}tFD^KjyPu?Fr9VpSo93PN*!j!~XCFPE`v0A?R^Ie{}Ml*PN%^C!_z4uAfvb{ejUBI7EWGfE>FFj`8%atrkQ*`XNU>eL9U?@ zMR^x@;WuSp=1JX_bT`}R@L-R*9^VsMC-2C3=$gt8(MK*%*?{e~5sx2U22jFqdvm*g zV2J>4o1d}Gsj|MaJ8W~%`=D zp6Zq6$Ag-)hq^msLS~#8&5L@Lx5s&uvjy7QXzy*ywGob+#x&o0-r@ezXPwrSj?VJQ z(B0>=GW6Qo1`p+Ehx)uV<5E@=XLZwyX~rWG%S`7=SACbKbD4~?rsz9K7te;alJ<4l zV*bgU#%oxONi%gdHAiZr-$!Gg0_{hai@!GCct{MMfZ;yPQlsMH>>xlIYsOMfr_sqO8wSS+F%aIT)ODoN&VywvM zp6(S}FUH$S$~x}z$+6QO$8H-LG$P=FukbA8SrBY}A!DtryGJpvyyz=-t6}ttw#%66 zyyiZcGB16p04J%1+OKC=&XzIT|J+ZwmAHaN(sw>By%%}S_gHRwsSjrV((9@L2{k_3 zYI^_i4fFQ*o9R*2yRkOd=;VCjVos;?m%iQT>>hPTRbUqiO^H>FjN$W^EE@tQ`7oP4`^k*~6=g_abA0ZI@Zix{^UN7r9Qje)4Ky z8S2QaJ3ZhV3xH=6lpw zgdX=5uj_T)_QfyJ^BY?sx@TD_OWprwbRtvuQdyZtxg*@8vW7Y9r1i*%O`4zDAoXE- zq`R$8}a5|&mjc1GOjgu{u&Gp=N| zaP2jH+!J`Z8l^9BJn?x*>)9t}&M?=Sn`Lp^cgF+0nC%)6RVrJ?Mv`;txch^viR>u; z_N(NZ8s02yh)*@IRMFO&PwtBmUYbWKpJ`sheNK802-*}>D<~j1)A7UO2B|?;vC{09 z=Tr~>fLp#!zg#|ldyRJFwD-~@=@Z#T46z=ug4E^F&vDWgVg!;I@*6Pxb@bf@vRY+r zO}m)>)qNYi#s+yd>z(UYM&~RK_e8f{bmFr_wB>8XxVE}GISaWXoHl2V%>J%y&b4AH zzs8SR+ugHWL?l_q#V6@~Oo z*;^f_e(VfoY&L(xcetr(vwB#K!RC(zPuf6^5zDP&=18&CN>mA=u^J@4i2;1M*uk@@ z^U^{6=s(cH#`0bKv-Q=w!`Jd0;vWBQEwrkbY3|XYzA&`U=$xeTb+2}fG!MEJbkAVT z6Us~$U8mL5#%T97#)7pI*pbm-C0@{~dR1+YagH+G2HTL%xQ-kc7@= z75Q7erc0oEc2UP=T~UtiQwxo!+Hu=0eUfdE9&3A#_}i~nwY|_=*eBa|8sm(K>Wg}4 zuCta~i}*YFLJg+%*cCdGol;FnmY55E@2;!_l{1wrrHO2?wv~Nn|B&@y2O5#?EQp1( zPn1b6u9})v)w*JNSjR0LJzR5fTy#)9RB7{tyM}AN^P;%JpMr5{Y!x!6Tb<2H+28wh-b7)U~Fvu*}PT&_%2v z>qX0gTi6S&wKmiwO1Fcr+e4O+dt@UrK@jznb{TCJvHnKyI{{tuF8cdF)l820+)6SW5c_H@`v%J_WZ;}`~hYi)bvRqnw=};X_!@9u-i&u027^#-pbIqZ* zakO`=@Eqj1&C$ov*zSW}XaaV$rT(04VvW&HdXrw@ev;%#QJ-7x3NB)CSCY7IUF9px zl9u6K!iSq%(gvg1-8Cy{mnx-rT;B)i*|vBH9Txgv}=9wcli( z7EBg1rz}GoL!HVgPpMzLpgeBwwsu&pxFv@`ml+^`n2*c@yaE3S-DeG|=rUH0I$3|} zt#zV9!C#G#CwPGBEfQo?aaUB}ZRJz`O$_5-&G~LbgFBO_TS53;yyze{$RcuqDxzrm#2waRR%wwFnkizRENG^S6~O0rlw6tCKBF4&4} zdWL?+sG?UloTL`}h)*?DdFWAjgIut(L@2ubIGG;|*E_7^X%-5Gc@U||%BWzvO0Fc? zR8?A0jwf@)OBEsdsSj=&U+3KHo@sXG8r1lW$_wmDVV0NJ=}T~T2k~k`FM`iJ2%Xgz z{AQAvPaCO=`T(|1@6KvaKlK~g@G1E$GfA+TLiWi{YBip&6OTcEI)enL*{ZTk<5#Wn zmc!g_j&VOX*Sf!&JKRgn{_dgXG`DmQcb|9dbKP>*b5VDI`GF6Rs{FQ~-QDTs6I|OI)smEe;#5>-mto>A|73kP{mj=uO%udP zJ{r8*Ynelq6zh3Co@~9v89rc^1H;qR?CXAGhMJG9*=BqG)!Hq7i%F`KoT;ic9LgXXOK`n5@KH>tuZJn@c^UjFl3MwBf zjuShSU8GIvPf{M5zlAnVQiGVEJj)P%%A2^vmp224a9Qs zjxQ8%c!IbmimENhc*(qxjOQM5D(@y{So!#M+>U`1Z?q0u z0KMrHRQ@^grd$u6)0do8)v(WrBB%I`b$Kc*-cl^$)2+MaXzRKe3k`H4KVZ4s1>Ggw z6I}VQt5ISRkijlghGi<6&k#;)CU;x4P&vw4KH@CTO{b8abQ+k_8qlQ=N(&tBEHz8^ zW9_KT_Dese57P>Q(Murv)JSa@bL&m@p1RV8X)UypS_O?mk6FZeg7uq4Z?XW^-L}SRq!OPS$s7nysZV8hh6lJ;n#^jg|w7 z_iSj#Z)kqDk5*)rSfKU~J&!oZubl+Gti)2aO6-D`OV4Gz)TfOQWcXu zc}vOods0p=rAOd*D9P)}P1Y5%MfRo9YN1*y)8XlHru2vXVo>VKS{;!^T5B84Z19qiDJ7fB~Pn+vNPfGJ9N7z@D=TWcjYhb0c*k< zu_Mp`{PZ1q2ahuzyFI>ol(n_7HPwsgdG&i*BHPMF;k*lImTOoZwibS;-SU{Qkwel$ z>w&6TgndQsnv8sP8<^w=D$Z8xqZJ`mi2sz%PNY70%vbT;$V9Uc^U=salTqh7K#SQY z7K^2-h}ug_fWw{*FNY+X(VY!q-Iyr12s~v2bUh8Hp`-Fy*w^M#W`L|)Zz89qxIAu;V(1!b$MDy>_ea|CL)3P+R!Rc z5F=?xEtNLb8nbb1Etp9GSJ*g`qV7QL`K=1FZuAFqa39+tI1Z+>gUm*g;WBUnErsJQ z>eD9l6%AoNxSyd=H|~io(nH3<`87&imH&{pf~()WlKNZNfoab{H>yX<$WS# zrSD*c^bN|7)=(N$+z_@#ZXtikJa9Wr!TFl2g;GyepCpoZ(1fFa{Yuk2^c^ZvAgM?C zW3~P1dg7r>sOp7y6SQWqsiD_)5g%3vkaZ z`9m!WCS3{D_8#1V2cY|Rq~A~n2b1aW4HXbc=%_aE zlTi6fNk3dH6-t)`20x4UoF_NcAb7MY0nPNHSCltd0Nr#y*-nl_ZLK4|@cmH8%hO44 ztR04{MRVgwYYc*26C(Gq!)fcGo zqqqPSxUqTyufQK!N8QGAjE9%$p*o3t)IpYk_In<6VghXeOfr#VpuhShcZdvS%Ie6w zhv2(=hpds?_Q9B<`|HJV8auISEC}6M4(NGz;K}?&iqj2Hi^sx27S8MN!tP1#D0g-9 zy486?1WJn7EKf?vLS&%eayP2tVR2JdBE?WuAJbOwI(fjQ z_z^i}DBKT6`8F$1RuHqG-UT54Ooq4NB5Tg>X>+wg+F^7ZhuK0FLoeVorNiAR;h0p= z3p&YU&gDW;NuJ^z#ZT*`n7|`s2-Gz{C|sKO3;Vhk%KUScpR`2(7Xw|I;2xskB&e-8 z{E*k^b#jm<$T{kosElk;1zGwk-gAT?(~^dW`ZTGLCZekBU{&Ostet$Pe5zUjAuW?T z(BYMbbG94e*2v@X0nyW}h=s3~y%HI?(gMf`>j z>>xQrJ}W1fpN{GmH1Zk9I`O#Y{lJ8k;H8*GOG4>8ac;kYRh03Yv;CoJ>I)I;tzI_Y| z>`YBJJZVRkSC&$3MM>FT7;>CEgEf2%AH)cto?r4G==_D%DY;SBl;z++=%nUh$cec4p@L{n^wxEV1#WOKX)fo(&9aroz>#ttF2yVA3_Xb} zHD-;q*{qYcMLi?$#5-^dGvxwt2o8mx;*-2DkI7Iu8*1+}+M70_$KWd*rcMEkmtxK6 zEw~zXGM#4NJSIS;-N??8!)!IGZ8x0Nd@7LLM$|lz1#l*+zyW5_lkiph5EJ}CRdos` zo$o-T`Lq?}3T;Aa)7*Qzfv&Q=;r zyOV=tl6)tdz@ah(Cn-ubQ0Z_-)TM37eoDzy6)*CMY&=EW;)mgE+(*6PFg*?D+#5L= zsPs2#a4ZnILHof)69uotTsUEl($yAszv6?sj9N5E6dWnthrvq zD5j-pO@XHE;6t`yS3T7!9!8{@4JYZhd%-?~pKP=riER z9|;Fkf;N=}8Mn1C?F+R-t!@vbRT!@8iYhzw>sa1VE)lC`8F>ov)IbEwL881Y2v2tz z_&Y|i4_bTp94@Piq$2pCAEJ+Hhm5%deuZa9tC&MPud<{+(Psh z`3jf94R{Qf!E-!FJIHyK z%u~PEck)Nm*n2QE;o40)MsKPm01pSS2c$J3{DS%|`yujo0=ra)BkH{Rg&I^}-4NM< zs0?)&^~y!xp`+MO!_hYk!M!h1mEoqkE9b(u@QHM$X>i7jKo00{mEzaMS-Dz<0Qoznhu-ubx)~WcMfHOF=`i9j8gaS>HE|YvQTOO4iYv&* z{FPNneUOcSmydx1zbV^+>fZ&k2nFDo`=(B!+BByX z=@PmQb!C*coc_z|sh@DY-Gu+X4csQvSv75fzMfUl->XG*8Hr@qS%!9pPGLWR7aFk+ z>?qvrdx6p}KnLm%$8bJbSq_&>c2U)2K79KYa5Bf>$1O}7!gm}5CrBH$N9IN??g=md z3l#_qJVl$prfW4=2l^e)wi=Q}ss6)FSN?w{3&68{Kq>NG?k2sZOBE+; zseyhq8$4R&*%t7?LlEypRCaPseo(FDOW8!ksGjm2rasoF$!aY;o4M#BI+x^R9pFUt zl#AfVQ>X%Cps2iJPk?Qv!y$eWdsq^={|hpCPWaRdidMXcOyzLs;}mLgyNKc=rN6ih zjF1g;C=qZlKZKX%4ff_BULIplQUg_6Rm2Ts6#x)-eM7S@gZrFkQc+bDxJgtKlqrXv0oy;W8IL-gmfWDZoI7Er-g z0>SSj8&pyH4fXLYS->(WWt(Xz`nr|+IQ@}P#}=a9(smIqWUk*(LZZ}RK1TGxB*Q!O zXc_3Ly5dx9#{5bq$wtevn@}d^(*y9NB?23kM<TW;jO3)g`t~CocV_m9HTf2 z95GrhN1uKe9=_Rfi8@QpA)3mvns|R})a&k;KUfERcv&`u!~F?PYg>9B&ZiH2_x~qU zC|qyjML9Xgih`Qv2%9ytL!+Yz`VQxS01jmQjfSOElfu4XH-jn`~y!=Tugd*X_DfT13#6Pl) zOhX;-34F4ST$6Fgv8UB&JjV*$TL;ww&tPNyRWw;H8p#`Cp43%aGFhggc3nfR7>t<7 zz-v8SN)#BZ0puCJ>AU7+7L=4&a*94CewY?$3%3|oBfwqNC(D4?p29^{4*sneIP6W4 zh*NkQlN!Nz(p8u!+K!2j{fNFpq#80%ZGaM13&e6IP?!=Et{zj)caM)86jW+KL{^bNBk?Ig8gt8ghpXHV+G9wpXG$x_c{3^|01)b6ZdK()4@ExBb+9Y zSh%j=z>PQp(@nL=WZt znTwqspkl$%Z3b7-0&d)GxW;w7tA#v*YX3q!k^jw><)jPX;Eq7HYXGcT26IFSst^?K z=kO&~gb%I>=>$YJ0DkoD|F6YYurnP~C)3J)>NOoue8*tC*6tf>- z-Dl&ZxJVFqyRNb@c(X@fPN4xi&l^nxuh(Q+0uEiKS{ZdWdK2F!qkxrRybxLTq;uLyo*iI^hx zf;a6f)1Zh&qB>+kbLtI7;yAgkW@GlupH2tAH5-1hPqaJj!Uj`?8HZ|k&%eM{kzjyI zqB_T+XI=p}{v6DsjaLf2#0up5^XT>>Q56%w3{6*ekmKf|fBnxbF6l?I55DlXn38#j zX`z`w^W$VKi3uF}5of`?^(K1*7>g__rS7*$_tyc_afUD0bj#%gU6A+oU5(<;aZnz=yy>o+HS2kw?W1H_FqJTb^Zs>Q429$Ma!$l zXz%pw8V5s|tgWREtv)o-!Qd@EqK3DWo8SocLf$Ntv7CvXx;>X0-LH#hK(X=F37!yD*qm)Irxmi1xTQ5PPgS6@sXs;TrpCwqI@ zLX_b>5Tg;837U!L=nJptSFsda!G3gOnNV;GiWEG>L`>;Lh*Cm|)ncm3rAo2xG|K3v zx3^EUO|soJJ{aCcWh1Y#k3D3=5TE(Mx-67?WRjU-E`g?-XugCF@Xg)aP0ShA3}K?D ze8Q?~j4su_vpV{4dpFx}+hdzxL3#i*q~H2=&5QM*jWL_IhL7Qkg^Qx-zS z+MuVogA><*G^1C5StD(AZS9QQwou@|ONgL);JSW73oa%PStig*hTJDP58%zG2 zcsHD}N?Jp$xc))+WM|kxOhA3YtOIft6s`ljJZ42Cx5Ifm+xiZ+_kuXWlhHvp*XnA+ zZL@7XY$J@t`1A;->wWZH`Y!E^Rs~qHnN^7|;a7Nbcw>*a!p!nk4DX3*_g!A*fwHZ9 z%}!}U93i$R_QA$g{jJf>HrhVfkpXwsFV+yB&jM>+6-a)JnPO7sM`vs29@l4gBQscR z;@>crG7QM305VoCEra$kx*O~5n{D%LJN25{78XQ1fyZ7T^IFMf2Tc0h=ch#qCXQ^x z#C%vT_|`AeW?FU4L$~WCpg@!n4@4PNMm$zFNqC&~-Tm72&bsNoEE~v^WG*mvC+J^q z$X@h5A^K~rverZ^tX0!5>&tCN^o7O?bOt^+Pu0jmjlzL@pHx&t31&G>tMk5 zK}%btO{CFq>7N5KxT(D0ZJ(&B+438U_11;}PVz)Qok^Flh5R2i3fx#E5WNCgFKX?w zvdQaw1o;Bxvlr=tD{NNL;IEfqHg~tGg?#x3*<3&^4_EV)+wwuZ)-WA9k`1D{Sq$5c zp8r1Y0GClA#1D%Lr5lMliaUa$XVM|G23F=lDHz6ZSW zIsG7>bv%uLS`iMeW+ojh3L^FnU`E-LGu=9Pq2Y3xUR0~c<{IeSv?lhd`g8kmV;4L= z_pBbGvDRKKr=R2i_foiz{xaKJ-Q4-j#b&&DSJj4J-J!aR7cv0Vt+Mfw)YJN)qZ)_l zfScM`J=Hcso3DG(hFT^1i&5gGmRY@3FW%R9&Z_B?*jKRyd`mQx{=(WvI+`Znj6}ja zU4U$%{vs1NY8hE3YtXAQ7f)2tW~7RcF_``^` zJMtZ94gPv$X5H-UYUK)dR(2*^3#?$oY<1L<$-JGoCL$PNQTBdxh;c^-K}|jm&Ta=* zGP`^P&b9~q$^$Vgf1e(JLbTpx@=$k4%$7e<%jGodwR@knSdiJW0mN z6__bhCZM(*?l;uMjJ=OB|Vb{ zvP;?#cy@1US1qXc;Dz7H5Fow~y^yw)eN9JM^@4zDewoS5*<@!XWLLHIf#0_tM&lsk#r(Qhw%2-bk56>5$4iySmwvqD;Fy+3WEe=(Xnw$e<;N7n=zqpr!qwsdW)HC9h>?h>0x zkn0eoRvVd(jrpd z%MusQg}yAzHdsFKn53H8`f2^Nze#m_XZf$=J|^#*X$z6V)~I1bGi$5E&K<0a*yuPc zN9akGDRc8@^p81&nr27*UmRW{@XxBGAQ()t1JqK9;nK>dxDS39dZyG~@SPs)|DGy2}Ir=Od@AODWMw>|IncF)Vw zul(cVW3n4@9=*aE<||mlqf~g+?$vx+U+OqwP^WPx`_CO5)U->@X_c21?_a!PsW$-~ zLnG5xM&EwE{c@dSw{~w_H+$9J%batot~;~5{o(Wjfl>RTPMke_!F=BA?Pph*S{9x+ zZ_m1MZQKI_Cv+K5f7G2$%X|N6e(SG=`Bjdosog&pN!=d1AmUU09=R)L`~1D|^?$Ed zICL;`ko+9%9a%o{==bXhWuo8Y8Cdak_EY6+{~3|6IiYo2lb}_3eR6#(Z+TS;UY`6l zw(7TmA7qSg^qJ%yiEU(At6ylJ(3e3yLPp4n<{vGWIVPyC@3)}qVI_0y%bgHWGvb#y zIwRn1;peMf-hR>c_0gC8@7}%WyjJ|omDgWByHm<*6;ppFw)s=(O>ytDL9)5W(1ecu zeHY}jWxGRq+g95f=V)iy`S|BWZ&kSCbEo_d_wQG6|9-9e`r>8(ulXL&4h!^-Dm^;y zRiAR=n_kcwUZQSs-xA}BE!S_0oOBx>rV@?tFRPM#6Z^|;ksXRO^jjMUQ*O!=N2jo3 zB?7BF$~id42H(3{;cW8*?u9=KKI?VORwi(!-4+LRB8qJ-)Ft1~+y#7MJ)HKtq^o}+FVka~ePl*J z?5$tlU)29N^>x$dzu&ceefV8O;^RLKmY}upcpH)txFUCC{^2D{m6}<7RmrurmlXU~ zE<9p;uC4*sd=Cj9-YQ!Ac_!w4w0{IUacK3T_lwCahcj zoQ3A*Y?g0t;EV7X{<(st+Lzn!dk(dq2(9k-ocW8N(cOQx{}cGLZpxcKi{pAl2gFy2 zai@1lk>)uOXhxAWsfn%+=>}MqK#!|(5$kBxlrd0~j?+z9mDtIweD=B?m0dIB*TlQ= z4>3z?*CrSjV?V|%O!7&1!Sd)c%pb~`P#~En6-h}>4-#YC9<~RrvDVr2w1jx&V;1tW zy#F|o94~2GZI z&VuF(=NxzKw7Mk0JJ7xL$eW0VBcYeoW|84eB{(F2%d1QK? zG1?hhZ7b|I^g5m`Z52FoIJOyORR$mHY9VKc$wmQLg0##Ea_vrQ^Faly22?<^hizNptXfMkd#^-SoD*ojcCFn~^HNxpixpdxcfkZ2cb_;hM}J zWxUD?5&r59U1YPVh5sq(e3s#fo^8GBYno^Br_@5R(^EFb7K!Z=n-Y^5BjbxDcqT4& z1|-2j%uTO&?~0Mvy)$wRv9QT&lg10TGq~o2fq$iYszyjv1b}ZCAYGyblM(=9m+an!SG5ch7k5GmfGGl|qYV|B|zGc(oi8 z0|$nd52)_0Qq7wXtF5 zn#9p0RK@F?d=p6n`@fkx%m>L$_>7E0td{!M-rm07yP9pR_i$~2qkz#CnDe;H-%L(v zXr`oB6?w8cnR7Gxnsv;ova)uKk2ji%T()SN;dRk#rvDecabP)>;oFSVbWpZb57N`@ zeT;36Lu#*On50bU!l zBYJPok48<;?b>*K5nXDZq?;ZK#5(ySB`f1m`T_S-(HZ);ugjYUW;JFdvPP-8N!c=< z#cs>wscY2s%o4nM%D#*X>BBiU8)^$O6P$xmha?m0y0ab)mJLZ0xzN~b``6*`dzXyx z*eCrRoov_qia9z54zsQIYwr>7>9!RWnoLXCD+;*=+M3#4dS*FF+lv|h{a>RxTZ2qb z-dl`gl|1TrJn~J(%v?|3gTA}HJNry93b5kprgfX0G)j0XpQ0ZBA+`&t*IoM(n>$}; zMA1Mw!n>kg+%`mCZo1e3Yp}Ldl%b!TO{ua<_%!l59s0rltM@$54(fj$od&tr2RMQnU6BB{JXfjC1~1{-1tC zC2!vMdCs`cea?M-zfX1dVx^k#h1NrE4$PLlGow7k)xpLq^;Bk`)SGE}Q$IM@^)2=W zqjp-Kv@sb&l2yN*-1EP*H=Ev7&-}*8qR!FMJd(ORb7a&M@)xzW{i2~L5}fVL(1+wa5`Hi|pKFX-L*E}r zR~u%QwXa)4@wxfcIB1nKK5<)NZ=-WZm5ExQxAMI6zxVtWnC*QON)pquV$+v=P%|5* z4Yhvuw@CXp_3Z05DSrk!D2Ya;u&Oeh89!euVqA7l3JsAfWTZD3Q6={^rJ1%Za6hxM zu~qrU*e%CcZGvCPyzZ&m>Bxs7U2X3~I{kw`Dpu&Qem=Z(tYj=r=1 zf7;~W7r|%Nw!pyP9I?rNMI7~)w??M#)D{I2BM140f7Bwknd|rHvAMPInXbLI2c~a? zdRhz0&E}lo@yy?yecH#OqLG%iC+lWP%TO@=s8K%Spwcz;v2fTIeWg!u8}LC5-|N8I^*a zJhy$lUE@4Gy(@evdB^4JlshImJ^Wu+Y=J2`uM~>Tw~PwkRp)_K^P{m5rCq-nBarVh%Q7ToYrujp%G10s|B*D^JIO{jhNH*#%eh4*>Ok2kQ#Gq+HI-NY zH!7xh?s<7!Zho6rZ}l7`QM&PnV2?8$?4vtd$m>a z+fXIf5$(8pnD-~Ou(s3tt>MYlA-tX^Mf=9C5S-_#=bZ9T>j}o$w5E)4Cx?Bi?{U`; z3^&I+Q*6`Q&;82vhv%94)>XiJ$#dJ=$n_WG^<9~+PxPkw3c42=$KbG9S$XXf=F(tZ zf8{_*Xrxlt{nB?ntb;F3KcXF@mhi~E*86c}_sBTCyBcHr%+^|0rIFkbx|)$I+q!;re;)qaHPqeEd(1n| zd(4Alh{&mKwz??!A$xW@MV!I**W#=>Sg7VjPDn-t)>-AP{gAmE^rT=#5tX$iv!rMk zs_$9iy5#xMchpiSrF>^rI&-XF9lt{&=ptt54pPL3&JaC@lA*-?_XQ;vH}x;yzU>2XFOA=N2D*Y7AtweKOwPQd@Y zbAEQ#izQAI>U|wt&9#`wmF_`NpL$<}75Dt0moTO)X;jp%QLW0U`;WZjkVr{_KJu0r<}7)3dNWg z(OIMg##!xUN7s1m3nRtv&WcH$oLb77AojaMo{Qeg?w@?8y-mXAgwOZv^;B|&xu$w9 zdkclP4u62U%4o5A9Ih`f~SB zPflZ>zQSmz|Kb_P*>^72VSI{4%N#HpSM_b~{haPy)-TyZ?Jdv<{XBiWrQHt=&FHF> zcF!hh&W~qG1?3CW3uj#yQSb!CpD12#(jTL2MV<`KvwE0&(6{77=`>m^q72ZB=;e(Q zF2{Y&RmR;#uc@CZ9{lT@;J>Ol*RSA-@q&mba z+?nBTJ?FKCFf}!m`<_JaMQ_NRMdjhLb&7g+TlZz-ss2J+4+j&c#ECnq+b$@!_y+`z zXAKJ^*|n5K+HbCcT6evl(n#wiPihUE>7o?wgi}PcRzUsEokQuXMZkPbfrweCf34K^ z?$!!Lcsz5%Z+hIGecBuSPbXgc+!?H{m96#F+DMm0h3k#hh>B1yrH9j%(c0KqDATlc zdL-4Ie9k3%s`<59*!H8hNHYEALeuMf1ke00u2Pki{q{g7$r(nKa)f%D)1@Ki1?OAq zniFPKuoKO9<~XN;(~L@gqWU>LLLRM!aZjzMeNek-%eB#P$e+W0r`t81t9B0iA+AlG z)Pd@2>4vweuARhX?Vb~Bz2TbTA%3IeP^XhU&8lpEYV{2c3;i!tJX8=)_zN-8nH-#B zwnxuA{@YV~9(nq>xDLsw8+C5KMLwf4z zVR|Kq)cjCyv(#9$TGyeP8d6gj=~RcG8*dCWel{w)4!craQQmdFME5=KF;{c<9?u8Q zW!HT7Mm3ul-e#}i9-o-QgWp^EgYE1WW({kNb(XuhWYq{}+8xY;W^wa!R#MifK+fPw zxmz8{>Ed`8mvgX1$JqbZ5sQ_5RuL!8++^PJ_w@gPzuQWsmcCiGOJfCMZ>%`O-4WC_C-E(7TVQHL9UBd}5M9Ma<6DedbWK^^2Y1WWn7T`mgFjD(898 z`MwtOweix0GWUC}oOVlgka@&fE7qA~J+{l+f0-jfEB#gdNtvnsBy{X0O^f_c5zjj@g&f(+rrJOq{%2@~Zuv^Dxw0^fFCyi0V}9mYMU+xj5!6#!0doYO+y! zq8@N1dMbFzdvkeeq8@j9Q@y!-`CXqG$yyCn=wYq``e}E(NXBz98tp-EsQpa+g!oD> zwm)%Rae99ZmbIty1|Pt_sMY@BOeMFm6;)>*JwhMP8k(2dUUl`JH0`ri%i!eDH`Jr* zI*rh_H?ilzId;eQ@ra#fAGHj71@V2E-UL$a2x^WCq7;1M*IEpu?h2)xA@qHEH~m|& z-|2_?$18@}ckNqNZ?e9%s3aze_x6>*l|XHOYkxtqph29E+(4=E8GfJN%P_IpnSvgy zF_oug)+T!^+SHoPTyc{f>K$~pH_fj0I%m3?B}<{+8;9=qXZ)eU)KBCM6eMmV$vAC% zZ!Ez1s1pjEy2>-yypQ!IWC3SzCM=>Yqw13ksSyER^OiWa3#P0hb-_QB>H2UzS_J+7wTWq(-) z1$HtV&>8!ry)xvoV?!J5C@V~Cv)?F>MN{L6I^9*yh&1vUL)E_OGW^%pLn-;SHTo2o zyhY-P7^B|RI;#n+#wL}m^Hgxht0UzDITQA_vSLA^{;k}DW^Lih=jx(j3sJ}wp2W~mWAep!l;mLH#>^w_DGRzd&NroDL%h9oN~?;XNTQ^s(*J^ zV^0M6OFbjO$fwnT)m()??@4qxv1(hrvF3w;%BOxnW&OE&RGv_NQJd+xT+iGQt`hEe zZ7ob&lv*FEdKU!IEON-RfRa+em zxibd#N&mJLLd=j^o`sT{l^6n?U`oLZNmHbwnlYW7e)q+B!K#Z2@oA14p)#XeNBPvYBW;DiTG8 z!)4aO=lY0!#Tkbm#9z*C5ed=vh*h?PQW71Ik85uy(;x<(ieKbGQ42TK958`*QM9DW z1vqUtw%v}jJBwRRFL~cdVx(>qtEmkqGw)x?bo3>~8LdCU(>EsTeUBPvIF;Xt@MsH^ zQ4r9x@d+E@$e6^LDkcX|<$F^|FiT<*rQUE{k zClDhosH-n$$GutZLC3O2Mk|jvC+bbif2`h;zcWG%Wg~lqgVdZSDF<+k=%qx9yQoUT zsF{~QX?0%?khy4=&a8~dcsu?{>>kPdNR$)sI*o(U>jF2{k(_IxSjW8R4cXO4twtO! zDz-b7#d8?GI5`eS_S&o}qvc`lxD{3R$6^vay$~<{M(Crb)4o;Udxwf+A{Mp9Gw}=} zFPrUL!#hlM;_Onkurgrgf_4=c;h5A0JLNQu3;_S!k^*B+YW!+O^Oev@os3_=A+{1NW1se+oldOlHYL%+DoogD+rXr$KX%fIz!|Z{ZH~R8y7a>M4G6 zG%fZOBkCB{cZ4K(o7dqwx1tw)KuhOjPkxMQ>`REL$$0U<6^W=SeuWk+tNx8AY-PB{ zJIW14@-GS8WApSDx&!f=&EMO`rpUCb;9{7L9KUgLIu4du`SR@U{hJNa~d z6pZ=tI9!Iq;&lGBW|wr3wm9L$iDJ$jrv|=}FVWMsVkGVsUF36kx3i)R{O<+a#bb!G z&E-wT*OziF%yl#huAb=PXDHp#(;R30TEratSFV-~P%`0aAS$#F0{-7!OR6h!zG(0FfqCRY^Ok#Z~i;Mg;v=>8Yu`gg&ZLVYr^J@g2_l@NV zw19QwTH0hgS=c$|Rs{QlN8$`~u&SJn;%=2QK`d~}i*t5m=Lg%ir$BxSYl|IjueQH* zHaKI%&y0|5C}V;V0G&^nX(oPO#bN*XI(K2*RZ@WUO;^)6?|rNWy3LwmizUt~2} z2z+Is54$RPx!1Xj6ZGrM(%!UVXGT#YWg$6IxH?hUPs}-j9^o&=r8>j}!3f1e1$F-t zW@riCX&kK_C+~=I%wml;si1aYpE?yEfr46VHBp@Mb81v!v;Hi7uRS9Hb8J&smiP22ZHZB>QQlEkQCmjXSu6ApbW zap4Av7mqBC$L%s^>utvFZGKuAdOQWP<`0PM6RcusaOFc-x4%TcA=HleEZ=9g;C4Wy z-wJ2QjABm4l6&RW)~g+}={Q*M2SmppKTBe#pQQv)95d6%r{+Q5cPHkA;Ar;A7R0G8 zC<;@_t!m)~JD!zuARJO{XxKQ`pQWr#Z)AU-H;^BX=)+v~pG3@AJj>yO_>a3g#GIRo z&wgp{x;gQ$GIVqrKK=*A0^-N7#H7lM^kTRoT~yAZWB!CJco$lQbQA%187ZZesi-d- z69*QeIM@Q|e;R@}feLam@o*|_-cQM`-hljGL`?VuCC@>g6yZ?e&!+M^GP;H`x@M3| zzC;^7l?<6&y~<&T)&;E0t?ALB^x8!{B|4!ZF8EdE-Q2)esYJ{y#PhQMn3gFzCPhTj>6m@C68Ocs2ayiegd0a3q^8K zeltwX3AuldS57DLw`CPefMCBwZ(rn28W3TN@;>S0J%?}~zD4}?lC$^Mis7A# zsf(`sxD$)k=QOL=HT)R-VjarsbXJi^;vFl)J8_lhnC+*$7zd=WwA3d0E)Tt&N?(j( z#O%TM_#66tEd>5`l%D0#ja9_G;~DqyLivd?`jYlJ%hhcq+RuQ&f2h>N9k@1eLL*b3 zDKDUC38LJHP^XcHzgPUIkw@bZRg+V(D=@FeY4PP~&Z?q&((y0Wcuf-7c4gw<9N7g& z+gCy*T9+nTjADEw%QE!#JmTYbC~aHA$~927p@(RT61$DWgPXm`bvy))6IpUIQ!A6% z4Iwiqgia(}xhq%T)svSPQkd(y#118%zMDoQxybBnM$gP>3)cuh8*M)a>u`;BF{@+_nH&+!r@9skY|~U)$+`xf6yiUhO_qq#(x&-AB#12H0qbni3@#*0^3kX zmgloht63<4-Z09lLKE-cwU3w+0d@kt7#)>(59$_-y+*7fF+`lxvJlTu7|i;+o@WE~ zAR@LUBF1oKI49wgP?ochg;Z30tj~*yRwIbah=JmMz-*7}y{b>fI_dC_!BR@OdfJh#)TH;Ab==L#85VN? zSLpeB?DLXn?aRc#M5f!a01F6jmPj~xXAO5p72?M z)`((^c2!${4iZmBuNqhsNwdCek`vPb!Mym%krH?`?5b*?~LDH z=qZ1;f{8Kzlu@~iJo_O3uFfk5@!Q$)8n5fk zI@XR>8OeU%K&k$YcP`D@W-b`_X`DrM=eLUR`b74t_fR5^q<1T`ez)bi!chxu;*}A! z!Xctt_V_y_lK9jVT6F-wHH4q+V;&mh2!rGtG`BUlo}x+*6jFoun#kA+@g%aT%Krhb Cgjh2G literal 0 HcmV?d00001 From c66fc0373c07195536a1137a9cea00a6f9d7e03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 10 Jan 2020 16:42:48 +0100 Subject: [PATCH 08/87] Fixup: small fixes for Python 2 --- addon/globalPlugins/brailleExtender/huc.py | 6 ++++++ addon/globalPlugins/brailleExtender/patchs.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index acc21664..bb691c92 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -1,5 +1,11 @@ #!/usr/bin/env python3 +# coding: UTF-8 +from __future__ import print_function, unicode_literals import re +import sys + +isPy3 = True if sys.version_info >= (3, 0) else False +if not isPy3: chr = unichr HUC6_patterns = { "⠿": (0x000000, 0x00FFFF), diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index d581f81e..115f02b8 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -410,7 +410,7 @@ def executeGesture(self, gesture): raise NoInputGestureAction #: brailleInput.BrailleInputHandler.sendChars() -def sendChars(self, chars: str): +def sendChars(self, chars): """Sends the provided unicode characters to the system. @param chars: The characters to send to the system. """ From 5170826001ae00b53f86aa9d66a1f9c325855a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 10 Jan 2020 21:41:29 +0100 Subject: [PATCH 09/87] Disable HUC Braille input in browse mode and during shortcut compositions --- addon/globalPlugins/brailleExtender/patchs.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 115f02b8..36d9aaa5 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -495,7 +495,11 @@ def _translate(self, endWord): self.bufferText = u"" oldTextLen = len(self.bufferText) pos = self.untranslatedStart + self.untranslatedCursorPos - if instanceGP.HUCInput and self.bufferBraille: + ok = False + if instanceGP.HUCInput: + focusObj = api.getFocusObject() + ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) + if instanceGP.HUCInput and ok and self.bufferBraille: HUCInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) if HUCInputStr: res = huc.isValidHUCInput(HUCInputStr) From 48af89034db0b09724072420c25cc9bb9f68e5b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 11 Jan 2020 13:11:11 +0100 Subject: [PATCH 10/87] =?UTF-8?q?'HUC=20Braille=20input=20mode'=20becomes?= =?UTF-8?q?=20'advanced=20braille=20input=20mode'=20This=20mode=20still=20?= =?UTF-8?q?supports=20HUC8.=20Also=20it's=20now=20possible=20to=20type=20a?= =?UTF-8?q?=20character=20from=20its=20binary/decimal/hexadecimal/octal=20?= =?UTF-8?q?value=20New=20default=20gestures:=20NVDA+Windows+i=20and=20?= =?UTF-8?q?=E2=A0=8A+space=20for=20braille=20displays=20supported=20(previ?= =?UTF-8?q?ous=20is=20in=20conflict=20with=20f8).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Profiles/baum/default/profile.ini | 2 +- .../Profiles/brailliantB/default/profile.ini | 2 +- .../Profiles/eurobraille/default/profile.ini | 2 +- .../freedomscientific/default/profile.ini | 4 +- .../globalPlugins/brailleExtender/__init__.py | 11 +++-- addon/globalPlugins/brailleExtender/patchs.py | 46 ++++++++++++------- .../globalPlugins/brailleExtender/settings.py | 2 +- addon/globalPlugins/brailleExtender/utils.py | 11 +++++ 8 files changed, 52 insertions(+), 28 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini index 94e58538..d73184d3 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini @@ -60,7 +60,7 @@ reportExtraInfos = b10+b5+b8 getSpeechOutput = b10+b3+b4 addDictionaryEntry = b10+b8+b7+b1+b4+b5 - HUCInput = b1+b2+b5+b8+b10 + advancedInput = b2+b4+b7+b10 [keyboardLayouts] [[l1]] diff --git a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini index 4e4acf9e..6d896b72 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini @@ -52,7 +52,7 @@ nextRotor = space+dot5+dot6 getSpeechOutput = space+dot3+dot4 addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 - HUCInput = space+dot1+dot2+dot5+dot8 + advancedInput = space+dot2+dot4+dot7 [rotor] nextEltRotor = right diff --git a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini index 1e47ddef..c412d25e 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini @@ -52,7 +52,7 @@ getSpeechOutput = space+dot3+dot4 repeatLastShortcut = dot6+dot7+space addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 - HUCInput = space+dot1+dot2+dot5+dot8 + advancedInput = space+dot2+dot4+dot7 [rotor] nextEltRotor = joystick2Right diff --git a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini index db6753ac..2759a322 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini @@ -51,8 +51,8 @@ priorRotor = braillespacebar+dot2+dot3 nextRotor = braillespacebar+dot5+dot6 getSpeechOutput = braillespacebar+dot3+dot4 - addDictionaryEntry = braillespacebar+dot8+dot7+dot1+dot4+dot5 - HUCInput = braillespacebar+dot1+dot2+dot5+dot8 + addDictionaryEntry = braillespacebar+dot2+dot4+dot7 + advancedInput = braillespacebar+dot1+dot2+dot5+dot8 [rotor] nextEltRotor = leftwizwheeldown diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index f3bc704f..a46c1d86 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -161,7 +161,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin): lastShortcutPerformed = None hideDots78 = False BRFMode = False - HUCInput = False + advancedInput = False modifiersLocked = False hourDatePlayed = False hourDateTimer = None @@ -673,10 +673,11 @@ def script_cellDescriptionsToChars(self, gesture): ui.browseableMessage(t, _("Cell descriptions to braille Unicode")+(" (%.2f s)" % (time.time()-tm))) script_cellDescriptionsToChars.__doc__ = _("Braille cell description to Unicode Braille. E.g.: in a edit field type '125-24-0-1-123-123'. Then select this text and execute this command") - def script_HUCInput(self, gesture): - self.HUCInput = not self.HUCInput + def script_advancedInput(self, gesture): + self.advancedInput = not self.advancedInput states = [_("disabled"), _("enabled")] - speech.speakMessage("HUC Braille input %s" % states[int(self.HUCInput)]) + speech.speakMessage("Advanced braille input mode %s" % states[int(self.advancedInput)]) + script_advancedInput.__doc__ = _("Enable/disable the advanced input mode") def script_position(self, gesture=None): return ui.message('{0}% ({1}/{2})'.format(round(utils.getPositionPercentage(), 2), utils.getPosition()[0], utils.getPosition()[1])) @@ -1484,7 +1485,7 @@ def script_addDictionaryEntry(self, gesture): __gestures["kb:nvda+shift+k"] = "reload_brailledisplay2" __gestures["kb:nvda+alt+h"] = "toggleDots78" __gestures["kb:nvda+alt+f"] = "toggleBRFMode" - __gestures["kb:nvda+windows+h"] = "HUCInput" + __gestures["kb:nvda+windows+i"] = "advancedInput" __gestures["kb:nvda+windows+k"] = "reloadAddon" __gestures["kb:volumeMute"] = "toggleVolume" __gestures["kb:volumeUp"] = "volumePlus" diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 36d9aaa5..aae942b5 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -39,7 +39,7 @@ addonHandler.initTranslation() from . import dictionaries from . import huc -from .utils import getCurrentChar, getTether, getTextInBraille +from .utils import getCurrentChar, getTether, getTextInBraille, getCharFromValue from .common import * if isPy3: import louisHelper @@ -481,6 +481,16 @@ def emulateKey(self, key, withModifiers=True): #: brailleInput.BrailleInputHandler._translate() # reason for patching: possibility to lock modifiers, display modifiers in braille during input, HUC Braille input + +def sendChar(char): + nvwave.playWaveFile(os.path.join(configBE.baseDir, "res/sounds/keyPress.wav")) + core.callLater(0, brailleInput.handler.sendChars, char) + core.callLater(100, speech.speakSpelling, char) + +def badInput(self): + nvwave.playWaveFile("waves/textError.wav") + self.flushBuffer() + def _translate(self, endWord): """Translate buffered braille up to the cursor. Any text produced is sent to the system. @@ -496,25 +506,27 @@ def _translate(self, endWord): oldTextLen = len(self.bufferText) pos = self.untranslatedStart + self.untranslatedCursorPos ok = False - if instanceGP.HUCInput: + if instanceGP.advancedInput: focusObj = api.getFocusObject() ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) - if instanceGP.HUCInput and ok and self.bufferBraille: - HUCInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) - if HUCInputStr: - res = huc.isValidHUCInput(HUCInputStr) - if res == huc.HUC_INPUT_INCOMPLETE: return - elif res == huc.HUC_INPUT_INVALID: - nvwave.playWaveFile("waves/textError.wav") - self.flushBuffer() + if instanceGP.advancedInput and ok and self.bufferBraille: + advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) + if advancedInputStr: + if advancedInputStr[0] in getTextInBraille("bdhoxBDHOX"): + if advancedInputStr[-1] == '⠀': + text = louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr)[0] + try: + char = getCharFromValue(text) + sendChar(char) + except BaseException: badInput(self) return - try: - res = huc.backTranslate(HUCInputStr) - speech.speakMessage(res) - core.callLater(0, brailleInput.handler.sendChars, res) - nvwave.playWaveFile(os.path.join(configBE.baseDir, "res/sounds/keyPress.wav")) - core.callLater(0, speech.speakMessage, res) - finally: instanceGP.HUCInputStr = "" + else: + res = huc.isValidHUCInput(advancedInputStr) + if res == huc.HUC_INPUT_INCOMPLETE: return + elif res == huc.HUC_INPUT_INVALID: badInput(self) + else: + res = huc.backTranslate(advancedInputStr) + sendChar(res) return data = u"".join([chr_(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) mode = louis.dotsIO | louis.noUndefinedDots diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index cea602f6..a6481101 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -418,7 +418,7 @@ def makeSettings(self, settingsSizer): _("Dots 1-8 (⣿)"), _("Dots 1-6 (⠿)"), _("Empty cell (⠀)"), - _("Other dot patterns (e.g.: 6-123456)"), + _("Other dot pattern (e.g.: 6-123456)"), _("Question mark (depending output table)"), _("Other sign/pattern (e.g.: \, ??)"), _("Hexadecimal, Liblouis style"), diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 98680fda..2b3dcfac 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -23,6 +23,7 @@ import treeInterceptorHandler import unicodedata from .common import * +from . import huc charToDotsInLouis = hasattr(louis, "charToDots") # ----------------------------------------------------------------------------- @@ -444,3 +445,13 @@ def getTether(): if hasattr(braille.handler, "getTether"): return braille.handler.getTether() else: return braille.handler.tether + +def getCharFromValue(s): + if not isinstance(s, str): raise TypeError("Wrong type") + if not s or len(s) < 2: raise ValueError("Wrong value") + supportedBases = {'b': 2, 'd': 10, 'h': 16, 'o': 8, 'x': 16} + base, n = s[0].lower(), s[1:] + if base not in supportedBases.keys(): raise ValueError("Wrong base") + b = supportedBases[base] + n = int(n, b) + return chr(n) From de11b8003cb106541e8cc8f2df1c8f8bae42005b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 10:15:25 +0100 Subject: [PATCH 11/87] Advanced input braille mode now works with a contracted input table --- addon/globalPlugins/brailleExtender/patchs.py | 99 +++++++++++++------ addon/globalPlugins/brailleExtender/utils.py | 2 +- 2 files changed, 70 insertions(+), 31 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index aae942b5..37deeb00 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -425,13 +425,14 @@ def sendChars(self, chars): input.ii.ki.dwFlags = winUser.KEYEVENTF_UNICODE|direction inputs.append(input) winUser.SendInput(inputs) - focusObj = api.getFocusObject() - if keyboardHandler.shouldUseToUnicodeEx(focusObj): - # #10569: When we use ToUnicodeEx to detect typed characters, - # emulated keypresses aren't detected. - # Send TypedCharacter events manually. - for ch in chars: - focusObj.event_typedCharacter(ch=ch) + if isPy3: + focusObj = api.getFocusObject() + if keyboardHandler.shouldUseToUnicodeEx(focusObj): + # #10569: When we use ToUnicodeEx to detect typed characters, + # emulated keypresses aren't detected. + # Send TypedCharacter events manually. + for ch in chars: + focusObj.event_typedCharacter(ch=ch) #: brailleInput.BrailleInputHandler.emulateKey() def emulateKey(self, key, withModifiers=True): @@ -479,6 +480,64 @@ def emulateKey(self, key, withModifiers=True): log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) self.sendChars(key) +#: brailleInput.BrailleInputHandler.input() +def input(self, dots: int): + """Handle one cell of braille input. + """ + # Insert the newly entered cell into the buffer at the cursor position. + pos = self.untranslatedStart + self.untranslatedCursorPos + self.bufferBraille.insert(pos, dots) + self.untranslatedCursorPos += 1 + # Space ends the word. + endWord = dots == 0 + if instanceGP.advancedInput: + pos = self.untranslatedStart + self.untranslatedCursorPos + ok = False + focusObj = api.getFocusObject() + ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) + if ok: + advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) + if advancedInputStr: + if advancedInputStr[0] in "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭": + equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} + if advancedInputStr[-1] == '⠀': + text = equiv[advancedInputStr[0]]+louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[1:-1])[0] + try: + char = getCharFromValue(text) + sendChar(char) + except BaseException as err: + speech.speakMessage(repr(err)) + badInput(self) + else: self._reportUntranslated(pos) + return + else: + res = huc.isValidHUCInput(advancedInputStr) + if res == huc.HUC_INPUT_INCOMPLETE: return self._reportUntranslated(pos) + elif res == huc.HUC_INPUT_INVALID: badInput(self) + else: + res = huc.backTranslate(advancedInputStr) + sendChar(res) + return + # For uncontracted braille, translate the buffer for each cell added. + # Any new characters produced are then sent immediately. + # For contracted braille, translate the buffer only when a word is ended (i.e. a space is typed). + # This is because later cells can change characters produced by previous cells. + # For example, in English grade 2, "tg" produces just "tg", + # but "tgr" produces "together". + if not self.useContractedForCurrentFocus or endWord: + if self._translate(endWord): + if not endWord: + self.cellsWithText.add(pos) + elif self.bufferText and not self.useContractedForCurrentFocus: + # Translators: Reported when translation didn't succeed due to unsupported input. + speech.speakMessage(_("Unsupported input")) + self.flushBuffer() + else: + # This cell didn't produce any text; e.g. number sign. + self._reportUntranslated(pos) + else: + self._reportUntranslated(pos) + #: brailleInput.BrailleInputHandler._translate() # reason for patching: possibility to lock modifiers, display modifiers in braille during input, HUC Braille input @@ -490,6 +549,8 @@ def sendChar(char): def badInput(self): nvwave.playWaveFile("waves/textError.wav") self.flushBuffer() + pos = self.untranslatedStart + self.untranslatedCursorPos + self._reportUntranslated(pos) def _translate(self, endWord): """Translate buffered braille up to the cursor. @@ -505,29 +566,6 @@ def _translate(self, endWord): self.bufferText = u"" oldTextLen = len(self.bufferText) pos = self.untranslatedStart + self.untranslatedCursorPos - ok = False - if instanceGP.advancedInput: - focusObj = api.getFocusObject() - ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) - if instanceGP.advancedInput and ok and self.bufferBraille: - advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) - if advancedInputStr: - if advancedInputStr[0] in getTextInBraille("bdhoxBDHOX"): - if advancedInputStr[-1] == '⠀': - text = louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr)[0] - try: - char = getCharFromValue(text) - sendChar(char) - except BaseException: badInput(self) - return - else: - res = huc.isValidHUCInput(advancedInputStr) - if res == huc.HUC_INPUT_INCOMPLETE: return - elif res == huc.HUC_INPUT_INVALID: badInput(self) - else: - res = huc.backTranslate(advancedInputStr) - sendChar(res) - return data = u"".join([chr_(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) mode = louis.dotsIO | louis.noUndefinedDots if (not self.currentFocusIsTextObj or self.currentModifiers) and self._table.contracted: @@ -596,6 +634,7 @@ def _createTablesString(tablesList): NoInputGestureAction = inputCore.NoInputGestureAction brailleInput.BrailleInputHandler._translate = _translate brailleInput.BrailleInputHandler.emulateKey = emulateKey +brailleInput.BrailleInputHandler.input = input brailleInput.BrailleInputHandler.sendChars = sendChars globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 2b3dcfac..9e90e538 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -451,7 +451,7 @@ def getCharFromValue(s): if not s or len(s) < 2: raise ValueError("Wrong value") supportedBases = {'b': 2, 'd': 10, 'h': 16, 'o': 8, 'x': 16} base, n = s[0].lower(), s[1:] - if base not in supportedBases.keys(): raise ValueError("Wrong base") + if base not in supportedBases.keys(): raise ValueError("Wrong base (%s)" % base) b = supportedBases[base] n = int(n, b) return chr(n) From 6cd783237928feb513e94b2bbc25b5a40dd1fefc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 10:31:45 +0100 Subject: [PATCH 12/87] fixup: restore browse mode --- addon/globalPlugins/brailleExtender/patchs.py | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 37deeb00..075d7b4e 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -490,33 +490,34 @@ def input(self, dots: int): self.untranslatedCursorPos += 1 # Space ends the word. endWord = dots == 0 - if instanceGP.advancedInput: - pos = self.untranslatedStart + self.untranslatedCursorPos - ok = False + + ok = False + if instanceGP: focusObj = api.getFocusObject() ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) - if ok: - advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) - if advancedInputStr: - if advancedInputStr[0] in "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭": - equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} - if advancedInputStr[-1] == '⠀': - text = equiv[advancedInputStr[0]]+louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[1:-1])[0] - try: - char = getCharFromValue(text) - sendChar(char) - except BaseException as err: - speech.speakMessage(repr(err)) - badInput(self) - else: self._reportUntranslated(pos) - return + if instanceGP.advancedInput and ok: + pos = self.untranslatedStart + self.untranslatedCursorPos + advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) + if advancedInputStr: + if advancedInputStr[0] in "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭": + equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} + if advancedInputStr[-1] == '⠀': + text = equiv[advancedInputStr[0]]+louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[1:-1])[0] + try: + char = getCharFromValue(text) + sendChar(char) + except BaseException as err: + speech.speakMessage(repr(err)) + badInput(self) + else: self._reportUntranslated(pos) + return + else: + res = huc.isValidHUCInput(advancedInputStr) + if res == huc.HUC_INPUT_INCOMPLETE: return self._reportUntranslated(pos) + elif res == huc.HUC_INPUT_INVALID: badInput(self) else: - res = huc.isValidHUCInput(advancedInputStr) - if res == huc.HUC_INPUT_INCOMPLETE: return self._reportUntranslated(pos) - elif res == huc.HUC_INPUT_INVALID: badInput(self) - else: - res = huc.backTranslate(advancedInputStr) - sendChar(res) + res = huc.backTranslate(advancedInputStr) + sendChar(res) return # For uncontracted braille, translate the buffer for each cell added. # Any new characters produced are then sent immediately. From bb3949ce0dd51f9891640ea4de0ea0232f88c64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 11:30:10 +0100 Subject: [PATCH 13/87] Small fix for Python2 --- addon/globalPlugins/brailleExtender/patchs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 075d7b4e..41f46d8b 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -481,7 +481,7 @@ def emulateKey(self, key, withModifiers=True): self.sendChars(key) #: brailleInput.BrailleInputHandler.input() -def input(self, dots: int): +def input(self, dots): """Handle one cell of braille input. """ # Insert the newly entered cell into the buffer at the cursor position. From 14446eb44bd9bf7e72f5d611fe96aa31f55ae4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 12:03:56 +0100 Subject: [PATCH 14/87] Advanced braille input mode now works with Python 2 --- addon/globalPlugins/brailleExtender/huc.py | 8 ++++++-- addon/globalPlugins/brailleExtender/patchs.py | 6 +++--- addon/globalPlugins/brailleExtender/utils.py | 4 +++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index bb691c92..32e5c8d4 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -3,9 +3,13 @@ from __future__ import print_function, unicode_literals import re import sys +import struct isPy3 = True if sys.version_info >= (3, 0) else False -if not isPy3: chr = unichr +def chrPy2(i): + try: return unichr(i) + except ValueError: return struct.pack('i', i).decode('utf-32') +if not isPy3: chr = chrPy2 HUC6_patterns = { "⠿": (0x000000, 0x00FFFF), @@ -226,7 +230,7 @@ def backTranslateHUC8(s, debug=False): s = unicodeBrailleToDescription(s) for c in s.split('-'): out += splitInTwoCells(c) - return chr(HUC8_patterns[prefix][0]+int(''.join(["%x" % hexVals.index(out) for out in out]), 16)) + return chr(HUC8_patterns[prefix][0] + int(''.join(["%x" % hexVals.index(out) for out in out]), 16)) def backTranslateHUC6(s, debug=False): return '⠃' diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 41f46d8b..d0fef742 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -44,7 +44,7 @@ if isPy3: import louisHelper instanceGP = None -chr_ = chr if isPy3 else unichr +if not isPy3: chr = chrPy2 HUCDotPattern = "12345678-78-12345678" HUCUnicodePattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) @@ -247,7 +247,7 @@ def getHexLiblouisStyle(s): def HUCProcess(self): if not isPy3: return - unicodeBrailleRepr = ''.join([chr_(10240+cell) for cell in self.brailleCells]) + unicodeBrailleRepr = ''.join([chr(10240+cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] allBraillePosDelimiters = [(pos, pos+3) for pos in allBraillePos] if not allBraillePos: return @@ -567,7 +567,7 @@ def _translate(self, endWord): self.bufferText = u"" oldTextLen = len(self.bufferText) pos = self.untranslatedStart + self.untranslatedCursorPos - data = u"".join([chr_(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) + data = u"".join([chr(cell | brailleInput.LOUIS_DOTS_IO_START) for cell in self.bufferBraille[:pos]]) mode = louis.dotsIO | louis.noUndefinedDots if (not self.currentFocusIsTextObj or self.currentModifiers) and self._table.contracted: mode |= louis.partialTrans diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 9e90e538..5d4b03f7 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -26,6 +26,7 @@ from . import huc charToDotsInLouis = hasattr(louis, "charToDots") + # ----------------------------------------------------------------------------- # Thanks to Tim Roberts for the (next) Control Volume code! # -> https://mail.python.org/pipermail/python-win32/2014-March/013080.html @@ -446,8 +447,9 @@ def getTether(): return braille.handler.getTether() else: return braille.handler.tether + def getCharFromValue(s): - if not isinstance(s, str): raise TypeError("Wrong type") + if not isinstance(s, (unicode, str)): raise TypeError("Wrong type") if not s or len(s) < 2: raise ValueError("Wrong value") supportedBases = {'b': 2, 'd': 10, 'h': 16, 'o': 8, 'x': 16} base, n = s[0].lower(), s[1:] From fedad45aecf0ca38883e1ff622e9c84f7e090183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 12:22:45 +0100 Subject: [PATCH 15/87] fixup: small fix for Py3 --- addon/globalPlugins/brailleExtender/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 5d4b03f7..22ab96a4 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -449,7 +449,7 @@ def getTether(): def getCharFromValue(s): - if not isinstance(s, (unicode, str)): raise TypeError("Wrong type") + if not isinstance(s, str if isPy3 else (str, unicode)): raise TypeError("Wrong type") if not s or len(s) < 2: raise ValueError("Wrong value") supportedBases = {'b': 2, 'd': 10, 'h': 16, 'o': 8, 'x': 16} base, n = s[0].lower(), s[1:] From 4a8cc615f25a7ddb7ac1f9e216eaabbb1046b344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 14 Jan 2020 17:08:48 +0100 Subject: [PATCH 16/87] Fix `git rebase` --- addon/globalPlugins/brailleExtender/__init__.py | 3 +++ addon/globalPlugins/brailleExtender/patchs.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index a46c1d86..81a556f7 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -22,6 +22,9 @@ import wx from . import settings + +import addonHandler +addonHandler.initTranslation() import api import appModuleHandler import braille diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index d0fef742..4501bfd3 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -628,7 +628,7 @@ def _createTablesString(tablesList): return b",".join([x.encode("UTF-8") if isinstance(x, str) else bytes(x) for x in tablesList]) # applying patches -#braille.Region.update = update +braille.Region.update = update braille.TextInfoRegion.previousLine = previousLine braille.TextInfoRegion.nextLine = nextLine inputCore.InputManager.executeGesture = executeGesture From 14d46d72f68f320c0d0ae2c0f3ca2d648f40c0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Jan 2020 17:27:38 +0100 Subject: [PATCH 17/87] Added options in settings + update config specs --- addon/globalPlugins/brailleExtender/configBE.py | 9 +++++++++ addon/globalPlugins/brailleExtender/settings.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 0e85d397..5fea513f 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -66,6 +66,13 @@ (CHOICE_focusAndReview, _("both")) ]) +CHOICE_oneHandMethodSides = 0 +CHOICE_oneHandMethodDots = 1 + +CHOICE_oneHandMethods = dict_([ + (CHOICE_oneHandMethodSides, _("Left dots then right dots")), + (CHOICE_oneHandMethodDots, _("Dots by dots (toggle) then press space")) +]) curBD = braille.handler.display.name backupDisplaySize = braille.handler.displaySize backupRoleLabels = {} @@ -151,6 +158,8 @@ def getConfspec(): "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", + "oneHandMode": "boolean(default=False)", + "oneHandMethod": "integer(min=0, max=1, default=%d)" % CHOICE_oneHandMethodSides, "features": { "attributes": "boolean(default=True)", "roleLabels": "boolean(default=True)" diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index e64ab2dc..1d13696e 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -168,6 +168,12 @@ def makeSettings(self, settingsSizer): self.brailleDisplay1.SetSelection(self.bds_k.index(config.conf["brailleExtender"]["brailleDisplay1"])) self.brailleDisplay2 = sHelper.addLabeledControl(_("Second braille display preferred"), wx.Choice, choices=self.bds_v) self.brailleDisplay2.SetSelection(self.bds_k.index(config.conf["brailleExtender"]["brailleDisplay2"])) + self.oneHandMode = sHelper.addItem(wx.CheckBox(self, label=_("One hand mode"))) + self.oneHandMode.SetValue(config.conf["brailleExtender"]["oneHandMode"]) + choices = list(configBE.CHOICE_oneHandMethods.values()) + itemToSelect = list(configBE.CHOICE_oneHandMethods.keys()).index(config.conf["brailleExtender"]["oneHandMethod"]) + self.oneHandMethod = sHelper.addLabeledControl(_("One hand mode method"), wx.Choice, choices=choices) + self.oneHandMethod.SetSelection(itemToSelect) def postInit(self): self.autoCheckUpdate.SetFocus() @@ -195,6 +201,10 @@ def onOk(self, evt): config.conf["brailleExtender"]["volumeChangeFeedback"] = list(configBE.outputMessage.keys())[self.volumeChangeFeedback.GetSelection()] config.conf["brailleExtender"]["modifierKeysFeedback"] = list(configBE.outputMessage.keys())[self.modifierKeysFeedback.GetSelection()] config.conf["brailleExtender"]["beepsModifiers"] = self.beepsModifiers.IsChecked() + + config.conf["brailleExtender"]["oneHandMode"] = self.oneHandMode.IsChecked() + config.conf["brailleExtender"]["oneHandMethod"] = list(configBE.CHOICE_oneHandMethods.keys())[self.oneHandMethod.GetSelection()] + super(GeneralDlg, self).onOk(evt) class AttribraDlg(gui.settingsDialogs.SettingsDialog): From 300475a511d4ff849d26eaf765d9ce37b3137aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 13 Jan 2020 13:00:03 +0100 Subject: [PATCH 18/87] Implement the first method --- .../globalPlugins/brailleExtender/configBE.py | 10 ++- addon/globalPlugins/brailleExtender/patchs.py | 73 ++++++++++++++++++- .../globalPlugins/brailleExtender/settings.py | 2 +- 3 files changed, 78 insertions(+), 7 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 5fea513f..af93159d 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -67,11 +67,13 @@ ]) CHOICE_oneHandMethodSides = 0 -CHOICE_oneHandMethodDots = 1 +CHOICE_oneHandMethodSide = 1 +CHOICE_oneHandMethodDots = 2 CHOICE_oneHandMethods = dict_([ - (CHOICE_oneHandMethodSides, _("Left dots then right dots")), - (CHOICE_oneHandMethodDots, _("Dots by dots (toggle) then press space")) + (CHOICE_oneHandMethodSides, _("Fill a cell in two stages on both sides")), + (CHOICE_oneHandMethodSide, _("Fill a cell in two stages on one side (space = empty side)")), + (CHOICE_oneHandMethodDots, _("Fill a cell dots by dots (each dot is a toggle, press space to validate the character)")) ]) curBD = braille.handler.display.name backupDisplaySize = braille.handler.displaySize @@ -159,7 +161,7 @@ def getConfspec(): "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", "oneHandMode": "boolean(default=False)", - "oneHandMethod": "integer(min=0, max=1, default=%d)" % CHOICE_oneHandMethodSides, + "oneHandMethod": "integer(min=0, max=%d, default=%d)" % (CHOICE_oneHandMethodDots, CHOICE_oneHandMethodSides), "features": { "attributes": "boolean(default=True)", "roleLabels": "boolean(default=True)" diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index e195fe37..e2d15917 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -31,7 +31,7 @@ import addonHandler addonHandler.initTranslation() from . import dictionaries -from .utils import getCurrentChar, getTether +from .utils import getCurrentChar, getTether, unicodeBrailleToDescription from .common import * if isPy3: import louisHelper @@ -358,6 +358,74 @@ def emulateKey(self, key, withModifiers=True): log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) self.sendChars(key) +#: brailleInput.BrailleInputHandler.input() +endChar = True +def processOneHandMode(self, dots): + global endChar + addSpace = False + method = config.conf["brailleExtender"]["oneHandMethod"] + pos = self.untranslatedStart + self.untranslatedCursorPos + continue_ = True + endWord = False + if method == configBE.CHOICE_oneHandMethodSides: + endChar = not endChar + if dots == 0: + endChar = endWord = True + addSpace = True + #elif method == configBE.CHOICE_oneHandMethodSide: pass + #elif method == configBE.CHOICE_oneHandMethodDots: pass + else: + speech.speakMessage(_("Unsupported input method")) + self.flushBuffer() + return False, False + if endChar: + if not self.bufferBraille: self.bufferBraille.insert(pos, 0) + self.bufferBraille[-1] |= dots + self.untranslatedCursorPos += 1 + if not endWord: endWord = self.bufferBraille[-1] == 0 + if addSpace: + self.bufferBraille.append(0) + self.untranslatedCursorPos += 1 + else: + continue_ = False + self.bufferBraille.insert(pos, dots) + self._reportUntranslated(pos) + return continue_, endWord + +def input(self, dots): + """Handle one cell of braille input. + """ + # Insert the newly entered cell into the buffer at the cursor position. + pos = self.untranslatedStart + self.untranslatedCursorPos + # Space ends the word. + endWord = dots == 0 + continue_ = True + if config.conf["brailleExtender"]["oneHandMode"]: + continue_, endWord = processOneHandMode(self, dots) + if not continue_: return + else: + self.bufferBraille.insert(pos, dots) + self.untranslatedCursorPos += 1 + # For uncontracted braille, translate the buffer for each cell added. + # Any new characters produced are then sent immediately. + # For contracted braille, translate the buffer only when a word is ended (i.e. a space is typed). + # This is because later cells can change characters produced by previous cells. + # For example, in English grade 2, "tg" produces just "tg", + # but "tgr" produces "together". + if not self.useContractedForCurrentFocus or endWord: + if self._translate(endWord): + if not endWord: + self.cellsWithText.add(pos) + elif self.bufferText and not self.useContractedForCurrentFocus: + # Translators: Reported when translation didn't succeed due to unsupported input. + speech.speakMessage(_("Unsupported input")) + self.flushBuffer() + else: + # This cell didn't produce any text; e.g. number sign. + self._reportUntranslated(pos) + else: + self._reportUntranslated(pos) + #: brailleInput.BrailleInputHandler._translate() # reason for patching: possibility to lock modifiers, display modifiers in braille during input def _translate(self, endWord): @@ -443,8 +511,9 @@ def _createTablesString(tablesList): braille.TextInfoRegion.nextLine = nextLine inputCore.InputManager.executeGesture = executeGesture NoInputGestureAction = inputCore.NoInputGestureAction -brailleInput.BrailleInputHandler.emulateKey = emulateKey brailleInput.BrailleInputHandler._translate = _translate +brailleInput.BrailleInputHandler.emulateKey = emulateKey +brailleInput.BrailleInputHandler.input = input globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 1d13696e..9707c9f8 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -168,7 +168,7 @@ def makeSettings(self, settingsSizer): self.brailleDisplay1.SetSelection(self.bds_k.index(config.conf["brailleExtender"]["brailleDisplay1"])) self.brailleDisplay2 = sHelper.addLabeledControl(_("Second braille display preferred"), wx.Choice, choices=self.bds_v) self.brailleDisplay2.SetSelection(self.bds_k.index(config.conf["brailleExtender"]["brailleDisplay2"])) - self.oneHandMode = sHelper.addItem(wx.CheckBox(self, label=_("One hand mode"))) + self.oneHandMode = sHelper.addItem(wx.CheckBox(self, label=_("One-handed mode"))) self.oneHandMode.SetValue(config.conf["brailleExtender"]["oneHandMode"]) choices = list(configBE.CHOICE_oneHandMethods.values()) itemToSelect = list(configBE.CHOICE_oneHandMethods.keys()).index(config.conf["brailleExtender"]["oneHandMethod"]) From c01bf0fd2c5a902db923f9737505c64fdc5a49e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 13 Jan 2020 15:08:12 +0100 Subject: [PATCH 19/87] Adds the 2nd method --- addon/globalPlugins/brailleExtender/patchs.py | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index e2d15917..40bd1faf 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -31,7 +31,7 @@ import addonHandler addonHandler.initTranslation() from . import dictionaries -from .utils import getCurrentChar, getTether, unicodeBrailleToDescription +from .utils import getCurrentChar, getTether, unicodeBrailleToDescription, descriptionToUnicodeBraille from .common import * if isPy3: import louisHelper @@ -372,7 +372,28 @@ def processOneHandMode(self, dots): if dots == 0: endChar = endWord = True addSpace = True - #elif method == configBE.CHOICE_oneHandMethodSide: pass + elif method == configBE.CHOICE_oneHandMethodSide: + endChar = not endChar + if endChar: equiv = "045645688" + else: + equiv = "012312377" + if dots == 0: + endChar = endWord = True + addSpace = True + if dots != 0: + translatedBufferBrailleDots = 0 + if self.bufferBraille: + translatedBufferBraille = chr(self.bufferBraille[-1] | 0x2800) + translatedBufferBrailleDots = unicodeBrailleToDescription(translatedBufferBraille) + translatedDots = chr(dots | 0x2800) + translatedDotsBrailleDots = unicodeBrailleToDescription(translatedDots) + newDots = "" + for dot in translatedDotsBrailleDots: + dot = int(dot) + if dots >= 0 and dot < 9: newDots += equiv[dot] + newDots = ''.join(sorted(set(newDots))) + if not newDots: newDots = "0" + dots = ord(descriptionToUnicodeBraille(newDots))-0x2800 #elif method == configBE.CHOICE_oneHandMethodDots: pass else: speech.speakMessage(_("Unsupported input method")) From b6afcf4fe3d706c9877c7764a225b5bf4607ee5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 16 Jan 2020 12:53:46 +0100 Subject: [PATCH 20/87] Added gestures to enable/disable one-handed mode --- .../brailleExtender/Profiles/baum/default/profile.ini | 1 + .../Profiles/brailliantB/default/profile.ini | 1 + .../Profiles/eurobraille/default/profile.ini | 1 + .../Profiles/freedomscientific/default/profile.ini | 1 + addon/globalPlugins/brailleExtender/__init__.py | 7 +++++++ 5 files changed, 11 insertions(+) diff --git a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini index bfc547fd..72b68aa5 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini @@ -60,6 +60,7 @@ reportExtraInfos = b10+b5+b8 getSpeechOutput = b10+b3+b4 addDictionaryEntry = b10+b8+b7+b1+b4+b5 + toggleOneHandMode = b2+b7+b9 [keyboardLayouts] diff --git a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini index 0bf3c1b0..5d60803f 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini @@ -52,6 +52,7 @@ nextRotor = space+dot5+dot6 getSpeechOutput = space+dot3+dot4 addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 + toggleOneHandMode = space+dot2+dot7 [rotor] nextEltRotor = right diff --git a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini index 914da610..343c3619 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini @@ -52,6 +52,7 @@ getSpeechOutput = space+dot3+dot4 repeatLastShortcut = dot6+dot7+space addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 + toggleOneHandMode = space+dot2+dot7 [rotor] nextEltRotor = joystick2Right diff --git a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini index 90e29ad6..92d0df93 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini @@ -52,6 +52,7 @@ nextRotor = braillespacebar+dot5+dot6 getSpeechOutput = braillespacebar+dot3+dot4 addDictionaryEntry = braillespacebar+dot8+dot7+dot1+dot4+dot5 + toggleOneHandMode = braillespacebar+dot2+dot7 [rotor] nextEltRotor = leftwizwheeldown diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index a2928423..0029d0bd 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -572,6 +572,12 @@ def script_toggleLockBrailleKeyboard(self, gesture): ui.message(_("Braille keyboard %s") % (_("locked") if self.brailleKeyboardLocked else _("unlocked"))) script_toggleLockBrailleKeyboard.__doc__ = _("Lock/unlock braille keyboard") + def script_toggleOneHandMode(self, gesture): + config.conf["brailleExtender"]["oneHandMode"] = not config.conf["brailleExtender"]["oneHandMode"] + state = _("enabled") if config.conf["brailleExtender"]["oneHandMode"] else _("disabled") + ui.message(_("One hand mode %s") % state) + script_toggleOneHandMode.__doc__ = _("Enable/disable one hand mode feature") + def script_toggleDots78(self, gesture): self.hideDots78 = not self.hideDots78 speech.speakMessage(_("Dots 7 and 8: %s") % (_("disabled") if self.hideDots78 else _("enabled"))) @@ -1464,6 +1470,7 @@ def script_addDictionaryEntry(self, gesture): __gestures["kb:nvda+shift+k"] = "reload_brailledisplay2" __gestures["kb:nvda+alt+h"] = "toggleDots78" __gestures["kb:nvda+alt+f"] = "toggleBRFMode" + __gestures["kb:nvda+windows+h"] = "toggleOneHandMode" __gestures["kb:nvda+windows+k"] = "reloadAddon" __gestures["kb:volumeMute"] = "toggleVolume" __gestures["kb:volumeUp"] = "volumePlus" From 14e72aa4b4e3b110c57efaec8ded52e4aaac20af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 16 Jan 2020 13:07:23 +0100 Subject: [PATCH 21/87] Fix gesture for FS displays --- .../Profiles/freedomscientific/default/profile.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini index 2759a322..0100ff60 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini @@ -51,8 +51,8 @@ priorRotor = braillespacebar+dot2+dot3 nextRotor = braillespacebar+dot5+dot6 getSpeechOutput = braillespacebar+dot3+dot4 - addDictionaryEntry = braillespacebar+dot2+dot4+dot7 - advancedInput = braillespacebar+dot1+dot2+dot5+dot8 + addDictionaryEntry = braillespacebar+dot1+dot2+dot5+dot7+dot8 + advancedInput = braillespacebar+dot2+dot4+dot7 [rotor] nextEltRotor = leftwizwheeldown From 34b179eafcee3a13ccbbbd820ef09320a0d927f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 17 Jan 2020 08:47:45 +0100 Subject: [PATCH 22/87] Small fixes --- .../globalPlugins/brailleExtender/__init__.py | 1 - .../brailleExtender/dictionaries.py | 1 - addon/globalPlugins/brailleExtender/huc.py | 5 ++-- addon/globalPlugins/brailleExtender/patchs.py | 30 ++----------------- .../globalPlugins/brailleExtender/settings.py | 1 - 5 files changed, 5 insertions(+), 33 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 4aff0b2b..98ab74cf 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -15,7 +15,6 @@ import re import subprocess import sys -isPy3 = True if sys.version_info >= (3, 0) else False import time import urllib import gui diff --git a/addon/globalPlugins/brailleExtender/dictionaries.py b/addon/globalPlugins/brailleExtender/dictionaries.py index 5a353444..7a58ab49 100644 --- a/addon/globalPlugins/brailleExtender/dictionaries.py +++ b/addon/globalPlugins/brailleExtender/dictionaries.py @@ -16,7 +16,6 @@ from collections import namedtuple from . import configBE -from . import utils from .common import * from . import huc diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index 32e5c8d4..aa0ae374 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -5,15 +5,14 @@ import sys import struct -isPy3 = True if sys.version_info >= (3, 0) else False +isPy3 = sys.version_info >= (3, 0) def chrPy2(i): try: return unichr(i) except ValueError: return struct.pack('i', i).decode('utf-32') if not isPy3: chr = chrPy2 HUC6_patterns = { - "⠿": (0x000000, 0x00FFFF), - "⠿": (0x010000, 0x01FFFF), + "⠿": (0x000000, 0x1FFFF), "⠿…⠇": (0x020000, 0x02FFFF), "⠿…⠍": (0x030000, 0x03FFFF), "⠿…⠝": (0x040000, 0x04FFFF), diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 4e4e7850..337729cd 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -249,7 +249,6 @@ def HUCProcess(self): if not isPy3: return unicodeBrailleRepr = ''.join([chr(10240+cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] - allBraillePosDelimiters = [(pos, pos+3) for pos in allBraillePos] if not allBraillePos: return if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_liblouis: replacements = {braillePos: getHexLiblouisStyle(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} @@ -417,7 +416,7 @@ def sendChars(self, chars): inputs = [] chars = ''.join(c if ord(c) <= 0xffff else ''.join(chr(x) for x in struct.unpack('>2H', c.encode("utf-16be"))) for c in chars) for ch in chars: - for direction in (0,winUser.KEYEVENTF_KEYUP): + for direction in (0,winUser.KEYEVENTF_KEYUP): input = winUser.Input() input.type = winUser.INPUT_KEYBOARD input.ii.ki = winUser.KeyBdInput() @@ -457,31 +456,8 @@ def emulateKey(self, key, withModifiers=True): log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) self.sendChars(key) -#: brailleInput.BrailleInputHandler.emulateKey() -def emulateKey(self, key, withModifiers=True): - """Emulates a key using the keyboard emulation system. - If emulation fails (e.g. because of an unknown key), a debug warning is logged - and the system falls back to sending unicode characters. - @param withModifiers: Whether this key emulation should include the modifiers that are held virtually. - Note that this method does not take care of clearing L{self.currentModifiers}. - @type withModifiers: bool - """ - if withModifiers: - # The emulated key should be the last item in the identifier string. - keys = list(self.currentModifiers) - keys.append(key) - gesture = "+".join(keys) - else: - gesture = key - try: - inputCore.manager.emulateGesture(keyboardHandler.KeyboardInputGesture.fromName(gesture)) - instanceGP.lastShortcutPerformed = gesture - except BaseException: - log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) - self.sendChars(key) - #: brailleInput.BrailleInputHandler.input() -def input(self, dots): +def input_(self, dots): """Handle one cell of braille input. """ # Insert the newly entered cell into the buffer at the cursor position. @@ -635,7 +611,7 @@ def _createTablesString(tablesList): NoInputGestureAction = inputCore.NoInputGestureAction brailleInput.BrailleInputHandler._translate = _translate brailleInput.BrailleInputHandler.emulateKey = emulateKey -brailleInput.BrailleInputHandler.input = input +brailleInput.BrailleInputHandler.input = input_ brailleInput.BrailleInputHandler.sendChars = sendChars globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 6fdf94e3..550a7910 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -18,7 +18,6 @@ import core import inputCore import keyLabels -import louis import queueHandler import scriptHandler import ui From 1be39b9b4453748f492039f1e99124cbb07438d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 23 Jan 2020 07:21:03 +0100 Subject: [PATCH 23/87] Added HUC representations for current character description feature --- addon/globalPlugins/brailleExtender/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 62100a08..586c1f54 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -201,7 +201,8 @@ def currentCharDesc(): if c: try: descChar = unicodedata.name(ch) except ValueError: descChar = _("unknown") - s = '%c: %s; %s; %s; %s; %s [%s]' % (ch, hex(c), c, oct(c), bin(c), descChar, unicodedata.category(ch)) + HUCrepr = " (%s, %s)" % (huc.translate(ch, False), huc.translate(ch, True)) + s = '%c%s: %s; %s; %s; %s; %s [%s]' % (ch, HUCrepr, hex(c), c, oct(c), bin(c), descChar, unicodedata.category(ch)) if scriptHandler.getLastScriptRepeatCount() == 0: ui.message(s) elif scriptHandler.getLastScriptRepeatCount() == 1: brch = getTextInBraille(ch) From d4501f39e2bf1494a5e595a8267c9719c8423c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 01:01:29 +0100 Subject: [PATCH 24/87] Undefined characters can be displayed with their description --- .../globalPlugins/brailleExtender/__init__.py | 2 +- .../globalPlugins/brailleExtender/configBE.py | 12 ++- addon/globalPlugins/brailleExtender/patchs.py | 80 +++++++++++++------ .../globalPlugins/brailleExtender/settings.py | 46 ++++++++--- addon/globalPlugins/brailleExtender/utils.py | 10 +-- 5 files changed, 106 insertions(+), 44 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 9a9a31e9..89443f6e 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -639,7 +639,7 @@ def script_getTableOverview(self, gesture): ouTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] t = (_(" Input table")+": %s\n"+_("Output table")+": %s\n\n") % (inTable+' (%s)' % (brailleInput.handler.table.fileName), ouTable+' (%s)' % (config.conf["braille"]["translationTable"])) t += utils.getTableOverview() - ui.browseableMessage('
%s
' % t, _('Table overview (%s)' % brailleInput.handler.table.displayName), True) + ui.browseableMessage("
%s
" % t, _("Table overview (%s)" % brailleInput.handler.table.displayName), True) script_getTableOverview.__doc__ = _("Display an overview of current input braille table") def script_translateInBRU(self, gesture): diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 973dff4a..bedf4601 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -47,6 +47,10 @@ CHOICE_liblouis = 7 CHOICE_HUC8 = 8 CHOICE_HUC6 = 9 +CHOICE_hex = 10 +CHOICE_dec = 11 +CHOICE_oct = 12 +CHOICE_bin = 13 dict_ = dict if isPy3 else OrderedDict @@ -158,9 +162,13 @@ def getConfspec(): "outputTables": "string(default=%s)" % config.conf["braille"]["translationTable"], "tabSpace": "boolean(default=False)", "tabSize_%s" % curBD: "integer(min=1, default=2, max=42)", - "undefinedCharReprType": "integer(min=0, default=0, max=9)", + "undefinedCharReprMethod": "integer(min=0, default=%s, max=%s)" % (CHOICE_HUC8, CHOICE_bin), "undefinedCharRepr": "string(default=0)", - "showNameUndefinedChar": "boolean(default=False)", + "undefinedCharDesc": "boolean(default=True)", + "undefinedCharStart": "string(default=[)", + "undefinedCharEnd": "string(default=])", + "undefinedCharLang": "string(default=Windows)", + "undefinedCharBrailleTable": "string(default=current)", "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 7664d262..73eecaea 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -19,6 +19,7 @@ import braille import brailleInput import brailleTables +import characterProcessing import controlTypes import config import core @@ -26,6 +27,7 @@ import globalCommands import inputCore import keyboardHandler +import languageHandler import louis import queueHandler import sayAllHandler @@ -46,7 +48,7 @@ instanceGP = None if not isPy3: chr = chrPy2 HUCDotPattern = "12345678-78-12345678" -HUCUnicodePattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) +undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) SELECTION_SHAPE = lambda: braille.SELECTION_SHAPE origFunc = { @@ -147,7 +149,7 @@ def update(self): mode=mode, cursorPos=self.cursorPos or 0 ) - if config.conf["brailleExtender"]["undefinedCharReprType"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6]: HUCProcess(self) + if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6, configBE.CHOICE_hex, configBE.CHOICE_dec, configBE.CHOICE_oct, configBE.CHOICE_bin]: undefinedCharProcess(self) if not isPy3: # liblouis gives us back a character string of cells, so convert it to a list of ints. # For some reason, the highest bit is set, so only grab the lower 8 @@ -191,41 +193,71 @@ def update(self): self.brailleCells = [(cell & 63) for cell in self.brailleCells] def setUndefinedChar(t=None): - if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharReprType"] + if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharReprMethod"] if t == 0: return - c = ["default", "12345678", "123456", '0', config.conf["brailleExtender"]["undefinedCharRepr"], "questionMark", "sign"] + [HUCDotPattern]*3 + c = ["default", "12345678", "123456", '0', config.conf["brailleExtender"]["undefinedCharRepr"], "questionMark", "sign"] + [HUCDotPattern]*7 v = c[t] if v in ["questionMark", "sign"]: if v == "questionMark": s = '?' else: s = config.conf["brailleExtender"]["undefinedCharRepr"] v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) - if isPy3: - louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + if isPy3: louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) else: louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v)) -def getDescChar(c): - n = '' - try: n = "'%s'" % unicodedata.name(c) - except ValueError: n = r"'\x%.4x'" % ord(c) - return n - -def getHexLiblouisStyle(s): - if config.conf["brailleExtender"]["showNameUndefinedChar"]: - s = getTextInBraille(''.join([getDescChar(c) for c in s])) - else: s = getTextInBraille(''.join([r"'\x%.4x'" % ord(c) for c in s])) +def getDescChar(c, lang="Windows", start='', end=''): + if lang == "Windows": lang = languageHandler.getLanguage() + desc = characterProcessing.processSpeechSymbols(lang, c, characterProcessing.SYMLVL_CHAR).strip() + if not desc or desc == c: + if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: + HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 + return huc.translate(c, HUC6=HUC6) + else: return getTextInBraille(''.join(getNotationOrd(c))) + return start + desc + end + +def getLiblouisStyle(c): + if c < 0x10000: return r"\x%.4x" % c + elif c <= 0x100000: return r"\y%.5x" % c + else: return r"\z%.6x" % c + +def getNotationOrd(s, notation=None): + if not notation: notation = config.conf["brailleExtender"]["undefinedCharReprMethod"] + matches = { + configBE.CHOICE_bin: bin, + configBE.CHOICE_oct: oct, + configBE.CHOICE_dec: lambda s: s, + configBE.CHOICE_hex: hex, + configBE.CHOICE_liblouis: getLiblouisStyle, + } + fn = matches[notation] + s = getTextInBraille(''.join(["'%s'" % fn(ord(c)) for c in s])) return s -def HUCProcess(self): +def undefinedCharProcess(self): if not isPy3: return - unicodeBrailleRepr = ''.join([chr(10240+cell) for cell in self.brailleCells]) - allBraillePos = [m.start() for m in re.finditer(HUCUnicodePattern, unicodeBrailleRepr)] + unicodeBrailleRepr = ''.join([chr(10240 + cell) for cell in self.brailleCells]) + allBraillePos = [m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr)] if not allBraillePos: return - if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_liblouis: - replacements = {braillePos: getHexLiblouisStyle(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} - else: - HUC6 = True if config.conf["brailleExtender"]["undefinedCharReprType"] == configBE.CHOICE_HUC6 else False + if config.conf["brailleExtender"]["undefinedCharDesc"]: + start = config.conf["brailleExtender"]["undefinedCharStart"] + end = config.conf["brailleExtender"]["undefinedCharEnd"] + if start: start = getTextInBraille(start) + if end: end = getTextInBraille(end) + replacements = {braillePos: + getTextInBraille( + getDescChar( + self.rawText[self.brailleToRawPos[braillePos]], + lang=config.conf["brailleExtender"]["undefinedCharLang"], + start=start, + end=end, + ), + table=config.conf["brailleExtender"]["undefinedCharBrailleTable"] + ) for braillePos in allBraillePos} + elif config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: + HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 replacements = {braillePos: huc.translate(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos} + else: + replacements = {braillePos: getNotationOrd(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} newBrailleCells = [] newBrailleToRawPos = [] newRawToBraillePos = [] @@ -234,7 +266,7 @@ def HUCProcess(self): i = 0 for iBrailleCells, brailleCells in enumerate(self.brailleCells): brailleToRawPos = self.brailleToRawPos[iBrailleCells] - if iBrailleCells in replacements and not replacements[iBrailleCells].startswith(HUCUnicodePattern[0]): + if iBrailleCells in replacements and not replacements[iBrailleCells].startswith(undefinedCharPattern[0]): toAdd = [ord(c)-10240 for c in replacements[iBrailleCells]] newBrailleCells += toAdd newBrailleToRawPos += [i] * len(toAdd) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 296ba94d..1b6742d1 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -330,7 +330,7 @@ class BrailleTablesDlg(gui.settingsDialogs.SettingsDialog): def makeSettings(self, settingsSizer): self.oTables = set(configBE.outputTables) self.iTables = set(configBE.inputTables) - lt = [_('Use the current input table')] + lt = [_("Use the current input table")] for table in configBE.tables: if table.output and not table.contracted: lt.append(table[1]) if config.conf["brailleExtender"]["inputTableShortcuts"] in configBE.tablesUFN: @@ -369,15 +369,36 @@ def makeSettings(self, settingsSizer): _("Other sign/pattern (e.g.: \, ??)"), _("Hexadecimal, Liblouis style"), _("Hexadecimal, HUC8"), - _("Hexadecimal, HUC6") + _("Hexadecimal, HUC6"), + _("Hexadecimal"), + _("Decimal"), + _("Octal"), + _("Binary") ] self.undefinedCharReprList = sHelper.addLabeledControl(label, wx.Choice, choices=choices) self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) - self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprType"]) - self.showNameUndefinedChar = sHelper.addItem(wx.CheckBox(self, label=_("Show the name assigned to the character if possible (english only)"))) - self.showNameUndefinedChar.SetValue(config.conf["brailleExtender"]["showNameUndefinedChar"]) + self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprMethod"]) # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) + self.undefinedCharDesc = sHelper.addItem(wx.CheckBox(self, label=_("Describe undefined characters if possible"))) + self.undefinedCharDesc.SetValue(config.conf["brailleExtender"]["undefinedCharDesc"]) + self.undefinedCharStart = sHelper.addLabeledControl(_("Start tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharStart"]) + self.undefinedCharEnd = sHelper.addLabeledControl(_("End tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharEnd"]) + values = [lang[1] for lang in languageHandler.getAvailableLanguages()] + keys = [lang[0] for lang in languageHandler.getAvailableLanguages()] + undefinedCharLang = config.conf["brailleExtender"]["undefinedCharLang"] + if not undefinedCharLang in keys: undefinedCharLang = keys[-1] + undefinedCharLangID = keys.index(undefinedCharLang) + self.undefinedCharLang = sHelper.addLabeledControl(_("Description language"), wx.Choice, choices=values) + self.undefinedCharLang.SetSelection(undefinedCharLangID) + values = [_("Use the current output table")] + [table.displayName for table in configBE.tables if table.output] + keys = ["current"] + [table.fileName for table in configBE.tables if table.output] + undefinedCharBrailleTable = config.conf["brailleExtender"]["undefinedCharBrailleTable"] + if undefinedCharBrailleTable not in configBE.tablesFN + ["current"]: undefinedCharBrailleTable = "current" + undefinedCharBrailleTableID = keys.index(undefinedCharBrailleTable) + self.undefinedCharBrailleTable = sHelper.addLabeledControl(_("Description braille table"), wx.Choice, choices=values) + self.undefinedCharBrailleTable.SetSelection(undefinedCharBrailleTableID) + self.onUndefinedCharReprList() self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) @@ -394,18 +415,24 @@ def onOk(self, evt): postTable = "None" if postTableID == 0 else configBE.tablesFN[postTableID] config.conf["brailleExtender"]["postTable"] = postTable if ((self.tabSpace.IsChecked() and config.conf["brailleExtender"]["tabSpace"] != self.tabSpace.IsChecked()) - or (self.undefinedCharReprList.GetSelection() != 0 and config.conf["brailleExtender"]["undefinedCharReprType"] != self.undefinedCharReprList.GetSelection())): + or (self.undefinedCharReprList.GetSelection() != 0 and config.conf["brailleExtender"]["undefinedCharReprMethod"] != self.undefinedCharReprList.GetSelection())): restartRequired = True else: restartRequired = False config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD] = self.tabSize.Value - config.conf["brailleExtender"]["undefinedCharReprType"] = self.undefinedCharReprList.GetSelection() + config.conf["brailleExtender"]["undefinedCharReprMethod"] = self.undefinedCharReprList.GetSelection() repr_ = self.undefinedCharReprEdit.Value if self.undefinedCharReprList.GetSelection() == configBE.CHOICE_otherDots: repr_ = re.sub("[^0-8\-]", "", repr_).strip('-') repr_ = re.sub('\-+','-', repr_) config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ - config.conf["brailleExtender"]["showNameUndefinedChar"] = self.showNameUndefinedChar.IsChecked() + config.conf["brailleExtender"]["undefinedCharDesc"] = self.undefinedCharDesc.IsChecked() + config.conf["brailleExtender"]["undefinedCharStart"] = self.undefinedCharStart.Value + config.conf["brailleExtender"]["undefinedCharEnd"] = self.undefinedCharEnd.Value + config.conf["brailleExtender"]["undefinedCharLang"] = languageHandler.getAvailableLanguages()[self.undefinedCharLang.GetSelection()][0] + undefinedCharBrailleTable = self.undefinedCharBrailleTable.GetSelection() + keys = ["current"] + [table.fileName for table in configBE.tables if table.output] + config.conf["brailleExtender"]["undefinedCharBrailleTable"] = keys[undefinedCharBrailleTable] instanceGP.reloadBrailleTables() super(BrailleTablesDlg, self).onOk(evt) if restartRequired: @@ -474,9 +501,6 @@ def onUndefinedCharReprList(self, evt=None): selected = self.undefinedCharReprList.GetSelection() if selected in [configBE.CHOICE_otherDots, configBE.CHOICE_otherSign]: self.undefinedCharReprEdit.Enable() else: self.undefinedCharReprEdit.Disable() - if selected in [configBE.CHOICE_liblouis]: - self.showNameUndefinedChar.Enable() - else: self.showNameUndefinedChar.Disable() def onCustomBrailleTablesBtn(self, evt): customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 586c1f54..e2d68955 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -251,19 +251,17 @@ def getKeysTranslation(n): def getTextInBraille(t=None, table=None): if not t: t = getTextSelection() if not t.strip(): return '' - if not table: table = [os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"])] + if not table or table == "current": table = [os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"])] + else: table = [os.path.join(brailleTables.TABLES_DIR, table)] nt = [] res = '' t = t.split("\n") for l in t: l = l.rstrip() if not l: res = '' - elif charToDotsInLouis: res = louis.charToDots(table, l, louis.ucBrl) - else: res = louis.translateString(table, l, None, louis.dotsIO) + else: res = ''.join([chr(ord(ch)-0x8000+0x2800) for ch in louis.translateString(table, l, mode=louis.dotsIO)]) nt.append(res) - nt = '\n'.join(nt) - if charToDotsInLouis: return nt - return ''.join([chr(ord(ch)-0x8000+0x2800) if ord(ch) > 8000 else ch for ch in nt]) + return '\n'.join(nt) def combinationDesign(dots, noDot = '⠤'): out = "" From fc3de2901b9542f03a004a8af8cfa76f379be87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 01:31:34 +0100 Subject: [PATCH 25/87] Fix merge --- addon/globalPlugins/brailleExtender/patchs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index c1b1f637..84260400 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -466,11 +466,15 @@ def input_(self, dots): """ # Insert the newly entered cell into the buffer at the cursor position. pos = self.untranslatedStart + self.untranslatedCursorPos - self.bufferBraille.insert(pos, dots) - self.untranslatedCursorPos += 1 # Space ends the word. endWord = dots == 0 - + continue_ = True + if config.conf["brailleExtender"]["oneHandMode"]: + continue_, endWord = processOneHandMode(self, dots) + if not continue_: return + else: + self.bufferBraille.insert(pos, dots) + self.untranslatedCursorPos += 1 ok = False if instanceGP: focusObj = api.getFocusObject() From 46b1386c3b4adf06147b980d450504067787d7af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 10:43:46 +0100 Subject: [PATCH 26/87] Separate 'undefined characters descriptions' options into another dialog --- .../globalPlugins/brailleExtender/settings.py | 74 ++++++++++++------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 1b6742d1..54e16aad 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -380,26 +380,9 @@ def makeSettings(self, settingsSizer): self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprMethod"]) # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) - self.undefinedCharDesc = sHelper.addItem(wx.CheckBox(self, label=_("Describe undefined characters if possible"))) - self.undefinedCharDesc.SetValue(config.conf["brailleExtender"]["undefinedCharDesc"]) - self.undefinedCharStart = sHelper.addLabeledControl(_("Start tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharStart"]) - self.undefinedCharEnd = sHelper.addLabeledControl(_("End tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharEnd"]) - values = [lang[1] for lang in languageHandler.getAvailableLanguages()] - keys = [lang[0] for lang in languageHandler.getAvailableLanguages()] - undefinedCharLang = config.conf["brailleExtender"]["undefinedCharLang"] - if not undefinedCharLang in keys: undefinedCharLang = keys[-1] - undefinedCharLangID = keys.index(undefinedCharLang) - self.undefinedCharLang = sHelper.addLabeledControl(_("Description language"), wx.Choice, choices=values) - self.undefinedCharLang.SetSelection(undefinedCharLangID) - values = [_("Use the current output table")] + [table.displayName for table in configBE.tables if table.output] - keys = ["current"] + [table.fileName for table in configBE.tables if table.output] - undefinedCharBrailleTable = config.conf["brailleExtender"]["undefinedCharBrailleTable"] - if undefinedCharBrailleTable not in configBE.tablesFN + ["current"]: undefinedCharBrailleTable = "current" - undefinedCharBrailleTableID = keys.index(undefinedCharBrailleTable) - self.undefinedCharBrailleTable = sHelper.addLabeledControl(_("Description braille table"), wx.Choice, choices=values) - self.undefinedCharBrailleTable.SetSelection(undefinedCharBrailleTableID) - self.onUndefinedCharReprList() + self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Undefined characters descriptions"), wx.DefaultPosition) + self.undefinedCharsBtn.Bind(wx.EVT_BUTTON, self.onUndefinedCharsBtn) self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) @@ -426,13 +409,6 @@ def onOk(self, evt): repr_ = re.sub("[^0-8\-]", "", repr_).strip('-') repr_ = re.sub('\-+','-', repr_) config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ - config.conf["brailleExtender"]["undefinedCharDesc"] = self.undefinedCharDesc.IsChecked() - config.conf["brailleExtender"]["undefinedCharStart"] = self.undefinedCharStart.Value - config.conf["brailleExtender"]["undefinedCharEnd"] = self.undefinedCharEnd.Value - config.conf["brailleExtender"]["undefinedCharLang"] = languageHandler.getAvailableLanguages()[self.undefinedCharLang.GetSelection()][0] - undefinedCharBrailleTable = self.undefinedCharBrailleTable.GetSelection() - keys = ["current"] + [table.fileName for table in configBE.tables if table.output] - config.conf["brailleExtender"]["undefinedCharBrailleTable"] = keys[undefinedCharBrailleTable] instanceGP.reloadBrailleTables() super(BrailleTablesDlg, self).onOk(evt) if restartRequired: @@ -502,6 +478,10 @@ def onUndefinedCharReprList(self, evt=None): if selected in [configBE.CHOICE_otherDots, configBE.CHOICE_otherSign]: self.undefinedCharReprEdit.Enable() else: self.undefinedCharReprEdit.Disable() + def onUndefinedCharsBtn(self, evt): + undefinedCharsDlg = UndefinedCharsDlg(self, multiInstanceAllowed=True) + undefinedCharsDlg.ShowModal() + def onCustomBrailleTablesBtn(self, evt): customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) customBrailleTablesDlg.ShowModal() @@ -533,6 +513,48 @@ def onTables(self, evt): queueHandler.queueFunction(queueHandler.eventQueue, ui.message, "%s" % newSwitch) utils.refreshBD() else: evt.Skip() + + +class UndefinedCharsDlg(gui.settingsDialogs.SettingsDialog): + + # Translators: title of a dialog. + title = "Braille Extender - %s" % _("Undefined characters descriptions") + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + self.undefinedCharDesc = sHelper.addItem(wx.CheckBox(self, label=_("Describe undefined characters if possible"))) + self.undefinedCharDesc.SetValue(config.conf["brailleExtender"]["undefinedCharDesc"]) + self.undefinedCharStart = sHelper.addLabeledControl(_("Start tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharStart"]) + self.undefinedCharEnd = sHelper.addLabeledControl(_("End tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharEnd"]) + values = [lang[1] for lang in languageHandler.getAvailableLanguages()] + keys = [lang[0] for lang in languageHandler.getAvailableLanguages()] + undefinedCharLang = config.conf["brailleExtender"]["undefinedCharLang"] + if not undefinedCharLang in keys: undefinedCharLang = keys[-1] + undefinedCharLangID = keys.index(undefinedCharLang) + self.undefinedCharLang = sHelper.addLabeledControl(_("Language"), wx.Choice, choices=values) + self.undefinedCharLang.SetSelection(undefinedCharLangID) + values = [_("Use the current output table")] + [table.displayName for table in configBE.tables if table.output] + keys = ["current"] + [table.fileName for table in configBE.tables if table.output] + undefinedCharBrailleTable = config.conf["brailleExtender"]["undefinedCharBrailleTable"] + if undefinedCharBrailleTable not in configBE.tablesFN + ["current"]: undefinedCharBrailleTable = "current" + undefinedCharBrailleTableID = keys.index(undefinedCharBrailleTable) + self.undefinedCharBrailleTable = sHelper.addLabeledControl(_("Braille table"), wx.Choice, choices=values) + self.undefinedCharBrailleTable.SetSelection(undefinedCharBrailleTableID) + + + def postInit(self): self.undefinedCharDesc.SetFocus() + + def onOk(self, evt): + config.conf["brailleExtender"]["undefinedCharDesc"] = self.undefinedCharDesc.IsChecked() + config.conf["brailleExtender"]["undefinedCharStart"] = self.undefinedCharStart.Value + config.conf["brailleExtender"]["undefinedCharEnd"] = self.undefinedCharEnd.Value + config.conf["brailleExtender"]["undefinedCharLang"] = languageHandler.getAvailableLanguages()[self.undefinedCharLang.GetSelection()][0] + undefinedCharBrailleTable = self.undefinedCharBrailleTable.GetSelection() + keys = ["current"] + [table.fileName for table in configBE.tables if table.output] + config.conf["brailleExtender"]["undefinedCharBrailleTable"] = keys[undefinedCharBrailleTable] + super(UndefinedCharsDlg, self).onOk(evt) + + class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): # Translators: title of a dialog. From c8c87d455db18752358963fa284660b0f48dfa66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 11:43:18 +0100 Subject: [PATCH 27/87] Add a script to enable/disable description of undefined character --- .../brailleExtender/Profiles/baum/default/profile.ini | 1 + .../Profiles/brailliantB/default/profile.ini | 1 + .../Profiles/eurobraille/default/profile.ini | 1 + .../Profiles/freedomscientific/default/profile.ini | 1 + addon/globalPlugins/brailleExtender/__init__.py | 10 +++++++++- addon/globalPlugins/brailleExtender/settings.py | 4 ++-- 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini index d73184d3..f0044095 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/baum/default/profile.ini @@ -61,6 +61,7 @@ getSpeechOutput = b10+b3+b4 addDictionaryEntry = b10+b8+b7+b1+b4+b5 advancedInput = b2+b4+b7+b10 + undefinedCharsDesc = b1+b3+b6+b7+b10 [keyboardLayouts] [[l1]] diff --git a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini index 6d896b72..9048e983 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/brailliantB/default/profile.ini @@ -53,6 +53,7 @@ getSpeechOutput = space+dot3+dot4 addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 advancedInput = space+dot2+dot4+dot7 + undefinedCharsDesc = space+dot1+dot3+dot6+dot7 [rotor] nextEltRotor = right diff --git a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini index c412d25e..fa3e11c0 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/eurobraille/default/profile.ini @@ -53,6 +53,7 @@ repeatLastShortcut = dot6+dot7+space addDictionaryEntry = space+dot8+dot7+dot1+dot4+dot5 advancedInput = space+dot2+dot4+dot7 + undefinedCharsDesc = space+dot1+dot3+dot6+dot7 [rotor] nextEltRotor = joystick2Right diff --git a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini index 0100ff60..26e57c71 100644 --- a/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini +++ b/addon/globalPlugins/brailleExtender/Profiles/freedomscientific/default/profile.ini @@ -53,6 +53,7 @@ getSpeechOutput = braillespacebar+dot3+dot4 addDictionaryEntry = braillespacebar+dot1+dot2+dot5+dot7+dot8 advancedInput = braillespacebar+dot2+dot4+dot7 + undefinedCharsDesc = braillespacebar+dot1+dot3+dot6+dot7 [rotor] nextEltRotor = leftwizwheeldown diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 89443f6e..5782d96d 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -668,9 +668,16 @@ def script_cellDescriptionsToChars(self, gesture): def script_advancedInput(self, gesture): self.advancedInput = not self.advancedInput states = [_("disabled"), _("enabled")] - speech.speakMessage("Advanced braille input mode %s" % states[int(self.advancedInput)]) + speech.speakMessage(_("Advanced braille input mode %s") % states[int(self.advancedInput)]) script_advancedInput.__doc__ = _("Enable/disable the advanced input mode") + def script_undefinedCharsDesc(self, gesture): + config.conf["brailleExtender"]["undefinedCharDesc"] = not config.conf["brailleExtender"]["undefinedCharDesc"] + states = [_("disabled"), _("enabled")] + speech.speakMessage(_("Description of undefined characters %s") % states[int(config.conf["brailleExtender"]["undefinedCharDesc"])]) + utils.refreshBD() + script_undefinedCharsDesc.__doc__ = _("Enable/disable description of undefined characters") + def script_position(self, gesture=None): return ui.message('{0}% ({1}/{2})'.format(round(utils.getPositionPercentage(), 2), utils.getPosition()[0], utils.getPosition()[1])) script_position.__doc__ = _("Get the cursor position of text") @@ -1477,6 +1484,7 @@ def script_addDictionaryEntry(self, gesture): __gestures["kb:nvda+alt+h"] = "toggleDots78" __gestures["kb:nvda+alt+f"] = "toggleBRFMode" __gestures["kb:nvda+windows+i"] = "advancedInput" + __gestures["kb:nvda+windows+u"] = "undefinedCharsDesc" __gestures["kb:nvda+windows+k"] = "reloadAddon" __gestures["kb:volumeMute"] = "toggleVolume" __gestures["kb:volumeUp"] = "volumePlus" diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 54e16aad..deab8b65 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -381,7 +381,7 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) self.onUndefinedCharReprList() - self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Undefined characters descriptions"), wx.DefaultPosition) + self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Description of undefined characters"), wx.DefaultPosition) self.undefinedCharsBtn.Bind(wx.EVT_BUTTON, self.onUndefinedCharsBtn) self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) @@ -518,7 +518,7 @@ def onTables(self, evt): class UndefinedCharsDlg(gui.settingsDialogs.SettingsDialog): # Translators: title of a dialog. - title = "Braille Extender - %s" % _("Undefined characters descriptions") + title = "Braille Extender - %s" % _("Description of undefined characters") def makeSettings(self, settingsSizer): sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) From e0113986cb4aae468cec6d73d0c23752cf48b27e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 14:08:22 +0100 Subject: [PATCH 28/87] Fix merge --- addon/globalPlugins/brailleExtender/configBE.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 3e2ca73b..745418f8 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -68,7 +68,7 @@ CHOICE_oneHandMethodSide = 1 CHOICE_oneHandMethodDots = 2 -CHOICE_oneHandMethods = dict_([ +CHOICE_oneHandMethods = dict([ (CHOICE_oneHandMethodSides, _("Fill a cell in two stages on both sides")), (CHOICE_oneHandMethodSide, _("Fill a cell in two stages on one side (space = empty side)")), (CHOICE_oneHandMethodDots, _("Fill a cell dots by dots (each dot is a toggle, press space to validate the character)")) From 6433448e7e5e147d6bab0107fd0c560cef3230fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 14:27:29 +0100 Subject: [PATCH 29/87] Add accelerators --- addon/globalPlugins/brailleExtender/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 9b1fb54d..ecdd0242 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -355,7 +355,7 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) # Translators: label of a dialog. - label = _("Representation of undefined characters") + label = _("Representation of &undefined characters") choices = [ _("Use braille table behavior"), _("Dots 1-8 (⣿)"), @@ -378,7 +378,7 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) self.onUndefinedCharReprList() - self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Description of undefined characters"), wx.DefaultPosition) + self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Description of undefined characters"), wx.DefaultPosition) self.undefinedCharsBtn.Bind(wx.EVT_BUTTON, self.onUndefinedCharsBtn) self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) From e189355d7c8c551ece45d897dd41f4deaa779377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 14:34:14 +0100 Subject: [PATCH 30/87] getTableOverview: small fix --- addon/globalPlugins/brailleExtender/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index e2d68955..8ddaf028 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -289,7 +289,7 @@ def getTableOverview(tbl = ''): t = 'Input Output\n' if not re.match(r'^\\.+/$', text[0]): tmp['%s' % text[0] if text[0] != '' else '?'] = '%s %-7s' % ( - '%s (%s)' % (chr(i), combinationDesign(unicodeBrailleToDescription(chr(i)))), + '%s (%s)' % (chr(i), combinationDesign(huc.unicodeBrailleToDescription(chr(i)))), '%s%-8s' % (text[0].rstrip('\x00'), '%s' % (' (%-10s)' % str(hex(ord(text[0]))) if len(text[0]) == 1 else '' if text[0] != '' else '#ERROR')) ) else: From 663735898a19f24e9eefef8709a1a67c72fe1874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 14:52:54 +0100 Subject: [PATCH 31/87] Fix merge --- addon/globalPlugins/brailleExtender/settings.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index d5f2e391..53764010 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -150,7 +150,6 @@ def onSave(self): config.conf["brailleExtender"]["beepsModifiers"] = self.beepsModifiers.IsChecked() config.conf["brailleExtender"]["oneHandMode"] = self.oneHandMode.IsChecked() config.conf["brailleExtender"]["oneHandMethod"] = list(configBE.CHOICE_oneHandMethods.keys())[self.oneHandMethod.GetSelection()] - super(GeneralDlg, self).onOk(evt) class AttribraDlg(gui.settingsDialogs.SettingsPanel): @@ -416,7 +415,6 @@ def onSave(self): repr_ = re.sub('\-+','-', repr_) config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ instanceGP.reloadBrailleTables() - super(BrailleTablesDlg, self).onOk(evt) if restartRequired: res = gui.messageBox( _("NVDA must be restarted for some new options to take effect. Do you want restart now?"), From e0f868e0522df55a45f7d9ac964fc2cb1bb2d970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 16:23:44 +0100 Subject: [PATCH 32/87] Removed more Python2 code --- addon/globalPlugins/brailleExtender/patchs.py | 76 ++++--------------- 1 file changed, 16 insertions(+), 60 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 68def11a..2e5af3b5 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -46,7 +46,6 @@ import louisHelper instanceGP = None -if not isPy3: chr = chrPy2 HUCDotPattern = "12345678-78-12345678" undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) @@ -129,53 +128,14 @@ def update(self): """ mode = louis.dotsIO if config.conf["braille"]["expandAtCursor"] and self.cursorPos is not None: mode |= louis.compbrlAtCursor - if isPy3: - self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( - getCurrentBrailleTables(), - self.rawText, - typeform=self.rawTextTypeforms, - mode=mode, - cursorPos=self.cursorPos - ) - else: - text = unicode(self.rawText).replace('\0', '') - self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, brailleCursorPos = louis.translate(getCurrentBrailleTables(), - text, - # liblouis mutates typeform if it is a list. - typeform=tuple( - self.rawTextTypeforms) if isinstance( - self.rawTextTypeforms, - list) else self.rawTextTypeforms, - mode=mode, - cursorPos=self.cursorPos or 0 - ) + self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( + getCurrentBrailleTables(), + self.rawText, + typeform=self.rawTextTypeforms, + mode=mode, + cursorPos=self.cursorPos + ) if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6, configBE.CHOICE_hex, configBE.CHOICE_dec, configBE.CHOICE_oct, configBE.CHOICE_bin]: undefinedCharProcess(self) - if not isPy3: - # liblouis gives us back a character string of cells, so convert it to a list of ints. - # For some reason, the highest bit is set, so only grab the lower 8 - # bits. - self.brailleCells = [ord(cell) & 255 for cell in self.brailleCells] - # #2466: HACK: liblouis incorrectly truncates trailing spaces from its output in some cases. - # Detect this and add the spaces to the end of the output. - if self.rawText and self.rawText[-1] == " ": - # rawToBraillePos isn't truncated, even though brailleCells is. - # Use this to figure out how long brailleCells should be and thus - # how many spaces to add. - correctCellsLen = self.rawToBraillePos[-1] + 1 - currentCellsLen = len(self.brailleCells) - if correctCellsLen > currentCellsLen: - self.brailleCells.extend( - (0,) * (correctCellsLen - currentCellsLen)) - if self.cursorPos is not None: - # HACK: The cursorPos returned by liblouis is notoriously buggy (#2947 among other issues). - # rawToBraillePos is usually accurate. - try: - brailleCursorPos = self.rawToBraillePos[self.cursorPos] - except IndexError: - pass - else: - brailleCursorPos = None - self.brailleCursorPos = brailleCursorPos if self.selectionStart is not None and self.selectionEnd is not None: try: # Mark the selection. @@ -184,8 +144,7 @@ def update(self): self.brailleSelectionEnd = len(self.brailleCells) else: self.brailleSelectionEnd = self.rawToBraillePos[self.selectionEnd] - fn = range if isPy3 else xrange - for pos in fn(self.brailleSelectionStart, self.brailleSelectionEnd): + for pos in range(self.brailleSelectionStart, self.brailleSelectionEnd): self.brailleCells[pos] |= SELECTION_SHAPE() except IndexError: pass else: @@ -201,8 +160,7 @@ def setUndefinedChar(t=None): if v == "questionMark": s = '?' else: s = config.conf["brailleExtender"]["undefinedCharRepr"] v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) - if isPy3: louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) - else: louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v)) + louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) def getDescChar(c, lang="Windows", start='', end=''): @@ -234,7 +192,6 @@ def getNotationOrd(s, notation=None): return s def undefinedCharProcess(self): - if not isPy3: return unicodeBrailleRepr = ''.join([chr(10240 + cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr)] if not allBraillePos: return @@ -427,14 +384,13 @@ def sendChars(self, chars): input.ii.ki.dwFlags = winUser.KEYEVENTF_UNICODE|direction inputs.append(input) winUser.SendInput(inputs) - if isPy3: - focusObj = api.getFocusObject() - if keyboardHandler.shouldUseToUnicodeEx(focusObj): - # #10569: When we use ToUnicodeEx to detect typed characters, - # emulated keypresses aren't detected. - # Send TypedCharacter events manually. - for ch in chars: - focusObj.event_typedCharacter(ch=ch) + focusObj = api.getFocusObject() + if keyboardHandler.shouldUseToUnicodeEx(focusObj): + # #10569: When we use ToUnicodeEx to detect typed characters, + # emulated keypresses aren't detected. + # Send TypedCharacter events manually. + for ch in chars: + focusObj.event_typedCharacter(ch=ch) #: brailleInput.BrailleInputHandler.emulateKey() def emulateKey(self, key, withModifiers=True): From 1bb40087ad971e0ccec278236bb3a73599f057d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 20:04:26 +0100 Subject: [PATCH 33/87] Added 3rd method --- addon/globalPlugins/brailleExtender/patchs.py | 27 ++++++++++++++++--- .../globalPlugins/brailleExtender/settings.py | 1 - 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index a92f87c2..db36ec2c 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -364,22 +364,41 @@ def processOneHandMode(self, dots): newDots = ''.join(sorted(set(newDots))) if not newDots: newDots = "0" dots = ord(descriptionToUnicodeBraille(newDots))-0x2800 - #elif method == configBE.CHOICE_oneHandMethodDots: pass + elif method == configBE.CHOICE_oneHandMethodDots: + endChar = dots == 0 + translatedBufferBrailleDots = "0" + if self.bufferBraille: + translatedBufferBraille = chr(self.bufferBraille[-1] | 0x2800) + translatedBufferBrailleDots = unicodeBrailleToDescription(translatedBufferBraille) + translatedDots = chr(dots | 0x2800) + translatedDotsBrailleDots = unicodeBrailleToDescription(translatedDots) + for dot in translatedDotsBrailleDots: + if dot not in translatedBufferBrailleDots: translatedBufferBrailleDots += dot + else: translatedBufferBrailleDots = translatedBufferBrailleDots.replace(dot, '') + if not translatedBufferBrailleDots: translatedBufferBrailleDots = "0" + newDots = ''.join(sorted(set(translatedBufferBrailleDots))) + log.info("===> " + newDots) + dots = ord(descriptionToUnicodeBraille(newDots))-0x2800 else: speech.speakMessage(_("Unsupported input method")) self.flushBuffer() return False, False if endChar: if not self.bufferBraille: self.bufferBraille.insert(pos, 0) - self.bufferBraille[-1] |= dots - self.untranslatedCursorPos += 1 + if method == configBE.CHOICE_oneHandMethodDots: + self.bufferBraille[-1] = dots + else: self.bufferBraille[-1] |= dots if not endWord: endWord = self.bufferBraille[-1] == 0 + if method == configBE.CHOICE_oneHandMethodDots: + self.bufferBraille.append(0) + self.untranslatedCursorPos += 1 if addSpace: self.bufferBraille.append(0) self.untranslatedCursorPos += 1 else: continue_ = False - self.bufferBraille.insert(pos, dots) + if self.bufferBraille and method == configBE.CHOICE_oneHandMethodDots: self.bufferBraille[-1] = dots + else: self.bufferBraille.insert(pos, dots) self._reportUntranslated(pos) return continue_, endWord diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index b1756ada..3b2fe8d1 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -150,7 +150,6 @@ def onSave(self): config.conf["brailleExtender"]["beepsModifiers"] = self.beepsModifiers.IsChecked() config.conf["brailleExtender"]["oneHandMode"] = self.oneHandMode.IsChecked() config.conf["brailleExtender"]["oneHandMethod"] = list(configBE.CHOICE_oneHandMethods.keys())[self.oneHandMethod.GetSelection()] - super(GeneralDlg, self).onOk(evt) class AttribraDlg(gui.settingsDialogs.SettingsPanel): From 1305dac796b82a23774b245618776866dbb496ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 8 Feb 2020 20:11:24 +0100 Subject: [PATCH 34/87] Fix merge --- addon/globalPlugins/brailleExtender/patchs.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 5ca49bf2..e86dc39d 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -504,31 +504,31 @@ def processOneHandMode(self, dots): translatedBufferBrailleDots = 0 if self.bufferBraille: translatedBufferBraille = chr(self.bufferBraille[-1] | 0x2800) - translatedBufferBrailleDots = unicodeBrailleToDescription(translatedBufferBraille) + translatedBufferBrailleDots = huc.unicodeBrailleToDescription(translatedBufferBraille) translatedDots = chr(dots | 0x2800) - translatedDotsBrailleDots = unicodeBrailleToDescription(translatedDots) + translatedDotsBrailleDots = huc.unicodeBrailleToDescription(translatedDots) newDots = "" for dot in translatedDotsBrailleDots: dot = int(dot) if dots >= 0 and dot < 9: newDots += equiv[dot] newDots = ''.join(sorted(set(newDots))) if not newDots: newDots = "0" - dots = ord(descriptionToUnicodeBraille(newDots))-0x2800 + dots = ord(huc.cellDescriptionsToUnicodeBraille(newDots))-0x2800 elif method == configBE.CHOICE_oneHandMethodDots: endChar = dots == 0 translatedBufferBrailleDots = "0" if self.bufferBraille: translatedBufferBraille = chr(self.bufferBraille[-1] | 0x2800) - translatedBufferBrailleDots = unicodeBrailleToDescription(translatedBufferBraille) + translatedBufferBrailleDots = huc.unicodeBrailleToDescription(translatedBufferBraille) translatedDots = chr(dots | 0x2800) - translatedDotsBrailleDots = unicodeBrailleToDescription(translatedDots) + translatedDotsBrailleDots = huc.unicodeBrailleToDescription(translatedDots) for dot in translatedDotsBrailleDots: if dot not in translatedBufferBrailleDots: translatedBufferBrailleDots += dot else: translatedBufferBrailleDots = translatedBufferBrailleDots.replace(dot, '') if not translatedBufferBrailleDots: translatedBufferBrailleDots = "0" newDots = ''.join(sorted(set(translatedBufferBrailleDots))) log.info("===> " + newDots) - dots = ord(descriptionToUnicodeBraille(newDots))-0x2800 + dots = ord(huc.cellDescriptionsToUnicodeBraille(newDots))-0x2800 else: speech.speakMessage(_("Unsupported input method")) self.flushBuffer() From cd9a6562190903137e46b066ddf9b8be37d82f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 15 Feb 2020 14:55:25 +0100 Subject: [PATCH 35/87] Apply patches before loading dictionaries --- addon/globalPlugins/brailleExtender/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index a38696ce..2bca6e8b 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -46,13 +46,13 @@ import ui import versionInfo import virtualBuffers +from . import patchs from . import configBE config.conf.spec["brailleExtender"] = configBE.getConfspec() from . import utils from .updateCheck import * from . import dictionaries from . import huc -from . import patchs from .common import * instanceGP = None From 3feb2299e4c48cd8a3499a44a9d00fff06b0c14d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 25 Feb 2020 15:11:40 +0100 Subject: [PATCH 36/87] Dictionaries/checktable: fix an issue with non ASCII characters in file path. Thanks to Corentin --- addon/globalPlugins/brailleExtender/__init__.py | 2 +- addon/globalPlugins/brailleExtender/dictionaries.py | 12 +++++++----- addon/globalPlugins/brailleExtender/patchs.py | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 2bca6e8b..a38696ce 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -46,13 +46,13 @@ import ui import versionInfo import virtualBuffers -from . import patchs from . import configBE config.conf.spec["brailleExtender"] = configBE.getConfspec() from . import utils from .updateCheck import * from . import dictionaries from . import huc +from . import patchs from .common import * instanceGP = None diff --git a/addon/globalPlugins/brailleExtender/dictionaries.py b/addon/globalPlugins/brailleExtender/dictionaries.py index 6e89d683..ba1edd00 100644 --- a/addon/globalPlugins/brailleExtender/dictionaries.py +++ b/addon/globalPlugins/brailleExtender/dictionaries.py @@ -19,6 +19,7 @@ from . import configBE from .common import * from . import huc +from logHandler import log BrailleDictEntry = namedtuple("BrailleDictEntry", ("opcode", "textPattern", "braillePattern", "direction", "comment")) OPCODE_SIGN = "sign" @@ -49,11 +50,12 @@ def checkTable(path): global invalidDictTables - try: - louis.checkTable([path]) - return True - except RuntimeError: invalidDictTables.add(path) - return False + tablesString = b",".join([x.encode("mbcs") if isinstance(x, str) else bytes(x) for x in [path]]) + if not louis.liblouis.lou_checkTable(tablesString): + log.error("Can't compile: tables %s" % path) + invalidDictTables.add(path) + return False + return True def getValidPathsDict(): types = ["tmp", "table", "default"] diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index d51dba80..7ef5f3be 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -629,7 +629,7 @@ def _translate(self, endWord): #: louis._createTablesString() def _createTablesString(tablesList): """Creates a tables string for liblouis calls""" - return b",".join([x.encode(sys.getfilesystemencoding()) if isinstance(x, str) else bytes(x) for x in tablesList]) + return b",".join([x.encode("mbcs") if isinstance(x, str) else bytes(x) for x in tablesList]) # applying patches braille.Region.update = update From ac9cb250760b12333e7686a5988af0f00bbb0e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 18 Mar 2020 18:05:20 +0100 Subject: [PATCH 37/87] Update documentation --- .../globalPlugins/brailleExtender/addonDoc.py | 416 +++++++++++++----- .../globalPlugins/brailleExtender/configBE.py | 17 +- .../globalPlugins/brailleExtender/settings.py | 17 +- addon/globalPlugins/brailleExtender/utils.py | 21 +- 4 files changed, 338 insertions(+), 133 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 1a82d64a..5b233862 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import re import addonHandler + addonHandler.initTranslation() import braille from . import configBE @@ -13,56 +14,201 @@ import cursorManager import globalCommands import ui +import random from . import utils from .common import * -class AddonDoc: +def escape(text): + chars = {"&": "&", '"': """, "'": "'", "<": "<", ">": ">"} + return "".join(chars.get(c, c) for c in text) + + +def initializeRandomChar(): + global chosenChar + chosenChar = random.choice("#$£€=+()*,;:.?!/\"&") +URLHUC = "https://danielmayr.at/huc/en.html" +chosenChar = None + +def getFeaturesDoc(): + undefinedCharsSamples = [ + [_("Character"), _("HUC8"), _("Hexadecimal"), _("Decimal"), _("Octal"), _("Binary")], + ['👍', "⣭⢤⡙", "⠭1f44d or ⠓1f44d", "⠙128077", "⠕372115", "⠃11111010001001101"], + ['😀', "⣭⡤⣺", "⠭1f600 or ⠓1f600", "⠙128512", "⠕373000", "⠃11111011000000000"], + ['🍑', "⣭⠤⠕", "⠭1f351 or ⠓1f351", "⠙127825", "⠕371521", "⠃11111001101010001"], + ['🌊', "⣭⠤⠺", "⠭1f30a or ⠓1f30a", "⠙127754", "⠕371412", "⠃11111001100001010"] + ] + for i in range(1, len(undefinedCharsSamples)): + ch = undefinedCharsSamples[i][0][0] + undefinedCharsSamples[i][0] = "%s (%s)" % (ch, utils.getSpeechSymbols(ch)) + + features = { + _("Representation of undefined characters"): [ + "

", + _("The extension allows you to customize how an undefined character should be represented within a braille table. To do so, go to the braille table settings. You can choose between the following representations:"), + "

    ", + ''.join([f"
  • {choice}
  • " for choice in configBE.CHOICES_undefinedCharRepr]), + "

", + _("You can also combine this option with the “describe the character if possible” setting."), + "

", + _("Notes:"), + "

    ", + "
  • " + _("To distinguish the undefined set of characters while maximizing space, the best combination is the usage of the HUC8 representation without checking the “describe character if possible” option.") + "
  • ", + "
  • " + _("To learn more about the HUC representation, see {url}").format(url=f"
    {URLHUC}") + "
  • ", + "
  • " + _("Keep in mind that definitions in tables and those in your table dictionaries take precedence over character descriptions, which also take precedence over the chosen representation for undefined characters.") + "
  • ", + "
" + ], + _("Getting Current Character Info"): [ + "

", + _("This feature allows you to obtain various information regarding the character under the cursor using the current input braille table, such as:"), + "
", + _("the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary values; A description of the character if possible; - The Unicode Braille representation and the Braille dot pattern."), + "

", + _("Pressing the defined gesture associated to this function once shows you the information in a flash message and a double-press displays the same information in a virtual NVDA buffer."), + "
", + _("On supported displays the defined gesture is ⡉+space. No system gestures are defined by default."), + "

", + _(f"For example, for the '{chosenChar}' character, we will get the following information:"), + "

" + utils.currentCharDesc(chosenChar, 0) + "

", + ], + _("Advanced Braille Input"): [ + "

", + _("This feature allows you to enter any character from its HUC8 representation or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to develop abbreviations. To use this function, enter the advanced input mode and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊+space (on supported displays). Press the same gesture to exit this mode. Alternatively, an option allows you to automatically exit this mode after entering a single pattern. "), + "

", + "If you want to enter a character from its HUC8 representation, simply enter the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the interpretation will be performed each time 3 dot combinations are entered. If you wish to enter a character from its hexadecimal, decimal, octal or binary value, do the following:", + "

    ", + "First specify the basis as follows:
      ", + f"
    • ⠭ or ⠓{punctuationSeparator}:" + _("for a hexadecimal value") + "
    • ", + f"⠙{punctuationSeparator}: " + _("for a decimal value") + "", + f"⠕{punctuationSeparator}: " + _("for an octal value") + "", + f"⠃{punctuationSeparator}: " + ("for a binary value") + "", + "
    ", + "
  1. " + _("Enter the value of the character according to the previously selected basis.") + "
  2. ", + "
  3. " + _("Press Space to validate.") + "
  4. ", + "
", + "

", + _("For abbreviations, you must first add them in the dialog box - Advanced mode dictionaries -. Then, you just have to enter your abbreviation and press space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —."), + "

", + _("Here are some examples of sequences to be entered for given characters:"), + "

", + ''.join(["%s" % (''.join(["<{0}>{1}".format("th" if i == 0 else "td", e) for e in l])) for i, l in enumerate(undefinedCharsSamples)]), + "

", + _("Note: the HUC6 input is currently not supported."), + "

", + ], + _("One-hand mode"): [ + "

", + _("This feature allows you to compose a cell in several steps. This can be activated in the general settings of the extension's preferences or on the fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). Three input methods are available."), + "

" + _("Method #1: fill a cell in 2 stages on both sides") + "

", + "

", + _("With this method, type the left side dots, then the right side dots. If one side is empty, type the dots correspondig to the opposite side twice, or type the dots corresponding to the non-empty side in 2 steps."), + "
", _("For example:"), + "

    ", + "
  • " + _("For ⠛: press Dots 1-2 then dots 4-5.") + "
  • ", + "
  • " + _("For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2.") + "
  • ", + "
  • " + _("For ⠘: press 4-5 then 4-5, or dot 4 then dot 5.") + "
  • ", + "
", + "

" + _("Method #2: fill a cell in two stages on one side (Space = empty side)") + "

", + "

", + _("Using this method, you can compose a cell with one hand, regardless of which side of the Braille keyboard you choose. The first step allows you to enter dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. An empty cell will be obtained by pressing the space key twice."), + "
" + _("For example:"), + "

    ", + "
  • " + _("For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5.") + "
  • ", +"
  • " + _("For ⠃: press dots 1-2 then space, or 4-5 then space.") + "
  • ", +"
  • " + _("For ⠘: press space then 1-2, or space then dots 4-5.") + "
  • ", + "
", + "

" + _("Method #3: fill a cell dots by dots (each dot is a toggle, press Space to validate the character)") + "

", + "

", + "In this mode, each dot is a toggle. You must press the space key as soon as the cell you have entered is the desired one to input the character. Thus, the more dots are contained in the cell, the more ways you have to enter the character.", + "
" + "For example, for ⠛, you can compose the cell in the following ways:", + "

    ", + "
  • " + _("Dots 1-2, then dots 4-5, then space.") + "
  • ", + "
  • " + _("Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space.") + "
  • ", + "
  • " + _("Dot 1, then dots 2-4-5, then space.") + "
  • ", + "
  • " + _("Dots 1-2-4, then dot 5, then space.") + "
  • ", + "
  • " + _("Dot 2, then dot 1, then dot 5, then dot 4, and then space.") + "
  • ", + "
  • " + _("Etcc.") + "
  • ", + "
" + ] + } + out = "" + for title, desc in features.items(): + out += f"

{title}

{''.join(desc)}" + return out + +class AddonDoc: instanceGP = None def __init__(self, instanceGP): - if not instanceGP: return + initializeRandomChar() + if not instanceGP: + return self.instanceGP = instanceGP gestures = instanceGP.getGestures() - doc = """ -

{NAME}{DISPLAY}{PROFILE}

-

Version {VERSION}
-

{DESC}

- """.format( - NAME=addonName, - DISPLAY=punctuationSeparator + ': ' + _('%s braille display') % configBE.curBD.capitalize() if configBE.gesturesFileExists else '', - PROFILE = ", "+_("profile loaded: %s") % "default", - VERSION=addonVersion, - DESC=self.getDescFormated(addonDesc) - ) + manifestDescription = self.getDescFormated(addonDesc) + doc = f"

{addonSummary} {addonVersion} — " + _("Documentation") + "

" + doc += f"

{manifestDescription}

" + doc += "

Let's explore some features

" + doc += getFeaturesDoc() + doc += "

Profile gestures

" if configBE.gesturesFileExists: + brailleDisplayDriverName = configBE.curBD.capitalize() + profileName = "default" + doc += ''.join([ + "

", + _("Driver loaded") + f"{punctuationSeparator}: {brailleDisplayDriverName}" + "
", + _("Profile") + f"{punctuationSeparator}: {profileName}", + "

" + ]) mKB = OrderedDict() mNV = OrderedDict() mW = OrderedDict() - for g in configBE.iniGestures['globalCommands.GlobalCommands'].keys( - ): - if 'kb:' in g: - if '+' in g: - mW[g] = configBE.iniGestures['globalCommands.GlobalCommands'][g] + for g in configBE.iniGestures["globalCommands.GlobalCommands"].keys(): + if "kb:" in g: + if "+" in g: + mW[g] = configBE.iniGestures["globalCommands.GlobalCommands"][g] else: - mKB[g] = configBE.iniGestures['globalCommands.GlobalCommands'][g] + mKB[g] = configBE.iniGestures["globalCommands.GlobalCommands"][g] else: - mNV[g] = configBE.iniGestures['globalCommands.GlobalCommands'][g] - doc += ("

" + _("Simple keys") + " (%d)

") % len(mKB) + mNV[g] = configBE.iniGestures["globalCommands.GlobalCommands"][g] + doc += ("

" + _("Simple keys") + " (%d)

") % len(mKB) doc += self.translateLst(mKB) - doc += ("

" + _("Usual shortcuts") + " (%d)

") % len(mW) + doc += ("

" + _("Usual shortcuts") + " (%d)

") % len(mW) doc += self.translateLst(mW) - doc += ("

" + _("Standard NVDA commands") + " (%d)

") % len(mNV) + doc += ("

" + _("Standard NVDA commands") + " (%d)

") % len(mNV) doc += self.translateLst(mNV) - doc += "

{0} ({1})

".format(_("Modifier keys"), len(configBE.iniProfile["modifierKeys"])) + doc += "

{0} ({1})

".format( + _("Modifier keys"), len(configBE.iniProfile["modifierKeys"]) + ) doc += self.translateLst(configBE.iniProfile["modifierKeys"]) - doc += "

" + _("Quick navigation keys") + "

" - doc += self.translateLst(configBE.iniGestures['cursorManager.CursorManager']) - doc += "

" + _("Rotor feature") + "

" - doc += self.translateLst({k: configBE.iniProfile["miscs"][k] for k in configBE.iniProfile["miscs"] if "rotor" in k.lower()}) + self.translateLst(configBE.iniProfile["rotor"]) - doc += ("

" + _("Gadget commands") + " (%d)

") % (len(configBE.iniProfile["miscs"]) - 2) - doc += self.translateLst(OrderedDict([(k, configBE.iniProfile["miscs"][k]) for k in configBE.iniProfile["miscs"] if k not in ['nextRotor', 'priorRotor']])) - doc += "

{0} ({1})

".format(_("Shortcuts defined outside add-on"), len(braille.handler.display.gestureMap._map)) + doc += "

" + _("Quick navigation keys") + "

" + doc += self.translateLst( + configBE.iniGestures["cursorManager.CursorManager"] + ) + doc += "

" + _("Rotor feature") + "

" + doc += self.translateLst( + { + k: configBE.iniProfile["miscs"][k] + for k in configBE.iniProfile["miscs"] + if "rotor" in k.lower() + } + ) + self.translateLst(configBE.iniProfile["rotor"]) + doc += ("

" + _("Gadget commands") + " (%d)

") % ( + len(configBE.iniProfile["miscs"]) - 2 + ) + doc += self.translateLst( + OrderedDict( + [ + (k, configBE.iniProfile["miscs"][k]) + for k in configBE.iniProfile["miscs"] + if k not in ["nextRotor", "priorRotor"] + ] + ) + ) + doc += "

{0} ({1})

".format( + _("Shortcuts defined outside add-on"), + len(braille.handler.display.gestureMap._map), + ) doc += "
    " for g in braille.handler.display.gestureMap._map: doc += ("
  • {0}{1}: {2}{3};
  • ").format( @@ -70,143 +216,197 @@ def __init__(self, instanceGP): punctuationSeparator, utils.uncapitalize( re.sub( - '^([A-Z])', + "^([A-Z])", lambda m: m.group(1).lower(), self.getDocScript( - braille.handler.display.gestureMap._map[g]))), - punctuationSeparator) - doc = re.sub(r'[  ]?;()$', r'.\1', doc) + braille.handler.display.gestureMap._map[g] + ), + ) + ), + punctuationSeparator, + ) + doc = re.sub(r"[  ]?;()$", r".\1", doc) doc += "
" # list keyboard layouts - if not instanceGP.noKeyboarLayout() and 'keyboardLayouts' in configBE.iniProfile: + if ( + not instanceGP.noKeyboarLayout() + and "keyboardLayouts" in configBE.iniProfile + ): lb = instanceGP.getKeyboardLayouts() - doc += '

{}

'.format( - _('Keyboard configurations provided')) - doc += '

{}{}:

    '.format( - _('Keyboard configurations are'), punctuationSeparator) - for l in lb: - doc += '
  1. {}.
  2. '.format(l) - doc += '
' + doc += "

{}

".format(_("Keyboard configurations provided")) + doc += ( + "

" + + _("Keyboard configurations are") + + punctuationSeparator + + "

    " + ) + doc += "".join(f"
  1. {l}.
  2. " for l in lb) + doc += "
" else: doc += ( - "

" + _("Warning:") + "

" + - _("BrailleExtender has no gesture map yet for your braille display.") + "
" + - _("However, you can still assign your own gestures in the \"Input Gestures\" dialog (under Preferences menu).") + "

" + "

" + + _("Warning:") + + "

" + + _("BrailleExtender has no gesture map yet for your braille display.") + + "
" + + _( + 'However, you can still assign your own gestures in the "Input Gestures" dialog (under Preferences menu).' + ) + + "

" ) - doc += ("

" + _("Add-on gestures on the system keyboard") + - " (%s)

") % (len(gestures) - 4) + doc += ("

" + _("Add-on gestures on the system keyboard") + " (%s)

") % ( + len(gestures) - 4 + ) doc += "
    " - for g in [k for k in gestures if k.lower().startswith('kb:')]: + for g in [k for k in gestures if k.lower().startswith("kb:")]: if g.lower() not in [ "kb:volumeup", "kb:volumedown", - "kb:volumemute"] and gestures[g] not in ["logFieldsAtCursor"]: + "kb:volumemute", + ] and gestures[g] not in ["logFieldsAtCursor"]: doc += ("
  • {0}{1}: {2}{3};
  • ").format( utils.getKeysTranslation(g), punctuationSeparator, re.sub( "^([A-Z])", lambda m: m.group(1).lower(), - self.getDocScript(gestures[g]) + self.getDocScript(gestures[g]), ), - punctuationSeparator + punctuationSeparator, ) - doc = re.sub(r'[  ]?;()$', r'.\1', doc) + doc = re.sub(r"[  ]?;()$", r".\1", doc) doc += "
" translators = { _("Arabic"): "Ikrami Ahmad", _("Croatian"): "Zvonimir Stanečić ", - _("German"): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", - _("Hebrew"): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", + _( + "French" + ): "Sof , André-Abush Clause ", + _( + "German" + ): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", + _( + "Hebrew" + ): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", _("Persian"): "Mohammadreza Rashad ", _("Polish"): "Zvonimir Stanečić, Dorota Krać", _("Russian"): "Zvonimir Stanečić, Pavel Kaplan ", } - doc += "

" + _("Copyrights and acknowledgements") + "

" + (''.join([ - "

", - "Copyright (C) 2016-2020 André-Abush Clause ", _("and other contributors"), - ":
", - "

%s\n%s
" % (addonURL, addonGitHubURL), - "

", - "

" + _("Translators") + "

    " - ])) + doc += ( + "

    " + _("Copyrights and acknowledgements") + "

    " + + ( + "".join( + [ + "

    ", + "Copyright (C) 2016-2020 André-Abush Clause ", + _("and other contributors"), + ":
    ", + "

    %s\n%s
    " % (addonURL, addonGitHubURL), + "

    ", + "

    " + _("Translators") + "

      ", + ] + ) + ) + ) for language, authors in translators.items(): - doc += f"
    • {language}{punctuationSeparator}: {authors}
    • " - doc += ''.join([ - "
    ", - "

    " + _("Code contributions and other")+"

    " + _("Additional third party copyrighted code is included:") + "

    ", - """", - "

    " + _("Thanks also to") + punctuationSeparator +": ", - "Daniel Cotto, Corentin, Louis.

    ", - "

    " + _("And thank you very much for all your feedback and comments.") + " ☺

    " - ]) - ui.browseableMessage(doc, _("%s\'s documentation") % addonName, True) + doc += f"
  • {language}{punctuationSeparator}: {escape(authors)}
  • " + doc += "".join( + [ + "
", + "

" + _("Code contributions and other") + "

", + "

" + + _("Additional third party copyrighted code is included:") + + "

", + "
    ", + f"
  • Attribra{punctuationSeparator}: Copyright (C) 2017 Alberto Zanella <lapostadialberto@gmail.com> → https://github.com/albzan/attribra/
  • ", + "
", + "

" + + _("Thanks also to") + + f"{punctuationSeparator}: Daniel Cotto, Corentin, Louis.
", + _("And thank you very much for all your feedback and comments.") + + " ☺

", + ] + ) + ui.browseableMessage(doc, _("%s's documentation") % addonName, True) @staticmethod def getDescFormated(txt): - txt = re.sub(r'\n\* ([^\n]+)(\n|$)', r'\n
  • \1
  • \2', txt) - txt = re.sub(r'\n\* ([^\n]+)(\n|$)', r'\n
  • \1
  • \2', txt) - txt = re.sub(r'([^>])\n
  • ', r'\1\n
    • ', txt) - txt = re.sub(r'
    • \n([^<]|$)', r'
    \n\1', txt) - txt = re.sub(r'
  • $', r'', txt) + txt = re.sub(r"\n\* ([^\n]+)(\n|$)", r"\n
  • \1
  • \2", txt) + txt = re.sub(r"\n\* ([^\n]+)(\n|$)", r"\n
  • \1
  • \2", txt) + txt = re.sub(r"([^>])\n
  • ", r"\1\n
    • ", txt) + txt = re.sub(r"
    • \n([^<]|$)", r"
    \n\1", txt) + txt = re.sub(r"
  • $", r"", txt) return txt def getDocScript(self, n): - if n == "defaultQuickLaunches": n = "quickLaunch" + if n == "defaultQuickLaunches": + n = "quickLaunch" doc = None if isinstance(n, list): n = str(n[-1][-1]) - if n.startswith('kb:'): return _("Emulates pressing %s on the system keyboard") % utils.getKeysTranslation(n) + if n.startswith("kb:"): + return _( + "Emulates pressing %s on the system keyboard" + ) % utils.getKeysTranslation(n) places = [globalCommands.commands, self.instanceGP, cursorManager.CursorManager] for place in places: - func = getattr(place, ('script_%s' % n), None) + func = getattr(place, ("script_%s" % n), None) if func: doc = func.__doc__ break - return doc if doc is not None else _("description currently unavailable for this shortcut") - + return ( + doc + if doc is not None + else _("description currently unavailable for this shortcut") + ) def translateLst(self, lst): - doc = '
      ' + doc = "
        " for g in lst: - if 'kb:' in g and 'capsLock' not in g and 'insert' not in g: + if "kb:" in g and "capsLock" not in g and "insert" not in g: if isinstance(lst[g], list): - doc += '
      • {0}{2}: {1}{2};
      • '.format( + doc += "
      • {0}{2}: {1}{2};
      • ".format( utils.getKeysTranslation(g), utils.beautifulSht(lst[g]), - punctuationSeparator) + punctuationSeparator, + ) else: - doc += '
      • {0}{2}: {1}{2};
      • '.format( + doc += "
      • {0}{2}: {1}{2};
      • ".format( utils.getKeysTranslation(g), utils.beautifulSht(lst[g]), - punctuationSeparator) - elif 'kb:' in g: - gt = _('caps lock') if 'capsLock' in g else g - doc += '
      • {0}{2}: {1}{2};
      • '.format( - gt.replace( - 'kb:', ''), utils.beautifulSht(lst[g]), punctuationSeparator) + punctuationSeparator, + ) + elif "kb:" in g: + gt = _("caps lock") if "capsLock" in g else g + doc += "
      • {0}{2}: {1}{2};
      • ".format( + gt.replace("kb:", ""), + utils.beautifulSht(lst[g]), + punctuationSeparator, + ) else: if isinstance(lst[g], list): - doc += '
      • {0}{1}: {2}{3};
      • '.format(utils.beautifulSht(lst[g]), + doc += "
      • {0}{1}: {2}{3};
      • ".format( + utils.beautifulSht(lst[g]), punctuationSeparator, re.sub( - '^([A-Z])', + "^([A-Z])", lambda m: m.group(1).lower(), - utils.uncapitalize( - self.getDocScript(g))), - punctuationSeparator) + utils.uncapitalize(self.getDocScript(g)), + ), + punctuationSeparator, + ) else: - doc += '
      • {0}{1}: {2}{3};
      • '.format( - utils.beautifulSht( - lst[g]), punctuationSeparator, + doc += "
      • {0}{1}: {2}{3};
      • ".format( + utils.beautifulSht(lst[g]), + punctuationSeparator, re.sub( - '^([A-Z])', + "^([A-Z])", lambda m: m.group(1).lower(), - utils.uncapitalize( - self.getDocScript(g))), - punctuationSeparator) - doc = re.sub(r'[  ]?;()$', r'.\1', doc) + utils.uncapitalize(self.getDocScript(g)), + ), + punctuationSeparator, + ) + doc = re.sub(r"[  ]?;()$", r".\1", doc) doc += "
      " return doc diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 5fb70f99..da102f27 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -51,7 +51,22 @@ CHOICE_dec = 11 CHOICE_oct = 12 CHOICE_bin = 13 - +CHOICES_undefinedCharRepr = [ + _("Use braille table behavior"), + _("Dots 1-8 (⣿)"), + _("Dots 1-6 (⠿)"), + _("Empty cell (⠀)"), + _("Other dot pattern (e.g.: 6-123456)"), + _("Question mark (depending output table)"), + _("Other sign/pattern (e.g.: \, ??)"), + _("Hexadecimal, Liblouis style"), + _("Hexadecimal, HUC8"), + _("Hexadecimal, HUC6"), + _("Hexadecimal"), + _("Decimal"), + _("Octal"), + _("Binary") +] outputMessage = dict([ (CHOICE_none, _("none")), (CHOICE_braille, _("braille only")), diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 53764010..f0b20657 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -364,22 +364,7 @@ def makeSettings(self, settingsSizer): self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) # Translators: label of a dialog. label = _("Representation of &undefined characters") - choices = [ - _("Use braille table behavior"), - _("Dots 1-8 (⣿)"), - _("Dots 1-6 (⠿)"), - _("Empty cell (⠀)"), - _("Other dot pattern (e.g.: 6-123456)"), - _("Question mark (depending output table)"), - _("Other sign/pattern (e.g.: \, ??)"), - _("Hexadecimal, Liblouis style"), - _("Hexadecimal, HUC8"), - _("Hexadecimal, HUC6"), - _("Hexadecimal"), - _("Decimal"), - _("Octal"), - _("Binary") - ] + choices = configBE.CHOICES_undefinedCharRepr self.undefinedCharReprList = sHelper.addLabeledControl(label, wx.Choice, choices=choices) self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprMethod"]) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 8ddaf028..eda2081a 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -194,19 +194,24 @@ def reload_brailledisplay(bd_name): ui.message(_("Reload failed")) return False -def currentCharDesc(): - ch = getCurrentChar() - if not ch: return ui.message(_("Not a character")) +def currentCharDesc(ch=None, display=True): + if not ch: + ch = getCurrentChar() + if not ch: return ui.message(_("Not a character")) c = ord(ch) if c: - try: descChar = unicodedata.name(ch) - except ValueError: descChar = _("unknown") + charDescCurLang = getSpeechSymbols(ch) + try: charDesc = unicodedata.name(ch) + except ValueError: charDesc = _("N/A") HUCrepr = " (%s, %s)" % (huc.translate(ch, False), huc.translate(ch, True)) - s = '%c%s: %s; %s; %s; %s; %s [%s]' % (ch, HUCrepr, hex(c), c, oct(c), bin(c), descChar, unicodedata.category(ch)) + brch = getTextInBraille(ch) + brchDesc = huc.unicodeBrailleToDescription(brch) + charCategory = unicodedata.category(ch) + s = f"{ch}{HUCrepr}: {hex(c)}, {c}, {oct(c)}, {bin(c)}, {charDescCurLang} / {charDesc} [{charCategory}]. {brch} {brchDesc}" + if not display: return s if scriptHandler.getLastScriptRepeatCount() == 0: ui.message(s) elif scriptHandler.getLastScriptRepeatCount() == 1: - brch = getTextInBraille(ch) - ui.browseableMessage("%s\n%s (%s)" % (s, brch, huc.unicodeBrailleToDescription(brch)), r'\x%d (%s) - Char info' % (c, ch)) + ui.browseableMessage(s, r'\x%d (%s) - Char info' % (c, ch)) else: ui.message(_("Not a character")) def getCurrentChar(): From fbb4b8de03eebb4750b875cb0762e8caaaa9f5e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 19 Mar 2020 07:56:59 +0100 Subject: [PATCH 38/87] Fixes #49 --- addon/globalPlugins/brailleExtender/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 8ddaf028..f07e192c 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -252,7 +252,6 @@ def getTextInBraille(t=None, table=None): if not t: t = getTextSelection() if not t.strip(): return '' if not table or table == "current": table = [os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"])] - else: table = [os.path.join(brailleTables.TABLES_DIR, table)] nt = [] res = '' t = t.split("\n") From 750a42fb0a3c004018383cd6b9693a26d464eae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 19 Mar 2020 10:30:02 +0100 Subject: [PATCH 39/87] Fixes --- .../globalPlugins/brailleExtender/addonDoc.py | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 5b233862..6a82d46e 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -77,12 +77,13 @@ def getFeaturesDoc(): "

      ", "If you want to enter a character from its HUC8 representation, simply enter the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the interpretation will be performed each time 3 dot combinations are entered. If you wish to enter a character from its hexadecimal, decimal, octal or binary value, do the following:", "

        ", - "First specify the basis as follows:
          ", - f"
        • ⠭ or ⠓{punctuationSeparator}:" + _("for a hexadecimal value") + "
        • ", - f"⠙{punctuationSeparator}: " + _("for a decimal value") + "", - f"⠕{punctuationSeparator}: " + _("for an octal value") + "", - f"⠃{punctuationSeparator}: " + ("for a binary value") + "", - "
        ", + "
      1. " + _("Specify the basis as follows") + f"{punctuationSeparator}:", + "
        • ", + _("⠭ or ⠓") + f"{punctuationSeparator}: " + _("for a hexadecimal value") + "
        • ", + f"
        • ⠙{punctuationSeparator}: " + _("for a decimal value") + "
        • ", + f"
        • ⠕{punctuationSeparator}: " + _("for an octal value") + "
        • ", + f"
        • ⠃{punctuationSeparator}: " + ("for a binary value") + "
        • ", + "
      2. ", "
      3. " + _("Enter the value of the character according to the previously selected basis.") + "
      4. ", "
      5. " + _("Press Space to validate.") + "
      6. ", "
      ", @@ -104,7 +105,7 @@ def getFeaturesDoc(): _("With this method, type the left side dots, then the right side dots. If one side is empty, type the dots correspondig to the opposite side twice, or type the dots corresponding to the non-empty side in 2 steps."), "
      ", _("For example:"), "

        ", - "
      • " + _("For ⠛: press Dots 1-2 then dots 4-5.") + "
      • ", + "
      • " + _("For ⠛: press dots 1-2 then dots 4-5.") + "
      • ", "
      • " + _("For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2.") + "
      • ", "
      • " + _("For ⠘: press 4-5 then 4-5, or dot 4 then dot 5.") + "
      • ", "
      ", @@ -127,7 +128,7 @@ def getFeaturesDoc(): "
    • " + _("Dot 1, then dots 2-4-5, then space.") + "
    • ", "
    • " + _("Dots 1-2-4, then dot 5, then space.") + "
    • ", "
    • " + _("Dot 2, then dot 1, then dot 5, then dot 4, and then space.") + "
    • ", - "
    • " + _("Etcc.") + "
    • ", + "
    • " + _("Etc.") + "
    • ", "
    " ] } @@ -280,15 +281,9 @@ def __init__(self, instanceGP): translators = { _("Arabic"): "Ikrami Ahmad", _("Croatian"): "Zvonimir Stanečić ", - _( - "French" - ): "Sof , André-Abush Clause ", - _( - "German" - ): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", - _( - "Hebrew" - ): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", + _("French"): "Sof , André-Abush Clause ", + _("German"): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", + _("Hebrew"): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", _("Persian"): "Mohammadreza Rashad ", _("Polish"): "Zvonimir Stanečić, Dorota Krać", _("Russian"): "Zvonimir Stanečić, Pavel Kaplan ", From 6568bb1a22c7dc755b48725f6ebe6ebf44e7d5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 20 Mar 2020 15:18:40 +0100 Subject: [PATCH 40/87] fixup: bug fix with undefined chars description --- addon/globalPlugins/brailleExtender/patchs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index bae08572..92e28109 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -208,7 +208,7 @@ def undefinedCharProcess(self): start=start, end=end, ), - table=config.conf["brailleExtender"]["undefinedCharBrailleTable"] + table=[config.conf["brailleExtender"]["undefinedCharBrailleTable"]] ) for braillePos in allBraillePos} elif config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 From 8b391204803693931ad5bd497c79d1a9cb8ee242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 21 Mar 2020 22:51:22 +0100 Subject: [PATCH 41/87] Fixes #51 --- addon/globalPlugins/brailleExtender/utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index f07e192c..19e88de1 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -248,10 +248,14 @@ def getKeysTranslation(n): return o return nk + n -def getTextInBraille(t=None, table=None): +def getTextInBraille(t=None, table=[]): + if not isinstance(table, list): raise TypeError("Wrong type for table parameter: %s" % repr(table)) if not t: t = getTextSelection() if not t.strip(): return '' - if not table or table == "current": table = [os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"])] + if not table or "current" in table: + currentTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) + if "current" in table: table[table.index("current")] = currentTable + else: table.append(currentTable) nt = [] res = '' t = t.split("\n") From 004f83c4b2ce38754506c87473e960f518c91b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 4 Apr 2020 13:28:09 +0200 Subject: [PATCH 42/87] Advanced input mode: possibility to quit the mode after typing one char --- addon/globalPlugins/brailleExtender/configBE.py | 1 + addon/globalPlugins/brailleExtender/patchs.py | 8 +++++--- addon/globalPlugins/brailleExtender/settings.py | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 02a681b1..4b6a7249 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -167,6 +167,7 @@ def getConfspec(): "undefinedCharEnd": "string(default=])", "undefinedCharLang": "string(default=Windows)", "undefinedCharBrailleTable": "string(default=current)", + "exitAdvancedInputModeAfterOneChar": "boolean(default=False)", "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 92e28109..035894d9 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -434,18 +434,18 @@ def input_(self, dots): pos = self.untranslatedStart + self.untranslatedCursorPos advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) if advancedInputStr: + res = '' if advancedInputStr[0] in "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭": equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} if advancedInputStr[-1] == '⠀': text = equiv[advancedInputStr[0]]+louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[1:-1])[0] try: - char = getCharFromValue(text) - sendChar(char) + res = getCharFromValue(text) + sendChar(res) except BaseException as err: speech.speakMessage(repr(err)) badInput(self) else: self._reportUntranslated(pos) - return else: res = huc.isValidHUCInput(advancedInputStr) if res == huc.HUC_INPUT_INCOMPLETE: return self._reportUntranslated(pos) @@ -453,6 +453,8 @@ def input_(self, dots): else: res = huc.backTranslate(advancedInputStr) sendChar(res) + if res and config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"]: + instanceGP.advancedInput = False return # For uncontracted braille, translate the buffer for each cell added. # Any new characters produced are then sent immediately. diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index ecdd0242..8c0f5d7d 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -407,7 +407,6 @@ def onSave(self): repr_ = re.sub('\-+','-', repr_) config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ instanceGP.reloadBrailleTables() - super(BrailleTablesDlg, self).onOk(evt) if restartRequired: res = gui.messageBox( _("NVDA must be restarted for some new options to take effect. Do you want restart now?"), @@ -511,6 +510,21 @@ def onTables(self, evt): utils.refreshBD() else: evt.Skip() +class AdvancedDlg(gui.settingsDialogs.SettingsPanel): + + # Translators: title of a dialog. + title = _("Advanced") + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + + # Translators: label of a dialog. + self.exitAdvancedInputModeAfterOneChar = sHelper.addItem(wx.CheckBox(self, label=_("E&xit the advanced input mode after typing one character"))) + self.exitAdvancedInputModeAfterOneChar.SetValue(config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"]) + + def onSave(self): + config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"] = self.exitAdvancedInputModeAfterOneChar.IsChecked() + class UndefinedCharsDlg(gui.settingsDialogs.SettingsDialog): @@ -975,6 +989,7 @@ class AddonSettingsDialog(gui.settingsDialogs.MultiCategorySettingsDialog): AttribraDlg, BrailleTablesDlg, RoleLabelsDlg, + AdvancedDlg ] def __init__(self, parent, initialCategory=None): From 731de0f0d8b97283d75aa4bf0ce9da0897f9dfa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 4 Apr 2020 13:41:45 +0200 Subject: [PATCH 43/87] Mention english translator --- addon/globalPlugins/brailleExtender/addonDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 38d0aa17..a9d5241f 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -282,7 +282,7 @@ def __init__(self, instanceGP): _("Arabic"): "Ikrami Ahmad", _("Croatian"): "Zvonimir Stanečić ", _("Danish"): "Daniel Gartmann ", - _("French"): "Sof , André-Abush Clause ", + _("English and french"): "Sof , André-Abush Clause ", _("German"): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", _("Hebrew"): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", _("Persian"): "Mohammadreza Rashad ", From 985451c5f6055861acb92aa6ee961e43eec771f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 4 Apr 2020 13:49:52 +0200 Subject: [PATCH 44/87] fixup --- addon/globalPlugins/brailleExtender/addonDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index a9d5241f..99a3ac23 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -282,7 +282,7 @@ def __init__(self, instanceGP): _("Arabic"): "Ikrami Ahmad", _("Croatian"): "Zvonimir Stanečić ", _("Danish"): "Daniel Gartmann ", - _("English and french"): "Sof , André-Abush Clause ", + _("English and French"): "Sof , André-Abush Clause ", _("German"): "Adriani Botez , Karl Eick, Jürgen Schwingshandl ", _("Hebrew"): "Shmuel Naaman , Afik Sofer, David Rechtman, Pavel Kaplan", _("Persian"): "Mohammadreza Rashad ", From 16f749dcbfb96326cfdc706ab21bb54778b5e21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 4 Apr 2020 14:15:04 +0200 Subject: [PATCH 45/87] Translators section: Sorts languages in alphabetical order --- addon/globalPlugins/brailleExtender/addonDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 99a3ac23..912c3bfe 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -305,7 +305,7 @@ def __init__(self, instanceGP): ) ) ) - for language, authors in translators.items(): + for language, authors in sorted(translators.items()): doc += f"
  • {language}{punctuationSeparator}: {escape(authors)}
  • " doc += "".join( [ From 0110866f141d95593aa444d286f5415b61226eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 5 Apr 2020 02:03:30 +0200 Subject: [PATCH 46/87] Implements advanced input mode dictionary --- .../globalPlugins/brailleExtender/__init__.py | 14 +- .../brailleExtender/advancedInputMode.py | 211 ++++++++++++++++++ .../globalPlugins/brailleExtender/configBE.py | 6 +- addon/globalPlugins/brailleExtender/huc.py | 6 +- addon/globalPlugins/brailleExtender/patchs.py | 23 +- .../globalPlugins/brailleExtender/settings.py | 12 +- 6 files changed, 256 insertions(+), 16 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/advancedInputMode.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 8a55c54f..69565d46 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -50,6 +50,7 @@ config.conf.spec["brailleExtender"] = configBE.getConfspec() from . import utils from .updateCheck import * +from . import advancedInputMode from . import dictionaries from . import huc from . import patchs @@ -180,6 +181,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin): switchedMode = False def __init__(self): + startTime = time.time() super(globalPluginHandler.GlobalPlugin, self).__init__() patchs.instanceGP = self self.reloadBrailleTables() @@ -205,7 +207,8 @@ def __init__(self): braille.TextInfoRegion._getTypeformFromFormatField = decorator(braille.TextInfoRegion._getTypeformFromFormatField, "_getTypeformFromFormatField") if config.conf["brailleExtender"]["reverseScrollBtns"]: self.reverseScrollBtns() self.createMenu() - log.info("%s %s loaded" % (addonName, addonVersion)) + advancedInputMode.initialize() + log.info(f"{addonName} {addonVersion} loaded ({round(time.time()-startTime, 2)}s)") def event_gainFocus(self, obj, nextHandler): global rotorItem, lastRotorItemInVD, lastRotorItemInVDSaved @@ -264,7 +267,7 @@ def createMenu(self): item ) dictionariesMenu = wx.Menu() - self.submenu.AppendSubMenu(dictionariesMenu, _("Braille &dictionaries"), _("'Braille dictionaries' menu")) + self.submenu.AppendSubMenu(dictionariesMenu, _("Table &dictionaries"), _("'Braille dictionaries' menu")) item = dictionariesMenu.Append(wx.ID_ANY, _("&Global dictionary"), _("A dialog where you can set global dictionary by adding dictionary entries to the list.")) gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU, self.onDefaultDictionary, item) item = dictionariesMenu.Append(wx.ID_ANY, _("&Table dictionary"), _("A dialog where you can set table-specific dictionary by adding dictionary entries to the list.")) @@ -272,6 +275,12 @@ def createMenu(self): item = dictionariesMenu.Append(wx.ID_ANY, _("Te&mporary dictionary"), _("A dialog where you can set temporary dictionary by adding dictionary entries to the list.")) gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU, self.onTemporaryDictionary, item) + item = self.submenu.Append(wx.ID_ANY, "%s..." % _("Advanced &input mode dictionary"), _("Advanced input mode configuration")) + gui.mainFrame.sysTrayIcon.Bind( + wx.EVT_MENU, + lambda event: gui.mainFrame._popupSettingsDialog(advancedInputMode.AdvancedInputModeDlg), + item + ) item = self.submenu.Append(wx.ID_ANY, "%s..." % _("&Quick launches"), _("Quick launches configuration")) gui.mainFrame.sysTrayIcon.Bind( wx.EVT_MENU, @@ -1317,6 +1326,7 @@ def terminate(self): config.conf["braille"]["showCursor"] = self.backupShowCursor if self.autoTestPlayed: self.autoTestTimer.Stop() dictionaries.removeTmpDict() + advancedInputMode.terminate() super(GlobalPlugin, self).terminate() def removeMenu(self): diff --git a/addon/globalPlugins/brailleExtender/advancedInputMode.py b/addon/globalPlugins/brailleExtender/advancedInputMode.py new file mode 100644 index 00000000..4c257068 --- /dev/null +++ b/addon/globalPlugins/brailleExtender/advancedInputMode.py @@ -0,0 +1,211 @@ +# coding: utf-8 +# advancedInputMode.py +# Part of BrailleExtender addon for NVDA +# Copyright 2016-2020 André-Abush CLAUSE, released under GPL. +from collections import namedtuple +import codecs +import json +import gui +import wx + +import addonHandler +addonHandler.initTranslation() +import brailleInput +import brailleTables +from .common import * +from .utils import getTextInBraille + +AdvancedInputModeDictEntry = namedtuple("AdvancedInputModeDictEntry", ("abreviation", "replaceBy", "table")) + +entries = None + +def getPathDict(): + return f"{configDir}/brailleDicts/advancedInputMode.json" + +def getDictionary(): + return entries if entries else [] + +def initialize(): + global entries + entries = [] + fp = getPathDict() + if not os.path.exists(fp): return + json_ = json.load(codecs.open(fp, 'r', "UTF-8")) + for entry in json_: + entries.append(AdvancedInputModeDictEntry(entry["abreviation"], entry["replaceBy"], entry["table"])) + + +def terminate(save=False): + global entries + if save: saveDict() + entries = None + +def setDict(newDict): + global entries + entries = newDict + +def saveDict(entries=None): + if not entries: entries = getDictionary() + entries = [{"abreviation": entry.abreviation, "replaceBy": entry.replaceBy, "table": entry.table} for entry in entries] + with codecs.open(getPathDict(), 'w', "UTF-8") as outfile: + json.dump(entries, outfile, ensure_ascii=False, indent=2) + +def getReplacements(abreviations, strict=False): + if isinstance(abreviations, str): abreviations = [abreviations] + currentInputTable = brailleInput.handler.table.fileName + out = [] + for abreviation in abreviations: + if abreviation.endswith('⠀'): + strict = True + abreviation = abreviation[:-1] + if not strict: + out += [entry for entry in getDictionary() if entry.abreviation.startswith(abreviation) and entry.table in [currentInputTable, '*']] + else: + out += [entry for entry in getDictionary() if entry.abreviation == abreviation and entry.table in [currentInputTable, '*']] + return out + +def translateTable(tableFilename): + if tableFilename == '*': return _("all tables") + else: + for table in brailleTables.listTables(): + if table.fileName == tableFilename: return table.displayName + return tableFilename + +class AdvancedInputModeDlg(gui.settingsDialogs.SettingsDialog): + # Translators: title of a dialog. + title = _("Advanced input mode dictionary") + + def makeSettings(self, settingsSizer): + self.tmpDict = getDictionary() + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + # Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. + entriesLabelText = _("Dictionary &entries") + self.dictList = sHelper.addLabeledControl(entriesLabelText, wx.ListCtrl, style=wx.LC_REPORT | wx.LC_SINGLE_SEL, + size=(550, 350)) + # Translators: The label for a column in dictionary entries list used to identify comments for the entry. + self.dictList.InsertColumn(0, _("Abbreviation"), width=150) + self.dictList.InsertColumn(1, _("Replace by"), width=150) + self.dictList.InsertColumn(2, _("Input table"), width=150) + self.onSetEntries() + bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + bHelper.addButton( + parent=self, + # Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. + label=_("&Add") + ).Bind(wx.EVT_BUTTON, self.onAddClick) + + bHelper.addButton( + parent=self, + # Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. + label=_("&Edit") + ).Bind(wx.EVT_BUTTON, self.onEditClick) + + bHelper.addButton( + parent=self, + # Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. + label=_("Re&move") + ).Bind(wx.EVT_BUTTON, self.onRemoveClick) + + sHelper.addItem(bHelper) + bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + bHelper.addButton( + parent=self, + # Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. + label=_("&Open the dictionary file in an editor") + ).Bind(wx.EVT_BUTTON, self.onOpenFileClick) + bHelper.addButton( + parent=self, + # Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. + label=_("&Reload the dictionary") + ).Bind(wx.EVT_BUTTON, self.onReloadDictClick) + sHelper.addItem(bHelper) + + def onSetEntries(self): + self.dictList.DeleteAllItems() + for entry in self.tmpDict: + self.dictList.Append((entry.abreviation, entry.replaceBy, translateTable(entry.table))) + self.dictList.SetFocus() + + def onAddClick(self, event): + entryDialog = DictionaryEntryDlg(self,title=_("Add Dictionary Entry")) + if entryDialog.ShowModal() == wx.ID_OK: + entry = entryDialog.dictEntry + self.tmpDict.append(entry) + self.dictList.Append((entry.abreviation, entry.replaceBy, translateTable(entry.table))) + index = self.dictList.GetFirstSelected() + while index >= 0: + self.dictList.Select(index,on=0) + index=self.dictList.GetNextSelected(index) + addedIndex = self.dictList.GetItemCount()-1 + self.dictList.Select(addedIndex) + self.dictList.Focus(addedIndex) + self.dictList.SetFocus() + entryDialog.Destroy() + + def onEditClick(self, event): + if self.dictList.GetSelectedItemCount() != 1: return + editIndex = self.dictList.GetFirstSelected() + entryDialog = DictionaryEntryDlg(self) + entryDialog.abreviationTextCtrl.SetValue(self.tmpDict[editIndex].abreviation) + entryDialog.replaceByTextCtrl.SetValue(self.tmpDict[editIndex].replaceBy) + if entryDialog.ShowModal() == wx.ID_OK: + entry = entryDialog.dictEntry + self.tmpDict[editIndex] = entry + self.dictList.SetItem(editIndex, 0, entry.abreviation) + self.dictList.SetItem(editIndex, 1, entry.replaceBy) + self.dictList.SetItem(editIndex, 2, translateTable(entry.table)) + self.dictList.SetFocus() + entryDialog.Destroy() + + def onRemoveClick(self, event): + index = self.dictList.GetFirstSelected() + while index>=0: + self.dictList.DeleteItem(index) + del self.tmpDict[index] + index = self.dictList.GetNextSelected(index) + self.dictList.SetFocus() + + def onOpenFileClick(self, event): + dictPath = getPathDict() + if not os.path.exists(dictPath): return ui.message(_("File doesn't exist yet")) + try: os.startfile(dictPath) + except OSError: os.popen("notepad \"%s\"" % dictPath) + + def onReloadDictClick(self, event): + self.tmpDict = getDictionary() + self.onSetEntries() + + def postInit(self): self.dictList.SetFocus() + + def onOk(self, evt): + saveDict(self.tmpDict) + setDict(self.tmpDict) + super(AdvancedInputModeDlg, self).onOk(evt) + +class DictionaryEntryDlg(wx.Dialog): + # Translators: This is the label for the edit dictionary entry dialog. + def __init__(self, parent=None, title=_("Edit Dictionary Entry")): + super(DictionaryEntryDlg, self).__init__(parent, title=title) + mainSizer=wx.BoxSizer(wx.VERTICAL) + sHelper = gui.guiHelper.BoxSizerHelper(self, orientation=wx.VERTICAL) + # Translators: This is a label for an edit field in add dictionary entry dialog. + abreviationLabelText = _("&Abreviation") + self.abreviationTextCtrl = sHelper.addLabeledControl(abreviationLabelText, wx.TextCtrl) + # Translators: This is a label for an edit field in add dictionary entry dialog. + replaceByLabelText = _("&Replace by") + self.replaceByTextCtrl = sHelper.addLabeledControl(replaceByLabelText, wx.TextCtrl) + + sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK|wx.CANCEL)) + + mainSizer.Add(sHelper.sizer,border=20,flag=wx.ALL) + mainSizer.Fit(self) + self.SetSizer(mainSizer) + self.abreviationTextCtrl.SetFocus() + self.Bind(wx.EVT_BUTTON,self.onOk,id=wx.ID_OK) + + def onOk(self, evt): + abreviation = getTextInBraille(self.abreviationTextCtrl.GetValue()) + replaceBy = self.replaceByTextCtrl.GetValue() + newEntry = AdvancedInputModeDictEntry(abreviation, replaceBy, '*') + self.dictEntry = newEntry + evt.Skip() diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 4b6a7249..0da6ca78 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -167,7 +167,6 @@ def getConfspec(): "undefinedCharEnd": "string(default=])", "undefinedCharLang": "string(default=Windows)", "undefinedCharBrailleTable": "string(default=current)", - "exitAdvancedInputModeAfterOneChar": "boolean(default=False)", "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", @@ -222,6 +221,11 @@ def getConfspec(): "quickLaunches": {}, "roleLabels": {}, "brailleTables": {}, + "advancedInputMode": { + "stopAfterOneChar": "boolean(default=True)", + "startSign": "string(default=⠼)", + } + } def loadPreferedTables(): diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index aa0ae374..a6f1cd31 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -208,7 +208,11 @@ def splitInTwoCells(dotPattern): return [c1, c2] def isValidHUCInput(s): - if not s or len(s) < 2: return HUC_INPUT_INCOMPLETE + if not s: return HUC_INPUT_INCOMPLETE + if len(s) == 1: + matchePatterns = [e for e in HUC8_patterns.keys() if e.startswith(s)] + if matchePatterns: return HUC_INPUT_INCOMPLETE + else: return HUC_INPUT_INVALID prefix = s[0:2] if len(s) == 4 else s[0] s = s[2:] if len(s) == 4 else s[1:] size = len(s) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 035894d9..0d7e629f 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -39,6 +39,7 @@ from logHandler import log import addonHandler addonHandler.initTranslation() +from . import advancedInputMode from . import dictionaries from . import huc from .utils import getCurrentChar, getTether, getTextInBraille, getCharFromValue @@ -435,25 +436,33 @@ def input_(self, dots): advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) if advancedInputStr: res = '' - if advancedInputStr[0] in "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭": + abreviations = advancedInputMode.getReplacements([advancedInputStr]) + startUnicodeValue = "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭" + if not abreviations and advancedInputStr[0] in startUnicodeValue: advancedInputStr = config.conf["brailleExtender"]["advancedInputMode"]["startSign"] + advancedInputStr + if advancedInputStr == config.conf["brailleExtender"]["advancedInputMode"]["startSign"] or (advancedInputStr.startswith(config.conf["brailleExtender"]["advancedInputMode"]["startSign"]) and len(advancedInputStr) > 1 and advancedInputStr[1] in startUnicodeValue): equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} if advancedInputStr[-1] == '⠀': - text = equiv[advancedInputStr[0]]+louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[1:-1])[0] + text = equiv[advancedInputStr[1]] + louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[2:-1])[0] try: res = getCharFromValue(text) sendChar(res) except BaseException as err: speech.speakMessage(repr(err)) - badInput(self) + return badInput(self) else: self._reportUntranslated(pos) + elif abreviations: + if len(abreviations) == 1: + res = abreviations[0].replaceBy + sendChar(res) + else: return self._reportUntranslated(pos) else: res = huc.isValidHUCInput(advancedInputStr) if res == huc.HUC_INPUT_INCOMPLETE: return self._reportUntranslated(pos) - elif res == huc.HUC_INPUT_INVALID: badInput(self) + elif res == huc.HUC_INPUT_INVALID: return badInput(self) else: res = huc.backTranslate(advancedInputStr) sendChar(res) - if res and config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"]: + if res and config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"]: instanceGP.advancedInput = False return # For uncontracted braille, translate the buffer for each cell added. @@ -482,7 +491,9 @@ def input_(self, dots): def sendChar(char): nvwave.playWaveFile(os.path.join(configBE.baseDir, "res/sounds/keyPress.wav")) core.callLater(0, brailleInput.handler.sendChars, char) - core.callLater(100, speech.speakSpelling, char) + if len(char) == 1: + core.callLater(100, speech.speakSpelling, char) + else: core.callLater(100, speech.speakMessage, char) def badInput(self): nvwave.playWaveFile("waves/textError.wav") diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 8c0f5d7d..bff48938 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -510,20 +510,20 @@ def onTables(self, evt): utils.refreshBD() else: evt.Skip() -class AdvancedDlg(gui.settingsDialogs.SettingsPanel): +class AdvancedInputModeDlg(gui.settingsDialogs.SettingsPanel): # Translators: title of a dialog. - title = _("Advanced") + title = _("Advanced input mode") def makeSettings(self, settingsSizer): sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) # Translators: label of a dialog. - self.exitAdvancedInputModeAfterOneChar = sHelper.addItem(wx.CheckBox(self, label=_("E&xit the advanced input mode after typing one character"))) - self.exitAdvancedInputModeAfterOneChar.SetValue(config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"]) + self.stopAdvancedInputModeAfterOneChar = sHelper.addItem(wx.CheckBox(self, label=_("E&xit the advanced input mode after typing one pattern"))) + self.stopAdvancedInputModeAfterOneChar.SetValue(config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"]) def onSave(self): - config.conf["brailleExtender"]["exitAdvancedInputModeAfterOneChar"] = self.exitAdvancedInputModeAfterOneChar.IsChecked() + config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"] = self.stopAdvancedInputModeAfterOneChar.IsChecked() class UndefinedCharsDlg(gui.settingsDialogs.SettingsDialog): @@ -989,7 +989,7 @@ class AddonSettingsDialog(gui.settingsDialogs.MultiCategorySettingsDialog): AttribraDlg, BrailleTablesDlg, RoleLabelsDlg, - AdvancedDlg + AdvancedInputModeDlg ] def __init__(self, parent, initialCategory=None): From 2773090d8d790d162fcff9b0b6e3145fc47639da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 5 Apr 2020 02:12:07 +0200 Subject: [PATCH 47/87] Small update for advanced input mode --- addon/globalPlugins/brailleExtender/addonDoc.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 912c3bfe..ce44bab5 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -11,6 +11,7 @@ import braille from . import configBE from collections import OrderedDict +import config import cursorManager import globalCommands import ui @@ -42,6 +43,8 @@ def getFeaturesDoc(): ch = undefinedCharsSamples[i][0][0] undefinedCharsSamples[i][0] = "%s (%s)" % (ch, utils.getSpeechSymbols(ch)) + braillePattern = config.conf["brailleExtender"]["advancedInputMode"]["startSign"] + features = { _("Representation of undefined characters"): [ "

    ", @@ -77,6 +80,7 @@ def getFeaturesDoc(): "

    ", "If you want to enter a character from its HUC8 representation, simply enter the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the interpretation will be performed each time 3 dot combinations are entered. If you wish to enter a character from its hexadecimal, decimal, octal or binary value, do the following:", "

      ", + "
    1. " + _(f"Enter {braillePattern}") + "
    2. ", "
    3. " + _("Specify the basis as follows") + f"{punctuationSeparator}:", "
      • ", _("⠭ or ⠓") + f"{punctuationSeparator}: " + _("for a hexadecimal value") + "
      • ", From 8e616a59ce8a7e30a47f1cc93b5839fcc83ba543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 7 Apr 2020 12:30:14 +0200 Subject: [PATCH 48/87] Undefined characters: emoji on several characters are now also described --- addon/globalPlugins/brailleExtender/patchs.py | 25 +++++++++++++++---- addon/globalPlugins/brailleExtender/utils.py | 9 ++++++- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 0d7e629f..94d4c975 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -42,7 +42,7 @@ from . import advancedInputMode from . import dictionaries from . import huc -from .utils import getCurrentChar, getTether, getTextInBraille, getCharFromValue +from .utils import getCurrentChar, getTether, getTextInBraille, getCharFromValue, getExtendedSymbols from .common import * import louisHelper @@ -163,16 +163,18 @@ def setUndefinedChar(t=None): v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) +def getExtendedSymbolsForString(s): + return {c: (d, [(m.start(), m.end()) for m in re.finditer(c, s)]) for c, d in extendedSymbols.items() if c in s} def getDescChar(c, lang="Windows", start='', end=''): if lang == "Windows": lang = languageHandler.getLanguage() - desc = characterProcessing.processSpeechSymbols(lang, c, characterProcessing.SYMLVL_CHAR).strip() + desc = characterProcessing.processSpeechSymbols(lang, c, characterProcessing.SYMLVL_CHAR).strip().replace("  ", ' ') if not desc or desc == c: if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 return huc.translate(c, HUC6=HUC6) else: return getTextInBraille(''.join(getNotationOrd(c))) - return start + desc + end + return f"{start}{desc}{end}" def getLiblouisStyle(c): if c < 0x10000: return r"\x%.4x" % c @@ -193,8 +195,12 @@ def getNotationOrd(s, notation=None): return s def undefinedCharProcess(self): + extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) unicodeBrailleRepr = ''.join([chr(10240 + cell) for cell in self.brailleCells]) allBraillePos = [m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr)] + allExtendedPos = {} + for c, v in extendedSymbolsRawText.items(): + for start, end in v[1]: allExtendedPos[start] = end if not allBraillePos: return if config.conf["brailleExtender"]["undefinedCharDesc"]: start = config.conf["brailleExtender"]["undefinedCharStart"] @@ -203,11 +209,18 @@ def undefinedCharProcess(self): if end: end = getTextInBraille(end) replacements = {braillePos: getTextInBraille( - getDescChar( + ( + getDescChar( + self.rawText[self.brailleToRawPos[braillePos]:allExtendedPos[self.brailleToRawPos[braillePos]]], + lang=config.conf["brailleExtender"]["undefinedCharLang"], + start=start, + end=f":{allExtendedPos[self.brailleToRawPos[braillePos]] - self.brailleToRawPos[braillePos]}{end}" + getDescChar(self.rawText[self.brailleToRawPos[braillePos]], lang=config.conf["brailleExtender"]["undefinedCharLang"], start=start, end=end) + ) + ) if self.brailleToRawPos[braillePos] in allExtendedPos else getDescChar( self.rawText[self.brailleToRawPos[braillePos]], lang=config.conf["brailleExtender"]["undefinedCharLang"], start=start, - end=end, + end=end ), table=[config.conf["brailleExtender"]["undefinedCharBrailleTable"]] ) for braillePos in allBraillePos} @@ -245,6 +258,7 @@ def undefinedCharProcess(self): self.brailleToRawPos = newBrailleToRawPos self.rawToBraillePos = newRawToBraillePos if self.cursorPos: self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] + # self.brailleCells self.rawText self.rawToBraillePos self.brailleToRawPos #: braille.TextInfoRegion.nextLine() def nextLine(self): @@ -580,3 +594,4 @@ def _createTablesString(tablesList): louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ +extendedSymbols = getExtendedSymbols(config.conf["brailleExtender"]["undefinedCharLang"]) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 19e88de1..d55ac312 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -442,7 +442,7 @@ def getSpeechSymbols(text = None): if not text: text = getTextSelection() if not text: return ui.message(_("No text selected")) locale = languageHandler.getLanguage() - return characterProcessing.processSpeechSymbols(locale, text, characterProcessing.SYMLVL_MOST).strip() + return characterProcessing.processSpeechSymbols(locale, text, characterProcessing.SYMLVL_CHAR).strip() def getTether(): if hasattr(braille.handler, "getTether"): @@ -459,3 +459,10 @@ def getCharFromValue(s): b = supportedBases[base] n = int(n, b) return chr(n) + +def getExtendedSymbols(locale): + if locale == "Windows": locale = languageHandler.getLanguage() + b, u = characterProcessing._getSpeechSymbolsForLocale(locale) + a = {k: v.replacement.replace("  ", " ") for k, v in b.symbols.items() if len(k) > 1} + a.update({k: v.replacement.replace("  ", " ") for k, v in u.symbols.items() if len(k) > 1}) + return a From 2fd2e03ca76383d82e56491a065a1ae779260471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 7 Apr 2020 19:19:39 +0200 Subject: [PATCH 49/87] fixup --- addon/globalPlugins/brailleExtender/patchs.py | 6 +++++- addon/globalPlugins/brailleExtender/utils.py | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 94d4c975..e4fa1cd4 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -594,4 +594,8 @@ def _createTablesString(tablesList): louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ -extendedSymbols = getExtendedSymbols(config.conf["brailleExtender"]["undefinedCharLang"]) +try: + extendedSymbols = getExtendedSymbols(config.conf["brailleExtender"]["undefinedCharLang"]) +except BaseException as err: + extendedSymbols = {} + log.error(f"Unable to load extended symbols for %s: %s" % (config.conf["brailleExtender"]["undefinedCharLang"], err)) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index d55ac312..b11f14f3 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -462,7 +462,10 @@ def getCharFromValue(s): def getExtendedSymbols(locale): if locale == "Windows": locale = languageHandler.getLanguage() - b, u = characterProcessing._getSpeechSymbolsForLocale(locale) + try: + b, u = characterProcessing._getSpeechSymbolsForLocale(locale) + except LookupError: + b, u = characterProcessing._getSpeechSymbolsForLocale(locale.split('_')[0]) a = {k: v.replacement.replace("  ", " ") for k, v in b.symbols.items() if len(k) > 1} a.update({k: v.replacement.replace("  ", " ") for k, v in u.symbols.items() if len(k) > 1}) return a From 5c78fbaa3b3744e673362adb084819d582e7176f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 8 Apr 2020 23:04:51 +0200 Subject: [PATCH 50/87] Refactoring code + small fixes --- .../globalPlugins/brailleExtender/__init__.py | 10 +- .../brailleExtender/advancedInputMode.py | 171 +++++-- .../globalPlugins/brailleExtender/configBE.py | 27 +- addon/globalPlugins/brailleExtender/patchs.py | 158 +------ .../globalPlugins/brailleExtender/settings.py | 106 +---- .../brailleExtender/undefinedChars.py | 428 ++++++++++++++++++ addon/globalPlugins/brailleExtender/utils.py | 30 +- 7 files changed, 620 insertions(+), 310 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/undefinedChars.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 69565d46..3b11c5c7 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -20,8 +20,6 @@ import gui import wx -from . import settings - import addonHandler addonHandler.initTranslation() import api @@ -54,7 +52,9 @@ from . import dictionaries from . import huc from . import patchs +from . import settings from .common import * +from . import undefinedChars instanceGP = None lang = configBE.lang @@ -312,7 +312,7 @@ def reloadBrailleTables(self): if isPy3: patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef, "ASCII")) else: patchs.louis.compileString(patchs.getCurrentBrailleTables(), bytes(liblouisDef)) - patchs.setUndefinedChar() + undefinedChars.setUndefinedChar() @staticmethod def onDefaultDictionary(evt): @@ -658,9 +658,9 @@ def script_advancedInput(self, gesture): script_advancedInput.__doc__ = _("Enable/disable the advanced input mode") def script_undefinedCharsDesc(self, gesture): - config.conf["brailleExtender"]["undefinedCharDesc"] = not config.conf["brailleExtender"]["undefinedCharDesc"] + config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"] = not config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"] states = [_("disabled"), _("enabled")] - speech.speakMessage(_("Description of undefined characters %s") % states[int(config.conf["brailleExtender"]["undefinedCharDesc"])]) + speech.speakMessage(_("Description of undefined characters %s") % states[int(config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"])]) utils.refreshBD() script_undefinedCharsDesc.__doc__ = _("Enable/disable description of undefined characters") diff --git a/addon/globalPlugins/brailleExtender/advancedInputMode.py b/addon/globalPlugins/brailleExtender/advancedInputMode.py index 4c257068..003edd5c 100644 --- a/addon/globalPlugins/brailleExtender/advancedInputMode.py +++ b/addon/globalPlugins/brailleExtender/advancedInputMode.py @@ -9,79 +9,124 @@ import wx import addonHandler + addonHandler.initTranslation() import brailleInput import brailleTables +import config from .common import * from .utils import getTextInBraille -AdvancedInputModeDictEntry = namedtuple("AdvancedInputModeDictEntry", ("abreviation", "replaceBy", "table")) +AdvancedInputModeDictEntry = namedtuple( + "AdvancedInputModeDictEntry", ("abreviation", "replaceBy", "table") +) entries = None + def getPathDict(): return f"{configDir}/brailleDicts/advancedInputMode.json" + def getDictionary(): return entries if entries else [] + def initialize(): global entries entries = [] fp = getPathDict() - if not os.path.exists(fp): return - json_ = json.load(codecs.open(fp, 'r', "UTF-8")) + if not os.path.exists(fp): + return + json_ = json.load(codecs.open(fp, "r", "UTF-8")) for entry in json_: - entries.append(AdvancedInputModeDictEntry(entry["abreviation"], entry["replaceBy"], entry["table"])) + entries.append( + AdvancedInputModeDictEntry( + entry["abreviation"], entry["replaceBy"], entry["table"] + ) + ) def terminate(save=False): global entries - if save: saveDict() + if save: + saveDict() entries = None + def setDict(newDict): global entries entries = newDict + def saveDict(entries=None): - if not entries: entries = getDictionary() - entries = [{"abreviation": entry.abreviation, "replaceBy": entry.replaceBy, "table": entry.table} for entry in entries] - with codecs.open(getPathDict(), 'w', "UTF-8") as outfile: + if not entries: + entries = getDictionary() + entries = [ + { + "abreviation": entry.abreviation, + "replaceBy": entry.replaceBy, + "table": entry.table, + } + for entry in entries + ] + with codecs.open(getPathDict(), "w", "UTF-8") as outfile: json.dump(entries, outfile, ensure_ascii=False, indent=2) + def getReplacements(abreviations, strict=False): - if isinstance(abreviations, str): abreviations = [abreviations] + if isinstance(abreviations, str): + abreviations = [abreviations] currentInputTable = brailleInput.handler.table.fileName out = [] for abreviation in abreviations: - if abreviation.endswith('⠀'): + if abreviation.endswith("⠀"): strict = True abreviation = abreviation[:-1] if not strict: - out += [entry for entry in getDictionary() if entry.abreviation.startswith(abreviation) and entry.table in [currentInputTable, '*']] + out += [ + entry + for entry in getDictionary() + if entry.abreviation.startswith(abreviation) + and entry.table in [currentInputTable, "*"] + ] else: - out += [entry for entry in getDictionary() if entry.abreviation == abreviation and entry.table in [currentInputTable, '*']] + out += [ + entry + for entry in getDictionary() + if entry.abreviation == abreviation + and entry.table in [currentInputTable, "*"] + ] return out + def translateTable(tableFilename): - if tableFilename == '*': return _("all tables") + if tableFilename == "*": + return _("all tables") else: for table in brailleTables.listTables(): - if table.fileName == tableFilename: return table.displayName + if table.fileName == tableFilename: + return table.displayName return tableFilename + class AdvancedInputModeDlg(gui.settingsDialogs.SettingsDialog): + # Translators: title of a dialog. title = _("Advanced input mode dictionary") def makeSettings(self, settingsSizer): self.tmpDict = getDictionary() + self.tmpDict.sort(key=lambda e: e.replaceBy) sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) # Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. entriesLabelText = _("Dictionary &entries") - self.dictList = sHelper.addLabeledControl(entriesLabelText, wx.ListCtrl, style=wx.LC_REPORT | wx.LC_SINGLE_SEL, - size=(550, 350)) + self.dictList = sHelper.addLabeledControl( + entriesLabelText, + wx.ListCtrl, + style=wx.LC_REPORT | wx.LC_SINGLE_SEL, + size=(550, 350), + ) # Translators: The label for a column in dictionary entries list used to identify comments for the entry. self.dictList.InsertColumn(0, _("Abbreviation"), width=150) self.dictList.InsertColumn(1, _("Replace by"), width=150) @@ -91,19 +136,19 @@ def makeSettings(self, settingsSizer): bHelper.addButton( parent=self, # Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. - label=_("&Add") + label=_("&Add"), ).Bind(wx.EVT_BUTTON, self.onAddClick) bHelper.addButton( parent=self, # Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. - label=_("&Edit") + label=_("&Edit"), ).Bind(wx.EVT_BUTTON, self.onEditClick) bHelper.addButton( parent=self, # Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. - label=_("Re&move") + label=_("Re&move"), ).Bind(wx.EVT_BUTTON, self.onRemoveClick) sHelper.addItem(bHelper) @@ -111,39 +156,44 @@ def makeSettings(self, settingsSizer): bHelper.addButton( parent=self, # Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. - label=_("&Open the dictionary file in an editor") + label=_("&Open the dictionary file in an editor"), ).Bind(wx.EVT_BUTTON, self.onOpenFileClick) bHelper.addButton( parent=self, # Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. - label=_("&Reload the dictionary") + label=_("&Reload the dictionary"), ).Bind(wx.EVT_BUTTON, self.onReloadDictClick) sHelper.addItem(bHelper) def onSetEntries(self): self.dictList.DeleteAllItems() for entry in self.tmpDict: - self.dictList.Append((entry.abreviation, entry.replaceBy, translateTable(entry.table))) + self.dictList.Append( + (entry.abreviation, entry.replaceBy, translateTable(entry.table)) + ) self.dictList.SetFocus() def onAddClick(self, event): - entryDialog = DictionaryEntryDlg(self,title=_("Add Dictionary Entry")) + entryDialog = DictionaryEntryDlg(self, title=_("Add Dictionary Entry")) if entryDialog.ShowModal() == wx.ID_OK: entry = entryDialog.dictEntry self.tmpDict.append(entry) - self.dictList.Append((entry.abreviation, entry.replaceBy, translateTable(entry.table))) + self.dictList.Append( + (entry.abreviation, entry.replaceBy, translateTable(entry.table)) + ) index = self.dictList.GetFirstSelected() while index >= 0: - self.dictList.Select(index,on=0) - index=self.dictList.GetNextSelected(index) - addedIndex = self.dictList.GetItemCount()-1 + self.dictList.Select(index, on=0) + index = self.dictList.GetNextSelected(index) + addedIndex = self.dictList.GetItemCount() - 1 self.dictList.Select(addedIndex) self.dictList.Focus(addedIndex) self.dictList.SetFocus() entryDialog.Destroy() def onEditClick(self, event): - if self.dictList.GetSelectedItemCount() != 1: return + if self.dictList.GetSelectedItemCount() != 1: + return editIndex = self.dictList.GetFirstSelected() entryDialog = DictionaryEntryDlg(self) entryDialog.abreviationTextCtrl.SetValue(self.tmpDict[editIndex].abreviation) @@ -159,7 +209,7 @@ def onEditClick(self, event): def onRemoveClick(self, event): index = self.dictList.GetFirstSelected() - while index>=0: + while index >= 0: self.dictList.DeleteItem(index) del self.tmpDict[index] index = self.dictList.GetNextSelected(index) @@ -167,45 +217,86 @@ def onRemoveClick(self, event): def onOpenFileClick(self, event): dictPath = getPathDict() - if not os.path.exists(dictPath): return ui.message(_("File doesn't exist yet")) - try: os.startfile(dictPath) - except OSError: os.popen("notepad \"%s\"" % dictPath) + if not os.path.exists(dictPath): + return ui.message(_("File doesn't exist yet")) + try: + os.startfile(dictPath) + except OSError: + os.popen('notepad "%s"' % dictPath) def onReloadDictClick(self, event): self.tmpDict = getDictionary() self.onSetEntries() - def postInit(self): self.dictList.SetFocus() + def postInit(self): + self.dictList.SetFocus() def onOk(self, evt): saveDict(self.tmpDict) setDict(self.tmpDict) super(AdvancedInputModeDlg, self).onOk(evt) + class DictionaryEntryDlg(wx.Dialog): # Translators: This is the label for the edit dictionary entry dialog. def __init__(self, parent=None, title=_("Edit Dictionary Entry")): super(DictionaryEntryDlg, self).__init__(parent, title=title) - mainSizer=wx.BoxSizer(wx.VERTICAL) + mainSizer = wx.BoxSizer(wx.VERTICAL) sHelper = gui.guiHelper.BoxSizerHelper(self, orientation=wx.VERTICAL) # Translators: This is a label for an edit field in add dictionary entry dialog. abreviationLabelText = _("&Abreviation") - self.abreviationTextCtrl = sHelper.addLabeledControl(abreviationLabelText, wx.TextCtrl) + self.abreviationTextCtrl = sHelper.addLabeledControl( + abreviationLabelText, wx.TextCtrl + ) # Translators: This is a label for an edit field in add dictionary entry dialog. replaceByLabelText = _("&Replace by") - self.replaceByTextCtrl = sHelper.addLabeledControl(replaceByLabelText, wx.TextCtrl) + self.replaceByTextCtrl = sHelper.addLabeledControl( + replaceByLabelText, wx.TextCtrl + ) - sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK|wx.CANCEL)) + sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL)) - mainSizer.Add(sHelper.sizer,border=20,flag=wx.ALL) + mainSizer.Add(sHelper.sizer, border=20, flag=wx.ALL) mainSizer.Fit(self) self.SetSizer(mainSizer) self.abreviationTextCtrl.SetFocus() - self.Bind(wx.EVT_BUTTON,self.onOk,id=wx.ID_OK) + self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK) def onOk(self, evt): abreviation = getTextInBraille(self.abreviationTextCtrl.GetValue()) replaceBy = self.replaceByTextCtrl.GetValue() - newEntry = AdvancedInputModeDictEntry(abreviation, replaceBy, '*') + newEntry = AdvancedInputModeDictEntry(abreviation, replaceBy, "*") self.dictEntry = newEntry evt.Skip() + + +class SettingsDlg(gui.settingsDialogs.SettingsPanel): + + # Translators: title of a dialog. + title = _("Advanced input mode") + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + + # Translators: label of a dialog. + self.stopAdvancedInputModeAfterOneChar = sHelper.addItem( + wx.CheckBox( + self, label=_("E&xit the advanced input mode after typing one pattern") + ) + ) + self.stopAdvancedInputModeAfterOneChar.SetValue( + config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"] + ) + self.escapeSignUnicodeValue = sHelper.addLabeledControl( + _("Escape sign for Unicode values"), + wx.TextCtrl, + value=config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"], + ) + + def onSave(self): + config.conf["brailleExtender"]["advancedInputMode"][ + "stopAfterOneChar" + ] = self.stopAdvancedInputModeAfterOneChar.IsChecked() + s = self.escapeSignUnicodeValue.Value + if s: + config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] = getTextInBraille(s[0]) diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 0da6ca78..c33c48bb 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -13,13 +13,12 @@ import braille import config import configobj -if hasattr(configobj, "validate"): - Validator = configobj.validate.Validator -else: from validate import Validator import inputCore import languageHandler from .common import * +Validator = configobj.validate.Validator + CHANNEL_stable = "stable" CHANNEL_testing = "testing" CHANNEL_dev = "dev" @@ -159,14 +158,18 @@ def getConfspec(): "inputTables": 'string(default="%s")' % config.conf["braille"]["inputTable"] + ", unicode-braille.utb", "outputTables": "string(default=%s)" % config.conf["braille"]["translationTable"], "tabSpace": "boolean(default=False)", - "tabSize_%s" % curBD: "integer(min=1, default=2, max=42)", - "undefinedCharReprMethod": "integer(min=0, default=%s, max=%s)" % (CHOICE_HUC8, CHOICE_bin), - "undefinedCharRepr": "string(default=0)", - "undefinedCharDesc": "boolean(default=True)", - "undefinedCharStart": "string(default=[)", - "undefinedCharEnd": "string(default=])", - "undefinedCharLang": "string(default=Windows)", - "undefinedCharBrailleTable": "string(default=current)", + f"tabSize_{curBD}": "integer(min=1, default=2, max=42)", + "undefinedCharsRepr": { + "method": "integer(min=0, default=%s, max=%s)" % (CHOICE_HUC8, CHOICE_bin), + "hardSignPatternValue": "string(default=??)", + "hardDotPatternValue": "string(default=6-12345678)", + "desc": "boolean(default=True)", + "extendedDesc": "boolean(default=True)", + "start": "string(default=[)", + "end": "string(default=])", + "lang": "string(default=Windows)", + "table": "string(default=current)" + }, "postTable": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", @@ -223,7 +226,7 @@ def getConfspec(): "brailleTables": {}, "advancedInputMode": { "stopAfterOneChar": "boolean(default=True)", - "startSign": "string(default=⠼)", + "escapeSignUnicodeValue": "string(default=⠼)", } } diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index e4fa1cd4..6a789cb7 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -19,16 +19,15 @@ import braille import brailleInput import brailleTables -import characterProcessing import controlTypes import config import core -from . import configBE import globalCommands import inputCore import keyboardHandler import languageHandler import louis +import louisHelper import queueHandler import sayAllHandler import scriptHandler @@ -37,18 +36,20 @@ import treeInterceptorHandler import watchdog from logHandler import log + + import addonHandler addonHandler.initTranslation() + from . import advancedInputMode +from . import configBE from . import dictionaries from . import huc -from .utils import getCurrentChar, getTether, getTextInBraille, getCharFromValue, getExtendedSymbols +from . import undefinedChars +from .utils import getCurrentChar, getTether, getCharFromValue, getCurrentBrailleTables from .common import * -import louisHelper instanceGP = None -HUCDotPattern = "12345678-78-12345678" -undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) SELECTION_SHAPE = lambda: braille.SELECTION_SHAPE origFunc = { @@ -74,24 +75,6 @@ def sayCurrentLine(): info.expand(textInfos.UNIT_LINE) speech.speakTextInfo(info, unit=textInfos.UNIT_LINE, reason=controlTypes.REASON_CARET) -def getCurrentBrailleTables(input_=False): - if instanceGP.BRFMode: - tables = [ - os.path.join(baseDir, "res", "brf.ctb").encode("UTF-8"), - os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") - ] - else: - tables = [] - app = appModuleHandler.getAppModuleForNVDAObject(api.getNavigatorObject()) - if brailleInput.handler._table.fileName == config.conf["braille"]["translationTable"] and app and app.appName != "nvda": tables += dictionaries.dictTables - if input_: mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) - else: mainTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) - tables += [ - mainTable, - os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") - ] - return tables - # globalCommands.GlobalCommands.script_braille_routeTo() def script_braille_routeTo(self, gesture): obj = obj = api.getNavigatorObject() @@ -130,13 +113,14 @@ def update(self): mode = louis.dotsIO if config.conf["braille"]["expandAtCursor"] and self.cursorPos is not None: mode |= louis.compbrlAtCursor self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( - getCurrentBrailleTables(), + getCurrentBrailleTables(brf=instanceGP.BRFMode), self.rawText, typeform=self.rawTextTypeforms, mode=mode, cursorPos=self.cursorPos ) - if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6, configBE.CHOICE_hex, configBE.CHOICE_dec, configBE.CHOICE_oct, configBE.CHOICE_bin]: undefinedCharProcess(self) + if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6, configBE.CHOICE_hex, configBE.CHOICE_dec, configBE.CHOICE_oct, configBE.CHOICE_bin]: + undefinedChars.undefinedCharProcess(self) if self.selectionStart is not None and self.selectionEnd is not None: try: # Mark the selection. @@ -152,113 +136,6 @@ def update(self): if instanceGP and instanceGP.hideDots78: self.brailleCells = [(cell & 63) for cell in self.brailleCells] -def setUndefinedChar(t=None): - if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharReprMethod"] - if t == 0: return - c = ["default", "12345678", "123456", '0', config.conf["brailleExtender"]["undefinedCharRepr"], "questionMark", "sign"] + [HUCDotPattern]*7 - v = c[t] - if v in ["questionMark", "sign"]: - if v == "questionMark": s = '?' - else: s = config.conf["brailleExtender"]["undefinedCharRepr"] - v = huc.unicodeBrailleToDescription(getTextInBraille(s, getCurrentBrailleTables())) - louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) - -def getExtendedSymbolsForString(s): - return {c: (d, [(m.start(), m.end()) for m in re.finditer(c, s)]) for c, d in extendedSymbols.items() if c in s} - -def getDescChar(c, lang="Windows", start='', end=''): - if lang == "Windows": lang = languageHandler.getLanguage() - desc = characterProcessing.processSpeechSymbols(lang, c, characterProcessing.SYMLVL_CHAR).strip().replace("  ", ' ') - if not desc or desc == c: - if config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: - HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 - return huc.translate(c, HUC6=HUC6) - else: return getTextInBraille(''.join(getNotationOrd(c))) - return f"{start}{desc}{end}" - -def getLiblouisStyle(c): - if c < 0x10000: return r"\x%.4x" % c - elif c <= 0x100000: return r"\y%.5x" % c - else: return r"\z%.6x" % c - -def getNotationOrd(s, notation=None): - if not notation: notation = config.conf["brailleExtender"]["undefinedCharReprMethod"] - matches = { - configBE.CHOICE_bin: bin, - configBE.CHOICE_oct: oct, - configBE.CHOICE_dec: lambda s: s, - configBE.CHOICE_hex: hex, - configBE.CHOICE_liblouis: getLiblouisStyle, - } - fn = matches[notation] - s = getTextInBraille(''.join(["'%s'" % fn(ord(c)) for c in s])) - return s - -def undefinedCharProcess(self): - extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) - unicodeBrailleRepr = ''.join([chr(10240 + cell) for cell in self.brailleCells]) - allBraillePos = [m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr)] - allExtendedPos = {} - for c, v in extendedSymbolsRawText.items(): - for start, end in v[1]: allExtendedPos[start] = end - if not allBraillePos: return - if config.conf["brailleExtender"]["undefinedCharDesc"]: - start = config.conf["brailleExtender"]["undefinedCharStart"] - end = config.conf["brailleExtender"]["undefinedCharEnd"] - if start: start = getTextInBraille(start) - if end: end = getTextInBraille(end) - replacements = {braillePos: - getTextInBraille( - ( - getDescChar( - self.rawText[self.brailleToRawPos[braillePos]:allExtendedPos[self.brailleToRawPos[braillePos]]], - lang=config.conf["brailleExtender"]["undefinedCharLang"], - start=start, - end=f":{allExtendedPos[self.brailleToRawPos[braillePos]] - self.brailleToRawPos[braillePos]}{end}" + getDescChar(self.rawText[self.brailleToRawPos[braillePos]], lang=config.conf["brailleExtender"]["undefinedCharLang"], start=start, end=end) - ) - ) if self.brailleToRawPos[braillePos] in allExtendedPos else getDescChar( - self.rawText[self.brailleToRawPos[braillePos]], - lang=config.conf["brailleExtender"]["undefinedCharLang"], - start=start, - end=end - ), - table=[config.conf["brailleExtender"]["undefinedCharBrailleTable"]] - ) for braillePos in allBraillePos} - elif config.conf["brailleExtender"]["undefinedCharReprMethod"] in [configBE.CHOICE_HUC6, configBE.CHOICE_HUC8]: - HUC6 = config.conf["brailleExtender"]["undefinedCharReprMethod"] == configBE.CHOICE_HUC6 - replacements = {braillePos: huc.translate(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos} - else: - replacements = {braillePos: getNotationOrd(self.rawText[self.brailleToRawPos[braillePos]]) for braillePos in allBraillePos} - newBrailleCells = [] - newBrailleToRawPos = [] - newRawToBraillePos = [] - lenBrailleToRawPos = len(self.brailleToRawPos) - alreadyDone = [] - i = 0 - for iBrailleCells, brailleCells in enumerate(self.brailleCells): - brailleToRawPos = self.brailleToRawPos[iBrailleCells] - if iBrailleCells in replacements and not replacements[iBrailleCells].startswith(undefinedCharPattern[0]): - toAdd = [ord(c)-10240 for c in replacements[iBrailleCells]] - newBrailleCells += toAdd - newBrailleToRawPos += [i] * len(toAdd) - alreadyDone += list(range(iBrailleCells, iBrailleCells+3)) - i += 1 - else: - if iBrailleCells in alreadyDone: continue - newBrailleCells.append(self.brailleCells[iBrailleCells]) - newBrailleToRawPos += [i] - if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[iBrailleCells+1] != brailleToRawPos: - i += 1 - pos = -42 - for i, brailleToRawPos in enumerate(newBrailleToRawPos): - if brailleToRawPos != pos: - pos = brailleToRawPos - newRawToBraillePos.append(i) - self.brailleCells = newBrailleCells - self.brailleToRawPos = newBrailleToRawPos - self.rawToBraillePos = newRawToBraillePos - if self.cursorPos: self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] - # self.brailleCells self.rawText self.rawToBraillePos self.brailleToRawPos #: braille.TextInfoRegion.nextLine() def nextLine(self): @@ -452,11 +329,12 @@ def input_(self, dots): res = '' abreviations = advancedInputMode.getReplacements([advancedInputStr]) startUnicodeValue = "⠃⠙⠓⠕⠭⡃⡙⡓⡕⡭" - if not abreviations and advancedInputStr[0] in startUnicodeValue: advancedInputStr = config.conf["brailleExtender"]["advancedInputMode"]["startSign"] + advancedInputStr - if advancedInputStr == config.conf["brailleExtender"]["advancedInputMode"]["startSign"] or (advancedInputStr.startswith(config.conf["brailleExtender"]["advancedInputMode"]["startSign"]) and len(advancedInputStr) > 1 and advancedInputStr[1] in startUnicodeValue): + if not abreviations and advancedInputStr[0] in startUnicodeValue: advancedInputStr = config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] + advancedInputStr + lenEscapeSign = len(config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"]) + if advancedInputStr == config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] or (advancedInputStr.startswith(config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"]) and len(advancedInputStr) > lenEscapeSign and advancedInputStr[lenEscapeSign] in startUnicodeValue): equiv = {'⠃': 'b', '⠙': 'd', '⠓': 'h', '⠕': 'o', '⠭': 'x', '⡃': 'B', '⡙': 'D', '⡓': 'H', '⡕': 'O', '⡭': 'X'} if advancedInputStr[-1] == '⠀': - text = equiv[advancedInputStr[1]] + louis.backTranslate(getCurrentBrailleTables(True), advancedInputStr[2:-1])[0] + text = equiv[advancedInputStr[1]] + louis.backTranslate(getCurrentBrailleTables(True, brf=instanceGP.BRFMode), advancedInputStr[2:-1])[0] try: res = getCharFromValue(text) sendChar(res) @@ -533,7 +411,7 @@ def _translate(self, endWord): mode = louis.dotsIO | louis.noUndefinedDots if (not self.currentFocusIsTextObj or self.currentModifiers) and self._table.contracted: mode |= louis.partialTrans - self.bufferText = louis.backTranslate(getCurrentBrailleTables(True), + self.bufferText = louis.backTranslate(getCurrentBrailleTables(True, brf=instanceGP.BRFMode), data, mode=mode)[0] newText = self.bufferText[oldTextLen:] if newText: @@ -593,9 +471,3 @@ def _createTablesString(tablesList): globalCommands.GlobalCommands.script_braille_routeTo = script_braille_routeTo louis._createTablesString = _createTablesString script_braille_routeTo.__doc__ = origFunc["script_braille_routeTo"].__doc__ - -try: - extendedSymbols = getExtendedSymbols(config.conf["brailleExtender"]["undefinedCharLang"]) -except BaseException as err: - extendedSymbols = {} - log.error(f"Unable to load extended symbols for %s: %s" % (config.conf["brailleExtender"]["undefinedCharLang"], err)) diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index bff48938..c4fca195 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -26,6 +26,8 @@ from . import configBE from . import utils from .common import * +from . import advancedInputMode +from . import undefinedChars instanceGP = None def notImplemented(msg='', style=wx.OK|wx.ICON_INFORMATION): @@ -354,33 +356,6 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) - # Translators: label of a dialog. - label = _("Representation of &undefined characters") - choices = [ - _("Use braille table behavior"), - _("Dots 1-8 (⣿)"), - _("Dots 1-6 (⠿)"), - _("Empty cell (⠀)"), - _("Other dot pattern (e.g.: 6-123456)"), - _("Question mark (depending output table)"), - _("Other sign/pattern (e.g.: \, ??)"), - _("Hexadecimal, Liblouis style"), - _("Hexadecimal, HUC8"), - _("Hexadecimal, HUC6"), - _("Hexadecimal"), - _("Decimal"), - _("Octal"), - _("Binary") - ] - self.undefinedCharReprList = sHelper.addLabeledControl(label, wx.Choice, choices=choices) - self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) - self.undefinedCharReprList.SetSelection(config.conf["brailleExtender"]["undefinedCharReprMethod"]) - # Translators: label of a dialog. - self.undefinedCharReprEdit = sHelper.addLabeledControl(_("Specify another pattern"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharRepr"]) - self.onUndefinedCharReprList() - self.undefinedCharsBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Description of undefined characters"), wx.DefaultPosition) - self.undefinedCharsBtn.Bind(wx.EVT_BUTTON, self.onUndefinedCharsBtn) - self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) sHelper.addItem(bHelper1) @@ -394,19 +369,11 @@ def onSave(self): postTableID = self.postTable.GetSelection() postTable = "None" if postTableID == 0 else configBE.tablesFN[postTableID] config.conf["brailleExtender"]["postTable"] = postTable - if ((self.tabSpace.IsChecked() and config.conf["brailleExtender"]["tabSpace"] != self.tabSpace.IsChecked()) - or (self.undefinedCharReprList.GetSelection() != 0 and config.conf["brailleExtender"]["undefinedCharReprMethod"] != self.undefinedCharReprList.GetSelection())): + if self.tabSpace.IsChecked() and config.conf["brailleExtender"]["tabSpace"] != self.tabSpace.IsChecked(): restartRequired = True else: restartRequired = False config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD] = self.tabSize.Value - config.conf["brailleExtender"]["undefinedCharReprMethod"] = self.undefinedCharReprList.GetSelection() - repr_ = self.undefinedCharReprEdit.Value - if self.undefinedCharReprList.GetSelection() == configBE.CHOICE_otherDots: - repr_ = re.sub("[^0-8\-]", "", repr_).strip('-') - repr_ = re.sub('\-+','-', repr_) - config.conf["brailleExtender"]["undefinedCharRepr"] = repr_ - instanceGP.reloadBrailleTables() if restartRequired: res = gui.messageBox( _("NVDA must be restarted for some new options to take effect. Do you want restart now?"), @@ -469,15 +436,6 @@ def changeSwitch(self, tbl, direction=1, loop=True): else: return self.setCurrentSelection(tbl, newDir) - def onUndefinedCharReprList(self, evt=None): - selected = self.undefinedCharReprList.GetSelection() - if selected in [configBE.CHOICE_otherDots, configBE.CHOICE_otherSign]: self.undefinedCharReprEdit.Enable() - else: self.undefinedCharReprEdit.Disable() - - def onUndefinedCharsBtn(self, evt): - undefinedCharsDlg = UndefinedCharsDlg(self, multiInstanceAllowed=True) - undefinedCharsDlg.ShowModal() - def onCustomBrailleTablesBtn(self, evt): customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) customBrailleTablesDlg.ShowModal() @@ -510,61 +468,6 @@ def onTables(self, evt): utils.refreshBD() else: evt.Skip() -class AdvancedInputModeDlg(gui.settingsDialogs.SettingsPanel): - - # Translators: title of a dialog. - title = _("Advanced input mode") - - def makeSettings(self, settingsSizer): - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - - # Translators: label of a dialog. - self.stopAdvancedInputModeAfterOneChar = sHelper.addItem(wx.CheckBox(self, label=_("E&xit the advanced input mode after typing one pattern"))) - self.stopAdvancedInputModeAfterOneChar.SetValue(config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"]) - - def onSave(self): - config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"] = self.stopAdvancedInputModeAfterOneChar.IsChecked() - - -class UndefinedCharsDlg(gui.settingsDialogs.SettingsDialog): - - # Translators: title of a dialog. - title = "Braille Extender - %s" % _("Description of undefined characters") - - def makeSettings(self, settingsSizer): - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - self.undefinedCharDesc = sHelper.addItem(wx.CheckBox(self, label=_("Describe undefined characters if possible"))) - self.undefinedCharDesc.SetValue(config.conf["brailleExtender"]["undefinedCharDesc"]) - self.undefinedCharStart = sHelper.addLabeledControl(_("Start tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharStart"]) - self.undefinedCharEnd = sHelper.addLabeledControl(_("End tag"), wx.TextCtrl, value=config.conf["brailleExtender"]["undefinedCharEnd"]) - values = [lang[1] for lang in languageHandler.getAvailableLanguages()] - keys = [lang[0] for lang in languageHandler.getAvailableLanguages()] - undefinedCharLang = config.conf["brailleExtender"]["undefinedCharLang"] - if not undefinedCharLang in keys: undefinedCharLang = keys[-1] - undefinedCharLangID = keys.index(undefinedCharLang) - self.undefinedCharLang = sHelper.addLabeledControl(_("Language"), wx.Choice, choices=values) - self.undefinedCharLang.SetSelection(undefinedCharLangID) - values = [_("Use the current output table")] + [table.displayName for table in configBE.tables if table.output] - keys = ["current"] + [table.fileName for table in configBE.tables if table.output] - undefinedCharBrailleTable = config.conf["brailleExtender"]["undefinedCharBrailleTable"] - if undefinedCharBrailleTable not in configBE.tablesFN + ["current"]: undefinedCharBrailleTable = "current" - undefinedCharBrailleTableID = keys.index(undefinedCharBrailleTable) - self.undefinedCharBrailleTable = sHelper.addLabeledControl(_("Braille table"), wx.Choice, choices=values) - self.undefinedCharBrailleTable.SetSelection(undefinedCharBrailleTableID) - - - def postInit(self): self.undefinedCharDesc.SetFocus() - - def onOk(self, evt): - config.conf["brailleExtender"]["undefinedCharDesc"] = self.undefinedCharDesc.IsChecked() - config.conf["brailleExtender"]["undefinedCharStart"] = self.undefinedCharStart.Value - config.conf["brailleExtender"]["undefinedCharEnd"] = self.undefinedCharEnd.Value - config.conf["brailleExtender"]["undefinedCharLang"] = languageHandler.getAvailableLanguages()[self.undefinedCharLang.GetSelection()][0] - undefinedCharBrailleTable = self.undefinedCharBrailleTable.GetSelection() - keys = ["current"] + [table.fileName for table in configBE.tables if table.output] - config.conf["brailleExtender"]["undefinedCharBrailleTable"] = keys[undefinedCharBrailleTable] - super(UndefinedCharsDlg, self).onOk(evt) - class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): @@ -988,8 +891,9 @@ class AddonSettingsDialog(gui.settingsDialogs.MultiCategorySettingsDialog): GeneralDlg, AttribraDlg, BrailleTablesDlg, + undefinedChars.SettingsDlg, + advancedInputMode.SettingsDlg, RoleLabelsDlg, - AdvancedInputModeDlg ] def __init__(self, parent, initialCategory=None): diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py new file mode 100644 index 00000000..601dd305 --- /dev/null +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -0,0 +1,428 @@ +# coding: utf-8 +# undefinedChars.py +# Part of BrailleExtender addon for NVDA +# Copyright 2016-2020 André-Abush CLAUSE, released under GPL. +from collections import namedtuple +import codecs +import json +import re +import gui +import wx + +import addonHandler + +addonHandler.initTranslation() +import brailleInput +import brailleTables +import characterProcessing +import config +import louis + +from .common import * +from .utils import getTextInBraille +from . import configBE +from . import huc +from .utils import getCurrentBrailleTables + +HUCDotPattern = "12345678-78-12345678" +undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) + + +def setUndefinedChar(t=None): + if not t or t > CHOICE_HUC6 or t < 0: + t = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + if t == 0: + return + c = [ + "default", + "12345678", + "123456", + "0", + config.conf["brailleExtender"]["undefinedCharsRepr"]["hardDotPatternValue"], + "questionMark", + "sign", + ] + [HUCDotPattern] * 7 + v = c[t] + if v in ["questionMark", "sign"]: + if v == "questionMark": + s = "?" + else: + s = config.conf["brailleExtender"]["undefinedCharsRepr"][""] + v = huc.unicodeBrailleToDescription( + getTextInBraille(s, getCurrentBrailleTables()) + ) + louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + + +def getExtendedSymbolsForString(s: str) -> dict: + return { + c: (d, [(m.start(), m.end()) for m in re.finditer(c, s)]) + for c, d in extendedSymbols.items() + if c in s + } + + +def getDescChar(c, lang="Windows", start="", end=""): + if lang == "Windows": + lang = languageHandler.getLanguage() + desc = characterProcessing.processSpeechSymbols( + lang, c, characterProcessing.SYMLVL_CHAR + ).replace(' ', '').strip() + if not desc or desc == c: + if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, + ]: + HUC6 = ( + config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + == configBE.CHOICE_HUC6 + ) + return huc.translate(c, HUC6=HUC6) + else: + return getTextInBraille("".join(getUnicodeNotation(c))) + return f"{start}{desc}{end}" + + +def getLiblouisStyle(c): + if c < 0x10000: + return r"\x%.4x" % c + elif c <= 0x100000: + return r"\y%.5x" % c + else: + return r"\z%.6x" % c + + +def getUnicodeNotation(s, notation=None): + if not notation: + notation = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + matches = { + configBE.CHOICE_bin: bin, + configBE.CHOICE_oct: oct, + configBE.CHOICE_dec: lambda s: s, + configBE.CHOICE_hex: hex, + configBE.CHOICE_liblouis: getLiblouisStyle, + } + fn = matches[notation] + s = getTextInBraille("".join(["'%s'" % fn(ord(c)) for c in s])) + return s + + +def undefinedCharProcess(self): + extendedSymbolsRawText = {} + if config.conf["brailleExtender"]["undefinedCharsRepr"]["extendedDesc"]: + extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) + unicodeBrailleRepr = "".join([chr(10240 + cell) for cell in self.brailleCells]) + allBraillePos = [ + m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr) + ] + allExtendedPos = {} + for c, v in extendedSymbolsRawText.items(): + for start, end in v[1]: + allExtendedPos[start] = end + if not allBraillePos: + return + if config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"]: + start = config.conf["brailleExtender"]["undefinedCharsRepr"]["start"] + end = config.conf["brailleExtender"]["undefinedCharsRepr"]["end"] + if start: + start = getTextInBraille(start) + if end: + end = getTextInBraille(end) + replacements = { + braillePos: getTextInBraille( + ( + getDescChar( + self.rawText[ + self.brailleToRawPos[braillePos] : allExtendedPos[ + self.brailleToRawPos[braillePos] + ] + ], + lang=config.conf["brailleExtender"]["undefinedCharsRepr"][ + "lang" + ], + start=start, + end=f":{allExtendedPos[self.brailleToRawPos[braillePos]] - self.brailleToRawPos[braillePos]}{end}" + + getDescChar( + self.rawText[self.brailleToRawPos[braillePos]], + lang=config.conf["brailleExtender"]["undefinedCharsRepr"][ + "lang" + ], + start=start, + end=end, + ), + ) + ) + if self.brailleToRawPos[braillePos] in allExtendedPos + else getDescChar( + self.rawText[self.brailleToRawPos[braillePos]], + lang=config.conf["brailleExtender"]["undefinedCharsRepr"]["lang"], + start=start, + end=end, + ), + table=[config.conf["brailleExtender"]["undefinedCharsRepr"]["table"]], + ) + for braillePos in allBraillePos + } + elif config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, + ]: + HUC6 = ( + config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + == configBE.CHOICE_HUC6 + ) + replacements = { + braillePos: huc.translate( + self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6 + ) + for braillePos in allBraillePos + } + else: + replacements = { + braillePos: getUnicodeNotation( + self.rawText[self.brailleToRawPos[braillePos]] + ) + for braillePos in allBraillePos + } + newBrailleCells = [] + newBrailleToRawPos = [] + newRawToBraillePos = [] + lenBrailleToRawPos = len(self.brailleToRawPos) + alreadyDone = [] + i = 0 + for iBrailleCells, brailleCells in enumerate(self.brailleCells): + brailleToRawPos = self.brailleToRawPos[iBrailleCells] + if iBrailleCells in replacements and not replacements[iBrailleCells].startswith( + undefinedCharPattern[0] + ): + toAdd = [ord(c) - 10240 for c in replacements[iBrailleCells]] + newBrailleCells += toAdd + newBrailleToRawPos += [i] * len(toAdd) + alreadyDone += list(range(iBrailleCells, iBrailleCells + 3)) + i += 1 + else: + if iBrailleCells in alreadyDone: + continue + newBrailleCells.append(self.brailleCells[iBrailleCells]) + newBrailleToRawPos += [i] + if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[ + iBrailleCells + 1 + ] != brailleToRawPos: + i += 1 + pos = -42 + for i, brailleToRawPos in enumerate(newBrailleToRawPos): + if brailleToRawPos != pos: + pos = brailleToRawPos + newRawToBraillePos.append(i) + self.brailleCells = newBrailleCells + self.brailleToRawPos = newBrailleToRawPos + self.rawToBraillePos = newRawToBraillePos + if self.cursorPos: + self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] + + +class SettingsDlg(gui.settingsDialogs.SettingsPanel): + + # Translators: title of a dialog. + title = _("Representation of undefined characters") + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + # Translators: label of a dialog. + label = _("Representation &method") + dotPatternSample = "6-12345678" + signPatternSample = "??" + choices = [ + _("Use braille table behavior"), + _("Dots 1-8 (⣿)"), + _("Dots 1-6 (⠿)"), + _("Empty cell (⠀)"), + _(f"Other dot pattern (e.g.: {dotPatternSample})"), + _("Question mark (depending output table)"), + _(f"Other sign/pattern (e.g.: {signPatternSample})"), + _("Hexadecimal, Liblouis style"), + _("Hexadecimal, HUC8"), + _("Hexadecimal, HUC6"), + _("Hexadecimal"), + _("Decimal"), + _("Octal"), + _("Binary"), + ] + self.undefinedCharReprList = sHelper.addLabeledControl( + label, wx.Choice, choices=choices + ) + self.undefinedCharReprList.SetSelection( + config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + ) + self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) + # Translators: label of a dialog. + self.undefinedCharReprEdit = sHelper.addLabeledControl( + _("Specify another pattern"), wx.TextCtrl, value=self.getHardValue() + ) + self.onUndefinedCharReprList() + self.undefinedCharDesc = sHelper.addItem( + wx.CheckBox(self, label=_("Describe undefined characters if possible")) + ) + self.undefinedCharDesc.SetValue( + config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"] + ) + self.undefinedCharDesc.Bind(wx.EVT_CHECKBOX, self.onUndefinedCharDesc) + self.undefinedCharExtendedDesc = sHelper.addItem( + wx.CheckBox( + self, label=_("Also describe extended characters (e.g.: country flags)") + ) + ) + self.undefinedCharExtendedDesc.SetValue( + config.conf["brailleExtender"]["undefinedCharsRepr"]["extendedDesc"] + ) + self.undefinedCharStart = sHelper.addLabeledControl( + _("Start tag"), + wx.TextCtrl, + value=config.conf["brailleExtender"]["undefinedCharsRepr"]["start"], + ) + self.undefinedCharEnd = sHelper.addLabeledControl( + _("End tag"), + wx.TextCtrl, + value=config.conf["brailleExtender"]["undefinedCharsRepr"]["end"], + ) + values = [lang[1] for lang in languageHandler.getAvailableLanguages()] + keys = [lang[0] for lang in languageHandler.getAvailableLanguages()] + undefinedCharLang = config.conf["brailleExtender"]["undefinedCharsRepr"]["lang"] + if not undefinedCharLang in keys: + undefinedCharLang = keys[-1] + undefinedCharLangID = keys.index(undefinedCharLang) + self.undefinedCharLang = sHelper.addLabeledControl( + _("Language"), wx.Choice, choices=values + ) + self.undefinedCharLang.SetSelection(undefinedCharLangID) + values = [_("Use the current output table")] + [ + table.displayName for table in configBE.tables if table.output + ] + keys = ["current"] + [ + table.fileName for table in configBE.tables if table.output + ] + undefinedCharTable = config.conf["brailleExtender"]["undefinedCharsRepr"][ + "table" + ] + if undefinedCharTable not in configBE.tablesFN + ["current"]: + undefinedCharTable = "current" + undefinedCharTableID = keys.index(undefinedCharTable) + self.undefinedCharTable = sHelper.addLabeledControl( + _("Braille table"), wx.Choice, choices=values + ) + self.undefinedCharTable.SetSelection(undefinedCharTableID) + + def getHardValue(self): + selected = self.undefinedCharReprList.GetSelection() + if selected == configBE.CHOICE_otherDots: + return config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardDotPatternValue" + ] + elif selected == configBE.CHOICE_otherSign: + return config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardSignPatternValue" + ] + else: + return "" + + def onUndefinedCharDesc(self, evt): + l = [ + self.undefinedCharReprEdit, + self.undefinedCharExtendedDesc, + self.undefinedCharStart, + self.undefinedCharEnd, + self.undefinedCharLang, + self.undefinedCharTable, + ] + for e in l: + if self.undefinedCharDesc.IsChecked(): + e.Enable() + else: + e.Disable() + + def onUndefinedCharReprList(self, evt=None): + selected = self.undefinedCharReprList.GetSelection() + if selected in [configBE.CHOICE_otherDots, configBE.CHOICE_otherSign]: + self.undefinedCharReprEdit.Enable() + else: + self.undefinedCharReprEdit.Disable() + self.undefinedCharReprEdit.SetValue(self.getHardValue()) + + def postInit(self): + self.undefinedCharDesc.SetFocus() + + def onSave(self): + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "method" + ] = self.undefinedCharReprList.GetSelection() + repr_ = self.undefinedCharReprEdit.Value + if self.undefinedCharReprList.GetSelection() == configBE.CHOICE_otherDots: + repr_ = re.sub("[^0-8\-]", "", repr_).strip("-") + repr_ = re.sub("\-+", "-", repr_) + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardDotPatternValue" + ] = repr_ + else: + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardSignPatternValue" + ] = repr_ + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "desc" + ] = self.undefinedCharDesc.IsChecked() + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "extendedDesc" + ] = self.undefinedCharExtendedDesc.IsChecked() + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "start" + ] = self.undefinedCharStart.Value + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "end" + ] = self.undefinedCharEnd.Value + config.conf["brailleExtender"]["undefinedCharsRepr"][ + "lang" + ] = languageHandler.getAvailableLanguages()[ + self.undefinedCharLang.GetSelection() + ][ + 0 + ] + undefinedCharTable = self.undefinedCharTable.GetSelection() + keys = ["current"] + [ + table.fileName for table in configBE.tables if table.output + ] + config.conf["brailleExtender"]["undefinedCharsRepr"]["table"] = keys[ + undefinedCharTable + ] + + +def getExtendedSymbols(locale): + if locale == "Windows": + locale = languageHandler.getLanguage() + try: + b, u = characterProcessing._getSpeechSymbolsForLocale(locale) + except LookupError: + b, u = characterProcessing._getSpeechSymbolsForLocale(locale.split("_")[0]) + a = { + k.strip(): v.replacement.replace(' ', '').strip() + for k, v in b.symbols.items() + if len(k) > 1 + } + a.update( + { + k.strip(): v.replacement.replace(' ', '').strip() + for k, v in u.symbols.items() + if len(k) > 1 + } + ) + return a + + +try: + extendedSymbols = getExtendedSymbols( + config.conf["brailleExtender"]["undefinedCharsRepr"]["lang"] + ) +except BaseException as err: + extendedSymbols = {} + log.error( + f"Unable to load extended symbols for %s: %s" + % (config.conf["brailleExtender"]["undefinedCharsRepr"]["lang"], err) + ) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index b11f14f3..33285c52 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -7,7 +7,9 @@ import os.path as osp import re import api +import appModuleHandler import braille +import brailleInput import brailleTables import characterProcessing import louis @@ -24,6 +26,7 @@ import unicodedata from .common import * from . import huc +from . import dictionaries charToDotsInLouis = hasattr(louis, "charToDots") @@ -460,12 +463,21 @@ def getCharFromValue(s): n = int(n, b) return chr(n) -def getExtendedSymbols(locale): - if locale == "Windows": locale = languageHandler.getLanguage() - try: - b, u = characterProcessing._getSpeechSymbolsForLocale(locale) - except LookupError: - b, u = characterProcessing._getSpeechSymbolsForLocale(locale.split('_')[0]) - a = {k: v.replacement.replace("  ", " ") for k, v in b.symbols.items() if len(k) > 1} - a.update({k: v.replacement.replace("  ", " ") for k, v in u.symbols.items() if len(k) > 1}) - return a +def getCurrentBrailleTables(input_=False, brf=False): + if brf: + tables = [ + os.path.join(baseDir, "res", "brf.ctb").encode("UTF-8"), + os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") + ] + else: + tables = [] + app = appModuleHandler.getAppModuleForNVDAObject(api.getNavigatorObject()) + if brailleInput.handler._table.fileName == config.conf["braille"]["translationTable"] and app and app.appName != "nvda": tables += dictionaries.dictTables + if input_: mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) + else: mainTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) + tables += [ + mainTable, + os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") + ] + return tables + From 481d9f487973a6b852d0add46eee267557075a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 8 Apr 2020 23:21:28 +0200 Subject: [PATCH 51/87] fixup --- .../brailleExtender/undefinedChars.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index 601dd305..dc9e3a70 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -27,6 +27,18 @@ HUCDotPattern = "12345678-78-12345678" undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) +def getHardValue(): + selected = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + if selected == configBE.CHOICE_otherDots: + return config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardDotPatternValue" + ] + elif selected == configBE.CHOICE_otherSign: + return config.conf["brailleExtender"]["undefinedCharsRepr"][ + "hardSignPatternValue" + ] + else: + return "" def setUndefinedChar(t=None): if not t or t > CHOICE_HUC6 or t < 0: @@ -47,7 +59,7 @@ def setUndefinedChar(t=None): if v == "questionMark": s = "?" else: - s = config.conf["brailleExtender"]["undefinedCharsRepr"][""] + s = getHardValue() v = huc.unicodeBrailleToDescription( getTextInBraille(s, getCurrentBrailleTables()) ) From 715cfd049d3db1cc3debaf75d2ba69367c1dda25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 9 Apr 2020 19:58:30 +0200 Subject: [PATCH 52/87] L10n updates for: da --- addon/locale/da/LC_MESSAGES/nvda.po | 1343 ++++++++++++++++++--------- 1 file changed, 893 insertions(+), 450 deletions(-) diff --git a/addon/locale/da/LC_MESSAGES/nvda.po b/addon/locale/da/LC_MESSAGES/nvda.po index 992c2dbc..6b2de2de 100644 --- a/addon/locale/da/LC_MESSAGES/nvda.po +++ b/addon/locale/da/LC_MESSAGES/nvda.po @@ -7,187 +7,187 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender 20.02.27:19953a8\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-02-27 15:39+0100\n" -"PO-Revision-Date: 2020-03-19 20:55+0100\n" +"POT-Creation-Date: 2020-04-02 01:47+0200\n" +"PO-Revision-Date: 2020-04-09 17:05+0200\n" +"Last-Translator: Daniel Gartmann \n" "Language-Team: \n" +"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" -"Last-Translator: Daniel Gartmann \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: da\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,398,-1,-1,-1,-1,-1\n" -#: addon/globalPlugins/brailleExtender/__init__.py:61 +#: addon\globalPlugins\brailleExtender\__init__.py:63 msgid "Default" msgstr "Standard" -#: addon/globalPlugins/brailleExtender/__init__.py:62 +#: addon\globalPlugins\brailleExtender\__init__.py:64 msgid "Moving in the text" msgstr "Flytter i teksten" -#: addon/globalPlugins/brailleExtender/__init__.py:63 +#: addon\globalPlugins\brailleExtender\__init__.py:65 msgid "Text selection" msgstr "Tekstvalg" -#: addon/globalPlugins/brailleExtender/__init__.py:64 +#: addon\globalPlugins\brailleExtender\__init__.py:66 msgid "Objects" msgstr "Objekter" -#: addon/globalPlugins/brailleExtender/__init__.py:65 +#: addon\globalPlugins\brailleExtender\__init__.py:67 msgid "Review" msgstr "Gennemsyn" -#: addon/globalPlugins/brailleExtender/__init__.py:66 +#: addon\globalPlugins\brailleExtender\__init__.py:68 msgid "Links" msgstr "Links" -#: addon/globalPlugins/brailleExtender/__init__.py:67 +#: addon\globalPlugins\brailleExtender\__init__.py:69 msgid "Unvisited links" msgstr "Ikke-besøgte links" -#: addon/globalPlugins/brailleExtender/__init__.py:68 +#: addon\globalPlugins\brailleExtender\__init__.py:70 msgid "Visited links" msgstr "Besøgte links" -#: addon/globalPlugins/brailleExtender/__init__.py:69 +#: addon\globalPlugins\brailleExtender\__init__.py:71 msgid "Landmarks" msgstr "Landmærker" -#: addon/globalPlugins/brailleExtender/__init__.py:70 +#: addon\globalPlugins\brailleExtender\__init__.py:72 msgid "Headings" msgstr "Overskrifter" -#: addon/globalPlugins/brailleExtender/__init__.py:71 +#: addon\globalPlugins\brailleExtender\__init__.py:73 msgid "Headings at level 1" msgstr "Overskrifter på niveau 1" -#: addon/globalPlugins/brailleExtender/__init__.py:72 +#: addon\globalPlugins\brailleExtender\__init__.py:74 msgid "Headings at level 2" msgstr "Overskrifter på niveau 2" -#: addon/globalPlugins/brailleExtender/__init__.py:73 +#: addon\globalPlugins\brailleExtender\__init__.py:75 msgid "Headings at level 3" msgstr "Overskrifter på niveau 3" -#: addon/globalPlugins/brailleExtender/__init__.py:74 +#: addon\globalPlugins\brailleExtender\__init__.py:76 msgid "Headings at level 4" msgstr "Overskrifter på niveau 4" -#: addon/globalPlugins/brailleExtender/__init__.py:75 +#: addon\globalPlugins\brailleExtender\__init__.py:77 msgid "Headings at level 5" msgstr "Overskrifter på niveau 5" -#: addon/globalPlugins/brailleExtender/__init__.py:76 +#: addon\globalPlugins\brailleExtender\__init__.py:78 msgid "Headings at level 6" msgstr "Overskrifter på niveau 6" -#: addon/globalPlugins/brailleExtender/__init__.py:77 +#: addon\globalPlugins\brailleExtender\__init__.py:79 msgid "Lists" msgstr "Lister" -#: addon/globalPlugins/brailleExtender/__init__.py:78 +#: addon\globalPlugins\brailleExtender\__init__.py:80 msgid "List items" msgstr "Listeelementer" -#: addon/globalPlugins/brailleExtender/__init__.py:79 +#: addon\globalPlugins\brailleExtender\__init__.py:81 msgid "Graphics" msgstr "Grafik" -#: addon/globalPlugins/brailleExtender/__init__.py:80 +#: addon\globalPlugins\brailleExtender\__init__.py:82 msgid "Block quotes" msgstr "Blokcitater" -#: addon/globalPlugins/brailleExtender/__init__.py:81 +#: addon\globalPlugins\brailleExtender\__init__.py:83 msgid "Buttons" msgstr "Knapper" -#: addon/globalPlugins/brailleExtender/__init__.py:82 +#: addon\globalPlugins\brailleExtender\__init__.py:84 msgid "Form fields" msgstr "Formularfelter" -#: addon/globalPlugins/brailleExtender/__init__.py:83 +#: addon\globalPlugins\brailleExtender\__init__.py:85 msgid "Edit fields" msgstr "Editfelter" -#: addon/globalPlugins/brailleExtender/__init__.py:84 +#: addon\globalPlugins\brailleExtender\__init__.py:86 msgid "Radio buttons" msgstr "Radioknapper" -#: addon/globalPlugins/brailleExtender/__init__.py:85 +#: addon\globalPlugins\brailleExtender\__init__.py:87 msgid "Combo boxes" msgstr "Combo boxe" -#: addon/globalPlugins/brailleExtender/__init__.py:86 +#: addon\globalPlugins\brailleExtender\__init__.py:88 msgid "Check boxes" msgstr "Check boxe" -#: addon/globalPlugins/brailleExtender/__init__.py:87 +#: addon\globalPlugins\brailleExtender\__init__.py:89 msgid "Not link blocks" msgstr "Blokke uden links" -#: addon/globalPlugins/brailleExtender/__init__.py:88 +#: addon\globalPlugins\brailleExtender\__init__.py:90 msgid "Frames" msgstr "Rammer" -#: addon/globalPlugins/brailleExtender/__init__.py:89 +#: addon\globalPlugins\brailleExtender\__init__.py:91 msgid "Separators" msgstr "Separatorer" -#: addon/globalPlugins/brailleExtender/__init__.py:90 +#: addon\globalPlugins\brailleExtender\__init__.py:92 msgid "Embedded objects" msgstr "Indlejrede objekter" -#: addon/globalPlugins/brailleExtender/__init__.py:91 +#: addon\globalPlugins\brailleExtender\__init__.py:93 msgid "Annotations" msgstr "Annotationer" -#: addon/globalPlugins/brailleExtender/__init__.py:92 +#: addon\globalPlugins\brailleExtender\__init__.py:94 msgid "Spelling errors" msgstr "Stavefejl" -#: addon/globalPlugins/brailleExtender/__init__.py:93 +#: addon\globalPlugins\brailleExtender\__init__.py:95 msgid "Tables" msgstr "Tabeller" -#: addon/globalPlugins/brailleExtender/__init__.py:94 +#: addon\globalPlugins\brailleExtender\__init__.py:96 msgid "Move in table" msgstr "Flytte i tabel" -#: addon/globalPlugins/brailleExtender/__init__.py:100 +#: addon\globalPlugins\brailleExtender\__init__.py:102 msgid "If pressed twice, presents the information in browse mode" msgstr "Ved to tryk vises informationen i gennemsynstilstand" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon\globalPlugins\brailleExtender\__init__.py:254 msgid "Docu&mentation" msgstr "Doku&mentation" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon\globalPlugins\brailleExtender\__init__.py:254 msgid "Opens the addon's documentation." msgstr "Åbner tilfføjelsesprogrammets dokumentation." -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon\globalPlugins\brailleExtender\__init__.py:260 msgid "&Settings" msgstr "&Indstillinger" -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon\globalPlugins\brailleExtender\__init__.py:260 msgid "Opens the addons' settings." msgstr "Åbner tilføjelsesprogrammets indstillinger" -#: addon/globalPlugins/brailleExtender/__init__.py:265 +#: addon\globalPlugins\brailleExtender\__init__.py:267 msgid "Braille &dictionaries" msgstr "Punktskrift&ordbøger" -#: addon/globalPlugins/brailleExtender/__init__.py:265 +#: addon\globalPlugins\brailleExtender\__init__.py:267 msgid "'Braille dictionaries' menu" msgstr "Menuen 'Punktskriftordbøger'" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon\globalPlugins\brailleExtender\__init__.py:268 msgid "&Global dictionary" msgstr "&Global ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon\globalPlugins\brailleExtender\__init__.py:268 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -195,11 +195,11 @@ msgstr "" "En dialog til at lave en global ordbog ved at tilføje ordbogselementer til " "listen." -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon\globalPlugins\brailleExtender\__init__.py:270 msgid "&Table dictionary" msgstr "&Tabel-specifik ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon\globalPlugins\brailleExtender\__init__.py:270 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -207,11 +207,11 @@ msgstr "" "En dialog, hvor der kan angives en tabel-specifick ordbog ved at tilføje " "ordbogsemner til listen." -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon\globalPlugins\brailleExtender\__init__.py:272 msgid "Te&mporary dictionary" msgstr "Mi&dlertidig ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon\globalPlugins\brailleExtender\__init__.py:272 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." @@ -219,119 +219,120 @@ msgstr "" "En dialog, hvor der kan angives en midlertidig ordbog ved at tilføje " "ordbogsemner til listen." -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon\globalPlugins\brailleExtender\__init__.py:275 msgid "&Quick launches" msgstr "&Hurtigstartere" -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon\globalPlugins\brailleExtender\__init__.py:275 msgid "Quick launches configuration" msgstr "Opsætning af Hurtigstartere" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon\globalPlugins\brailleExtender\__init__.py:281 msgid "&Profile editor" msgstr "&Profileditor" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon\globalPlugins\brailleExtender\__init__.py:281 msgid "Profile editor" msgstr "Profileditor" -#: addon/globalPlugins/brailleExtender/__init__.py:285 +#: addon\globalPlugins\brailleExtender\__init__.py:287 msgid "Overview of the current input braille table" msgstr "Oversigt over den aktuelle indtastningstabel" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon\globalPlugins\brailleExtender\__init__.py:289 msgid "Reload add-on" msgstr "Genindlæs tilføjelsesprogram" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon\globalPlugins\brailleExtender\__init__.py:289 msgid "Reload this add-on." msgstr "Genindlæs dette tilføjelsesprogram." -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon\globalPlugins\brailleExtender\__init__.py:291 msgid "&Check for update" msgstr "&Søg efter opdateringer" -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon\globalPlugins\brailleExtender\__init__.py:291 msgid "Checks if update is available" msgstr "Undersøger, om der er opdateringer" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon\globalPlugins\brailleExtender\__init__.py:293 msgid "&Website" msgstr "&Website" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon\globalPlugins\brailleExtender\__init__.py:293 msgid "Open addon's website." msgstr "Åbn tilføjelsesprogrammets website." -#: addon/globalPlugins/brailleExtender/__init__.py:293 +#: addon\globalPlugins\brailleExtender\__init__.py:295 msgid "&Braille Extender" msgstr "&Udvidelse til Punktskrift" -#: addon/globalPlugins/brailleExtender/__init__.py:297 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:310 +#: addon\globalPlugins\brailleExtender\dictionaries.py:343 msgid "Global dictionary" msgstr "Global ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:302 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:315 +#: addon\globalPlugins\brailleExtender\dictionaries.py:343 msgid "Table dictionary" msgstr "Tabel-specifik ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:306 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:319 +#: addon\globalPlugins\brailleExtender\dictionaries.py:343 msgid "Temporary dictionary" msgstr "Midlertidig ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:416 +#: addon\globalPlugins\brailleExtender\__init__.py:429 +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 msgid "Character" msgstr "Tegn" -#: addon/globalPlugins/brailleExtender/__init__.py:417 +#: addon\globalPlugins\brailleExtender\__init__.py:430 msgid "Word" msgstr "Ord" -#: addon/globalPlugins/brailleExtender/__init__.py:418 +#: addon\globalPlugins\brailleExtender\__init__.py:431 msgid "Line" msgstr "Linje" -#: addon/globalPlugins/brailleExtender/__init__.py:419 +#: addon\globalPlugins\brailleExtender\__init__.py:432 msgid "Paragraph" msgstr "Afsnit" -#: addon/globalPlugins/brailleExtender/__init__.py:420 +#: addon\globalPlugins\brailleExtender\__init__.py:433 msgid "Page" msgstr "Side" -#: addon/globalPlugins/brailleExtender/__init__.py:421 +#: addon\globalPlugins\brailleExtender\__init__.py:434 msgid "Document" msgstr "Dokument" -#: addon/globalPlugins/brailleExtender/__init__.py:457 +#: addon\globalPlugins\brailleExtender\__init__.py:470 msgid "Not available here" msgstr "Ikke tilgængelig her" -#: addon/globalPlugins/brailleExtender/__init__.py:475 -#: addon/globalPlugins/brailleExtender/__init__.py:497 +#: addon\globalPlugins\brailleExtender\__init__.py:488 +#: addon\globalPlugins\brailleExtender\__init__.py:510 msgid "Not supported here or browse mode not enabled" msgstr "Understøttes ikke her eller gennemsynstilstand ikke slået til" -#: addon/globalPlugins/brailleExtender/__init__.py:477 +#: addon\globalPlugins\brailleExtender\__init__.py:490 msgid "Select previous rotor setting" msgstr "Vælg forrige rotorindstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:478 +#: addon\globalPlugins\brailleExtender\__init__.py:491 msgid "Select next rotor setting" msgstr "Vælg næste rotorindstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:526 +#: addon\globalPlugins\brailleExtender\__init__.py:539 msgid "Move to previous item depending rotor setting" msgstr "Flytter til forrige element afhængig af rotor-indstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:527 +#: addon\globalPlugins\brailleExtender\__init__.py:540 msgid "Move to next item depending rotor setting" msgstr "Flytter til næste element afhængig af rotor-indstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:535 +#: addon\globalPlugins\brailleExtender\__init__.py:548 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" @@ -339,98 +340,115 @@ msgstr "" "Varierer alt efter rotor-indstilling. Fx: I objekt-tilstand svarer det til " "NVDA+enter" -#: addon/globalPlugins/brailleExtender/__init__.py:538 +#: addon\globalPlugins\brailleExtender\__init__.py:551 msgid "Move to previous item using rotor setting" msgstr "Flytter til forrige element alt efter rotor-indstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:539 +#: addon\globalPlugins\brailleExtender\__init__.py:552 msgid "Move to next item using rotor setting" msgstr "Flytter til næste element alt efter rotor-indstilling" -#: addon/globalPlugins/brailleExtender/__init__.py:543 +#: addon\globalPlugins\brailleExtender\__init__.py:556 #, python-format msgid "Braille keyboard %s" msgstr "Punktskrifttastatur %s" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:556 +#: addon\globalPlugins\brailleExtender\__init__.py:579 msgid "locked" msgstr "låst" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:556 +#: addon\globalPlugins\brailleExtender\__init__.py:579 msgid "unlocked" msgstr "låst op" -#: addon/globalPlugins/brailleExtender/__init__.py:544 +#: addon\globalPlugins\brailleExtender\__init__.py:557 msgid "Lock/unlock braille keyboard" msgstr "Lås/lås op for punktskrifttastatur" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#, python-format -msgid "Dots 7 and 8: %s" -msgstr "Punkterne 7 og 8: %s" +#: addon\globalPlugins\brailleExtender\__init__.py:561 +#: addon\globalPlugins\brailleExtender\__init__.py:567 +#: addon\globalPlugins\brailleExtender\__init__.py:574 +#: addon\globalPlugins\brailleExtender\__init__.py:585 +#: addon\globalPlugins\brailleExtender\__init__.py:653 +#: addon\globalPlugins\brailleExtender\__init__.py:659 +msgid "enabled" +msgstr "slået til" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 +#: addon\globalPlugins\brailleExtender\__init__.py:561 +#: addon\globalPlugins\brailleExtender\__init__.py:567 +#: addon\globalPlugins\brailleExtender\__init__.py:574 +#: addon\globalPlugins\brailleExtender\__init__.py:585 +#: addon\globalPlugins\brailleExtender\__init__.py:653 +#: addon\globalPlugins\brailleExtender\__init__.py:659 msgid "disabled" msgstr "slået fra" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 -msgid "enabled" -msgstr "slået til" +#: addon\globalPlugins\brailleExtender\__init__.py:562 +#, python-format +msgid "One hand mode %s" +msgstr "Enhåndstilstand %s" -#: addon/globalPlugins/brailleExtender/__init__.py:550 +#: addon\globalPlugins\brailleExtender\__init__.py:563 +#, fuzzy +#| msgid "Enable/disable BRF mode" +msgid "Enable/disable one hand mode feature" +msgstr "Slå BRF-tilstand til/fra" + +#: addon\globalPlugins\brailleExtender\__init__.py:567 +#, python-format +msgid "Dots 7 and 8: %s" +msgstr "Punkterne 7 og 8: %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:569 msgid "Hide/show dots 7 and 8" msgstr "Skjul/vis punkt 7 og 8" -#: addon/globalPlugins/brailleExtender/__init__.py:555 +#: addon\globalPlugins\brailleExtender\__init__.py:574 #, python-format msgid "BRF mode: %s" msgstr "BRF-tilstand: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:556 +#: addon\globalPlugins\brailleExtender\__init__.py:575 msgid "Enable/disable BRF mode" msgstr "Slå BRF-tilstand til/fra" -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:579 #, python-format msgid "Modifier keys %s" msgstr "Modifikationstaster %s" -#: addon/globalPlugins/brailleExtender/__init__.py:561 +#: addon\globalPlugins\brailleExtender\__init__.py:580 msgid "Lock/unlock modifiers keys" msgstr "Tryk/slip modifikationstaster" -#: addon/globalPlugins/brailleExtender/__init__.py:567 +#: addon\globalPlugins\brailleExtender\__init__.py:586 msgid "Enable/disable Attribra" msgstr "Slå Attribra til/fra" -#: addon/globalPlugins/brailleExtender/__init__.py:577 +#: addon\globalPlugins\brailleExtender\__init__.py:596 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "Hurtig adgang til indstillingen \"sig aktuel linje under rul i\"" -#: addon/globalPlugins/brailleExtender/__init__.py:582 +#: addon\globalPlugins\brailleExtender\__init__.py:601 msgid "Speech on" msgstr "Tale til" -#: addon/globalPlugins/brailleExtender/__init__.py:585 +#: addon\globalPlugins\brailleExtender\__init__.py:604 msgid "Speech off" msgstr "Tale fra" -#: addon/globalPlugins/brailleExtender/__init__.py:587 +#: addon\globalPlugins\brailleExtender\__init__.py:606 msgid "Toggle speech on or off" msgstr "Slår tale til eller fra" -#: addon/globalPlugins/brailleExtender/__init__.py:595 +#: addon\globalPlugins\brailleExtender\__init__.py:614 msgid "No extra info for this element" msgstr "Ingen yderligere oplysninger om dette emne" #. Translators: Input help mode message for report extra infos command. -#: addon/globalPlugins/brailleExtender/__init__.py:599 +#: addon\globalPlugins\brailleExtender\__init__.py:618 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -438,35 +456,35 @@ msgstr "" "Giver yderligere oplysninger om det aktuelle element. Det kan fx være " "adressen på et link" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon\globalPlugins\brailleExtender\__init__.py:623 msgid " Input table" msgstr "Indtastningstabel" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon\globalPlugins\brailleExtender\__init__.py:623 msgid "Output table" -msgstr "Oversættelsestabel" +msgstr "Visningstabel" -#: addon/globalPlugins/brailleExtender/__init__.py:606 +#: addon\globalPlugins\brailleExtender\__init__.py:625 #, python-format msgid "Table overview (%s)" msgstr "Tabelvisning (%s)" -#: addon/globalPlugins/brailleExtender/__init__.py:607 +#: addon\globalPlugins\brailleExtender\__init__.py:626 msgid "Display an overview of current input braille table" msgstr "" "Viser en oversigt over den aktuelt valgte punktskrifttabel til indtastning" -#: addon/globalPlugins/brailleExtender/__init__.py:612 -#: addon/globalPlugins/brailleExtender/__init__.py:620 -#: addon/globalPlugins/brailleExtender/__init__.py:627 +#: addon\globalPlugins\brailleExtender\__init__.py:631 +#: addon\globalPlugins\brailleExtender\__init__.py:639 +#: addon\globalPlugins\brailleExtender\__init__.py:646 msgid "No text selection" msgstr "Ingen tekst valgt" -#: addon/globalPlugins/brailleExtender/__init__.py:613 +#: addon\globalPlugins\brailleExtender\__init__.py:632 msgid "Unicode Braille conversion" msgstr "Unicode punktskriftkonvertering" -#: addon/globalPlugins/brailleExtender/__init__.py:614 +#: addon\globalPlugins\brailleExtender\__init__.py:633 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" @@ -474,11 +492,11 @@ msgstr "" "Konvertér den valgte tekst til unicode punktskrift og vis teksten i en " "navigérbar meddelelse" -#: addon/globalPlugins/brailleExtender/__init__.py:621 +#: addon\globalPlugins\brailleExtender\__init__.py:640 msgid "Braille Unicode to cell descriptions" msgstr "Punktskrift Unicode til beskrivelser af punktcelle" -#: addon/globalPlugins/brailleExtender/__init__.py:622 +#: addon\globalPlugins\brailleExtender\__init__.py:641 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -486,11 +504,11 @@ msgstr "" "Konvertér valgte tekst til beskrivelse af punktceller og viser den i en " "navigérbar meddelelse" -#: addon/globalPlugins/brailleExtender/__init__.py:629 +#: addon\globalPlugins\brailleExtender\__init__.py:648 msgid "Cell descriptions to braille Unicode" msgstr "Beskrivelse af punktceller til punktskrift Unicode" -#: addon/globalPlugins/brailleExtender/__init__.py:630 +#: addon\globalPlugins\brailleExtender\__init__.py:649 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -498,81 +516,101 @@ msgstr "" "Beskrivelse af punktcelle til Unicode punktskrift. I et editfelt kan du fx " "skrive '125-24-0-1-123-123'. Vælg derefter teksten og udfør denne kommando" -#: addon/globalPlugins/brailleExtender/__init__.py:634 +#: addon\globalPlugins\brailleExtender\__init__.py:654 +#, python-format +msgid "Advanced braille input mode %s" +msgstr "Avanceret indtastningstilstand til punktskrift %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:655 +#, fuzzy +#| msgid "Enable/disable BRF mode" +msgid "Enable/disable the advanced input mode" +msgstr "Slå BRF-tilstand til/fra" + +#: addon\globalPlugins\brailleExtender\__init__.py:660 +#, python-format +msgid "Description of undefined characters %s" +msgstr "Beskrivelse af ikke-defineredd tegn %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:662 +msgid "Enable/disable description of undefined characters" +msgstr "Slå beskrivelse af ikke-definerede tegn til og fra" + +#: addon\globalPlugins\brailleExtender\__init__.py:666 msgid "Get the cursor position of text" msgstr "Oplys markørens placering i teksten" -#: addon/globalPlugins/brailleExtender/__init__.py:660 +#: addon\globalPlugins\brailleExtender\__init__.py:692 msgid "Hour and date with autorefresh" msgstr "Tid og dato med automatisk opdatering" -#: addon/globalPlugins/brailleExtender/__init__.py:673 +#: addon\globalPlugins\brailleExtender\__init__.py:705 msgid "Autoscroll stopped" msgstr "Autorul stoppet" -#: addon/globalPlugins/brailleExtender/__init__.py:680 +#: addon\globalPlugins\brailleExtender\__init__.py:712 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "Autorul kunne ikke starte. Yderligere oplysninger i NVDA loggen" -#: addon/globalPlugins/brailleExtender/__init__.py:685 +#: addon\globalPlugins\brailleExtender\__init__.py:717 msgid "Enable/disable autoscroll" msgstr "Slå autorul til/fra" -#: addon/globalPlugins/brailleExtender/__init__.py:700 +#: addon\globalPlugins\brailleExtender\__init__.py:732 msgid "Increase the master volume" msgstr "Skru op for systemlydstyrke" -#: addon/globalPlugins/brailleExtender/__init__.py:717 +#: addon\globalPlugins\brailleExtender\__init__.py:749 msgid "Decrease the master volume" msgstr "Skru ned for systemlydstyrke" -#: addon/globalPlugins/brailleExtender/__init__.py:723 +#: addon\globalPlugins\brailleExtender\__init__.py:755 msgid "Muted sound" msgstr "Lyd slået fra" -#: addon/globalPlugins/brailleExtender/__init__.py:725 +#: addon\globalPlugins\brailleExtender\__init__.py:757 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "Lyd slået til (%3d%%)" -#: addon/globalPlugins/brailleExtender/__init__.py:731 +#: addon\globalPlugins\brailleExtender\__init__.py:763 msgid "Mute or unmute sound" msgstr "Slå lyd til eller fra" -#: addon/globalPlugins/brailleExtender/__init__.py:736 +#: addon\globalPlugins\brailleExtender\__init__.py:768 #, python-format msgid "Show the %s documentation" msgstr "Vis %s dokumentationen" -#: addon/globalPlugins/brailleExtender/__init__.py:774 +#: addon\globalPlugins\brailleExtender\__init__.py:806 msgid "No such file or directory" msgstr "Denne fil eller mappe findes ikke" -#: addon/globalPlugins/brailleExtender/__init__.py:776 +#: addon\globalPlugins\brailleExtender\__init__.py:808 msgid "Opens a custom program/file. Go to settings to define them" msgstr "Åbner valgfrigt program/fil. Angiv dem i indstillinger" -#: addon/globalPlugins/brailleExtender/__init__.py:783 +#: addon\globalPlugins\brailleExtender\__init__.py:815 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "" "Søger efter %s opdateringer og påbegynder hentningen, hvis der findes én" -#: addon/globalPlugins/brailleExtender/__init__.py:813 +#: addon\globalPlugins\brailleExtender\__init__.py:845 msgid "Increase autoscroll delay" msgstr "Sæt forsinkelse ved autorul op" -#: addon/globalPlugins/brailleExtender/__init__.py:814 +#: addon\globalPlugins\brailleExtender\__init__.py:846 msgid "Decrease autoscroll delay" msgstr "Sæt forsinkelse ved autorul ned" -#: addon/globalPlugins/brailleExtender/__init__.py:818 -#: addon/globalPlugins/brailleExtender/__init__.py:836 +#: addon\globalPlugins\brailleExtender\__init__.py:850 +#: addon\globalPlugins\brailleExtender\__init__.py:868 msgid "Please use NVDA 2017.3 minimum for this feature" msgstr "Brug venligst som minimum NVDA 2017.3 til denne funktion " -#: addon/globalPlugins/brailleExtender/__init__.py:820 -#: addon/globalPlugins/brailleExtender/__init__.py:838 +#: addon\globalPlugins\brailleExtender\__init__.py:852 +#: addon\globalPlugins\brailleExtender\__init__.py:870 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -580,49 +618,49 @@ msgstr "" "Du skal vælge mindst to tabeller til denne funktion. Udfyld venligst " "indstillingerne" -#: addon/globalPlugins/brailleExtender/__init__.py:827 +#: addon\globalPlugins\brailleExtender\__init__.py:859 #, python-format msgid "Input: %s" msgstr "Indtastning: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:831 +#: addon\globalPlugins\brailleExtender\__init__.py:863 msgid "Switch between his favorite input braille tables" msgstr "Skift imellem foretrukne indtastningstabeller" -#: addon/globalPlugins/brailleExtender/__init__.py:847 +#: addon\globalPlugins\brailleExtender\__init__.py:879 #, python-format msgid "Output: %s" -msgstr "Oversættelse: %s" +msgstr "Visning: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:850 +#: addon\globalPlugins\brailleExtender\__init__.py:882 msgid "Switch between his favorite output braille tables" msgstr "Skift imellem foretrukne oversættelsestabeller" -#: addon/globalPlugins/brailleExtender/__init__.py:856 +#: addon\globalPlugins\brailleExtender\__init__.py:888 #, python-brace-format msgid "I⣿O:{I}" msgstr "I⣿O:{I}" -#: addon/globalPlugins/brailleExtender/__init__.py:857 +#: addon\globalPlugins\brailleExtender\__init__.py:889 #, python-brace-format msgid "Input and output: {I}." msgstr "Indtastning og oversættelse: {I}." -#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon\globalPlugins\brailleExtender\__init__.py:891 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "I:{I} ⣿ O: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:860 +#: addon\globalPlugins\brailleExtender\__init__.py:892 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Indtastning: {I}; Oversættelse: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:864 +#: addon\globalPlugins\brailleExtender\__init__.py:896 msgid "Announce the current input and output braille tables" msgstr "Oplyser aktuelt valgte punkttabeller til indskrivning og visning " -#: addon/globalPlugins/brailleExtender/__init__.py:869 +#: addon\globalPlugins\brailleExtender\__init__.py:901 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -630,7 +668,7 @@ msgstr "" "Oplyser Unicode-værdien for tegnet hvor cursoren er placeret samt den samme " "værdi i decimal, binær og oktal." -#: addon/globalPlugins/brailleExtender/__init__.py:877 +#: addon\globalPlugins\brailleExtender\__init__.py:909 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -638,110 +676,110 @@ msgstr "" "Vis taleoutput for den valgte tekst på punkt. Nyttigt for eksempel ved " "emojier" -#: addon/globalPlugins/brailleExtender/__init__.py:881 +#: addon\globalPlugins\brailleExtender\__init__.py:913 msgid "No shortcut performed from a braille display" msgstr "Ingen genvej udført fra punktdisplay" -#: addon/globalPlugins/brailleExtender/__init__.py:885 +#: addon\globalPlugins\brailleExtender\__init__.py:917 msgid "Repeat the last shortcut performed from a braille display" msgstr "Udfør seneste genvej fra punktdisplay igen" -#: addon/globalPlugins/brailleExtender/__init__.py:899 +#: addon\globalPlugins\brailleExtender\__init__.py:931 #, python-format msgid "%s reloaded" msgstr "%s genindlæst" -#: addon/globalPlugins/brailleExtender/__init__.py:911 +#: addon\globalPlugins\brailleExtender\__init__.py:943 #, python-format msgid "Reload %s" msgstr "Genindlæs %s" -#: addon/globalPlugins/brailleExtender/__init__.py:914 +#: addon\globalPlugins\brailleExtender\__init__.py:946 msgid "Reload the first braille display defined in settings" msgstr "Genindlæs det første punktdisplay angivet i indstillinger" -#: addon/globalPlugins/brailleExtender/__init__.py:917 +#: addon\globalPlugins\brailleExtender\__init__.py:949 msgid "Reload the second braille display defined in settings" msgstr "Genindlæs det andet punktdisplay angivet i indstillinger" -#: addon/globalPlugins/brailleExtender/__init__.py:923 +#: addon\globalPlugins\brailleExtender\__init__.py:955 msgid "No braille display specified. No reload to do" msgstr "Ingen punktdisplay angivet. Ingen renindlæsning gennemført" -#: addon/globalPlugins/brailleExtender/__init__.py:960 +#: addon\globalPlugins\brailleExtender\__init__.py:992 msgid "WIN" msgstr "WIN" -#: addon/globalPlugins/brailleExtender/__init__.py:961 +#: addon\globalPlugins\brailleExtender\__init__.py:993 msgid "CTRL" msgstr "CTRL" -#: addon/globalPlugins/brailleExtender/__init__.py:962 +#: addon\globalPlugins\brailleExtender\__init__.py:994 msgid "SHIFT" msgstr "SHIFT" -#: addon/globalPlugins/brailleExtender/__init__.py:963 +#: addon\globalPlugins\brailleExtender\__init__.py:995 msgid "ALT" msgstr "ALT" -#: addon/globalPlugins/brailleExtender/__init__.py:1065 +#: addon\globalPlugins\brailleExtender\__init__.py:1097 msgid "Keyboard shortcut cancelled" msgstr "Tastaturgenvej annulleret" #. /* docstrings for modifier keys */ -#: addon/globalPlugins/brailleExtender/__init__.py:1073 +#: addon\globalPlugins\brailleExtender\__init__.py:1105 msgid "Emulate pressing down " -msgstr "Svarer til at trykke" +msgstr "Svarer til at trykke " -#: addon/globalPlugins/brailleExtender/__init__.py:1074 +#: addon\globalPlugins\brailleExtender\__init__.py:1106 msgid " on the system keyboard" -msgstr "på systemets tastatur" +msgstr " på systemets tastatur" -#: addon/globalPlugins/brailleExtender/__init__.py:1130 +#: addon\globalPlugins\brailleExtender\__init__.py:1162 msgid "Current braille view saved" msgstr "Det viste på punktdisplayet er blevet gemt" -#: addon/globalPlugins/brailleExtender/__init__.py:1133 +#: addon\globalPlugins\brailleExtender\__init__.py:1165 msgid "Buffer cleaned" msgstr "Buffer renset" -#: addon/globalPlugins/brailleExtender/__init__.py:1134 +#: addon\globalPlugins\brailleExtender\__init__.py:1166 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Gem det, der vises på punktdisplayet. Tryk 2 gange hurtigt for at tømme " "bufferen" -#: addon/globalPlugins/brailleExtender/__init__.py:1139 +#: addon\globalPlugins\brailleExtender\__init__.py:1171 msgid "View saved" msgstr "Vis gemte" -#: addon/globalPlugins/brailleExtender/__init__.py:1140 +#: addon\globalPlugins\brailleExtender\__init__.py:1172 msgid "Buffer empty" msgstr "Buffer er tom" -#: addon/globalPlugins/brailleExtender/__init__.py:1141 +#: addon\globalPlugins\brailleExtender\__init__.py:1173 msgid "Show the saved braille view through a flash message" msgstr "Vis det gemte punktdisplay-billede ved hjælp af en flashmeddelelse" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon\globalPlugins\brailleExtender\__init__.py:1207 msgid "Pause" msgstr "Pause" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon\globalPlugins\brailleExtender\__init__.py:1207 msgid "Resume" msgstr "Genoptag" -#: addon/globalPlugins/brailleExtender/__init__.py:1217 -#: addon/globalPlugins/brailleExtender/__init__.py:1224 +#: addon\globalPlugins\brailleExtender\__init__.py:1249 +#: addon\globalPlugins\brailleExtender\__init__.py:1256 #, python-format msgid "Auto test type %d" msgstr "Autotest type %d" -#: addon/globalPlugins/brailleExtender/__init__.py:1234 +#: addon\globalPlugins\brailleExtender\__init__.py:1266 msgid "Auto test stopped" msgstr "Autotest stoppet" -#: addon/globalPlugins/brailleExtender/__init__.py:1244 +#: addon\globalPlugins\brailleExtender\__init__.py:1276 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -752,92 +790,352 @@ msgstr "" "Mellemrumstasten til at sætte testen på pause eller genoptage den. Brug " "Escape til at afbryde" -#: addon/globalPlugins/brailleExtender/__init__.py:1246 +#: addon\globalPlugins\brailleExtender\__init__.py:1278 msgid "Auto test" msgstr "Autotest" -#: addon/globalPlugins/brailleExtender/__init__.py:1251 +#: addon\globalPlugins\brailleExtender\__init__.py:1283 msgid "Add dictionary entry or see a dictionary" msgstr "Tilføj et ordbogselement eller se en ordbog" -#: addon/globalPlugins/brailleExtender/__init__.py:1252 +#: addon\globalPlugins\brailleExtender\__init__.py:1284 msgid "Add a entry in braille dictionary" msgstr "Føj element til punktskriftordbog" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon/globalPlugins/brailleExtender/__init__.py:1299 -#: addon/globalPlugins/brailleExtender/dictionaries.py:111 -#: addon/globalPlugins/brailleExtender/dictionaries.py:367 -#: addon/globalPlugins/brailleExtender/dictionaries.py:374 -#: addon/globalPlugins/brailleExtender/dictionaries.py:378 -#: addon/globalPlugins/brailleExtender/dictionaries.py:382 -#: addon/globalPlugins/brailleExtender/settings.py:33 buildVars.py:24 +#: addon\globalPlugins\brailleExtender\__init__.py:1334 +#: addon\globalPlugins\brailleExtender\dictionaries.py:112 +#: addon\globalPlugins\brailleExtender\dictionaries.py:368 +#: addon\globalPlugins\brailleExtender\dictionaries.py:375 +#: addon\globalPlugins\brailleExtender\dictionaries.py:379 +#: addon\globalPlugins\brailleExtender\dictionaries.py:383 +#: addon\globalPlugins\brailleExtender\settings.py:33 +#: addon\globalPlugins\brailleExtender\settings.py:411 buildVars.py:24 msgid "Braille Extender" msgstr "Udvidelse til Punktskrift" -#: addon/globalPlugins/brailleExtender/addonDoc.py:33 -#, python-format -msgid "%s braille display" -msgstr "%s punktdisplay" +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +msgid "HUC8" +msgstr "HUC8" -#: addon/globalPlugins/brailleExtender/addonDoc.py:34 -#, python-format -msgid "profile loaded: %s" -msgstr "profil indlæst: %s" +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:65 +msgid "Hexadecimal" +msgstr "Hexadecimal" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:66 +msgid "Decimal" +msgstr "Decimal" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:67 +msgid "Octal" +msgstr "Octal" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:68 +#| msgid "Dictionary" +msgid "Binary" +msgstr "Binær" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:46 +msgid "Representation of undefined characters" +msgstr "Repræsentation af ikke-defineredd tegn" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:48 +msgid "" +"The extension allows you to customize how an undefined character should be " +"represented within a braille table. To do so, go to the braille table " +"settings. You can choose between the following representations:" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:52 +msgid "" +"You can also combine this option with the “describe the character if " +"possible” setting." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:54 +msgid "Notes:" +msgstr "Bemærkninger:" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:56 +msgid "" +"To distinguish the undefined set of characters while maximizing space, the " +"best combination is the usage of the HUC8 representation without checking " +"the “describe character if possible” option." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:57 +#, python-brace-format +msgid "To learn more about the HUC representation, see {url}" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:58 +msgid "" +"Keep in mind that definitions in tables and those in your table dictionaries " +"take precedence over character descriptions, which also take precedence over " +"the chosen representation for undefined characters." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:61 +msgid "Getting Current Character Info" +msgstr "Finder info for aktuelle tegn" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:63 +msgid "" +"This feature allows you to obtain various information regarding the " +"character under the cursor using the current input braille table, such as:" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:65 +msgid "" +"the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " +"values; A description of the character if possible; - The Unicode Braille " +"representation and the Braille dot pattern." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:67 +msgid "" +"Pressing the defined gesture associated to this function once shows you the " +"information in a flash message and a double-press displays the same " +"information in a virtual NVDA buffer." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:69 +msgid "" +"On supported displays the defined gesture is ⡉+space. No system gestures are " +"defined by default." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:71 +#, python-brace-format +msgid "" +"For example, for the '{chosenChar}' character, we will get the following " +"information:" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:74 +msgid "Advanced Braille Input" +msgstr "Avanceret indtastning i punktskrift" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:76 +msgid "" +"This feature allows you to enter any character from its HUC8 representation " +"or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " +"develop abbreviations. To use this function, enter the advanced input mode " +"and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊" +"+space (on supported displays). Press the same gesture to exit this mode. " +"Alternatively, an option allows you to automatically exit this mode after " +"entering a single pattern. " +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:80 +msgid "Specify the basis as follows" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +msgid "⠭ or ⠓" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +msgid "for a hexadecimal value" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:83 +msgid "for a decimal value" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:84 +msgid "for an octal value" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:87 +msgid "" +"Enter the value of the character according to the previously selected basis." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:88 +msgid "Press Space to validate." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:91 +msgid "" +"For abbreviations, you must first add them in the dialog box - Advanced mode " +"dictionaries -. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:93 +msgid "Here are some examples of sequences to be entered for given characters:" +msgstr "" -#: addon/globalPlugins/brailleExtender/addonDoc.py:51 +#: addon\globalPlugins\brailleExtender\addonDoc.py:97 +msgid "Note: the HUC6 input is currently not supported." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:100 +msgid "One-hand mode" +msgstr "Enhåndstilstand" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:102 +msgid "" +"This feature allows you to compose a cell in several steps. This can be " +"activated in the general settings of the extension's preferences or on the " +"fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " +"Three input methods are available." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:103 +msgid "Method #1: fill a cell in 2 stages on both sides" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:105 +msgid "" +"With this method, type the left side dots, then the right side dots. If one " +"side is empty, type the dots correspondig to the opposite side twice, or " +"type the dots corresponding to the non-empty side in 2 steps." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:106 +#: addon\globalPlugins\brailleExtender\addonDoc.py:115 +msgid "For example:" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:108 +msgid "For ⠛: press dots 1-2 then dots 4-5." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:109 +msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:110 +msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:112 +msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:114 +msgid "" +"Using this method, you can compose a cell with one hand, regardless of which " +"side of the Braille keyboard you choose. The first step allows you to enter " +"dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " +"An empty cell will be obtained by pressing the space key twice." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:117 +msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:118 +msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:119 +msgid "For ⠘: press space then 1-2, or space then dots 4-5." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:121 +msgid "" +"Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " +"validate the character)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:126 +msgid "Dots 1-2, then dots 4-5, then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:127 +msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:128 +msgid "Dot 1, then dots 2-4-5, then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:129 +msgid "Dots 1-2-4, then dot 5, then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:130 +msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." +msgstr "" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:131 +msgid "Etc." +msgstr "Etc." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:150 +#, fuzzy +#| msgid "Docu&mentation" +msgid "Documentation" +msgstr "Doku&mentation" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:160 +msgid "Driver loaded" +msgstr "Driver indlæst" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:161 +msgid "Profile" +msgstr "Profil" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:175 msgid "Simple keys" msgstr "Enkle taster" -#: addon/globalPlugins/brailleExtender/addonDoc.py:53 +#: addon\globalPlugins\brailleExtender\addonDoc.py:177 msgid "Usual shortcuts" msgstr "Almindelige genveje" -#: addon/globalPlugins/brailleExtender/addonDoc.py:55 +#: addon\globalPlugins\brailleExtender\addonDoc.py:179 msgid "Standard NVDA commands" msgstr "Standard NVDA-kommandoer" -#: addon/globalPlugins/brailleExtender/addonDoc.py:57 -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon\globalPlugins\brailleExtender\addonDoc.py:182 +#: addon\globalPlugins\brailleExtender\settings.py:828 msgid "Modifier keys" msgstr "Modifikationstaster" -#: addon/globalPlugins/brailleExtender/addonDoc.py:59 +#: addon\globalPlugins\brailleExtender\addonDoc.py:185 msgid "Quick navigation keys" msgstr "Lyntaster til navigering" -#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +#: addon\globalPlugins\brailleExtender\addonDoc.py:189 msgid "Rotor feature" msgstr "Rotorfunktion" -#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +#: addon\globalPlugins\brailleExtender\addonDoc.py:197 msgid "Gadget commands" msgstr "Værktøjskommandoer" -#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +#: addon\globalPlugins\brailleExtender\addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Genveje defineret uden for tilføjelsesprogrammet" -#: addon/globalPlugins/brailleExtender/addonDoc.py:85 +#: addon\globalPlugins\brailleExtender\addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "Tastaturkonfigurationer angivet" -#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +#: addon\globalPlugins\brailleExtender\addonDoc.py:241 msgid "Keyboard configurations are" msgstr "Tastaturkonfigurationer er" -#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +#: addon\globalPlugins\brailleExtender\addonDoc.py:250 msgid "Warning:" msgstr "Advarsel:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:94 +#: addon\globalPlugins\brailleExtender\addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "Udvidelse til Punktskrift har endnu intet sæt af bevægelser til dit " "punktdisplay." -#: addon/globalPlugins/brailleExtender/addonDoc.py:95 +#: addon\globalPlugins\brailleExtender\addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -845,164 +1143,228 @@ msgstr "" "Du kan imidlertid tildele dine egne bevægelser i dialogen \"Inputbevægelser" "\" (under menuen Opsætning)." -#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +#: addon\globalPlugins\brailleExtender\addonDoc.py:259 msgid "Add-on gestures on the system keyboard" msgstr "Tilføjelsens bevægelser på systemtastaturet" -#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +#: addon\globalPlugins\brailleExtender\addonDoc.py:282 msgid "Arabic" msgstr "Arabisk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +#: addon\globalPlugins\brailleExtender\addonDoc.py:283 msgid "Croatian" msgstr "Kroatisk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:120 +#: addon\globalPlugins\brailleExtender\addonDoc.py:284 +msgid "Danish" +msgstr "Dansk" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:285 +msgid "French" +msgstr "Fransk" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:286 msgid "German" msgstr "Tysk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +#: addon\globalPlugins\brailleExtender\addonDoc.py:287 msgid "Hebrew" msgstr "Hebraisk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:122 +#: addon\globalPlugins\brailleExtender\addonDoc.py:288 msgid "Persian" msgstr "Persisk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:123 +#: addon\globalPlugins\brailleExtender\addonDoc.py:289 msgid "Polish" msgstr "Polsk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:124 +#: addon\globalPlugins\brailleExtender\addonDoc.py:290 msgid "Russian" msgstr "Russisk" -#: addon/globalPlugins/brailleExtender/addonDoc.py:126 +#: addon\globalPlugins\brailleExtender\addonDoc.py:293 msgid "Copyrights and acknowledgements" msgstr "Copyright og anerkendelser" -#: addon/globalPlugins/brailleExtender/addonDoc.py:128 +#: addon\globalPlugins\brailleExtender\addonDoc.py:299 msgid "and other contributors" msgstr "og andre bidragydere" -#: addon/globalPlugins/brailleExtender/addonDoc.py:132 +#: addon\globalPlugins\brailleExtender\addonDoc.py:303 msgid "Translators" msgstr "Oversættere" -#: addon/globalPlugins/brailleExtender/addonDoc.py:138 +#: addon\globalPlugins\brailleExtender\addonDoc.py:313 msgid "Code contributions and other" msgstr "Bidrag til koden og andre" -#: addon/globalPlugins/brailleExtender/addonDoc.py:138 +#: addon\globalPlugins\brailleExtender\addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "Yderliere ophavsretligt beskyttet kode fra tredjeparter er inkluderet:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:141 +#: addon\globalPlugins\brailleExtender\addonDoc.py:321 msgid "Thanks also to" msgstr "Også tak til" -#: addon/globalPlugins/brailleExtender/addonDoc.py:143 +#: addon\globalPlugins\brailleExtender\addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "Og mange tak for alle tilbagemeldinger og kommentarer." -#: addon/globalPlugins/brailleExtender/addonDoc.py:145 +#: addon\globalPlugins\brailleExtender\addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "%s's dokumentation" -#: addon/globalPlugins/brailleExtender/addonDoc.py:161 +#: addon\globalPlugins\brailleExtender\addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "Svarer til at trykke %s på systemets tastatur" -#: addon/globalPlugins/brailleExtender/addonDoc.py:168 +#: addon\globalPlugins\brailleExtender\addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "Beskrivelse i øjeblikket ikke tilgængelig for denne genvej" -#: addon/globalPlugins/brailleExtender/addonDoc.py:186 +#: addon\globalPlugins\brailleExtender\addonDoc.py:377 msgid "caps lock" msgstr "caps lock" -#: addon/globalPlugins/brailleExtender/configBE.py:40 -#: addon/globalPlugins/brailleExtender/configBE.py:47 -#: addon/globalPlugins/brailleExtender/configBE.py:61 -#: addon/globalPlugins/brailleExtender/settings.py:421 +#: addon\globalPlugins\brailleExtender\configBE.py:55 +#, fuzzy +#| msgid "Custom braille tables" +msgid "Use braille table behavior" +msgstr "Tilpassede punkttabeller" + +#: addon\globalPlugins\brailleExtender\configBE.py:56 +msgid "Dots 1-8 (⣿)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:57 +msgid "Dots 1-6 (⠿)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:58 +msgid "Empty cell (⠀)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:59 +msgid "Other dot pattern (e.g.: 6-123456)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:60 +msgid "Question mark (depending output table)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:61 +msgid "Other sign/pattern (e.g.: \\, ??)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:62 +msgid "Hexadecimal, Liblouis style" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:63 +msgid "Hexadecimal, HUC8" +msgstr "Hexadecimal, HUC8" + +#: addon\globalPlugins\brailleExtender\configBE.py:64 +msgid "Hexadecimal, HUC6" +msgstr "Hexadecimal, HUC6" + +#: addon\globalPlugins\brailleExtender\configBE.py:71 +#: addon\globalPlugins\brailleExtender\configBE.py:78 +#: addon\globalPlugins\brailleExtender\configBE.py:92 +#: addon\globalPlugins\brailleExtender\settings.py:449 msgid "none" msgstr "ingen" -#: addon/globalPlugins/brailleExtender/configBE.py:41 +#: addon\globalPlugins\brailleExtender\configBE.py:72 msgid "braille only" msgstr "kun punkt" -#: addon/globalPlugins/brailleExtender/configBE.py:42 +#: addon\globalPlugins\brailleExtender\configBE.py:73 msgid "speech only" msgstr "kun tale" -#: addon/globalPlugins/brailleExtender/configBE.py:43 -#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon\globalPlugins\brailleExtender\configBE.py:74 +#: addon\globalPlugins\brailleExtender\configBE.py:95 msgid "both" msgstr "begge" -#: addon/globalPlugins/brailleExtender/configBE.py:48 +#: addon\globalPlugins\brailleExtender\configBE.py:79 msgid "dots 7 and 8" msgstr "Punkterne 7 og 8" -#: addon/globalPlugins/brailleExtender/configBE.py:49 +#: addon\globalPlugins\brailleExtender\configBE.py:80 msgid "dot 7" msgstr "punkt 7" -#: addon/globalPlugins/brailleExtender/configBE.py:50 +#: addon\globalPlugins\brailleExtender\configBE.py:81 msgid "dot 8" msgstr "punkt 8" -#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon\globalPlugins\brailleExtender\configBE.py:87 msgid "stable" msgstr "stabil" -#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon\globalPlugins\brailleExtender\configBE.py:88 msgid "development" msgstr "udvikling" -#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon\globalPlugins\brailleExtender\configBE.py:93 msgid "focus mode" msgstr "fokustilstand" -#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon\globalPlugins\brailleExtender\configBE.py:94 msgid "review mode" msgstr "gennemsynstilstand" -#: addon/globalPlugins/brailleExtender/configBE.py:92 +#: addon\globalPlugins\brailleExtender\configBE.py:103 +msgid "Fill a cell in two stages on both sides" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:104 +msgid "Fill a cell in two stages on one side (space = empty side)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:105 +msgid "" +"Fill a cell dots by dots (each dot is a toggle, press space to validate the " +"character)" +msgstr "" + +#: addon\globalPlugins\brailleExtender\configBE.py:132 msgid "last known" msgstr "sidst kendte" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:29 +#: addon\globalPlugins\brailleExtender\dictionaries.py:30 msgid "Sign" msgstr "Tegn" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:31 +#: addon\globalPlugins\brailleExtender\dictionaries.py:32 msgid "Math" msgstr "Matematik" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:33 +#: addon\globalPlugins\brailleExtender\dictionaries.py:34 msgid "Replace" msgstr "Erstat" -#: addon/globalPlugins/brailleExtender/dictionaries.py:41 +#: addon\globalPlugins\brailleExtender\dictionaries.py:42 msgid "Both (input and output)" msgstr "Både (indtastning og visning)" -#: addon/globalPlugins/brailleExtender/dictionaries.py:42 +#: addon\globalPlugins\brailleExtender\dictionaries.py:43 msgid "Backward (input only)" msgstr "Bagud (kun indtastning)" -#: addon/globalPlugins/brailleExtender/dictionaries.py:43 +#: addon\globalPlugins\brailleExtender\dictionaries.py:44 msgid "Forward (output only)" msgstr "Fremad (kun visning)" -#: addon/globalPlugins/brailleExtender/dictionaries.py:110 +#: addon\globalPlugins\brailleExtender\dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1012,120 +1374,120 @@ msgstr "" "betyder, at disse ordbøger ikke blev indlæst." #. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:131 +#: addon\globalPlugins\brailleExtender\dictionaries.py:132 msgid "Dictionary &entries" msgstr "Ordbogs&elementer" #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon/globalPlugins/brailleExtender/dictionaries.py:134 +#: addon\globalPlugins\brailleExtender\dictionaries.py:135 msgid "Comment" msgstr "Kommentar" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon/globalPlugins/brailleExtender/dictionaries.py:136 +#: addon\globalPlugins\brailleExtender\dictionaries.py:137 msgid "Pattern" msgstr "Mønster" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon/globalPlugins/brailleExtender/dictionaries.py:138 +#: addon\globalPlugins\brailleExtender\dictionaries.py:139 msgid "Representation" msgstr "Repræsentation" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:140 +#: addon\globalPlugins\brailleExtender\dictionaries.py:141 msgid "Opcode" msgstr "Opcode" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:142 +#: addon\globalPlugins\brailleExtender\dictionaries.py:143 msgid "Direction" msgstr "Retning" #. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:148 +#: addon\globalPlugins\brailleExtender\dictionaries.py:149 msgid "&Add" msgstr "&Tilføj" #. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:154 +#: addon\globalPlugins\brailleExtender\dictionaries.py:155 msgid "&Edit" msgstr "&Redigér" #. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:160 +#: addon\globalPlugins\brailleExtender\dictionaries.py:161 msgid "Re&move" msgstr "Fj&ern" #. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon/globalPlugins/brailleExtender/dictionaries.py:168 +#: addon\globalPlugins\brailleExtender\dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Åbn aktuelle ordbogsfil i en editor" #. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon/globalPlugins/brailleExtender/dictionaries.py:173 +#: addon\globalPlugins\brailleExtender\dictionaries.py:174 msgid "&Reload the dictionary" msgstr "&Genindlæs ordbogen" -#: addon/globalPlugins/brailleExtender/dictionaries.py:216 +#: addon\globalPlugins\brailleExtender\dictionaries.py:217 msgid "Add Dictionary Entry" msgstr "Tilføj ordbogselement" #. Translators: This is the label for the edit dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:288 +#: addon\globalPlugins\brailleExtender\dictionaries.py:289 msgid "Edit Dictionary Entry" msgstr "Redigér ordbogselement" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:294 +#: addon\globalPlugins\brailleExtender\dictionaries.py:295 msgid "Dictionary" msgstr "Ordbog" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:297 msgid "Global" msgstr "Global" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:297 msgid "Table" msgstr "Tabel" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:297 msgid "Temporary" msgstr "Midlertidig" -#: addon/globalPlugins/brailleExtender/dictionaries.py:302 +#: addon\globalPlugins\brailleExtender\dictionaries.py:303 msgid "See &entries" msgstr "Se &elementer" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:307 +#: addon\globalPlugins\brailleExtender\dictionaries.py:308 msgid "&Text pattern/sign" msgstr "&Tekstmønster/tegn" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:312 +#: addon\globalPlugins\brailleExtender\dictionaries.py:313 msgid "&Braille representation" msgstr "&Punktskriftrepræsentation" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:316 +#: addon\globalPlugins\brailleExtender\dictionaries.py:317 msgid "&Comment" msgstr "&Kommentar" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:320 +#: addon\globalPlugins\brailleExtender\dictionaries.py:321 msgid "&Opcode" msgstr "&Opcode" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:325 +#: addon\globalPlugins\brailleExtender\dictionaries.py:326 msgid "&Direction" msgstr "&Retning" -#: addon/globalPlugins/brailleExtender/dictionaries.py:366 +#: addon\globalPlugins\brailleExtender\dictionaries.py:367 msgid "Text pattern/sign field is empty." msgstr "Feltet til Tekstmønster/tegn er tomt." -#: addon/globalPlugins/brailleExtender/dictionaries.py:373 +#: addon\globalPlugins\brailleExtender\dictionaries.py:374 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1134,7 +1496,7 @@ msgstr "" "Ugyldig værdi i feltet 'tekstmønster/tegn'. Der skal angives et tegn med " "denne opcode. Fx: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:377 +#: addon\globalPlugins\brailleExtender\dictionaries.py:378 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1143,7 +1505,7 @@ msgstr "" "Feltet 'Punktskriftrepræsentation' er tomt, angiv venligst noget med denne " "opcode fx: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:381 +#: addon\globalPlugins\brailleExtender\dictionaries.py:382 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1152,188 +1514,210 @@ msgstr "" "Ugyldig værdi i feltet 'punktskriftrepræsentation'. Der skal angives " "punktmønstre med denne opcode fx: %s" -#: addon/globalPlugins/brailleExtender/settings.py:32 +#. Translators: Reported when translation didn't succeed due to unsupported input. +#: addon\globalPlugins\brailleExtender\patchs.py:480 +msgid "Unsupported input" +msgstr "" + +#: addon\globalPlugins\brailleExtender\patchs.py:539 +msgid "Unsupported input method" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:32 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "Denne funktion er under udvikling. Tak for tålmodigheden." #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:38 -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:38 +#: addon\globalPlugins\brailleExtender\settings.py:215 msgid "General" msgstr "Generel" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:45 +#: addon\globalPlugins\brailleExtender\settings.py:45 msgid "Check for &updates automatically" msgstr "Søg automatisk efter &Opdateringer" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:49 +#: addon\globalPlugins\brailleExtender\settings.py:49 msgid "Add-on update channel" msgstr "Opdateringskanal for tilføjelsesprogram" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:56 +#: addon\globalPlugins\brailleExtender\settings.py:56 msgid "Say current line while scrolling in" msgstr "Sig aktuel linje under rulning i" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:60 +#: addon\globalPlugins\brailleExtender\settings.py:60 msgid "Speech interrupt when scrolling on same line" msgstr "Afbryd tale ved rulning på samme linje" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:64 +#: addon\globalPlugins\brailleExtender\settings.py:64 msgid "Speech interrupt for unknown gestures" msgstr "Afbryd tale ved ukendte bevægelser" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:68 +#: addon\globalPlugins\brailleExtender\settings.py:68 msgid "Announce the character while moving with routing buttons" msgstr "Oplæs tegnet under flytning med markørsammenføringstaster" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:72 +#: addon\globalPlugins\brailleExtender\settings.py:72 msgid "Use cursor keys to route cursor in review mode" msgstr "Brug markørtaster til at flytte markøren i gennemsynstilstand" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:76 +#: addon\globalPlugins\brailleExtender\settings.py:76 msgid "Display time and date infinitely" msgstr "Bliv ved med at vise tid og dato" -#: addon/globalPlugins/brailleExtender/settings.py:78 +#: addon\globalPlugins\brailleExtender\settings.py:78 msgid "Automatic review mode for apps with terminal" msgstr "Automatisk gennemsynstilstand for programmer med terminal" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:82 +#: addon\globalPlugins\brailleExtender\settings.py:82 msgid "Feedback for volume change in" msgstr "Tilbagemelding om ændring i lydstyrke i" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:90 +#: addon\globalPlugins\brailleExtender\settings.py:90 msgid "Feedback for modifier keys in" msgstr "Tilbagemelding om modifikatortaster i" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:96 +#: addon\globalPlugins\brailleExtender\settings.py:96 msgid "Play beeps for modifier keys" msgstr "Afspil bip ved modifikatortaster" -#: addon/globalPlugins/brailleExtender/settings.py:101 +#: addon\globalPlugins\brailleExtender\settings.py:101 msgid "Right margin on cells" msgstr "Højre margen på celler" -#: addon/globalPlugins/brailleExtender/settings.py:101 -#: addon/globalPlugins/brailleExtender/settings.py:113 -#: addon/globalPlugins/brailleExtender/settings.py:356 +#: addon\globalPlugins\brailleExtender\settings.py:101 +#: addon\globalPlugins\brailleExtender\settings.py:117 +#: addon\globalPlugins\brailleExtender\settings.py:369 msgid "for the currrent braille display" msgstr "for det aktuelle punktdisplay" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:105 +#: addon\globalPlugins\brailleExtender\settings.py:105 msgid "Braille keyboard configuration" msgstr "Konfiguration af punkttastatur" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:109 +#: addon\globalPlugins\brailleExtender\settings.py:109 msgid "Reverse forward scroll and back scroll buttons" msgstr "Vend knapperne til at rulle fremad og bagud" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:113 +#: addon\globalPlugins\brailleExtender\settings.py:113 +msgid "Reading from right to left" +msgstr "" + +#. Translators: label of a dialog. +#: addon\globalPlugins\brailleExtender\settings.py:117 msgid "Autoscroll delay (ms)" msgstr "Autorul forsinkelse (ms)" -#: addon/globalPlugins/brailleExtender/settings.py:114 +#: addon\globalPlugins\brailleExtender\settings.py:118 msgid "First braille display preferred" msgstr "Første foretrukne punktdisplay" -#: addon/globalPlugins/brailleExtender/settings.py:116 +#: addon\globalPlugins\brailleExtender\settings.py:120 msgid "Second braille display preferred" msgstr "Andet foretrukne punktdisplay" +#: addon\globalPlugins\brailleExtender\settings.py:122 +msgid "One-handed mode" +msgstr "Enhåndstilstand" + +#: addon\globalPlugins\brailleExtender\settings.py:126 +msgid "One hand mode method" +msgstr "Metode til enhåndstilstand" + #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:149 +#: addon\globalPlugins\brailleExtender\settings.py:162 msgid "Text attributes" msgstr "Tekstattributter" -#: addon/globalPlugins/brailleExtender/settings.py:153 -#: addon/globalPlugins/brailleExtender/settings.py:200 +#: addon\globalPlugins\brailleExtender\settings.py:166 +#: addon\globalPlugins\brailleExtender\settings.py:213 msgid "Enable this feature" msgstr "Slå denne funktion til" -#: addon/globalPlugins/brailleExtender/settings.py:155 +#: addon\globalPlugins\brailleExtender\settings.py:168 msgid "Show spelling errors with" msgstr "Vis stavefejl med" -#: addon/globalPlugins/brailleExtender/settings.py:157 +#: addon\globalPlugins\brailleExtender\settings.py:170 msgid "Show bold with" msgstr "Vis fed med" -#: addon/globalPlugins/brailleExtender/settings.py:159 +#: addon\globalPlugins\brailleExtender\settings.py:172 msgid "Show italic with" msgstr "Vis kursiv med" -#: addon/globalPlugins/brailleExtender/settings.py:161 +#: addon\globalPlugins\brailleExtender\settings.py:174 msgid "Show underline with" msgstr "Vis understregning med" -#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon\globalPlugins\brailleExtender\settings.py:176 msgid "Show strikethrough with" msgstr "Vis gennemstreget med" -#: addon/globalPlugins/brailleExtender/settings.py:165 +#: addon\globalPlugins\brailleExtender\settings.py:178 msgid "Show subscript with" msgstr "Vis sænket skrift med" -#: addon/globalPlugins/brailleExtender/settings.py:167 +#: addon\globalPlugins\brailleExtender\settings.py:180 msgid "Show superscript with" msgstr "Vis hævet skrift med" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:193 +#: addon\globalPlugins\brailleExtender\settings.py:206 msgid "Role labels" msgstr "Rolleetiketter" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:215 msgid "Role category" msgstr "Rollekategorier" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:215 msgid "Landmark" msgstr "Landmærke" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:215 msgid "Positive state" msgstr "Positiv tilstand" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:215 msgid "Negative state" msgstr "Negativ tilstand" -#: addon/globalPlugins/brailleExtender/settings.py:206 +#: addon\globalPlugins\brailleExtender\settings.py:219 msgid "Role" msgstr "Rolle" -#: addon/globalPlugins/brailleExtender/settings.py:208 +#: addon\globalPlugins\brailleExtender\settings.py:221 msgid "Actual or new label" msgstr "Aktuel eller ny etiket" -#: addon/globalPlugins/brailleExtender/settings.py:212 +#: addon\globalPlugins\brailleExtender\settings.py:225 msgid "&Reset this role label" msgstr "&Gendan denne rolleetiket" -#: addon/globalPlugins/brailleExtender/settings.py:214 +#: addon\globalPlugins\brailleExtender\settings.py:227 msgid "Reset all role labels" msgstr "Gendan alle rolleetiketter" -#: addon/globalPlugins/brailleExtender/settings.py:279 +#: addon\globalPlugins\brailleExtender\settings.py:292 msgid "You have no customized label." msgstr "Du har ingen tilpassede etiketter." -#: addon/globalPlugins/brailleExtender/settings.py:282 +#: addon\globalPlugins\brailleExtender\settings.py:295 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1342,97 +1726,106 @@ msgstr "" "Ønsker du at gendanne alle etiketter? Du har i øjeblikket %d tilpassede " "etiketter." -#: addon/globalPlugins/brailleExtender/settings.py:283 -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon\globalPlugins\brailleExtender\settings.py:296 +#: addon\globalPlugins\brailleExtender\settings.py:734 msgid "Confirmation" msgstr "Bekræftelse" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:325 +#: addon\globalPlugins\brailleExtender\settings.py:338 msgid "Braille tables" msgstr "Punkttabeller" -#: addon/globalPlugins/brailleExtender/settings.py:330 +#: addon\globalPlugins\brailleExtender\settings.py:343 msgid "Use the current input table" msgstr "Brug den aktuelle indskrivningstabel" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon\globalPlugins\brailleExtender\settings.py:352 msgid "Prefered braille tables" msgstr "Foretrukne punkttabeller" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon\globalPlugins\brailleExtender\settings.py:352 msgid "press F1 for help" msgstr "tryk F1 for hjælp" -#: addon/globalPlugins/brailleExtender/settings.py:343 +#: addon\globalPlugins\brailleExtender\settings.py:356 msgid "Input braille table for keyboard shortcut keys" msgstr "Punkttabel for indskrivning til tastaturgenveje" -#: addon/globalPlugins/brailleExtender/settings.py:345 +#: addon\globalPlugins\brailleExtender\settings.py:358 msgid "None" msgstr "Ingen" -#: addon/globalPlugins/brailleExtender/settings.py:348 +#: addon\globalPlugins\brailleExtender\settings.py:361 msgid "Secondary output table to use" msgstr "Anden tabel til visning" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:352 -msgid "Display tab signs as spaces" -msgstr "Vis tabulatortegn som mellemrum" +#: addon\globalPlugins\brailleExtender\settings.py:365 +msgid "Display &tab signs as spaces" +msgstr "Vis &tabulatortegn som mellemrum" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:356 -msgid "Number of space for a tab sign" -msgstr "Antal mellemrum for et tabulatortegn " +#: addon\globalPlugins\brailleExtender\settings.py:369 +msgid "Number of &space for a tab sign" +msgstr "Antal &mellemrum for et tabulatortegn " #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:358 -msgid "Prevent undefined characters with Hexadecimal Unicode value" -msgstr "Forhindre udefinerede tegnd med Hexadecimal Unicode værdi" +#: addon\globalPlugins\brailleExtender\settings.py:371 +msgid "Representation of &undefined characters" +msgstr "" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:361 -msgid "" -"Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" -msgstr "Vis udefinerede tegn som (fx: 0 for blank celle, 12345678, 6-123456)" +#: addon\globalPlugins\brailleExtender\settings.py:377 +msgid "Specify another pattern" +msgstr "" -#: addon/globalPlugins/brailleExtender/settings.py:363 +#: addon\globalPlugins\brailleExtender\settings.py:379 +msgid "&Description of undefined characters" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:382 msgid "Alternative and &custom braille tables" msgstr "Alternative og &tilpassede punkttabeller" -#: addon/globalPlugins/brailleExtender/settings.py:420 +#: addon\globalPlugins\brailleExtender\settings.py:410 +msgid "" +"NVDA must be restarted for some new options to take effect. Do you want " +"restart now?" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:448 msgid "input and output" msgstr "indtastning og visning" -#: addon/globalPlugins/brailleExtender/settings.py:422 +#: addon\globalPlugins\brailleExtender\settings.py:450 msgid "input only" msgstr "kun indskrivning" -#: addon/globalPlugins/brailleExtender/settings.py:423 +#: addon\globalPlugins\brailleExtender\settings.py:451 msgid "output only" msgstr "kun visning" -#: addon/globalPlugins/brailleExtender/settings.py:454 +#: addon\globalPlugins\brailleExtender\settings.py:491 #, python-format msgid "Table name: %s" msgstr "Tabelnavn: %s" -#: addon/globalPlugins/brailleExtender/settings.py:455 +#: addon\globalPlugins\brailleExtender\settings.py:492 #, python-format msgid "File name: %s" msgstr "Filnavn: %s" -#: addon/globalPlugins/brailleExtender/settings.py:456 +#: addon\globalPlugins\brailleExtender\settings.py:493 #, python-format msgid "In switches: %s" msgstr "Ind ændrer: %s" -#: addon/globalPlugins/brailleExtender/settings.py:457 +#: addon\globalPlugins\brailleExtender\settings.py:494 msgid "About this table" msgstr "Om denne tabel" -#: addon/globalPlugins/brailleExtender/settings.py:460 +#: addon\globalPlugins\brailleExtender\settings.py:497 msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" @@ -1440,7 +1833,7 @@ msgstr "" "I denne combobox findes alle tabeller. Tryk Mellemrum, venstre eller højre " "piletaster for at inkludere (eller ej) den valgte tabel i kontakter" -#: addon/globalPlugins/brailleExtender/settings.py:461 +#: addon\globalPlugins\brailleExtender\settings.py:498 msgid "" "You can also press 'comma' key to get the file name of the selected table " "and 'semicolon' key to view miscellaneous infos on the selected table" @@ -1449,125 +1842,156 @@ msgstr "" "tabel og 'semikolon'-tasten for at se forskellige oplysninger om den valgte " "tabel" -#: addon/globalPlugins/brailleExtender/settings.py:462 +#: addon\globalPlugins\brailleExtender\settings.py:499 msgid "Contextual help" msgstr "Konteksthjælp" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:478 +#: addon\globalPlugins\brailleExtender\settings.py:515 +msgid "Description of undefined characters" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:519 +msgid "Describe undefined characters if possible" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:521 +msgid "Start tag" +msgstr "Start tag" + +#: addon\globalPlugins\brailleExtender\settings.py:522 +msgid "End tag" +msgstr "Afslut tag" + +#: addon\globalPlugins\brailleExtender\settings.py:528 +msgid "Language" +msgstr "" + +#: addon\globalPlugins\brailleExtender\settings.py:530 +#, fuzzy +#| msgid "Use the current input table" +msgid "Use the current output table" +msgstr "Brug den aktuelle indskrivningstabel" + +#: addon\globalPlugins\brailleExtender\settings.py:535 +msgid "Braille table" +msgstr "Punkttabel" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\settings.py:555 msgid "Custom braille tables" msgstr "Tilpassede punkttabeller" -#: addon/globalPlugins/brailleExtender/settings.py:488 +#: addon\globalPlugins\brailleExtender\settings.py:565 msgid "Use a custom table as input table" msgstr "Brug en tilpasset tabel som indskrivningstabel" -#: addon/globalPlugins/brailleExtender/settings.py:489 +#: addon\globalPlugins\brailleExtender\settings.py:566 msgid "Use a custom table as output table" msgstr "Brug en tilpasset tabel som visningstabel" -#: addon/globalPlugins/brailleExtender/settings.py:490 +#: addon\globalPlugins\brailleExtender\settings.py:567 msgid "&Add a braille table" msgstr "&Tilføj en punkttabel" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:514 +#: addon\globalPlugins\brailleExtender\settings.py:591 msgid "Add a braille table" msgstr "Tilføj en punkttabel" -#: addon/globalPlugins/brailleExtender/settings.py:520 +#: addon\globalPlugins\brailleExtender\settings.py:597 msgid "Display name" msgstr "Vist navn" -#: addon/globalPlugins/brailleExtender/settings.py:521 +#: addon\globalPlugins\brailleExtender\settings.py:598 msgid "Description" msgstr "Beskrivelse" -#: addon/globalPlugins/brailleExtender/settings.py:522 +#: addon\globalPlugins\brailleExtender\settings.py:599 msgid "Path" msgstr "Sti" -#: addon/globalPlugins/brailleExtender/settings.py:523 -#: addon/globalPlugins/brailleExtender/settings.py:594 +#: addon\globalPlugins\brailleExtender\settings.py:600 +#: addon\globalPlugins\brailleExtender\settings.py:671 msgid "&Browse" msgstr "&Gennemse" -#: addon/globalPlugins/brailleExtender/settings.py:526 +#: addon\globalPlugins\brailleExtender\settings.py:603 msgid "Contracted (grade 2) braille table" msgstr "Forkortet (niveau 2) punkttabel" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon\globalPlugins\brailleExtender\settings.py:605 msgid "Available for" msgstr "Tilgængelig for" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon\globalPlugins\brailleExtender\settings.py:605 msgid "Input and output" msgstr "Indskrivning og visning" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon\globalPlugins\brailleExtender\settings.py:605 msgid "Input only" -msgstr "Kun input" +msgstr "Kun indskrivning" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon\globalPlugins\brailleExtender\settings.py:605 msgid "Output only" msgstr "Kun visning" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon\globalPlugins\brailleExtender\settings.py:611 msgid "Choose a table file" msgstr "Vælg en tabelfil" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon\globalPlugins\brailleExtender\settings.py:611 msgid "Liblouis table files" msgstr "Liblouis tabelfiler" -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon\globalPlugins\brailleExtender\settings.py:623 msgid "Please specify a display name." msgstr "Angiv venligst et vist navn." -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon\globalPlugins\brailleExtender\settings.py:623 msgid "Invalid display name" msgstr "Ugyldigt vist navn" -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon\globalPlugins\brailleExtender\settings.py:627 #, python-format msgid "The specified path is not valid (%s)." msgstr "Den angivne sti er ikke gyldig (%s)." -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon\globalPlugins\brailleExtender\settings.py:627 msgid "Invalid path" msgstr "Ugyldig sti" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:578 +#: addon\globalPlugins\brailleExtender\settings.py:655 msgid "Quick launches" msgstr "Hurtigstartere" -#: addon/globalPlugins/brailleExtender/settings.py:589 +#: addon\globalPlugins\brailleExtender\settings.py:666 msgid "&Gestures" msgstr "&Bevægelser" -#: addon/globalPlugins/brailleExtender/settings.py:592 +#: addon\globalPlugins\brailleExtender\settings.py:669 msgid "Location (file path, URL or command)" msgstr "Placering (fil, sti, URL eller kommando)" -#: addon/globalPlugins/brailleExtender/settings.py:595 +#: addon\globalPlugins\brailleExtender\settings.py:672 msgid "&Remove this gesture" msgstr "&Fjern denne bevægelse" -#: addon/globalPlugins/brailleExtender/settings.py:596 +#: addon\globalPlugins\brailleExtender\settings.py:673 msgid "&Add a quick launch" msgstr "&Tilføj en hurtigstarter" -#: addon/globalPlugins/brailleExtender/settings.py:625 +#: addon\globalPlugins\brailleExtender\settings.py:702 msgid "Unable to associate this gesture. Please enter another, now" msgstr "Kan ikke tildele denne bevægelse." -#: addon/globalPlugins/brailleExtender/settings.py:630 +#: addon\globalPlugins\brailleExtender\settings.py:707 msgid "Out of capture" msgstr "Uden for optagelse" -#: addon/globalPlugins/brailleExtender/settings.py:632 +#: addon\globalPlugins\brailleExtender\settings.py:709 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -1576,21 +2000,21 @@ msgstr "" "Angiv venligst en kommando fra dit {NAME_BRAILLE_DISPLAY} punktdisplay. " "Press space to cancel." -#: addon/globalPlugins/brailleExtender/settings.py:640 +#: addon\globalPlugins\brailleExtender\settings.py:717 #, python-format msgid "OK. The gesture captured is %s" msgstr "OK. Den registrerede bevægelse er %s" -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon\globalPlugins\brailleExtender\settings.py:734 msgid "Are you sure to want to delete this shorcut?" msgstr "Ønsker du virkelig at slette denne genvej?" -#: addon/globalPlugins/brailleExtender/settings.py:666 +#: addon\globalPlugins\brailleExtender\settings.py:743 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} fjernet" -#: addon/globalPlugins/brailleExtender/settings.py:677 +#: addon\globalPlugins\brailleExtender\settings.py:754 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -1598,120 +2022,120 @@ msgstr "" "Angiv venligst den ønskede bevægelse til den nye hurtigstarter. Tryk " "\"Mellemrum\" for at annullere" -#: addon/globalPlugins/brailleExtender/settings.py:680 +#: addon\globalPlugins\brailleExtender\settings.py:757 msgid "Don't add a quick launch" msgstr "Tilføj ikke en hurtigstarter" -#: addon/globalPlugins/brailleExtender/settings.py:706 +#: addon\globalPlugins\brailleExtender\settings.py:783 #, python-brace-format msgid "Choose a file for {0}" msgstr "Vælg en fil for {0}" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon\globalPlugins\brailleExtender\settings.py:796 msgid "Please create or select a quick launch first" msgstr "Venligst opret eller vælg en hurtigstarter først" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon\globalPlugins\brailleExtender\settings.py:796 msgid "Error" msgstr "Fejl" -#: addon/globalPlugins/brailleExtender/settings.py:723 +#: addon\globalPlugins\brailleExtender\settings.py:800 msgid "Profiles editor" msgstr "Profileditor" -#: addon/globalPlugins/brailleExtender/settings.py:734 +#: addon\globalPlugins\brailleExtender\settings.py:811 msgid "You must have a braille display to editing a profile" msgstr "Der kræves et punktdisplay for at kunne redigere en profil" -#: addon/globalPlugins/brailleExtender/settings.py:738 +#: addon\globalPlugins\brailleExtender\settings.py:815 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "Mappen med profiler findes ikke eller er utilgængelig. Kan ikke redigere " "profiler" -#: addon/globalPlugins/brailleExtender/settings.py:744 +#: addon\globalPlugins\brailleExtender\settings.py:821 msgid "Profile to edit" msgstr "Profil der skal redigeres" -#: addon/globalPlugins/brailleExtender/settings.py:750 +#: addon\globalPlugins\brailleExtender\settings.py:827 msgid "Gestures category" msgstr "Kategorien Bevægelser " -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:828 msgid "Single keys" msgstr "Enkelttaster" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:828 msgid "Practical shortcuts" msgstr "Praktiske genveje" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:828 msgid "NVDA commands" msgstr "NVDA-kommandoer" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:828 msgid "Addon features" msgstr "Tilføjelsesfunktioner" -#: addon/globalPlugins/brailleExtender/settings.py:755 +#: addon\globalPlugins\brailleExtender\settings.py:832 msgid "Gestures list" msgstr "Liste med bevægelser" -#: addon/globalPlugins/brailleExtender/settings.py:764 +#: addon\globalPlugins\brailleExtender\settings.py:841 msgid "Add gesture" msgstr "Tilføj bevægelse" -#: addon/globalPlugins/brailleExtender/settings.py:766 +#: addon\globalPlugins\brailleExtender\settings.py:843 msgid "Remove this gesture" msgstr "Fjern denne bevægelse" -#: addon/globalPlugins/brailleExtender/settings.py:769 +#: addon\globalPlugins\brailleExtender\settings.py:846 msgid "Assign a braille gesture" msgstr "Tildel en punktskriftbevægelse" -#: addon/globalPlugins/brailleExtender/settings.py:776 +#: addon\globalPlugins\brailleExtender\settings.py:853 msgid "Remove this profile" msgstr "Fjern denne profil" -#: addon/globalPlugins/brailleExtender/settings.py:779 +#: addon\globalPlugins\brailleExtender\settings.py:856 msgid "Add a profile" msgstr "Tilføj en profil" -#: addon/globalPlugins/brailleExtender/settings.py:785 +#: addon\globalPlugins\brailleExtender\settings.py:862 msgid "Name for the new profile" msgstr "Navn på den nye profil" -#: addon/globalPlugins/brailleExtender/settings.py:791 +#: addon\globalPlugins\brailleExtender\settings.py:868 msgid "Create" msgstr "Opret" -#: addon/globalPlugins/brailleExtender/settings.py:854 +#: addon\globalPlugins\brailleExtender\settings.py:931 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "" "Denne profil kan ikke indlæses. Filen har enten den forkerte form eller er " "utilgængelig" -#: addon/globalPlugins/brailleExtender/settings.py:873 +#: addon\globalPlugins\brailleExtender\settings.py:950 msgid "Undefined" msgstr "Udefineret" #. Translators: title of add-on parameters dialog. -#: addon/globalPlugins/brailleExtender/settings.py:902 +#: addon\globalPlugins\brailleExtender\settings.py:979 msgid "Settings" msgstr "Indstillinger" -#: addon/globalPlugins/brailleExtender/updateCheck.py:61 +#: addon\globalPlugins\brailleExtender\updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" msgstr "Ny version tilgængelig, version %s. Ønsker du at hente den nu?" -#: addon/globalPlugins/brailleExtender/updateCheck.py:72 +#: addon\globalPlugins\brailleExtender\updateCheck.py:72 #, python-format msgid "You are up-to-date. %s is the latest version." msgstr "Du er up-to-date. %s er den seneste version." -#: addon/globalPlugins/brailleExtender/updateCheck.py:81 +#: addon\globalPlugins\brailleExtender\updateCheck.py:81 #, python-format msgid "" "Oops! There was a problem downloading for update. Please retry later or " @@ -1722,78 +2146,78 @@ msgstr "" "igen senere eller hent og installér nanuelt via %s. Ønsker du at åbne denne " "URL i din browser nu?" -#: addon/globalPlugins/brailleExtender/updateCheck.py:115 +#: addon\globalPlugins\brailleExtender\updateCheck.py:115 msgid "An update check dialog is already running!" msgstr "Der kører allerede en opdateringsdialog!" -#: addon/globalPlugins/brailleExtender/updateCheck.py:116 +#: addon\globalPlugins\brailleExtender\updateCheck.py:116 #, python-brace-format msgid "{addonName}'s update" msgstr "{addonName}'s opdatering" -#: addon/globalPlugins/brailleExtender/utils.py:189 +#: addon\globalPlugins\brailleExtender\utils.py:191 msgid "Reload successful" msgstr "Genindlæsning fuldført" -#: addon/globalPlugins/brailleExtender/utils.py:192 +#: addon\globalPlugins\brailleExtender\utils.py:194 msgid "Reload failed" msgstr "Genindlæsning fejlede" -#: addon/globalPlugins/brailleExtender/utils.py:197 -#: addon/globalPlugins/brailleExtender/utils.py:207 +#: addon\globalPlugins\brailleExtender\utils.py:200 +#: addon\globalPlugins\brailleExtender\utils.py:215 msgid "Not a character" msgstr "Ikke et tegn" -#: addon/globalPlugins/brailleExtender/utils.py:201 -msgid "unknown" -msgstr "ukendt" +#: addon\globalPlugins\brailleExtender\utils.py:205 +msgid "N/A" +msgstr "N/A" -#: addon/globalPlugins/brailleExtender/utils.py:330 +#: addon\globalPlugins\brailleExtender\utils.py:309 msgid "Available combinations" msgstr "Tilgængelige kombinationer" -#: addon/globalPlugins/brailleExtender/utils.py:332 +#: addon\globalPlugins\brailleExtender\utils.py:311 msgid "One combination available" msgstr "Der findes én kombination" -#: addon/globalPlugins/brailleExtender/utils.py:349 +#: addon\globalPlugins\brailleExtender\utils.py:322 msgid "space" msgstr "mellemrum" -#: addon/globalPlugins/brailleExtender/utils.py:350 +#: addon\globalPlugins\brailleExtender\utils.py:323 msgid "left SHIFT" msgstr "venstre SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:351 +#: addon\globalPlugins\brailleExtender\utils.py:324 msgid "right SHIFT" msgstr "højre SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:352 +#: addon\globalPlugins\brailleExtender\utils.py:325 msgid "left selector" msgstr "venstre vælger" -#: addon/globalPlugins/brailleExtender/utils.py:353 +#: addon\globalPlugins\brailleExtender\utils.py:326 msgid "right selector" msgstr "højre vælger" -#: addon/globalPlugins/brailleExtender/utils.py:354 +#: addon\globalPlugins\brailleExtender\utils.py:327 msgid "dot" msgstr "prik" -#: addon/globalPlugins/brailleExtender/utils.py:369 +#: addon\globalPlugins\brailleExtender\utils.py:342 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} på {brailleDisplay}" -#: addon/globalPlugins/brailleExtender/utils.py:446 +#: addon\globalPlugins\brailleExtender\utils.py:419 msgid "No text" msgstr "Ingen tekst" -#: addon/globalPlugins/brailleExtender/utils.py:455 +#: addon\globalPlugins\brailleExtender\utils.py:428 msgid "Not text" msgstr "Ikke tekst" -#: addon/globalPlugins/brailleExtender/utils.py:475 +#: addon\globalPlugins\brailleExtender\utils.py:448 msgid "No text selected" msgstr "Ingen tekst valgt" @@ -1907,3 +2331,22 @@ msgstr "" #: buildVars.py:48 msgid "actions and quick navigation through a rotor" msgstr "handlinger og hurtig navigering via en rotor" + +#, python-format +#~ msgid "%s braille display" +#~ msgstr "%s punktdisplay" + +#, python-format +#~ msgid "profile loaded: %s" +#~ msgstr "profil indlæst: %s" + +#~ msgid "Prevent undefined characters with Hexadecimal Unicode value" +#~ msgstr "Forhindre udefinerede tegnd med Hexadecimal Unicode værdi" + +#~ msgid "" +#~ "Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +#~ msgstr "" +#~ "Vis udefinerede tegn som (fx: 0 for blank celle, 12345678, 6-123456)" + +#~ msgid "unknown" +#~ msgstr "ukendt" From ac81afbb860a445277856464e5d43f833594349d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 10 Apr 2020 11:26:02 +0200 Subject: [PATCH 53/87] Format code --- .../brailleExtender/advancedInputMode.py | 29 ++-- addon/globalPlugins/brailleExtender/huc.py | 147 ++++++++++++------ .../brailleExtender/undefinedChars.py | 57 ++++--- 3 files changed, 152 insertions(+), 81 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/advancedInputMode.py b/addon/globalPlugins/brailleExtender/advancedInputMode.py index 003edd5c..c56d6036 100644 --- a/addon/globalPlugins/brailleExtender/advancedInputMode.py +++ b/addon/globalPlugins/brailleExtender/advancedInputMode.py @@ -2,21 +2,23 @@ # advancedInputMode.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. -from collections import namedtuple import codecs import json -import gui +from collections import namedtuple + import wx import addonHandler - -addonHandler.initTranslation() import brailleInput import brailleTables import config +import gui + from .common import * from .utils import getTextInBraille +addonHandler.initTranslation() + AdvancedInputModeDictEntry = namedtuple( "AdvancedInputModeDictEntry", ("abreviation", "replaceBy", "table") ) @@ -196,8 +198,10 @@ def onEditClick(self, event): return editIndex = self.dictList.GetFirstSelected() entryDialog = DictionaryEntryDlg(self) - entryDialog.abreviationTextCtrl.SetValue(self.tmpDict[editIndex].abreviation) - entryDialog.replaceByTextCtrl.SetValue(self.tmpDict[editIndex].replaceBy) + entryDialog.abreviationTextCtrl.SetValue( + self.tmpDict[editIndex].abreviation) + entryDialog.replaceByTextCtrl.SetValue( + self.tmpDict[editIndex].replaceBy) if entryDialog.ShowModal() == wx.ID_OK: entry = entryDialog.dictEntry self.tmpDict[editIndex] = entry @@ -254,7 +258,8 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry")): replaceByLabelText, wx.TextCtrl ) - sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL)) + sHelper.addDialogDismissButtons( + self.CreateButtonSizer(wx.OK | wx.CANCEL)) mainSizer.Add(sHelper.sizer, border=20, flag=wx.ALL) mainSizer.Fit(self) @@ -281,7 +286,8 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.stopAdvancedInputModeAfterOneChar = sHelper.addItem( wx.CheckBox( - self, label=_("E&xit the advanced input mode after typing one pattern") + self, label=_( + "E&xit the advanced input mode after typing one pattern") ) ) self.stopAdvancedInputModeAfterOneChar.SetValue( @@ -294,9 +300,8 @@ def makeSettings(self, settingsSizer): ) def onSave(self): - config.conf["brailleExtender"]["advancedInputMode"][ - "stopAfterOneChar" - ] = self.stopAdvancedInputModeAfterOneChar.IsChecked() + config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"] = self.stopAdvancedInputModeAfterOneChar.IsChecked() s = self.escapeSignUnicodeValue.Value if s: - config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] = getTextInBraille(s[0]) + config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] = getTextInBraille( + s[0]) diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index a6f1cd31..3cb3e655 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -6,10 +6,17 @@ import struct isPy3 = sys.version_info >= (3, 0) + + def chrPy2(i): - try: return unichr(i) - except ValueError: return struct.pack('i', i).decode('utf-32') -if not isPy3: chr = chrPy2 + try: + return unichr(i) + except ValueError: + return struct.pack('i', i).decode('utf-32') + + +if not isPy3: + chr = chrPy2 HUC6_patterns = { "⠿": (0x000000, 0x1FFFF), @@ -63,6 +70,7 @@ def chrPy2(i): print_ = print + def cellDescToChar(cell): if not re.match("^[0-8]+$", cell): return '?' @@ -71,22 +79,27 @@ def cellDescToChar(cell): toAdd += 1 << int(dot) - 1 if int(dot) > 0 else 0 return chr(0x2800 + toAdd) + def charToCellDesc(ch): """ Return a description of an unicode braille char @param ch: the unicode braille character to describe - must be between 0x2800 and 0x28FF included + must be between 0x2800 and 0x28FF included @type ch: str @return: the list of dots describing the braille cell @rtype: str @example: "d" -> "145" """ res = "" - if len(ch) != 1: raise ValueError("Param size can only be one char (currently: %d)" % len(ch)) + if len(ch) != 1: + raise ValueError( + "Param size can only be one char (currently: %d)" % len(ch)) p = ord(ch) - if p >= 0x2800 and p <= 0x28FF: p -= 0x2800 - if p > 255: raise ValueError(r"It is not an unicode braille (%d)" % p) - dots ={1: 1, 2: 2, 4: 3, 8: 4, 16: 5, 32: 6, 64: 7, 128: 8} + if p >= 0x2800 and p <= 0x28FF: + p -= 0x2800 + if p > 255: + raise ValueError(r"It is not an unicode braille (%d)" % p) + dots = {1: 1, 2: 2, 4: 3, 8: 4, 16: 5, 32: 6, 64: 7, 128: 8} i = 1 while p != 0: if p - (128 / i) >= 0: @@ -97,7 +110,7 @@ def charToCellDesc(ch): def unicodeBrailleToDescription(t, sep='-'): - return ''.join([('-'+charToCellDesc(ch)) if ord(ch) >= 0x2800 and ord(ch) <= 0x28FF and ch not in ['\n','\r'] else ch for ch in t]).strip(sep) + return ''.join([('-'+charToCellDesc(ch)) if ord(ch) >= 0x2800 and ord(ch) <= 0x28FF and ch not in ['\n', '\r'] else ch for ch in t]).strip(sep) def cellDescriptionsToUnicodeBraille(t): @@ -108,9 +121,11 @@ def getPrefixAndSuffix(c, HUC6=False): ord_ = ord(c) patterns = HUC6_patterns if HUC6 else HUC8_patterns for pattern in patterns.items(): - if pattern[1][1] >= ord_: return pattern[0] + if pattern[1][1] >= ord_: + return pattern[0] return '?' + def translateHUC6(dots, debug=False): ref1 = "1237" ref2 = "4568" @@ -121,8 +136,10 @@ def translateHUC6(dots, debug=False): for cell in data: for dot in "12345678": if dot not in cell: - if dot in ref1: linedCells1.append('0') - if dot in ref2: linedCells2.append('0') + if dot in ref1: + linedCells1.append('0') + if dot in ref2: + linedCells2.append('0') else: dotTemp = '0' if dot in ref1: @@ -137,23 +154,29 @@ def translateHUC6(dots, debug=False): out = [] i = 0 for l1, l2 in zip(linedCells1, linedCells2): - if i % 3 == 0: out.append("") + if i % 3 == 0: + out.append("") cellTemp = (l1 if l1 != '0' else '') + (l2 if l2 != '0' else '') cellTemp = ''.join(sorted(cellTemp)) out[-1] += cellTemp if cellTemp else '0' out[-1] = ''.join(sorted([dot for dot in out[-1] if dot != '0'])) - if not out[-1]: out[-1] = '0' + if not out[-1]: + out[-1] = '0' i += 1 - if debug: print_(":translateHUC6:", dots, "->", repr(out)) + if debug: + print_(":translateHUC6:", dots, "->", repr(out)) out = '-'.join(out) return out + def translateHUC8(dots, debug=False): out = "" newDots = "037168425" - for dot in dots: out += newDots[int(dot)] + for dot in dots: + out += newDots[int(dot)] out = ''.join(sorted(out)) - if debug: print_(":translateHUC8:", dots, "->", out) + if debug: + print_(":translateHUC8:", dots, "->", out) return out @@ -161,13 +184,18 @@ def translate(t, HUC6=False, unicodeBraille=True, debug=False): out = "" for c in t: pattern = getPrefixAndSuffix(c, HUC6) - if not unicodeBraille: pattern = unicodeBrailleToDescription(pattern) - if '…' not in pattern: pattern += '…' - if not unicodeBraille: pattern = pattern.replace('…', "-…") + if not unicodeBraille: + pattern = unicodeBrailleToDescription(pattern) + if '…' not in pattern: + pattern += '…' + if not unicodeBraille: + pattern = pattern.replace('…', "-…") ord_ = ord(c) hexVal = hex(ord_)[2:][-4:].upper() - if len(hexVal) < 4: hexVal = ("%4s" % hexVal).replace(' ', '0') - if debug: print_(":hexVal:", c, hexVal) + if len(hexVal) < 4: + hexVal = ("%4s" % hexVal).replace(' ', '0') + if debug: + print_(":hexVal:", c, hexVal) out_ = "" beg = "" for i, l in enumerate(hexVal): @@ -175,74 +203,103 @@ def translate(t, HUC6=False, unicodeBraille=True, debug=False): if i % 2: end = translateHUC8(hexVals[j], debug) cleanCell = ''.join(sorted((beg + end))).replace('0', '') - if not cleanCell: cleanCell = '0' - if debug: print_(":cell %d:" % ((i+1)//2), cleanCell) + if not cleanCell: + cleanCell = '0' + if debug: + print_(":cell %d:" % ((i+1)//2), cleanCell) out_ += cleanCell else: - if i != 0: out_ += "-" + if i != 0: + out_ += "-" beg = hexVals[j] if HUC6: out_ = translateHUC6(out_, debug) - if ord_ <= 0xFFFF: toAdd = '3' - elif ord_ <= 0x1FFFF: toAdd = '6' - else: toAdd = "36" + if ord_ <= 0xFFFF: + toAdd = '3' + elif ord_ <= 0x1FFFF: + toAdd = '6' + else: + toAdd = "36" patternLastCell = "^.+-([0-6]+)$" lastCell = re.sub(patternLastCell, r"\1", out_) newLastCell = ''.join(sorted(toAdd + lastCell)).replace('0', '') out_ = re.sub("-([0-6]+)$", '-'+newLastCell, out_) - if unicodeBraille: out_ = cellDescriptionsToUnicodeBraille(out_) + if unicodeBraille: + out_ = cellDescriptionsToUnicodeBraille(out_) out_ = pattern.replace('…', out_.strip('-')) - if out and not unicodeBraille: out += '-' + if out and not unicodeBraille: + out += '-' out += out_ return out + def splitInTwoCells(dotPattern): c1 = "" c2 = "" for dot in dotPattern: - if dot in ['3', '6', '7', '8']: c2 += dot - elif dot in ['1', '2', '4', '5']: c1 += dot - if c2: c2 = translateHUC8(c2) - if not c1: c1 = '0' - if not c2: c2 = '0' + if dot in ['3', '6', '7', '8']: + c2 += dot + elif dot in ['1', '2', '4', '5']: + c1 += dot + if c2: + c2 = translateHUC8(c2) + if not c1: + c1 = '0' + if not c2: + c2 = '0' return [c1, c2] + def isValidHUCInput(s): - if not s: return HUC_INPUT_INCOMPLETE + if not s: + return HUC_INPUT_INCOMPLETE if len(s) == 1: matchePatterns = [e for e in HUC8_patterns.keys() if e.startswith(s)] - if matchePatterns: return HUC_INPUT_INCOMPLETE - else: return HUC_INPUT_INVALID + if matchePatterns: + return HUC_INPUT_INCOMPLETE + else: + return HUC_INPUT_INVALID prefix = s[0:2] if len(s) == 4 else s[0] s = s[2:] if len(s) == 4 else s[1:] size = len(s) if prefix not in HUC8_patterns.keys(): if s: - if prefix+s[0] in HUC8_patterns.keys(): return HUC_INPUT_INCOMPLETE + if prefix+s[0] in HUC8_patterns.keys(): + return HUC_INPUT_INCOMPLETE return HUC_INPUT_INVALID - if size == 2: return HUC_INPUT_COMPLETE - elif size < 2: return HUC_INPUT_INCOMPLETE + if size == 2: + return HUC_INPUT_COMPLETE + elif size < 2: + return HUC_INPUT_INCOMPLETE return HUC_INPUT_INVALID + def backTranslateHUC8(s, debug=False): - if len(s) not in [3, 4]: raise ValueError("Invalid size") + if len(s) not in [3, 4]: + raise ValueError("Invalid size") prefix = s[0:2] if len(s) == 4 else s[0] s = s[2:] if len(s) == 4 else s[1:] - if prefix not in HUC8_patterns.keys(): raise ValueError("Invalid prefix") + if prefix not in HUC8_patterns.keys(): + raise ValueError("Invalid prefix") out = [] s = unicodeBrailleToDescription(s) for c in s.split('-'): out += splitInTwoCells(c) return chr(HUC8_patterns[prefix][0] + int(''.join(["%x" % hexVals.index(out) for out in out]), 16)) + def backTranslateHUC6(s, debug=False): return '⠃' + def backTranslate(s, HUC6=False, debug=False): func = backTranslateHUC6 if HUC6 else backTranslateHUC8 return func(s, debug=debug) + if __name__ == "__main__": t = input("Text to translate: ") - print("HUC8:\n- %s\n- %s" % (translate(t), translate(t, unicodeBraille=False))) - print("HUC6:\n- %s\n- %s" % (translate(t, HUC6=True), translate(t, HUC6=True, unicodeBraille=False))) + print("HUC8:\n- %s\n- %s" % + (translate(t), translate(t, unicodeBraille=False))) + print("HUC6:\n- %s\n- %s" % (translate(t, HUC6=True), + translate(t, HUC6=True, unicodeBraille=False))) diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index dc9e3a70..3369b9a7 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -2,6 +2,16 @@ # undefinedChars.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. +from .utils import getCurrentBrailleTables +from . import huc +from . import configBE +from .utils import getTextInBraille +from .common import * +import louis +import config +import characterProcessing +import brailleTables +import brailleInput from collections import namedtuple import codecs import json @@ -12,21 +22,12 @@ import addonHandler addonHandler.initTranslation() -import brailleInput -import brailleTables -import characterProcessing -import config -import louis -from .common import * -from .utils import getTextInBraille -from . import configBE -from . import huc -from .utils import getCurrentBrailleTables HUCDotPattern = "12345678-78-12345678" undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) + def getHardValue(): selected = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] if selected == configBE.CHOICE_otherDots: @@ -40,6 +41,7 @@ def getHardValue(): else: return "" + def setUndefinedChar(t=None): if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -63,7 +65,8 @@ def setUndefinedChar(t=None): v = huc.unicodeBrailleToDescription( getTextInBraille(s, getCurrentBrailleTables()) ) - louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + louis.compileString(getCurrentBrailleTables(), + bytes("undefined %s" % v, "ASCII")) def getExtendedSymbolsForString(s: str) -> dict: @@ -82,8 +85,8 @@ def getDescChar(c, lang="Windows", start="", end=""): ).replace(' ', '').strip() if not desc or desc == c: if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ - configBE.CHOICE_HUC6, - configBE.CHOICE_HUC8, + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, ]: HUC6 = ( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -123,7 +126,8 @@ def undefinedCharProcess(self): extendedSymbolsRawText = {} if config.conf["brailleExtender"]["undefinedCharsRepr"]["extendedDesc"]: extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) - unicodeBrailleRepr = "".join([chr(10240 + cell) for cell in self.brailleCells]) + unicodeBrailleRepr = "".join([chr(10240 + cell) + for cell in self.brailleCells]) allBraillePos = [ m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr) ] @@ -145,7 +149,7 @@ def undefinedCharProcess(self): ( getDescChar( self.rawText[ - self.brailleToRawPos[braillePos] : allExtendedPos[ + self.brailleToRawPos[braillePos]: allExtendedPos[ self.brailleToRawPos[braillePos] ] ], @@ -171,13 +175,14 @@ def undefinedCharProcess(self): start=start, end=end, ), - table=[config.conf["brailleExtender"]["undefinedCharsRepr"]["table"]], + table=[config.conf["brailleExtender"] + ["undefinedCharsRepr"]["table"]], ) for braillePos in allBraillePos } elif config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ - configBE.CHOICE_HUC6, - configBE.CHOICE_HUC8, + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, ]: HUC6 = ( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -205,7 +210,7 @@ def undefinedCharProcess(self): for iBrailleCells, brailleCells in enumerate(self.brailleCells): brailleToRawPos = self.brailleToRawPos[iBrailleCells] if iBrailleCells in replacements and not replacements[iBrailleCells].startswith( - undefinedCharPattern[0] + undefinedCharPattern[0] ): toAdd = [ord(c) - 10240 for c in replacements[iBrailleCells]] newBrailleCells += toAdd @@ -218,7 +223,7 @@ def undefinedCharProcess(self): newBrailleCells.append(self.brailleCells[iBrailleCells]) newBrailleToRawPos += [i] if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[ - iBrailleCells + 1 + iBrailleCells + 1 ] != brailleToRawPos: i += 1 pos = -42 @@ -266,14 +271,16 @@ def makeSettings(self, settingsSizer): self.undefinedCharReprList.SetSelection( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] ) - self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) + self.undefinedCharReprList.Bind( + wx.EVT_CHOICE, self.onUndefinedCharReprList) # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl( _("Specify another pattern"), wx.TextCtrl, value=self.getHardValue() ) self.onUndefinedCharReprList() self.undefinedCharDesc = sHelper.addItem( - wx.CheckBox(self, label=_("Describe undefined characters if possible")) + wx.CheckBox(self, label=_( + "Describe undefined characters if possible")) ) self.undefinedCharDesc.SetValue( config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"] @@ -281,7 +288,8 @@ def makeSettings(self, settingsSizer): self.undefinedCharDesc.Bind(wx.EVT_CHECKBOX, self.onUndefinedCharDesc) self.undefinedCharExtendedDesc = sHelper.addItem( wx.CheckBox( - self, label=_("Also describe extended characters (e.g.: country flags)") + self, label=_( + "Also describe extended characters (e.g.: country flags)") ) ) self.undefinedCharExtendedDesc.SetValue( @@ -412,7 +420,8 @@ def getExtendedSymbols(locale): try: b, u = characterProcessing._getSpeechSymbolsForLocale(locale) except LookupError: - b, u = characterProcessing._getSpeechSymbolsForLocale(locale.split("_")[0]) + b, u = characterProcessing._getSpeechSymbolsForLocale( + locale.split("_")[0]) a = { k.strip(): v.replacement.replace(' ', '').strip() for k, v in b.symbols.items() From 137b8a3155e08cad9ed36b91e37492de191655f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 10 Apr 2020 11:26:02 +0200 Subject: [PATCH 54/87] Format code --- .../brailleExtender/advancedInputMode.py | 29 ++-- addon/globalPlugins/brailleExtender/huc.py | 147 ++++++++++++------ .../brailleExtender/undefinedChars.py | 53 ++++--- 3 files changed, 150 insertions(+), 79 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/advancedInputMode.py b/addon/globalPlugins/brailleExtender/advancedInputMode.py index 003edd5c..c56d6036 100644 --- a/addon/globalPlugins/brailleExtender/advancedInputMode.py +++ b/addon/globalPlugins/brailleExtender/advancedInputMode.py @@ -2,21 +2,23 @@ # advancedInputMode.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. -from collections import namedtuple import codecs import json -import gui +from collections import namedtuple + import wx import addonHandler - -addonHandler.initTranslation() import brailleInput import brailleTables import config +import gui + from .common import * from .utils import getTextInBraille +addonHandler.initTranslation() + AdvancedInputModeDictEntry = namedtuple( "AdvancedInputModeDictEntry", ("abreviation", "replaceBy", "table") ) @@ -196,8 +198,10 @@ def onEditClick(self, event): return editIndex = self.dictList.GetFirstSelected() entryDialog = DictionaryEntryDlg(self) - entryDialog.abreviationTextCtrl.SetValue(self.tmpDict[editIndex].abreviation) - entryDialog.replaceByTextCtrl.SetValue(self.tmpDict[editIndex].replaceBy) + entryDialog.abreviationTextCtrl.SetValue( + self.tmpDict[editIndex].abreviation) + entryDialog.replaceByTextCtrl.SetValue( + self.tmpDict[editIndex].replaceBy) if entryDialog.ShowModal() == wx.ID_OK: entry = entryDialog.dictEntry self.tmpDict[editIndex] = entry @@ -254,7 +258,8 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry")): replaceByLabelText, wx.TextCtrl ) - sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL)) + sHelper.addDialogDismissButtons( + self.CreateButtonSizer(wx.OK | wx.CANCEL)) mainSizer.Add(sHelper.sizer, border=20, flag=wx.ALL) mainSizer.Fit(self) @@ -281,7 +286,8 @@ def makeSettings(self, settingsSizer): # Translators: label of a dialog. self.stopAdvancedInputModeAfterOneChar = sHelper.addItem( wx.CheckBox( - self, label=_("E&xit the advanced input mode after typing one pattern") + self, label=_( + "E&xit the advanced input mode after typing one pattern") ) ) self.stopAdvancedInputModeAfterOneChar.SetValue( @@ -294,9 +300,8 @@ def makeSettings(self, settingsSizer): ) def onSave(self): - config.conf["brailleExtender"]["advancedInputMode"][ - "stopAfterOneChar" - ] = self.stopAdvancedInputModeAfterOneChar.IsChecked() + config.conf["brailleExtender"]["advancedInputMode"]["stopAfterOneChar"] = self.stopAdvancedInputModeAfterOneChar.IsChecked() s = self.escapeSignUnicodeValue.Value if s: - config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] = getTextInBraille(s[0]) + config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] = getTextInBraille( + s[0]) diff --git a/addon/globalPlugins/brailleExtender/huc.py b/addon/globalPlugins/brailleExtender/huc.py index a6f1cd31..3cb3e655 100644 --- a/addon/globalPlugins/brailleExtender/huc.py +++ b/addon/globalPlugins/brailleExtender/huc.py @@ -6,10 +6,17 @@ import struct isPy3 = sys.version_info >= (3, 0) + + def chrPy2(i): - try: return unichr(i) - except ValueError: return struct.pack('i', i).decode('utf-32') -if not isPy3: chr = chrPy2 + try: + return unichr(i) + except ValueError: + return struct.pack('i', i).decode('utf-32') + + +if not isPy3: + chr = chrPy2 HUC6_patterns = { "⠿": (0x000000, 0x1FFFF), @@ -63,6 +70,7 @@ def chrPy2(i): print_ = print + def cellDescToChar(cell): if not re.match("^[0-8]+$", cell): return '?' @@ -71,22 +79,27 @@ def cellDescToChar(cell): toAdd += 1 << int(dot) - 1 if int(dot) > 0 else 0 return chr(0x2800 + toAdd) + def charToCellDesc(ch): """ Return a description of an unicode braille char @param ch: the unicode braille character to describe - must be between 0x2800 and 0x28FF included + must be between 0x2800 and 0x28FF included @type ch: str @return: the list of dots describing the braille cell @rtype: str @example: "d" -> "145" """ res = "" - if len(ch) != 1: raise ValueError("Param size can only be one char (currently: %d)" % len(ch)) + if len(ch) != 1: + raise ValueError( + "Param size can only be one char (currently: %d)" % len(ch)) p = ord(ch) - if p >= 0x2800 and p <= 0x28FF: p -= 0x2800 - if p > 255: raise ValueError(r"It is not an unicode braille (%d)" % p) - dots ={1: 1, 2: 2, 4: 3, 8: 4, 16: 5, 32: 6, 64: 7, 128: 8} + if p >= 0x2800 and p <= 0x28FF: + p -= 0x2800 + if p > 255: + raise ValueError(r"It is not an unicode braille (%d)" % p) + dots = {1: 1, 2: 2, 4: 3, 8: 4, 16: 5, 32: 6, 64: 7, 128: 8} i = 1 while p != 0: if p - (128 / i) >= 0: @@ -97,7 +110,7 @@ def charToCellDesc(ch): def unicodeBrailleToDescription(t, sep='-'): - return ''.join([('-'+charToCellDesc(ch)) if ord(ch) >= 0x2800 and ord(ch) <= 0x28FF and ch not in ['\n','\r'] else ch for ch in t]).strip(sep) + return ''.join([('-'+charToCellDesc(ch)) if ord(ch) >= 0x2800 and ord(ch) <= 0x28FF and ch not in ['\n', '\r'] else ch for ch in t]).strip(sep) def cellDescriptionsToUnicodeBraille(t): @@ -108,9 +121,11 @@ def getPrefixAndSuffix(c, HUC6=False): ord_ = ord(c) patterns = HUC6_patterns if HUC6 else HUC8_patterns for pattern in patterns.items(): - if pattern[1][1] >= ord_: return pattern[0] + if pattern[1][1] >= ord_: + return pattern[0] return '?' + def translateHUC6(dots, debug=False): ref1 = "1237" ref2 = "4568" @@ -121,8 +136,10 @@ def translateHUC6(dots, debug=False): for cell in data: for dot in "12345678": if dot not in cell: - if dot in ref1: linedCells1.append('0') - if dot in ref2: linedCells2.append('0') + if dot in ref1: + linedCells1.append('0') + if dot in ref2: + linedCells2.append('0') else: dotTemp = '0' if dot in ref1: @@ -137,23 +154,29 @@ def translateHUC6(dots, debug=False): out = [] i = 0 for l1, l2 in zip(linedCells1, linedCells2): - if i % 3 == 0: out.append("") + if i % 3 == 0: + out.append("") cellTemp = (l1 if l1 != '0' else '') + (l2 if l2 != '0' else '') cellTemp = ''.join(sorted(cellTemp)) out[-1] += cellTemp if cellTemp else '0' out[-1] = ''.join(sorted([dot for dot in out[-1] if dot != '0'])) - if not out[-1]: out[-1] = '0' + if not out[-1]: + out[-1] = '0' i += 1 - if debug: print_(":translateHUC6:", dots, "->", repr(out)) + if debug: + print_(":translateHUC6:", dots, "->", repr(out)) out = '-'.join(out) return out + def translateHUC8(dots, debug=False): out = "" newDots = "037168425" - for dot in dots: out += newDots[int(dot)] + for dot in dots: + out += newDots[int(dot)] out = ''.join(sorted(out)) - if debug: print_(":translateHUC8:", dots, "->", out) + if debug: + print_(":translateHUC8:", dots, "->", out) return out @@ -161,13 +184,18 @@ def translate(t, HUC6=False, unicodeBraille=True, debug=False): out = "" for c in t: pattern = getPrefixAndSuffix(c, HUC6) - if not unicodeBraille: pattern = unicodeBrailleToDescription(pattern) - if '…' not in pattern: pattern += '…' - if not unicodeBraille: pattern = pattern.replace('…', "-…") + if not unicodeBraille: + pattern = unicodeBrailleToDescription(pattern) + if '…' not in pattern: + pattern += '…' + if not unicodeBraille: + pattern = pattern.replace('…', "-…") ord_ = ord(c) hexVal = hex(ord_)[2:][-4:].upper() - if len(hexVal) < 4: hexVal = ("%4s" % hexVal).replace(' ', '0') - if debug: print_(":hexVal:", c, hexVal) + if len(hexVal) < 4: + hexVal = ("%4s" % hexVal).replace(' ', '0') + if debug: + print_(":hexVal:", c, hexVal) out_ = "" beg = "" for i, l in enumerate(hexVal): @@ -175,74 +203,103 @@ def translate(t, HUC6=False, unicodeBraille=True, debug=False): if i % 2: end = translateHUC8(hexVals[j], debug) cleanCell = ''.join(sorted((beg + end))).replace('0', '') - if not cleanCell: cleanCell = '0' - if debug: print_(":cell %d:" % ((i+1)//2), cleanCell) + if not cleanCell: + cleanCell = '0' + if debug: + print_(":cell %d:" % ((i+1)//2), cleanCell) out_ += cleanCell else: - if i != 0: out_ += "-" + if i != 0: + out_ += "-" beg = hexVals[j] if HUC6: out_ = translateHUC6(out_, debug) - if ord_ <= 0xFFFF: toAdd = '3' - elif ord_ <= 0x1FFFF: toAdd = '6' - else: toAdd = "36" + if ord_ <= 0xFFFF: + toAdd = '3' + elif ord_ <= 0x1FFFF: + toAdd = '6' + else: + toAdd = "36" patternLastCell = "^.+-([0-6]+)$" lastCell = re.sub(patternLastCell, r"\1", out_) newLastCell = ''.join(sorted(toAdd + lastCell)).replace('0', '') out_ = re.sub("-([0-6]+)$", '-'+newLastCell, out_) - if unicodeBraille: out_ = cellDescriptionsToUnicodeBraille(out_) + if unicodeBraille: + out_ = cellDescriptionsToUnicodeBraille(out_) out_ = pattern.replace('…', out_.strip('-')) - if out and not unicodeBraille: out += '-' + if out and not unicodeBraille: + out += '-' out += out_ return out + def splitInTwoCells(dotPattern): c1 = "" c2 = "" for dot in dotPattern: - if dot in ['3', '6', '7', '8']: c2 += dot - elif dot in ['1', '2', '4', '5']: c1 += dot - if c2: c2 = translateHUC8(c2) - if not c1: c1 = '0' - if not c2: c2 = '0' + if dot in ['3', '6', '7', '8']: + c2 += dot + elif dot in ['1', '2', '4', '5']: + c1 += dot + if c2: + c2 = translateHUC8(c2) + if not c1: + c1 = '0' + if not c2: + c2 = '0' return [c1, c2] + def isValidHUCInput(s): - if not s: return HUC_INPUT_INCOMPLETE + if not s: + return HUC_INPUT_INCOMPLETE if len(s) == 1: matchePatterns = [e for e in HUC8_patterns.keys() if e.startswith(s)] - if matchePatterns: return HUC_INPUT_INCOMPLETE - else: return HUC_INPUT_INVALID + if matchePatterns: + return HUC_INPUT_INCOMPLETE + else: + return HUC_INPUT_INVALID prefix = s[0:2] if len(s) == 4 else s[0] s = s[2:] if len(s) == 4 else s[1:] size = len(s) if prefix not in HUC8_patterns.keys(): if s: - if prefix+s[0] in HUC8_patterns.keys(): return HUC_INPUT_INCOMPLETE + if prefix+s[0] in HUC8_patterns.keys(): + return HUC_INPUT_INCOMPLETE return HUC_INPUT_INVALID - if size == 2: return HUC_INPUT_COMPLETE - elif size < 2: return HUC_INPUT_INCOMPLETE + if size == 2: + return HUC_INPUT_COMPLETE + elif size < 2: + return HUC_INPUT_INCOMPLETE return HUC_INPUT_INVALID + def backTranslateHUC8(s, debug=False): - if len(s) not in [3, 4]: raise ValueError("Invalid size") + if len(s) not in [3, 4]: + raise ValueError("Invalid size") prefix = s[0:2] if len(s) == 4 else s[0] s = s[2:] if len(s) == 4 else s[1:] - if prefix not in HUC8_patterns.keys(): raise ValueError("Invalid prefix") + if prefix not in HUC8_patterns.keys(): + raise ValueError("Invalid prefix") out = [] s = unicodeBrailleToDescription(s) for c in s.split('-'): out += splitInTwoCells(c) return chr(HUC8_patterns[prefix][0] + int(''.join(["%x" % hexVals.index(out) for out in out]), 16)) + def backTranslateHUC6(s, debug=False): return '⠃' + def backTranslate(s, HUC6=False, debug=False): func = backTranslateHUC6 if HUC6 else backTranslateHUC8 return func(s, debug=debug) + if __name__ == "__main__": t = input("Text to translate: ") - print("HUC8:\n- %s\n- %s" % (translate(t), translate(t, unicodeBraille=False))) - print("HUC6:\n- %s\n- %s" % (translate(t, HUC6=True), translate(t, HUC6=True, unicodeBraille=False))) + print("HUC8:\n- %s\n- %s" % + (translate(t), translate(t, unicodeBraille=False))) + print("HUC6:\n- %s\n- %s" % (translate(t, HUC6=True), + translate(t, HUC6=True, unicodeBraille=False))) diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index dc9e3a70..2d90cfcd 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -2,31 +2,32 @@ # undefinedChars.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. -from collections import namedtuple import codecs import json import re -import gui +from collections import namedtuple + import wx import addonHandler - -addonHandler.initTranslation() import brailleInput import brailleTables import characterProcessing import config +import gui import louis +from . import configBE, huc from .common import * -from .utils import getTextInBraille -from . import configBE -from . import huc -from .utils import getCurrentBrailleTables +from .utils import getCurrentBrailleTables, getTextInBraille + +addonHandler.initTranslation() + HUCDotPattern = "12345678-78-12345678" undefinedCharPattern = huc.cellDescriptionsToUnicodeBraille(HUCDotPattern) + def getHardValue(): selected = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] if selected == configBE.CHOICE_otherDots: @@ -40,6 +41,7 @@ def getHardValue(): else: return "" + def setUndefinedChar(t=None): if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -63,7 +65,8 @@ def setUndefinedChar(t=None): v = huc.unicodeBrailleToDescription( getTextInBraille(s, getCurrentBrailleTables()) ) - louis.compileString(getCurrentBrailleTables(), bytes("undefined %s" % v, "ASCII")) + louis.compileString(getCurrentBrailleTables(), + bytes("undefined %s" % v, "ASCII")) def getExtendedSymbolsForString(s: str) -> dict: @@ -82,8 +85,8 @@ def getDescChar(c, lang="Windows", start="", end=""): ).replace(' ', '').strip() if not desc or desc == c: if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ - configBE.CHOICE_HUC6, - configBE.CHOICE_HUC8, + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, ]: HUC6 = ( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -123,7 +126,8 @@ def undefinedCharProcess(self): extendedSymbolsRawText = {} if config.conf["brailleExtender"]["undefinedCharsRepr"]["extendedDesc"]: extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) - unicodeBrailleRepr = "".join([chr(10240 + cell) for cell in self.brailleCells]) + unicodeBrailleRepr = "".join([chr(10240 + cell) + for cell in self.brailleCells]) allBraillePos = [ m.start() for m in re.finditer(undefinedCharPattern, unicodeBrailleRepr) ] @@ -145,7 +149,7 @@ def undefinedCharProcess(self): ( getDescChar( self.rawText[ - self.brailleToRawPos[braillePos] : allExtendedPos[ + self.brailleToRawPos[braillePos]: allExtendedPos[ self.brailleToRawPos[braillePos] ] ], @@ -171,13 +175,14 @@ def undefinedCharProcess(self): start=start, end=end, ), - table=[config.conf["brailleExtender"]["undefinedCharsRepr"]["table"]], + table=[config.conf["brailleExtender"] + ["undefinedCharsRepr"]["table"]], ) for braillePos in allBraillePos } elif config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ - configBE.CHOICE_HUC6, - configBE.CHOICE_HUC8, + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, ]: HUC6 = ( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] @@ -205,7 +210,7 @@ def undefinedCharProcess(self): for iBrailleCells, brailleCells in enumerate(self.brailleCells): brailleToRawPos = self.brailleToRawPos[iBrailleCells] if iBrailleCells in replacements and not replacements[iBrailleCells].startswith( - undefinedCharPattern[0] + undefinedCharPattern[0] ): toAdd = [ord(c) - 10240 for c in replacements[iBrailleCells]] newBrailleCells += toAdd @@ -218,7 +223,7 @@ def undefinedCharProcess(self): newBrailleCells.append(self.brailleCells[iBrailleCells]) newBrailleToRawPos += [i] if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[ - iBrailleCells + 1 + iBrailleCells + 1 ] != brailleToRawPos: i += 1 pos = -42 @@ -266,14 +271,16 @@ def makeSettings(self, settingsSizer): self.undefinedCharReprList.SetSelection( config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] ) - self.undefinedCharReprList.Bind(wx.EVT_CHOICE, self.onUndefinedCharReprList) + self.undefinedCharReprList.Bind( + wx.EVT_CHOICE, self.onUndefinedCharReprList) # Translators: label of a dialog. self.undefinedCharReprEdit = sHelper.addLabeledControl( _("Specify another pattern"), wx.TextCtrl, value=self.getHardValue() ) self.onUndefinedCharReprList() self.undefinedCharDesc = sHelper.addItem( - wx.CheckBox(self, label=_("Describe undefined characters if possible")) + wx.CheckBox(self, label=_( + "Describe undefined characters if possible")) ) self.undefinedCharDesc.SetValue( config.conf["brailleExtender"]["undefinedCharsRepr"]["desc"] @@ -281,7 +288,8 @@ def makeSettings(self, settingsSizer): self.undefinedCharDesc.Bind(wx.EVT_CHECKBOX, self.onUndefinedCharDesc) self.undefinedCharExtendedDesc = sHelper.addItem( wx.CheckBox( - self, label=_("Also describe extended characters (e.g.: country flags)") + self, label=_( + "Also describe extended characters (e.g.: country flags)") ) ) self.undefinedCharExtendedDesc.SetValue( @@ -412,7 +420,8 @@ def getExtendedSymbols(locale): try: b, u = characterProcessing._getSpeechSymbolsForLocale(locale) except LookupError: - b, u = characterProcessing._getSpeechSymbolsForLocale(locale.split("_")[0]) + b, u = characterProcessing._getSpeechSymbolsForLocale( + locale.split("_")[0]) a = { k.strip(): v.replacement.replace(' ', '').strip() for k, v in b.symbols.items() From 870f49c1213efd520b82588b6be5d29269300e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sun, 12 Apr 2020 07:21:32 +0200 Subject: [PATCH 55/87] Refactor features around braille tables --- .../globalPlugins/brailleExtender/__init__.py | 30 ++- .../brailleExtender/brailleTablesHelper.py | 70 +++++++ .../globalPlugins/brailleExtender/configBE.py | 49 +---- addon/globalPlugins/brailleExtender/patchs.py | 15 +- .../globalPlugins/brailleExtender/settings.py | 196 +++++++----------- 5 files changed, 176 insertions(+), 184 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/brailleTablesHelper.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 4a714320..7e421573 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -46,15 +46,18 @@ import virtualBuffers from . import configBE config.conf.spec["brailleExtender"] = configBE.getConfspec() +from . import settings from . import utils from .updateCheck import * from . import advancedInputMode +from . import brailleTablesHelper from . import dictionaries from . import huc -from . import patchs -from . import settings -from .common import * from . import undefinedChars +from .common import * +from . import patchs + + instanceGP = None lang = configBE.lang @@ -173,8 +176,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin): _pGestures = OrderedDict() rotorGES = {} noKC = None - if not configBE.noUnicodeTable: - backupInputTable = brailleInput.handler.table + backupInputTable = brailleInput.handler.table backupMessageTimeout = None backupShowCursor = False backupTether = utils.getTether() @@ -320,7 +322,7 @@ def onDefaultDictionary(evt): @staticmethod def onTableDictionary(evt): - outTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] + outTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] gui.mainFrame._popupSettingsDialog(dictionaries.DictionaryDlg, _("Table dictionary")+(" (%s)" % outTable), "table") @staticmethod @@ -628,7 +630,7 @@ def script_reportExtraInfos(self, gesture): def script_getTableOverview(self, gesture): inTable = brailleInput.handler.table.displayName - ouTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] + ouTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] t = (_(" Input table")+": %s\n"+_("Output table")+": %s\n\n") % (inTable+' (%s)' % (brailleInput.handler.table.fileName), ouTable+' (%s)' % (config.conf["braille"]["translationTable"])) t += utils.getTableOverview() ui.browseableMessage("
        %s
        " % t, _("Table overview (%s)" % brailleInput.handler.table.displayName), True) @@ -855,8 +857,6 @@ def script_decreaseDelayAutoScroll(self, gesture): script_decreaseDelayAutoScroll.__doc__ = _("Decrease autoscroll delay") def script_switchInputBrailleTable(self, gesture): - if configBE.noUnicodeTable: - return ui.message(_("Please use NVDA 2017.3 minimum for this feature")) if len(configBE.inputTables) < 2: return ui.message(_("You must choose at least two tables for this feature. Please fill in the settings")) if not config.conf["braille"]["inputTable"] in configBE.inputTables: @@ -864,7 +864,7 @@ def script_switchInputBrailleTable(self, gesture): tid = configBE.inputTables.index(config.conf["braille"]["inputTable"]) nID = tid + 1 if tid + 1 < len(configBE.inputTables) else 0 brailleInput.handler.table = brailleTables.listTables( - )[configBE.tablesFN.index(configBE.inputTables[nID])] + )[brailleTablesHelper.listTablesFileName().index(configBE.inputTables[nID])] ui.message(_("Input: %s") % brailleInput.handler.table.displayName) return @@ -872,9 +872,6 @@ def script_switchInputBrailleTable(self, gesture): "Switch between his favorite input braille tables") def script_switchOutputBrailleTable(self, gesture): - if configBE.noUnicodeTable: - return ui.message( - _("Please use NVDA 2017.3 minimum for this feature")) if len(configBE.outputTables) < 2: return ui.message(_("You must choose at least two tables for this feature. Please fill in the settings")) if not config.conf["braille"]["translationTable"] in configBE.outputTables: @@ -885,14 +882,14 @@ def script_switchOutputBrailleTable(self, gesture): config.conf["braille"]["translationTable"] = configBE.outputTables[nID] utils.refreshBD() dictionaries.setDictTables() - ui.message(_("Output: %s") % configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])]) + ui.message(_("Output: %s") % brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])]) return script_switchOutputBrailleTable.__doc__ = _("Switch between his favorite output braille tables") def script_currentBrailleTable(self, gesture): inTable = brailleInput.handler.table.displayName - ouTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] + ouTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] if ouTable == inTable: braille.handler.message(_("I⣿O:{I}").format(I=inTable, O=ouTable)) speech.speakMessage(_("Input and output: {I}.").format(I=inTable, O=ouTable)) @@ -1322,8 +1319,7 @@ def terminate(self): self.removeMenu() self.restorReviewCursorTethering() configBE.discardRoleLabels() - if configBE.noUnicodeTable: - brailleInput.handler.table = self.backupInputTable + brailleInput.handler.table = self.backupInputTable if self.hourDatePlayed: self.hourDateTimer.Stop() if configBE.noMessageTimeout: diff --git a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py new file mode 100644 index 00000000..62e303c7 --- /dev/null +++ b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py @@ -0,0 +1,70 @@ +# coding: utf-8 +# brailleTablesHelper.py +# Part of BrailleExtender addon for NVDA +# Copyright 2016-2020 André-Abush CLAUSE, released under GPL. +import brailleTables +import config +from typing import Optional, List, Tuple +from logHandler import log + +listContractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.contracted] +listUncontractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if not table.contracted] +listInputTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.input] +listOutputTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.output] +listTablesFileName = lambda tables=None: [table.fileName for table in (tables or brailleTables.listTables())] +listTablesDisplayName = lambda tables=None: [table.displayName for table in (tables or brailleTables.listTables())] + +def getPreferedTables() -> Tuple[List[str]]: + allInputTablesFileName = listTablesFileName(listInputTables()) + allOutputTablesFileName = listTablesFileName(listOutputTables()) + preferedInputTablesFileName = config.conf["brailleExtender"]["preferedInputTables"].split('|') + preferedOutputTablesFileName = config.conf["brailleExtender"]["preferedOutputTables"].split('|') + inputTables = [fn for fn in preferedInputTablesFileName if fn in allInputTablesFileName] + outputTables = [fn for fn in preferedOutputTablesFileName if fn in allOutputTablesFileName] + return inputTables, outputTables + +def getPreferedTablesIndexes() -> List[int]: + preferedInputTables, preferedOutputTables = getPreferedTables() + tablesFileName = [table.fileName for table in brailleTables.listTables()] + o = [] + for l in [preferedInputTables, preferedOutputTables]: + o_ = [] + for i, e in enumerate(l): + if e in tablesFileName: o_.append(tablesFileName.index(e)) + o.append(o_) + return o + +def getPostTables() -> List[str]: + tablesFileName = [table.fileName for table in brailleTables.listTables()] + l = config.conf["brailleExtender"]["postTables"].split('|') + return [fn for fn in l if fn in tablesFileName] + +def getPostTablesIndexes() -> List[int]: + postTablesFileName = getPostTables() + tablesFileName = [table.fileName for table in brailleTables.listTables()] + o = [] + for i, e in enumerate(postTablesFileName): + if e in tablesFileName: o.append(tablesFileName.index(e)) + return o + +def cleanTablesFileName(tables: List[str], output: Optional[bool]=False) -> List[str]: + listTablesFileName = listTablesFileName() + for t in tables: + if not t in listTablesFileName: tables.remove(l) + return tables + +def getCustomBrailleTables(): + return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] + +def isContractedTable(fileName): + listContractedTables = listContractedTables() + if fileName in tablesFN: return False + return brailleTables.listTables()[tablesFN.index(fileName)].contracted + +def getTablesFilenameByID(l: List[int]) -> List[int]: + listTablesFileName = [table.fileName for table in brailleTables.listTables()] + o = [] + size = len(listTablesFileName) + for i in l: + if i < size: o.append(listTablesFileName[i]) + return o diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 9a68551d..e27d35ba 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -15,6 +15,7 @@ import configobj import inputCore import languageHandler +from . import brailleTablesHelper from .common import * Validator = configobj.validate.Validator @@ -112,19 +113,10 @@ noMessageTimeout = True if 'noMessageTimeout' in config.conf["braille"] else False outputTables = inputTables = None -preTable = [] -postTable = [] +preTables = [] +postTables = [] if not os.path.exists(profilesDir): log.error('Profiles\' path not found') else: log.debug('Profiles\' path (%s) found' % profilesDir) -try: - import brailleTables - tables = brailleTables.listTables() - tablesFN = [t[0] for t in brailleTables.listTables()] - tablesUFN = [t[0] for t in brailleTables.listTables() if not t.contracted and t.output] - tablesTR = [t[1] for t in brailleTables.listTables()] - noUnicodeTable = False -except BaseException: - noUnicodeTable = True def getValidBrailleDisplayPrefered(): l = braille.getDisplayList() @@ -179,8 +171,8 @@ def getConfspec(): "speakRoutingTo": "boolean(default=True)", "routingReviewModeWithCursorKeys": "boolean(default=False)", "inputTableShortcuts": 'string(default="?")', - "inputTables": 'string(default="%s")' % config.conf["braille"]["inputTable"] + ", unicode-braille.utb", - "outputTables": "string(default=%s)" % config.conf["braille"]["translationTable"], + "preferedInputTables": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', + "preferedOutputTables": f'string(default="{config.conf["braille"]["translationTable"]}")', "tabSpace": "boolean(default=False)", f"tabSize_{curBD}": "integer(min=1, default=2, max=42)", "undefinedCharsRepr": { @@ -194,7 +186,7 @@ def getConfspec(): "lang": "string(default=Windows)", "table": "string(default=current)" }, - "postTable": 'string(default="None")', + "postTables": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", "oneHandMode": "boolean(default=False)", @@ -254,22 +246,8 @@ def getConfspec(): "stopAfterOneChar": "boolean(default=True)", "escapeSignUnicodeValue": "string(default=⠼)", } - } -def loadPreferedTables(): - global inputTables, outputTables - listInputTables = [table[0] for table in brailleTables.listTables() if table.input] - listOutputTables = [table[0] for table in brailleTables.listTables() if table.output] - inputTables = config.conf["brailleExtender"]["inputTables"] - outputTables = config.conf["brailleExtender"]["outputTables"] - if not isinstance(inputTables, list): - inputTables = inputTables.replace(', ', ',').split(',') - if not isinstance(outputTables, list): - outputTables = outputTables.replace(', ', ',').split(',') - inputTables = [t for t in inputTables if t in listInputTables] - outputTables = [t for t in outputTables if t in listOutputTables] - def getLabelFromID(idCategory, idLabel): if idCategory == 0: return braille.roleLabels[int(idLabel)] elif idCategory == 1: return braille.landmarkLabels[idLabel] @@ -304,7 +282,7 @@ def discardRoleLabels(): backupRoleLabels = {} def loadConf(): - global curBD, gesturesFileExists, profileFileExists, iniProfile + global curBD, gesturesFileExists, profileFileExists, iniProfile, inputTables, outputTables curBD = braille.handler.display.name try: brlextConf = config.conf["brailleExtender"].copy() except configobj.validate.VdtValueError: @@ -338,10 +316,10 @@ def loadConf(): limitCellsRight = int(config.conf["brailleExtender"]["rightMarginCells_%s" % curBD]) if (backupDisplaySize-limitCellsRight <= backupDisplaySize and limitCellsRight > 0): braille.handler.displaySize = backupDisplaySize-limitCellsRight - if not noUnicodeTable: loadPreferedTables() - if config.conf["brailleExtender"]["inputTableShortcuts"] not in tablesUFN: config.conf["brailleExtender"]["inputTableShortcuts"] = '?' + if config.conf["brailleExtender"]["inputTableShortcuts"] not in brailleTablesHelper.listTablesFileName(brailleTablesHelper.listUncontractedTables()): config.conf["brailleExtender"]["inputTableShortcuts"] = '?' if config.conf["brailleExtender"]["features"]["roleLabels"]: loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) + inputTables, outputTables = brailleTablesHelper.getPreferedTables() return True def loadGestures(): @@ -394,11 +372,6 @@ def initGestures(): iniGestures["globalCommands.GlobalCommands"][g])).replace('br(' + curBD + '):', '')] = g return gesturesFileExists, iniGestures -def isContractedTable(table): - if not table in tablesFN: return False - tablePos = tablesFN.index(table) - if brailleTables.listTables()[tablePos].contracted: return True - return False def getKeyboardLayout(): if (config.conf["brailleExtender"]["keyboardLayout_%s" % curBD] is not None @@ -406,14 +379,10 @@ def getKeyboardLayout(): return iniProfile['keyboardLayouts'].keys().index(config.conf["brailleExtender"]["keyboardLayout_%s" % curBD]) else: return 0 -def getCustomBrailleTables(): - return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] - def getTabSize(): size = config.conf["brailleExtender"]["tabSize_%s" % curBD] if size < 0: size = 2 return size - # remove old config files cfgFile = globalVars.appArgs.configPath + r"\BrailleExtender.conf" cfgFileAttribra = globalVars.appArgs.configPath + r"\attribra-BE.ini" diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index 8f9511ef..a39bb6e7 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -60,7 +60,7 @@ def sayCurrentLine(): global instanceGP - if not instanceGP.autoScrollRunning: + if not instanceGP or not instanceGP.autoScrollRunning: if getTether() == braille.handler.TETHER_REVIEW: if config.conf["brailleExtender"]["speakScroll"] in [configBE.CHOICE_focusAndReview, configBE.CHOICE_review]: scriptHandler.executeScript(globalCommands.commands.script_review_currentLine, None) @@ -112,8 +112,9 @@ def update(self): """ mode = louis.dotsIO if config.conf["braille"]["expandAtCursor"] and self.cursorPos is not None: mode |= louis.compbrlAtCursor + BRFMode = instanceGP.BRFMode if instanceGP else False self.brailleCells, self.brailleToRawPos, self.rawToBraillePos, self.brailleCursorPos = louisHelper.translate( - getCurrentBrailleTables(brf=instanceGP.BRFMode), + getCurrentBrailleTables(brf=BRFMode), self.rawText, typeform=self.rawTextTypeforms, mode=mode, @@ -133,7 +134,8 @@ def update(self): self.brailleCells[pos] |= SELECTION_SHAPE() except IndexError: pass else: - if instanceGP and instanceGP.hideDots78: + hideDots78 = instanceGP.hideDots78 if instanceGP else False + if hideDots78: self.brailleCells = [(cell & 63) for cell in self.brailleCells] @@ -191,7 +193,8 @@ def executeGesture(self, gesture): script = gesture.script if "brailleDisplayDrivers" in str(type(gesture)): - if instanceGP.brailleKeyboardLocked and ((hasattr(script, "__func__") and script.__func__.__name__ != "script_toggleLockBrailleKeyboard") or not hasattr(script, "__func__")): return + brailleKeyboardLocked = instanceGP.brailleKeyboardLocked if instanceGP else False + if brailleKeyboardLocked and ((hasattr(script, "__func__") and script.__func__.__name__ != "script_toggleLockBrailleKeyboard") or not hasattr(script, "__func__")): return if not config.conf["brailleExtender"]['stopSpeechUnknown'] and gesture.script == None: stopSpeech = False elif hasattr(script, "__func__") and (script.__func__.__name__ in [ "script_braille_dots", "script_braille_enter", @@ -302,7 +305,7 @@ def emulateKey(self, key, withModifiers=True): gesture = key try: inputCore.manager.emulateGesture(keyboardHandler.KeyboardInputGesture.fromName(gesture)) - instanceGP.lastShortcutPerformed = gesture + if instanceGP: instanceGP.lastShortcutPerformed = gesture except BaseException: log.debugWarning("Unable to emulate %r, falling back to sending unicode characters"%gesture, exc_info=True) self.sendChars(key) @@ -326,7 +329,7 @@ def input_(self, dots): if instanceGP: focusObj = api.getFocusObject() ok = not self.currentModifiers and (not focusObj.treeInterceptor or focusObj.treeInterceptor.passThrough) - if instanceGP.advancedInput and ok: + if instanceGP and instanceGP.advancedInput and ok: pos = self.untranslatedStart + self.untranslatedCursorPos advancedInputStr = ''.join([chr(cell | 0x2800) for cell in self.bufferBraille[:pos]]) if advancedInputStr: diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index f5f017ed..aeab1a24 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -13,6 +13,7 @@ import re import addonHandler import braille +import brailleTables import config import controlTypes import core @@ -27,6 +28,7 @@ from . import utils from .common import * from . import advancedInputMode +from . import brailleTablesHelper from . import undefinedChars instanceGP = None @@ -335,152 +337,104 @@ class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): title = _("Braille tables") def makeSettings(self, settingsSizer): - self.oTables = set(configBE.outputTables) - self.iTables = set(configBE.inputTables) - lt = [_("Use the current input table")] - for table in configBE.tables: - if table.output and not table.contracted: lt.append(table[1]) - if config.conf["brailleExtender"]["inputTableShortcuts"] in configBE.tablesUFN: - iSht = configBE.tablesUFN.index(config.conf["brailleExtender"]["inputTableShortcuts"]) + 1 - else: iSht = 0 + listPreferedTablesIndexes = brailleTablesHelper.getPreferedTablesIndexes() + currentTableLabel = _("Use the current input table") sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - self.tables = sHelper.addLabeledControl(_("Prefered braille tables")+" (%s)" % _("press F1 for help"), wx.Choice, choices=self.getTablesWithSwitches()) - self.tables.SetSelection(0) - self.tables.Bind(wx.EVT_CHAR, self.onTables) + listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables()] + label = _("Prefered input tables") + self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) + self.inputTables.CheckedItems = listPreferedTablesIndexes[0] + self.inputTables.Select(0) - self.inputTableShortcuts = sHelper.addLabeledControl(_("Input braille table for keyboard shortcut keys"), wx.Choice, choices=lt) - self.inputTableShortcuts.SetSelection(iSht) - lt = [_('None')] - for table in configBE.tables: - if table.output: lt.append(table[1]) - self.postTable = sHelper.addLabeledControl(_("Secondary output table to use"), wx.Choice, choices=lt) - self.postTable.SetSelection(configBE.tablesFN.index(config.conf["brailleExtender"]["postTable"]) if config.conf["brailleExtender"]["postTable"] in configBE.tablesFN else 0) + label = _("Prefered output tables") + self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) + self.outputTables.CheckedItems = listPreferedTablesIndexes[1] + self.outputTables.Select(0) + + listUncontractedTables = brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listUncontractedTables()) + label = _("Input braille table for keyboard shortcut keys") + self.inputTableShortcuts = sHelper.addLabeledControl(label, wx.Choice, choices=[currentTableLabel] + listUncontractedTables) + #self.inputTableShortcuts.SetSelection(iSht) + + self.tablesGroupBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Groups of tables"), wx.DefaultPosition) + self.tablesGroupBtn.Bind(wx.EVT_BUTTON, self.onTablesGroupsBtn) + + self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) + self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) # Translators: label of a dialog. self.tabSpace = sHelper.addItem(wx.CheckBox(self, label=_("Display &tab signs as spaces"))) self.tabSpace.SetValue(config.conf["brailleExtender"]["tabSpace"]) + self.tabSpace.Bind(wx.EVT_CHECKBOX, self.onTabSpace) # Translators: label of a dialog. self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) - self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) - self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) sHelper.addItem(bHelper1) + self.onTabSpace() + + def onTabSpace(self, evt=None): + if self.tabSpace.IsChecked(): self.tabSize.Enable() + else: self.tabSize.Disable() + + def onTablesGroupsBtn(self, evt): + tablesGroupsDlg = TablesGroupsDlg(self, multiInstanceAllowed=True) + tablesGroupsDlg.ShowModal() + + def onCustomBrailleTablesBtn(self, evt): + customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) + customBrailleTablesDlg.ShowModal() def postInit(self): self.tables.SetFocus() def onSave(self): - config.conf["brailleExtender"]["outputTables"] = ','.join(self.oTables) - config.conf["brailleExtender"]["inputTables"] = ','.join(self.iTables) - config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection()>0 else '?' - postTableID = self.postTable.GetSelection() - postTable = "None" if postTableID == 0 else configBE.tablesFN[postTableID] - config.conf["brailleExtender"]["postTable"] = postTable - if self.tabSpace.IsChecked() and config.conf["brailleExtender"]["tabSpace"] != self.tabSpace.IsChecked(): - restartRequired = True - else: restartRequired = False + inputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.inputTables.CheckedItems)) + outputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.outputTables.CheckedItems)) + #postTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.postTables.CheckedItems)) + config.conf["brailleExtender"]["inputTables"] = ','.join(inputTables) + config.conf["brailleExtender"]["outputTables"] = ','.join(outputTables) + #config.conf["brailleExtender"]["postTables"] = postTables + config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection() > 0 else '?' config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() - config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD] = self.tabSize.Value - if restartRequired: - res = gui.messageBox( - _("NVDA must be restarted for some new options to take effect. Do you want restart now?"), - _("Braille Extender"), - style=wx.YES_NO|wx.ICON_INFORMATION - ) - if res == wx.YES: core.restart() - - def getTablesWithSwitches(self): - out = [] - for i, tbl in enumerate(configBE.tablesTR): - out.append("%s%s: %s" % (tbl, punctuationSeparator, self.getInSwitchesText(configBE.tablesFN[i]))) - return out + config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value + configBE.inputTables, configBE.outputTables = brailleTablesHelper.getPreferedTables() - def getCurrentSelection(self): - idx = self.tables.GetSelection() - tbl = configBE.tablesFN[self.tables.GetSelection()] - return idx, tbl - - def setCurrentSelection(self, tbl, newLoc): - if newLoc == "io": - self.iTables.add(tbl) - self.oTables.add(tbl) - elif newLoc == "i": - self.iTables.add(tbl) - self.oTables.discard(tbl) - elif newLoc == "o": - self.oTables.add(tbl) - self.iTables.discard(tbl) - elif newLoc == "n": - self.iTables.discard(tbl) - self.oTables.discard(tbl) - - def inSwitches(self, tbl): - inp = tbl in self.iTables - out = tbl in self.oTables - return [inp, out] - - def getInSwitchesText(self, tbl): - inS = self.inSwitches(tbl) - if all(inS): inSt = _("input and output") - elif not any(inS): inSt = _("none") - elif inS[0]: inSt = _("input only") - elif inS[1]: inSt = _("output only") - return inSt - - def changeSwitch(self, tbl, direction=1, loop=True): - dirs = ['n', 'i', 'o', "io"] - iCurDir = 0 - inS = self.inSwitches(tbl) - if all(inS): iCurDir = dirs.index("io") - elif not any(inS): iCurDir = dirs.index('n') - elif inS[0]: iCurDir = dirs.index('i') - elif inS[1]: iCurDir = dirs.index('o') - - if len(dirs)-1 == iCurDir and direction == 1 and loop: newDir = dirs[0] - elif iCurDir == 0 and direction == 0 and loop: newDir = dirs[-1] - elif iCurDir < len(dirs)-1 and direction == 1: newDir = dirs[iCurDir+1] - elif iCurDir > 0 and iCurDir < len(dirs) and direction == 0: newDir = dirs[iCurDir-1] - else: return - self.setCurrentSelection(tbl, newDir) +class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): - def onCustomBrailleTablesBtn(self, evt): - customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) - customBrailleTablesDlg.ShowModal() + # Translators: title of a dialog. + title = f"{addonName} - %s" % _("Groups of tables") + + def makeSettings(self, settingsSizer): + wx.CallAfter(notImplemented) + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + self.addTablesGroupBtn = bHelper.addButton(self, wx.NewId(), "%s..." % _("&Add a group"), wx.DefaultPosition) + self.addTablesGroupBtn.Bind(wx.EVT_BUTTON, self.onAddTablesGroupBtn) + sHelper.addItem(bHelper) + + def addTablesGroupBtn(self, evt): + addTablesGroupDlg = AddTablesGroupDlg(self, multiInstanceAllowed=True) + addTablesGroupDlg.ShowModal() - def onTables(self, evt): - keycode = evt.GetKeyCode() - if keycode in [ord(','), ord(';')]: - idx, tbl = self.getCurrentSelection() - if keycode == ord(','): - queueHandler.queueFunction(queueHandler.eventQueue, ui.message, "%s" % tbl) - else: - ui.browseableMessage('\n'.join([ - _("Table name: %s") % configBE.tablesTR[idx], - _("File name: %s") % tbl, - _("In switches: %s") % self.getInSwitchesText(tbl) - ]), _("About this table"), False) - if keycode == wx.WXK_F1: - ui.browseableMessage( - _("In this combo box, all tables are present. Press space bar, left or right arrow keys to include (or not) the selected table in switches")+".\n"+ - _("You can also press 'comma' key to get the file name of the selected table and 'semicolon' key to view miscellaneous infos on the selected table")+".", - _("Contextual help"), False) - if keycode in [wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_SPACE]: - idx, tbl = self.getCurrentSelection() - if keycode == wx.WXK_LEFT: self.changeSwitch(tbl, 0, False) - elif keycode == wx.WXK_RIGHT: self.changeSwitch(tbl, 1, False) - elif keycode == wx.WXK_SPACE: self.changeSwitch(tbl, 1, True) - newSwitch = self.getInSwitchesText(tbl) - self.tables.SetString(self.tables.GetSelection(), "%s%s: %s" % (configBE.tablesTR[idx], punctuationSeparator, newSwitch)) - queueHandler.queueFunction(queueHandler.eventQueue, ui.message, "%s" % newSwitch) - utils.refreshBD() - else: evt.Skip() +class AddTablesGroupDlg(gui.settingsDialogs.SettingsDialog): + + title = _("Add a group of tables") + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + self.name = sHelper.addLabeledControl(_("Group name"), wx.TextCtrl) + self.description = sHelper.addLabeledControl(_("Description"), wx.TextCtrl, style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size = (360, 90), pos=(-1,-1)) + label = _(f"Group members") + self.members = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listUncontractedTables) + #self.outputTables.CheckedItems = brailleTablesHelper.getPostTablesIndexes() + self.outputTables.Select(0) class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): # Translators: title of a dialog. - title = "Braille Extender - %s" % _("Custom braille tables") + title = f"{addonName} - %s" % _("Custom braille tables") providedTablesPath = "%s/res/brailleTables.json" % configBE.baseDir userTablesPath = "%s/brailleTables.json" % configBE.configDir From 0f8c2f83d02c42044955068843c99ff97da8e8cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 13 Apr 2020 04:05:49 +0200 Subject: [PATCH 56/87] settings: fixes on 'representation of undefined characters' and 'braille tables' categories --- .../brailleExtender/brailleTablesHelper.py | 16 ++++++++++ .../globalPlugins/brailleExtender/settings.py | 29 ++++++++++++++++--- .../brailleExtender/undefinedChars.py | 20 ++++--------- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py index 62e303c7..2eb58e48 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py @@ -2,11 +2,14 @@ # brailleTablesHelper.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. +import addonHandler import brailleTables import config from typing import Optional, List, Tuple from logHandler import log +addonHandler.initTranslation() + listContractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.contracted] listUncontractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if not table.contracted] listInputTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.input] @@ -14,6 +17,13 @@ listTablesFileName = lambda tables=None: [table.fileName for table in (tables or brailleTables.listTables())] listTablesDisplayName = lambda tables=None: [table.displayName for table in (tables or brailleTables.listTables())] +def fileName2displayName(l): + allTablesFileName = listTablesFileName() + o = [] + for e in l: + if e in allTablesFileName: o.append(allTablesFileName.index(e)) + return ', '.join([brailleTables.listTables()[e].displayName for e in o]) + def getPreferedTables() -> Tuple[List[str]]: allInputTablesFileName = listTablesFileName(listInputTables()) allOutputTablesFileName = listTablesFileName(listOutputTables()) @@ -68,3 +78,9 @@ def getTablesFilenameByID(l: List[int]) -> List[int]: for i in l: if i < size: o.append(listTablesFileName[i]) return o + +def translateUsableIn(s): + if s.startswith('i:'): return _("input") + elif s.startswith('o:'): return _("output") + elif s.startswith('io:'): return _("input and output") + else: return _("None") \ No newline at end of file diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index aeab1a24..fcf7a6be 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -358,7 +358,7 @@ def makeSettings(self, settingsSizer): self.inputTableShortcuts = sHelper.addLabeledControl(label, wx.Choice, choices=[currentTableLabel] + listUncontractedTables) #self.inputTableShortcuts.SetSelection(iSht) - self.tablesGroupBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Groups of tables"), wx.DefaultPosition) + self.tablesGroupBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Groups of tables"), wx.DefaultPosition) self.tablesGroupBtn.Bind(wx.EVT_BUTTON, self.onTablesGroupsBtn) self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) @@ -409,26 +409,47 @@ def makeSettings(self, settingsSizer): wx.CallAfter(notImplemented) sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + groupsLabelText = _("List of table groups") + self.groupsList = sHelper.addLabeledControl(groupsLabelText, wx.ListCtrl, style=wx.LC_REPORT|wx.LC_SINGLE_SEL,size=(550,350)) + self.groupsList.InsertColumn(0, _("Name"), width=150) + self.groupsList.InsertColumn(1, _("Members"), width=150) + self.groupsList.InsertColumn(2, _("Usable in"), width=150) + self.onSetGroups() self.addTablesGroupBtn = bHelper.addButton(self, wx.NewId(), "%s..." % _("&Add a group"), wx.DefaultPosition) self.addTablesGroupBtn.Bind(wx.EVT_BUTTON, self.onAddTablesGroupBtn) sHelper.addItem(bHelper) - def addTablesGroupBtn(self, evt): + + def onSetGroups(self, evt=None): + groups = { + "Fake group 1": "i:en-ueb-g1.ctb|fr-bfu-comp8.utb", + "Fake group 2": "o:ru.ctb|fr-bfu-comp8.utb", + "Fake group 3": "n:ru.ctb|en-ueb-g1.ctb", + } + for name, desc in groups.items(): + self.groupsList.Append(( + name, + brailleTablesHelper.fileName2displayName(desc.split(':')[-1].split('|')), + brailleTablesHelper.translateUsableIn(desc), + )) + + def onAddTablesGroupBtn(self, evt): addTablesGroupDlg = AddTablesGroupDlg(self, multiInstanceAllowed=True) addTablesGroupDlg.ShowModal() class AddTablesGroupDlg(gui.settingsDialogs.SettingsDialog): - + title = _("Add a group of tables") def makeSettings(self, settingsSizer): + listUncontractedTables = brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listUncontractedTables()) sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) self.name = sHelper.addLabeledControl(_("Group name"), wx.TextCtrl) self.description = sHelper.addLabeledControl(_("Description"), wx.TextCtrl, style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size = (360, 90), pos=(-1,-1)) label = _(f"Group members") self.members = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listUncontractedTables) #self.outputTables.CheckedItems = brailleTablesHelper.getPostTablesIndexes() - self.outputTables.Select(0) + #self.outputTables.Select(0) class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index ff6e9e82..1b30ab33 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -19,6 +19,7 @@ from . import configBE, huc from .common import * +from . import brailleTablesHelper from .utils import getCurrentBrailleTables, getTextInBraille addonHandler.initTranslation() @@ -314,17 +315,10 @@ def makeSettings(self, settingsSizer): _("Language"), wx.Choice, choices=values ) self.undefinedCharLang.SetSelection(undefinedCharLangID) - values = [_("Use the current output table")] + [ - table.displayName for table in configBE.tables if table.output - ] - keys = ["current"] + [ - table.fileName for table in configBE.tables if table.output - ] - undefinedCharTable = config.conf["brailleExtender"]["undefinedCharsRepr"][ - "table" - ] - if undefinedCharTable not in configBE.tablesFN + ["current"]: - undefinedCharTable = "current" + values = [_("Use the current output table")] + brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listOutputTables()) + keys = ["current"] + brailleTablesHelper.listTablesFileName(brailleTablesHelper.listOutputTables()) + undefinedCharTable = config.conf["brailleExtender"]["undefinedCharsRepr"]["table"] + if undefinedCharTable not in keys: undefinedCharTable = "current" undefinedCharTableID = keys.index(undefinedCharTable) self.undefinedCharTable = sHelper.addLabeledControl( _("Braille table"), wx.Choice, choices=values @@ -405,9 +399,7 @@ def onSave(self): 0 ] undefinedCharTable = self.undefinedCharTable.GetSelection() - keys = ["current"] + [ - table.fileName for table in configBE.tables if table.output - ] + keys = ["current"] + brailleTablesHelper.listTablesFileName(brailleTablesHelper.listOutputTables()) config.conf["brailleExtender"]["undefinedCharsRepr"]["table"] = keys[ undefinedCharTable ] From 3978bafd2d6e24a597dfb836c057d18f172f5108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 13 Apr 2020 05:17:55 +0200 Subject: [PATCH 57/87] Prefered tables: more fixes (settings) --- .../brailleExtender/brailleTablesHelper.py | 13 ++++++------ .../globalPlugins/brailleExtender/configBE.py | 8 +++++-- .../globalPlugins/brailleExtender/settings.py | 21 +++++++++++++------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py index 2eb58e48..71469b35 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py @@ -35,12 +35,13 @@ def getPreferedTables() -> Tuple[List[str]]: def getPreferedTablesIndexes() -> List[int]: preferedInputTables, preferedOutputTables = getPreferedTables() - tablesFileName = [table.fileName for table in brailleTables.listTables()] + inputTables = listTablesFileName(listInputTables()) + outputTables = listTablesFileName(listOutputTables()) o = [] - for l in [preferedInputTables, preferedOutputTables]: + for a, b in [(preferedInputTables, inputTables), (preferedOutputTables, outputTables)]: o_ = [] - for i, e in enumerate(l): - if e in tablesFileName: o_.append(tablesFileName.index(e)) + for e in a: + if e in b: o_.append(b.index(e)) o.append(o_) return o @@ -71,8 +72,8 @@ def isContractedTable(fileName): if fileName in tablesFN: return False return brailleTables.listTables()[tablesFN.index(fileName)].contracted -def getTablesFilenameByID(l: List[int]) -> List[int]: - listTablesFileName = [table.fileName for table in brailleTables.listTables()] +def getTablesFilenameByID(l: List[int], tables=None) -> List[int]: + listTablesFileName = [table.fileName for table in (tables or brailleTables.listTables())] o = [] size = len(listTablesFileName) for i in l: diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index e27d35ba..5a00215b 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -282,7 +282,7 @@ def discardRoleLabels(): backupRoleLabels = {} def loadConf(): - global curBD, gesturesFileExists, profileFileExists, iniProfile, inputTables, outputTables + global curBD, gesturesFileExists, profileFileExists, iniProfile curBD = braille.handler.display.name try: brlextConf = config.conf["brailleExtender"].copy() except configobj.validate.VdtValueError: @@ -319,9 +319,13 @@ def loadConf(): if config.conf["brailleExtender"]["inputTableShortcuts"] not in brailleTablesHelper.listTablesFileName(brailleTablesHelper.listUncontractedTables()): config.conf["brailleExtender"]["inputTableShortcuts"] = '?' if config.conf["brailleExtender"]["features"]["roleLabels"]: loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) - inputTables, outputTables = brailleTablesHelper.getPreferedTables() + initializePreferedTables() return True +def initializePreferedTables(): + global inputTables, outputTables + inputTables, outputTables = brailleTablesHelper.getPreferedTables() + def loadGestures(): if gesturesFileExists: if os.path.exists(os.path.join(profilesDir, "_BrowseMode", config.conf["braille"]["inputTable"] + ".ini")): GLng = config.conf["braille"]["inputTable"] diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index fcf7a6be..f3fb821e 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -342,12 +342,13 @@ def makeSettings(self, settingsSizer): sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables()] + listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables() if table.input] label = _("Prefered input tables") self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) self.inputTables.CheckedItems = listPreferedTablesIndexes[0] self.inputTables.Select(0) + listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables() if table.output] label = _("Prefered output tables") self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) self.outputTables.CheckedItems = listPreferedTablesIndexes[1] @@ -389,16 +390,24 @@ def onCustomBrailleTablesBtn(self, evt): def postInit(self): self.tables.SetFocus() def onSave(self): - inputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.inputTables.CheckedItems)) - outputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.outputTables.CheckedItems)) + inputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID( + self.inputTables.CheckedItems, + brailleTablesHelper.listInputTables() + )) + outputTables = '|'.join( + brailleTablesHelper.getTablesFilenameByID( + self.outputTables.CheckedItems, + brailleTablesHelper.listOutputTables() + ) + ) #postTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.postTables.CheckedItems)) - config.conf["brailleExtender"]["inputTables"] = ','.join(inputTables) - config.conf["brailleExtender"]["outputTables"] = ','.join(outputTables) + config.conf["brailleExtender"]["preferedInputTables"] = inputTables + config.conf["brailleExtender"]["preferedOutputTables"] = outputTables #config.conf["brailleExtender"]["postTables"] = postTables config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection() > 0 else '?' config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value - configBE.inputTables, configBE.outputTables = brailleTablesHelper.getPreferedTables() + configBE.initializePreferedTables() class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): From abd71006fd4a3c59d4887b402ce8d4f054ad124e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Mon, 13 Apr 2020 07:24:45 +0200 Subject: [PATCH 58/87] Small fixes --- .../brailleExtender/brailleTablesHelper.py | 11 ++--------- addon/globalPlugins/brailleExtender/settings.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py index 71469b35..61a4ec73 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py @@ -2,6 +2,7 @@ # brailleTablesHelper.py # Part of BrailleExtender addon for NVDA # Copyright 2016-2020 André-Abush CLAUSE, released under GPL. + import addonHandler import brailleTables import config @@ -58,19 +59,11 @@ def getPostTablesIndexes() -> List[int]: if e in tablesFileName: o.append(tablesFileName.index(e)) return o -def cleanTablesFileName(tables: List[str], output: Optional[bool]=False) -> List[str]: - listTablesFileName = listTablesFileName() - for t in tables: - if not t in listTablesFileName: tables.remove(l) - return tables - def getCustomBrailleTables(): return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] def isContractedTable(fileName): - listContractedTables = listContractedTables() - if fileName in tablesFN: return False - return brailleTables.listTables()[tablesFN.index(fileName)].contracted + return fileName in listTablesFileName(listContractedTables()) def getTablesFilenameByID(l: List[int], tables=None) -> List[int]: listTablesFileName = [table.fileName for table in (tables or brailleTables.listTables())] diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index f3fb821e..f2eff5fe 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -389,6 +389,18 @@ def onCustomBrailleTablesBtn(self, evt): def postInit(self): self.tables.SetFocus() + def isValid(self): + if self.tabSize.Value > 42: + gui.messageBox( + _("Tab size is invalid"), + _("Error"), + wx.OK|wx.ICON_ERROR, + self + ) + self.tabSize.SetFocus() + return False + return super().isValid() + def onSave(self): inputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID( self.inputTables.CheckedItems, @@ -407,6 +419,8 @@ def onSave(self): config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection() > 0 else '?' config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value + + def postSave(self): configBE.initializePreferedTables() class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): From 8eaebae925e566fa1ed5fade1e010a2aa95d0513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 14 Apr 2020 13:28:23 +0200 Subject: [PATCH 59/87] settings: progress on 'groups of tables' dialog --- .../globalPlugins/brailleExtender/__init__.py | 13 +- .../brailleExtender/brailleTablesExt.py | 502 ++++++++++++++++++ .../brailleExtender/brailleTablesHelper.py | 80 --- .../globalPlugins/brailleExtender/configBE.py | 17 +- .../globalPlugins/brailleExtender/settings.py | 247 +-------- .../brailleExtender/undefinedChars.py | 8 +- 6 files changed, 524 insertions(+), 343 deletions(-) create mode 100644 addon/globalPlugins/brailleExtender/brailleTablesExt.py delete mode 100644 addon/globalPlugins/brailleExtender/brailleTablesHelper.py diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 7e421573..d9cab1f7 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -50,7 +50,7 @@ from . import utils from .updateCheck import * from . import advancedInputMode -from . import brailleTablesHelper +from . import brailleTablesExt from . import dictionaries from . import huc from . import undefinedChars @@ -210,6 +210,7 @@ def __init__(self): if config.conf["brailleExtender"]["reverseScrollBtns"]: self.reverseScrollBtns() self.createMenu() advancedInputMode.initialize() + brailleTablesExt.initializeGroups() log.info(f"{addonName} {addonVersion} loaded ({round(time.time()-startTime, 2)}s)") def event_gainFocus(self, obj, nextHandler): @@ -322,7 +323,7 @@ def onDefaultDictionary(evt): @staticmethod def onTableDictionary(evt): - outTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] + outTable = brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])] gui.mainFrame._popupSettingsDialog(dictionaries.DictionaryDlg, _("Table dictionary")+(" (%s)" % outTable), "table") @staticmethod @@ -630,7 +631,7 @@ def script_reportExtraInfos(self, gesture): def script_getTableOverview(self, gesture): inTable = brailleInput.handler.table.displayName - ouTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] + ouTable = brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])] t = (_(" Input table")+": %s\n"+_("Output table")+": %s\n\n") % (inTable+' (%s)' % (brailleInput.handler.table.fileName), ouTable+' (%s)' % (config.conf["braille"]["translationTable"])) t += utils.getTableOverview() ui.browseableMessage("
        %s
        " % t, _("Table overview (%s)" % brailleInput.handler.table.displayName), True) @@ -864,7 +865,7 @@ def script_switchInputBrailleTable(self, gesture): tid = configBE.inputTables.index(config.conf["braille"]["inputTable"]) nID = tid + 1 if tid + 1 < len(configBE.inputTables) else 0 brailleInput.handler.table = brailleTables.listTables( - )[brailleTablesHelper.listTablesFileName().index(configBE.inputTables[nID])] + )[brailleTablesExt.listTablesFileName().index(configBE.inputTables[nID])] ui.message(_("Input: %s") % brailleInput.handler.table.displayName) return @@ -882,14 +883,14 @@ def script_switchOutputBrailleTable(self, gesture): config.conf["braille"]["translationTable"] = configBE.outputTables[nID] utils.refreshBD() dictionaries.setDictTables() - ui.message(_("Output: %s") % brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])]) + ui.message(_("Output: %s") % brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])]) return script_switchOutputBrailleTable.__doc__ = _("Switch between his favorite output braille tables") def script_currentBrailleTable(self, gesture): inTable = brailleInput.handler.table.displayName - ouTable = brailleTablesHelper.listTablesDisplayName()[brailleTablesHelper.listTablesFileName().index(config.conf["braille"]["translationTable"])] + ouTable = brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])] if ouTable == inTable: braille.handler.message(_("I⣿O:{I}").format(I=inTable, O=ouTable)) speech.speakMessage(_("Input and output: {I}.").format(I=inTable, O=ouTable)) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py new file mode 100644 index 00000000..79a71465 --- /dev/null +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -0,0 +1,502 @@ +# coding: utf-8 +# brailleTablesExt.py +# Part of BrailleExtender addon for NVDA +# Copyright 2016-2020 André-Abush CLAUSE, released under GPL. + +import codecs +import json +import gui +import wx + +import addonHandler +import brailleTables +import config +from collections import namedtuple +from typing import Optional, List, Tuple +from brailleTables import listTables +from logHandler import log +from . import configBE +from .common import * + +addonHandler.initTranslation() + +GroupTables = namedtuple("GroupTables", ("name", "members", "usableIn")) + +listContractedTables = lambda tables=None: [table for table in (tables or listTables()) if table.contracted] +listUncontractedTables = lambda tables=None: [table for table in (tables or listTables()) if not table.contracted] +listInputTables = lambda tables=None: [table for table in (tables or listTables()) if table.input] +listUncontractedInputTables = listInputTables(listUncontractedTables()) +listOutputTables = lambda tables=None: [table for table in (tables or listTables()) if table.output] +listTablesFileName = lambda tables=None: [table.fileName for table in (tables or listTables())] +listTablesDisplayName = lambda tables=None: [table.displayName for table in (tables or listTables())] + +def fileName2displayName(l): + allTablesFileName = listTablesFileName() + o = [] + for e in l: + if e in allTablesFileName: o.append(allTablesFileName.index(e)) + return ', '.join([listTables()[e].displayName for e in o]) + +def listTablesIndexes(l, tables): + if not tables: tables = listTables() + tables = listTablesFileName(tables) + return [tables.index(e) for e in l if e in tables] + +def getPreferedTables() -> Tuple[List[str]]: + allInputTablesFileName = listTablesFileName(listInputTables()) + allOutputTablesFileName = listTablesFileName(listOutputTables()) + preferedInputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedInput"].split('|') + preferedOutputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedOutput"].split('|') + inputTables = [fn for fn in preferedInputTablesFileName if fn in allInputTablesFileName] + outputTables = [fn for fn in preferedOutputTablesFileName if fn in allOutputTablesFileName] + return inputTables, outputTables + +def getPreferedTablesIndexes() -> List[int]: + preferedInputTables, preferedOutputTables = getPreferedTables() + inputTables = listTablesFileName(listInputTables()) + outputTables = listTablesFileName(listOutputTables()) + o = [] + for a, b in [(preferedInputTables, inputTables), (preferedOutputTables, outputTables)]: + o_ = [] + for e in a: + if e in b: o_.append(b.index(e)) + o.append(o_) + return o + +def getCustomBrailleTables(): + return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] + +def isContractedTable(fileName): + return fileName in listTablesFileName(listContractedTables()) + +def getTablesFilenameByID(l: List[int], tables=None) -> List[int]: + tablesFileName = [table.fileName for table in (tables or listTables())] + o = [] + size = len(tablesFileName) + for i in l: + if i < size: o.append(tablesFileName[i]) + return o + +def translateUsableIn(s): + labels = { + 'i': _("input"), + 'o': _("output"), + 'io': _("input and output") + } + return labels[s] if s in labels.keys() else _("None") + +def translateUsableInIndexes(usableIn): + o = [] + if 'i' in usableIn: o.append(0) + if 'o' in usableIn: o.append(1) + return o + +def setDict(newGroups): + global _groups + _groups = newGroups + +def getGroups(): + return _groups if _groups else [] + +def getPathGroups(): + return f"{configDir}/groups-tables.json" + +def initializeGroups(): + global _groups + _groups = [] + fp = getPathGroups() + if not os.path.exists(fp): + return + json_ = json.load(codecs.open(fp, "r", "UTF-8")) + for entry in json_: + _groups.append( + GroupTables( + entry["name"], entry["members"], entry["usableIn"] + ) + ) + +def saveGroups(entries=None): + if not entries: entries = getGroups() + entries = [ + { + "name": entry.name, + "members": entry.members, + "usableIn": entry.usableIn + } + for entry in entries + ] + with codecs.open(getPathGroups(), "w", "UTF-8") as outfile: + json.dump(entries, outfile, ensure_ascii=False, indent=2) + +def getGroups(): + groups = getGroups() + i = [group for group in groups if group.usableIn in ['i', 'io']] + o = [group for group in groups if group.usableIn in ['o', 'io']] + return i, o + +_groups = None + +class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): + + # Translators: title of a dialog. + title = _("Braille tables") + + def makeSettings(self, settingsSizer): + listPreferedTablesIndexes = getPreferedTablesIndexes() + currentTableLabel = _("Use the current input table") + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + + tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.input] + label = _("Prefered input tables") + self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) + self.inputTables.CheckedItems = listPreferedTablesIndexes[0] + self.inputTables.Select(0) + + tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.output] + label = _("Prefered output tables") + self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) + self.outputTables.CheckedItems = listPreferedTablesIndexes[1] + self.outputTables.Select(0) + + label = _("Input braille table to use for keyboard shortcuts") + try: + selectedItem = 0 if config.conf["brailleExtender"]["tables"]["shortcuts"] == '?' else listTablesFileName( + listUncontractedInputTables + ).index(config.conf["brailleExtender"]["tables"]["shortcuts"]) + 1 + except ValueError: + selectedItem = 0 + self.inputTableShortcuts = sHelper.addLabeledControl(label, wx.Choice, choices=[currentTableLabel] + listTablesDisplayName(listUncontractedInputTables)) + self.inputTableShortcuts.SetSelection(selectedItem) + + self.tablesGroupBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Groups of tables"), wx.DefaultPosition) + self.tablesGroupBtn.Bind(wx.EVT_BUTTON, self.onTablesGroupsBtn) + + self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) + self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) + + # Translators: label of a dialog. + self.tabSpace = sHelper.addItem(wx.CheckBox(self, label=_("Display &tab signs as spaces"))) + self.tabSpace.SetValue(config.conf["brailleExtender"]["tabSpace"]) + self.tabSpace.Bind(wx.EVT_CHECKBOX, self.onTabSpace) + + # Translators: label of a dialog. + self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) + sHelper.addItem(bHelper1) + self.onTabSpace() + + def onTabSpace(self, evt=None): + if self.tabSpace.IsChecked(): self.tabSize.Enable() + else: self.tabSize.Disable() + + def onTablesGroupsBtn(self, evt): + tablesGroupsDlg = TablesGroupsDlg(self, multiInstanceAllowed=True) + tablesGroupsDlg.ShowModal() + + def onCustomBrailleTablesBtn(self, evt): + customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) + customBrailleTablesDlg.ShowModal() + + def postInit(self): self.tables.SetFocus() + + def isValid(self): + if self.tabSize.Value > 42: + gui.messageBox( + _("Tab size is invalid"), + _("Error"), + wx.OK|wx.ICON_ERROR, + self + ) + self.tabSize.SetFocus() + return False + return super().isValid() + + def onSave(self): + inputTables = '|'.join(getTablesFilenameByID( + self.inputTables.CheckedItems, + listInputTables() + )) + outputTables = '|'.join( + getTablesFilenameByID( + self.outputTables.CheckedItems, + listOutputTables() + ) + ) + tablesShortcuts = getTablesFilenameByID( + [self.inputTableShortcuts.GetSelection()-1], + listUncontractedInputTables + )[0] if self.inputTableShortcuts.GetSelection() > 0 else '?' + config.conf["brailleExtender"]["tables"]["preferedInput"] = inputTables + config.conf["brailleExtender"]["tables"]["preferedOutput"] = outputTables + config.conf["brailleExtender"]["tables"]["shortcuts"] = tablesShortcuts + config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() + config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value + + def postSave(self): + configBE.initializePreferedTables() + + +class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): + + # Translators: title of a dialog. + title = f"{addonName} - %s" % _("Groups of tables") + + def makeSettings(self, settingsSizer): + self.tmpGroups = getGroups() + self.tmpGroups.sort(key=lambda e: e.name) + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + groupsLabelText = _("List of table groups") + self.groupsList = sHelper.addLabeledControl(groupsLabelText, wx.ListCtrl, style=wx.LC_REPORT|wx.LC_SINGLE_SEL,size=(550,350)) + self.groupsList.InsertColumn(0, _("Name"), width=150) + self.groupsList.InsertColumn(1, _("Members"), width=150) + self.groupsList.InsertColumn(2, _("Usable in"), width=150) + self.onSetEntries() + + bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + bHelper.addButton( + parent=self, + # Translators: The label for a button in groups of tables dialog to add new entries. + label=_("&Add") + ).Bind(wx.EVT_BUTTON, self.onAddClick) + + bHelper.addButton( + parent=self, + # Translators: The label for a button in groups of tables dialog to edit existing entries. + label=_("&Edit") + ).Bind(wx.EVT_BUTTON, self.onEditClick) + + bHelper.addButton( + parent=self, + # Translators: The label for a button in groups of tables dialog to remove existing entries. + label=_("Re&move") + ).Bind(wx.EVT_BUTTON, self.onRemoveClick) + + sHelper.addItem(bHelper) + bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + bHelper.addButton( + parent=self, + # Translators: The label for a button in groups of tables dialog to open groups of tables file in an editor. + label=_("&Open the groups of tables file in an editor") + ).Bind(wx.EVT_BUTTON, self.onOpenFileClick) + bHelper.addButton( + parent=self, + # Translators: The label for a button in groups of tables dialog to reload groups of tables. + label=_("&Reload the groups of tables") + ).Bind(wx.EVT_BUTTON, self.onReloadClick) + sHelper.addItem(bHelper) + + def onSetEntries(self, evt=None): + self.groupsList.DeleteAllItems() + for group in self.tmpGroups: + self.groupsList.Append(( + group.name, + fileName2displayName(group.members), + translateUsableIn(group.usableIn) + )) + + def onAddClick(self, event): + entryDialog = GroupEntryDlg(self, title=_("Add group entry")) + if entryDialog.ShowModal() == wx.ID_OK: + entry = entryDialog.groupEntry + self.tmpGroups.append(entry) + self.groupsList.Append( + (entry.name, fileName2displayName(entry.members), translateUsableIn(entry.usableIn)) + ) + index = self.groupsList.GetFirstSelected() + while index >= 0: + self.groupsList.Select(index, on=0) + index = self.groupsList.GetNextSelected(index) + addedIndex = self.groupsList.GetItemCount() - 1 + self.groupsList.Select(addedIndex) + self.groupsList.Focus(addedIndex) + self.groupsList.SetFocus() + entryDialog.Destroy() + + def onEditClick(self, event): + if self.groupsList.GetSelectedItemCount() != 1: + return + editIndex = self.groupsList.GetFirstSelected() + entryDialog = GroupEntryDlg(self) + entryDialog.name.SetValue(self.tmpGroups[editIndex].name) + entryDialog.members.CheckedItems = listTablesIndexes(self.tmpGroups[editIndex].members, listUncontractedInputTables) + entryDialog.usableIn.CheckedItems = translateUsableInIndexes(self.tmpGroups[editIndex].usableIn) + if entryDialog.ShowModal() == wx.ID_OK: + entry = entryDialog.groupEntry + self.tmpGroups[editIndex] = entry + self.groupsList.SetItem(editIndex, 0, entry.name) + self.groupsList.SetItem(editIndex, 1, fileName2displayName(entry.members)) + self.groupsList.SetItem(editIndex, 2, translateUsableIn(entry.usableIn)) + self.groupsList.SetFocus() + entryDialog.Destroy() + + def onRemoveClick(self, event): + index = self.groupsList.GetFirstSelected() + while index >= 0: + self.groupsList.DeleteItem(index) + del self.tmpGroups[index] + index = self.groupsList.GetNextSelected(index) + self.onSetEntries() + self.groupsList.SetFocus() + + + def onOpenFileClick(self,evt): + path = getPathGroups() + if not os.path.exists(path): return + try: os.startfile(path) + except OSError: os.popen(f"notepad \"{path}\"") + + def onReloadClick(self,evt): + self.tmpGroups = getGroups() + self.onSetEntries() + + def onOk(self, evt): + saveGroups(self.tmpGroups) + setDict(self.tmpGroups) + super().onOk(evt) + + +class GroupEntryDlg(wx.Dialog): + + def __init__(self, parent=None, title=_("Edit Dictionary Entry")): + super().__init__(parent, title=title) + mainSizer = wx.BoxSizer(wx.VERTICAL) + sHelper = gui.guiHelper.BoxSizerHelper(self, orientation=wx.VERTICAL) + self.name = sHelper.addLabeledControl(_("Group name"), wx.TextCtrl) + label = _(f"Group members") + self.members = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTablesDisplayName(listUncontractedTables())) + self.members.SetSelection(0) + label = _("Usable in") + choices = [_("input"), _("output")] + self.usableIn = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=choices) + self.usableIn.SetSelection(0) + sHelper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL)) + mainSizer.Add(sHelper.sizer, border=20, flag=wx.ALL) + mainSizer.Fit(self) + self.SetSizer(mainSizer) + self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK) + self.name.SetFocus() + + def onOk(self, evt): + name = self.name.Value + members = getTablesFilenameByID( + self.members.CheckedItems, listUncontractedTables()) + matches = ['i', 'o'] + usableIn = ''.join([matches[e] for e in self.usableIn.CheckedItems]) + if not name: + gui.messageBox( + _("Please specify a group name"), + _("Error"), + wx.OK|wx.ICON_ERROR, + self + ) + return self.name.SetFocus() + if len(members) < 2: + gui.messageBox( + _("Please select at least 2 tables"), + _("Error"), + wx.OK|wx.ICON_ERROR, + self + ) + return self.members.SetFocus() + self.groupEntry = GroupTables(name, members, usableIn) + evt.Skip() + +class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): + + # Translators: title of a dialog. + title = f"{addonName} - %s" % _("Custom braille tables") + providedTablesPath = "%s/res/json" % baseDir + userTablesPath = "%s/json" % configDir + + def makeSettings(self, settingsSizer): + self.providedTables = self.getBrailleTablesFromJSON(self.providedTablesPath) + self.userTables = self.getBrailleTablesFromJSON(self.userTablesPath) + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + self.inTable = sHelper.addItem(wx.CheckBox(self, label=_("Use a custom table as input table"))) + self.outTable = sHelper.addItem(wx.CheckBox(self, label=_("Use a custom table as output table"))) + self.addBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Add a braille table"), wx.DefaultPosition) + self.addBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onAddBrailleTablesBtn) + sHelper.addItem(bHelper1) + + @staticmethod + def getBrailleTablesFromJSON(path): + if not os.path.exists(path): + path = "%s/%s" % (baseDir, path) + if not os.path.exists(path): return {} + f = open(path, "r") + return json.load(f) + + def onAddBrailleTablesBtn(self, evt): + addBrailleTablesDlg = AddBrailleTablesDlg(self, multiInstanceAllowed=True) + addBrailleTablesDlg.ShowModal() + + def postInit(self): self.inTable.SetFocus() + + def onOk(self, event): + super(CustomBrailleTablesDlg, self).onOk(evt) + + +class AddBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): + # Translators: title of a dialog. + title = "Braille Extender - %s" % _("Add a braille table") + tbl = [] + + def makeSettings(self, settingsSizer): + sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) + bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) + self.name = sHelper.addLabeledControl(_("Display name"), wx.TextCtrl) + self.description = sHelper.addLabeledControl(_("Description"), wx.TextCtrl, style = wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size = (360, 90), pos=(-1,-1)) + self.path = sHelper.addLabeledControl(_("Path"), wx.TextCtrl) + self.browseBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Browse"), wx.DefaultPosition) + self.browseBtn.Bind(wx.EVT_BUTTON, self.onBrowseBtn) + sHelper.addItem(bHelper1) + self.isContracted = sHelper.addItem(wx.CheckBox(self, label=_("Contracted (grade 2) braille table"))) + # Translators: label of a dialog. + self.inputOrOutput = sHelper.addLabeledControl(_("Available for"), wx.Choice, choices=[_("Input and output"), _("Input only"), _("Output only")]) + self.inputOrOutput.SetSelection(0) + + def postInit(self): self.name.SetFocus() + + def onBrowseBtn(self, event): + dlg = wx.FileDialog(None, _("Choose a table file"), "%PROGRAMFILES%", "", "%s (*.ctb, *.cti, *.utb, *.uti)|*.ctb;*.cti;*.utb;*.uti" % _("Liblouis table files"), style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + if dlg.ShowModal() != wx.ID_OK: + dlg.Destroy() + return self.path.SetFocus() + self.path.SetValue(dlg.GetDirectory() + '\\' + dlg.GetFilename()) + dlg.Destroy() + self.path.SetFocus() + + def onOk(self, event): + path = self.path.GetValue().strip().encode("UTF-8") + displayName = self.name.GetValue().strip() + if not displayName: + gui.messageBox(_("Please specify a display name."), _("Invalid display name"), wx.OK|wx.ICON_ERROR) + self.name.SetFocus() + return + if not os.path.exists(path.decode("UTF-8").encode("mbcs")): + gui.messageBox(_("The specified path is not valid (%s).") % path.decode("UTF-8"), _("Invalid path"), wx.OK|wx.ICON_ERROR) + self.path.SetFocus() + return + switch_possibleValues = ["both", "input", "output"] + v = "%s|%s|%s|%s" % ( + switch_possibleValues[self.inputOrOutput.GetSelection()], + self.isContracted.IsChecked(), path.decode("UTF-8"), displayName + ) + k = hashlib.md5(path).hexdigest()[:15] + config.conf["brailleExtender"]["brailleTables"][k] = v + super(AddBrailleTablesDlg, self).onOk(evt) + + @staticmethod + def getAvailableBrailleTables(): + out = [] + brailleTablesDir = configBE.TABLES_DIR + ls = glob.glob(brailleTablesDir+'\\*.ctb')+glob.glob(brailleTablesDir+'\\*.cti')+glob.glob(brailleTablesDir+'\\*.utb') + for i, e in enumerate(ls): + e = str(e.split('\\')[-1]) + if e in configBE.tablesFN or e.lower() in configBE.tablesFN: del ls[i] + else: out.append(e.lower()) + out = sorted(out) + return out + + diff --git a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py b/addon/globalPlugins/brailleExtender/brailleTablesHelper.py deleted file mode 100644 index 61a4ec73..00000000 --- a/addon/globalPlugins/brailleExtender/brailleTablesHelper.py +++ /dev/null @@ -1,80 +0,0 @@ -# coding: utf-8 -# brailleTablesHelper.py -# Part of BrailleExtender addon for NVDA -# Copyright 2016-2020 André-Abush CLAUSE, released under GPL. - -import addonHandler -import brailleTables -import config -from typing import Optional, List, Tuple -from logHandler import log - -addonHandler.initTranslation() - -listContractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.contracted] -listUncontractedTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if not table.contracted] -listInputTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.input] -listOutputTables = lambda tables=None: [table for table in (tables or brailleTables.listTables()) if table.output] -listTablesFileName = lambda tables=None: [table.fileName for table in (tables or brailleTables.listTables())] -listTablesDisplayName = lambda tables=None: [table.displayName for table in (tables or brailleTables.listTables())] - -def fileName2displayName(l): - allTablesFileName = listTablesFileName() - o = [] - for e in l: - if e in allTablesFileName: o.append(allTablesFileName.index(e)) - return ', '.join([brailleTables.listTables()[e].displayName for e in o]) - -def getPreferedTables() -> Tuple[List[str]]: - allInputTablesFileName = listTablesFileName(listInputTables()) - allOutputTablesFileName = listTablesFileName(listOutputTables()) - preferedInputTablesFileName = config.conf["brailleExtender"]["preferedInputTables"].split('|') - preferedOutputTablesFileName = config.conf["brailleExtender"]["preferedOutputTables"].split('|') - inputTables = [fn for fn in preferedInputTablesFileName if fn in allInputTablesFileName] - outputTables = [fn for fn in preferedOutputTablesFileName if fn in allOutputTablesFileName] - return inputTables, outputTables - -def getPreferedTablesIndexes() -> List[int]: - preferedInputTables, preferedOutputTables = getPreferedTables() - inputTables = listTablesFileName(listInputTables()) - outputTables = listTablesFileName(listOutputTables()) - o = [] - for a, b in [(preferedInputTables, inputTables), (preferedOutputTables, outputTables)]: - o_ = [] - for e in a: - if e in b: o_.append(b.index(e)) - o.append(o_) - return o - -def getPostTables() -> List[str]: - tablesFileName = [table.fileName for table in brailleTables.listTables()] - l = config.conf["brailleExtender"]["postTables"].split('|') - return [fn for fn in l if fn in tablesFileName] - -def getPostTablesIndexes() -> List[int]: - postTablesFileName = getPostTables() - tablesFileName = [table.fileName for table in brailleTables.listTables()] - o = [] - for i, e in enumerate(postTablesFileName): - if e in tablesFileName: o.append(tablesFileName.index(e)) - return o - -def getCustomBrailleTables(): - return [config.conf["brailleExtender"]["brailleTables"][k].split('|', 3) for k in config.conf["brailleExtender"]["brailleTables"]] - -def isContractedTable(fileName): - return fileName in listTablesFileName(listContractedTables()) - -def getTablesFilenameByID(l: List[int], tables=None) -> List[int]: - listTablesFileName = [table.fileName for table in (tables or brailleTables.listTables())] - o = [] - size = len(listTablesFileName) - for i in l: - if i < size: o.append(listTablesFileName[i]) - return o - -def translateUsableIn(s): - if s.startswith('i:'): return _("input") - elif s.startswith('o:'): return _("output") - elif s.startswith('io:'): return _("input and output") - else: return _("None") \ No newline at end of file diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 5a00215b..07d7899b 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -15,7 +15,7 @@ import configobj import inputCore import languageHandler -from . import brailleTablesHelper +from . import brailleTablesExt from .common import * Validator = configobj.validate.Validator @@ -170,9 +170,6 @@ def getConfspec(): "stopSpeechUnknown": "boolean(default=True)", "speakRoutingTo": "boolean(default=True)", "routingReviewModeWithCursorKeys": "boolean(default=False)", - "inputTableShortcuts": 'string(default="?")', - "preferedInputTables": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', - "preferedOutputTables": f'string(default="{config.conf["braille"]["translationTable"]}")', "tabSpace": "boolean(default=False)", f"tabSize_{curBD}": "integer(min=1, default=2, max=42)", "undefinedCharsRepr": { @@ -186,7 +183,6 @@ def getConfspec(): "lang": "string(default=Windows)", "table": "string(default=current)" }, - "postTables": 'string(default="None")', "viewSaved": "string(default=%s)" % NOVIEWSAVED, "reviewModeTerminal": "boolean(default=True)", "oneHandMode": "boolean(default=False)", @@ -241,7 +237,12 @@ def getConfspec(): }, "quickLaunches": {}, "roleLabels": {}, - "brailleTables": {}, + "tables": { + "groups": {}, + "shortcuts": 'string(default="?")', + "preferedInput": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', + "preferedOutput": f'string(default="{config.conf["braille"]["translationTable"]}")', + }, "advancedInputMode": { "stopAfterOneChar": "boolean(default=True)", "escapeSignUnicodeValue": "string(default=⠼)", @@ -316,7 +317,7 @@ def loadConf(): limitCellsRight = int(config.conf["brailleExtender"]["rightMarginCells_%s" % curBD]) if (backupDisplaySize-limitCellsRight <= backupDisplaySize and limitCellsRight > 0): braille.handler.displaySize = backupDisplaySize-limitCellsRight - if config.conf["brailleExtender"]["inputTableShortcuts"] not in brailleTablesHelper.listTablesFileName(brailleTablesHelper.listUncontractedTables()): config.conf["brailleExtender"]["inputTableShortcuts"] = '?' + if config.conf["brailleExtender"]["tables"]["shortcuts"] not in brailleTablesExt.listTablesFileName(brailleTablesExt.listUncontractedTables()): config.conf["brailleExtender"]["tables"]["shortcuts"] = '?' if config.conf["brailleExtender"]["features"]["roleLabels"]: loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) initializePreferedTables() @@ -324,7 +325,7 @@ def loadConf(): def initializePreferedTables(): global inputTables, outputTables - inputTables, outputTables = brailleTablesHelper.getPreferedTables() + inputTables, outputTables = brailleTablesExt.getPreferedTables() def loadGestures(): if gesturesFileExists: diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index f2eff5fe..15771529 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -28,7 +28,7 @@ from . import utils from .common import * from . import advancedInputMode -from . import brailleTablesHelper +from . import brailleTablesExt from . import undefinedChars instanceGP = None @@ -331,249 +331,6 @@ def onSave(self): if config.conf["brailleExtender"]["features"]["roleLabels"]: configBE.loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) -class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): - - # Translators: title of a dialog. - title = _("Braille tables") - - def makeSettings(self, settingsSizer): - listPreferedTablesIndexes = brailleTablesHelper.getPreferedTablesIndexes() - currentTableLabel = _("Use the current input table") - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - - listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables() if table.input] - label = _("Prefered input tables") - self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) - self.inputTables.CheckedItems = listPreferedTablesIndexes[0] - self.inputTables.Select(0) - - listTables = [f"{table.displayName}, {table.fileName}" for table in brailleTables.listTables() if table.output] - label = _("Prefered output tables") - self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTables) - self.outputTables.CheckedItems = listPreferedTablesIndexes[1] - self.outputTables.Select(0) - - listUncontractedTables = brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listUncontractedTables()) - label = _("Input braille table for keyboard shortcut keys") - self.inputTableShortcuts = sHelper.addLabeledControl(label, wx.Choice, choices=[currentTableLabel] + listUncontractedTables) - #self.inputTableShortcuts.SetSelection(iSht) - - self.tablesGroupBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Groups of tables"), wx.DefaultPosition) - self.tablesGroupBtn.Bind(wx.EVT_BUTTON, self.onTablesGroupsBtn) - - self.customBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("Alternative and &custom braille tables"), wx.DefaultPosition) - self.customBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onCustomBrailleTablesBtn) - - # Translators: label of a dialog. - self.tabSpace = sHelper.addItem(wx.CheckBox(self, label=_("Display &tab signs as spaces"))) - self.tabSpace.SetValue(config.conf["brailleExtender"]["tabSpace"]) - self.tabSpace.Bind(wx.EVT_CHECKBOX, self.onTabSpace) - - # Translators: label of a dialog. - self.tabSize = sHelper.addLabeledControl(_("Number of &space for a tab sign")+" "+_("for the currrent braille display"), gui.nvdaControls.SelectOnFocusSpinCtrl, min=1, max=42, initial=int(config.conf["brailleExtender"]["tabSize_%s" % configBE.curBD])) - sHelper.addItem(bHelper1) - self.onTabSpace() - - def onTabSpace(self, evt=None): - if self.tabSpace.IsChecked(): self.tabSize.Enable() - else: self.tabSize.Disable() - - def onTablesGroupsBtn(self, evt): - tablesGroupsDlg = TablesGroupsDlg(self, multiInstanceAllowed=True) - tablesGroupsDlg.ShowModal() - - def onCustomBrailleTablesBtn(self, evt): - customBrailleTablesDlg = CustomBrailleTablesDlg(self, multiInstanceAllowed=True) - customBrailleTablesDlg.ShowModal() - - def postInit(self): self.tables.SetFocus() - - def isValid(self): - if self.tabSize.Value > 42: - gui.messageBox( - _("Tab size is invalid"), - _("Error"), - wx.OK|wx.ICON_ERROR, - self - ) - self.tabSize.SetFocus() - return False - return super().isValid() - - def onSave(self): - inputTables = '|'.join(brailleTablesHelper.getTablesFilenameByID( - self.inputTables.CheckedItems, - brailleTablesHelper.listInputTables() - )) - outputTables = '|'.join( - brailleTablesHelper.getTablesFilenameByID( - self.outputTables.CheckedItems, - brailleTablesHelper.listOutputTables() - ) - ) - #postTables = '|'.join(brailleTablesHelper.getTablesFilenameByID(self.postTables.CheckedItems)) - config.conf["brailleExtender"]["preferedInputTables"] = inputTables - config.conf["brailleExtender"]["preferedOutputTables"] = outputTables - #config.conf["brailleExtender"]["postTables"] = postTables - config.conf["brailleExtender"]["inputTableShortcuts"] = configBE.tablesUFN[self.inputTableShortcuts.GetSelection()-1] if self.inputTableShortcuts.GetSelection() > 0 else '?' - config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() - config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value - - def postSave(self): - configBE.initializePreferedTables() - -class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): - - # Translators: title of a dialog. - title = f"{addonName} - %s" % _("Groups of tables") - - def makeSettings(self, settingsSizer): - wx.CallAfter(notImplemented) - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - bHelper = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - groupsLabelText = _("List of table groups") - self.groupsList = sHelper.addLabeledControl(groupsLabelText, wx.ListCtrl, style=wx.LC_REPORT|wx.LC_SINGLE_SEL,size=(550,350)) - self.groupsList.InsertColumn(0, _("Name"), width=150) - self.groupsList.InsertColumn(1, _("Members"), width=150) - self.groupsList.InsertColumn(2, _("Usable in"), width=150) - self.onSetGroups() - self.addTablesGroupBtn = bHelper.addButton(self, wx.NewId(), "%s..." % _("&Add a group"), wx.DefaultPosition) - self.addTablesGroupBtn.Bind(wx.EVT_BUTTON, self.onAddTablesGroupBtn) - sHelper.addItem(bHelper) - - - def onSetGroups(self, evt=None): - groups = { - "Fake group 1": "i:en-ueb-g1.ctb|fr-bfu-comp8.utb", - "Fake group 2": "o:ru.ctb|fr-bfu-comp8.utb", - "Fake group 3": "n:ru.ctb|en-ueb-g1.ctb", - } - for name, desc in groups.items(): - self.groupsList.Append(( - name, - brailleTablesHelper.fileName2displayName(desc.split(':')[-1].split('|')), - brailleTablesHelper.translateUsableIn(desc), - )) - - def onAddTablesGroupBtn(self, evt): - addTablesGroupDlg = AddTablesGroupDlg(self, multiInstanceAllowed=True) - addTablesGroupDlg.ShowModal() - -class AddTablesGroupDlg(gui.settingsDialogs.SettingsDialog): - - title = _("Add a group of tables") - - def makeSettings(self, settingsSizer): - listUncontractedTables = brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listUncontractedTables()) - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - self.name = sHelper.addLabeledControl(_("Group name"), wx.TextCtrl) - self.description = sHelper.addLabeledControl(_("Description"), wx.TextCtrl, style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size = (360, 90), pos=(-1,-1)) - label = _(f"Group members") - self.members = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listUncontractedTables) - #self.outputTables.CheckedItems = brailleTablesHelper.getPostTablesIndexes() - #self.outputTables.Select(0) - - -class CustomBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): - - # Translators: title of a dialog. - title = f"{addonName} - %s" % _("Custom braille tables") - providedTablesPath = "%s/res/brailleTables.json" % configBE.baseDir - userTablesPath = "%s/brailleTables.json" % configBE.configDir - - def makeSettings(self, settingsSizer): - self.providedTables = self.getBrailleTablesFromJSON(self.providedTablesPath) - self.userTables = self.getBrailleTablesFromJSON(self.userTablesPath) - wx.CallAfter(notImplemented) - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - self.inTable = sHelper.addItem(wx.CheckBox(self, label=_("Use a custom table as input table"))) - self.outTable = sHelper.addItem(wx.CheckBox(self, label=_("Use a custom table as output table"))) - self.addBrailleTablesBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Add a braille table"), wx.DefaultPosition) - self.addBrailleTablesBtn.Bind(wx.EVT_BUTTON, self.onAddBrailleTablesBtn) - sHelper.addItem(bHelper1) - - @staticmethod - def getBrailleTablesFromJSON(path): - if not os.path.exists(path): - path = "%s/%s" % (configBE.baseDir, path) - if not os.path.exists(path): return {} - f = open(path, "r") - return json.load(f) - - def onAddBrailleTablesBtn(self, evt): - addBrailleTablesDlg = AddBrailleTablesDlg(self, multiInstanceAllowed=True) - addBrailleTablesDlg.ShowModal() - - def postInit(self): self.inTable.SetFocus() - - def onOk(self, event): - super(CustomBrailleTablesDlg, self).onOk(evt) - - -class AddBrailleTablesDlg(gui.settingsDialogs.SettingsDialog): - # Translators: title of a dialog. - title = "Braille Extender - %s" % _("Add a braille table") - tbl = [] - - def makeSettings(self, settingsSizer): - sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) - bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) - self.name = sHelper.addLabeledControl(_("Display name"), wx.TextCtrl) - self.description = sHelper.addLabeledControl(_("Description"), wx.TextCtrl, style = wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size = (360, 90), pos=(-1,-1)) - self.path = sHelper.addLabeledControl(_("Path"), wx.TextCtrl) - self.browseBtn = bHelper1.addButton(self, wx.NewId(), "%s..." % _("&Browse"), wx.DefaultPosition) - self.browseBtn.Bind(wx.EVT_BUTTON, self.onBrowseBtn) - sHelper.addItem(bHelper1) - self.isContracted = sHelper.addItem(wx.CheckBox(self, label=_("Contracted (grade 2) braille table"))) - # Translators: label of a dialog. - self.inputOrOutput = sHelper.addLabeledControl(_("Available for"), wx.Choice, choices=[_("Input and output"), _("Input only"), _("Output only")]) - self.inputOrOutput.SetSelection(0) - - def postInit(self): self.name.SetFocus() - - def onBrowseBtn(self, event): - dlg = wx.FileDialog(None, _("Choose a table file"), "%PROGRAMFILES%", "", "%s (*.ctb, *.cti, *.utb, *.uti)|*.ctb;*.cti;*.utb;*.uti" % _("Liblouis table files"), style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - if dlg.ShowModal() != wx.ID_OK: - dlg.Destroy() - return self.path.SetFocus() - self.path.SetValue(dlg.GetDirectory() + '\\' + dlg.GetFilename()) - dlg.Destroy() - self.path.SetFocus() - - def onOk(self, event): - path = self.path.GetValue().strip().encode("UTF-8") - displayName = self.name.GetValue().strip() - if not displayName: - gui.messageBox(_("Please specify a display name."), _("Invalid display name"), wx.OK|wx.ICON_ERROR) - self.name.SetFocus() - return - if not os.path.exists(path.decode("UTF-8").encode("mbcs")): - gui.messageBox(_("The specified path is not valid (%s).") % path.decode("UTF-8"), _("Invalid path"), wx.OK|wx.ICON_ERROR) - self.path.SetFocus() - return - switch_possibleValues = ["both", "input", "output"] - v = "%s|%s|%s|%s" % ( - switch_possibleValues[self.inputOrOutput.GetSelection()], - self.isContracted.IsChecked(), path.decode("UTF-8"), displayName - ) - k = hashlib.md5(path).hexdigest()[:15] - config.conf["brailleExtender"]["brailleTables"][k] = v - super(AddBrailleTablesDlg, self).onOk(evt) - - @staticmethod - def getAvailableBrailleTables(): - out = [] - brailleTablesDir = configBE.brailleTables.TABLES_DIR - ls = glob.glob(brailleTablesDir+'\\*.ctb')+glob.glob(brailleTablesDir+'\\*.cti')+glob.glob(brailleTablesDir+'\\*.utb') - for i, e in enumerate(ls): - e = str(e.split('\\')[-1]) - if e in configBE.tablesFN or e.lower() in configBE.tablesFN: del ls[i] - else: out.append(e.lower()) - out = sorted(out) - return out - class QuickLaunchesDlg(gui.settingsDialogs.SettingsDialog): @@ -896,7 +653,7 @@ class AddonSettingsDialog(gui.settingsDialogs.MultiCategorySettingsDialog): categoryClasses=[ GeneralDlg, AttribraDlg, - BrailleTablesDlg, + brailleTablesExt.BrailleTablesDlg, undefinedChars.SettingsDlg, advancedInputMode.SettingsDlg, RoleLabelsDlg, diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index 1b30ab33..28edaa47 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -19,7 +19,7 @@ from . import configBE, huc from .common import * -from . import brailleTablesHelper +from . import brailleTablesExt from .utils import getCurrentBrailleTables, getTextInBraille addonHandler.initTranslation() @@ -315,8 +315,8 @@ def makeSettings(self, settingsSizer): _("Language"), wx.Choice, choices=values ) self.undefinedCharLang.SetSelection(undefinedCharLangID) - values = [_("Use the current output table")] + brailleTablesHelper.listTablesDisplayName(brailleTablesHelper.listOutputTables()) - keys = ["current"] + brailleTablesHelper.listTablesFileName(brailleTablesHelper.listOutputTables()) + values = [_("Use the current output table")] + brailleTablesExt.listTablesDisplayName(brailleTablesExt.listOutputTables()) + keys = ["current"] + brailleTablesExt.listTablesFileName(brailleTablesExt.listOutputTables()) undefinedCharTable = config.conf["brailleExtender"]["undefinedCharsRepr"]["table"] if undefinedCharTable not in keys: undefinedCharTable = "current" undefinedCharTableID = keys.index(undefinedCharTable) @@ -399,7 +399,7 @@ def onSave(self): 0 ] undefinedCharTable = self.undefinedCharTable.GetSelection() - keys = ["current"] + brailleTablesHelper.listTablesFileName(brailleTablesHelper.listOutputTables()) + keys = ["current"] + brailleTablesExt.listTablesFileName(brailleTablesExt.listOutputTables()) config.conf["brailleExtender"]["undefinedCharsRepr"]["table"] = keys[ undefinedCharTable ] From ec5fd9a008a23e5212fc6165f1d136aa094dd52b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Tue, 14 Apr 2020 13:35:20 +0200 Subject: [PATCH 60/87] fixup --- addon/globalPlugins/brailleExtender/brailleTablesExt.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 79a71465..025775fe 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -95,9 +95,6 @@ def setDict(newGroups): global _groups _groups = newGroups -def getGroups(): - return _groups if _groups else [] - def getPathGroups(): return f"{configDir}/groups-tables.json" @@ -128,7 +125,8 @@ def saveGroups(entries=None): with codecs.open(getPathGroups(), "w", "UTF-8") as outfile: json.dump(entries, outfile, ensure_ascii=False, indent=2) -def getGroups(): +def getGroups(plain=True): + if plain: return _groups if _groups else [] groups = getGroups() i = [group for group in groups if group.usableIn in ['i', 'io']] o = [group for group in groups if group.usableIn in ['o', 'io']] From 720facee298d547534dd32273fcd54a49b461134 Mon Sep 17 00:00:00 2001 From: zstanecic Date: Wed, 15 Apr 2020 12:21:21 +0200 Subject: [PATCH 61/87] starting to update the localizations, first part, work in progress --- addon/locale/hr/LC_MESSAGES/nvda.po | 1502 ++++++++++++++++++--------- 1 file changed, 1016 insertions(+), 486 deletions(-) diff --git a/addon/locale/hr/LC_MESSAGES/nvda.po b/addon/locale/hr/LC_MESSAGES/nvda.po index 353e88fb..95c84702 100644 --- a/addon/locale/hr/LC_MESSAGES/nvda.po +++ b/addon/locale/hr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-03-19 09:08+0100\n" -"PO-Revision-Date: 2020-03-19 09:10+0100\n" +"POT-Creation-Date: 2020-04-15 09:24+0200\n" +"PO-Revision-Date: 2020-04-15 12:18+0100\n" "Last-Translator: zvonimir stanecic \n" "Language-Team: \n" "Language: hr\n" @@ -17,175 +17,175 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" -#: addon/globalPlugins/brailleExtender/__init__.py:61 +#: addon/globalPlugins/brailleExtender/__init__.py:64 msgid "Default" msgstr "Podrazumijevano" -#: addon/globalPlugins/brailleExtender/__init__.py:62 +#: addon/globalPlugins/brailleExtender/__init__.py:65 msgid "Moving in the text" msgstr "premještanje po tekstu" -#: addon/globalPlugins/brailleExtender/__init__.py:63 +#: addon/globalPlugins/brailleExtender/__init__.py:66 msgid "Text selection" msgstr "označavanje teksta" -#: addon/globalPlugins/brailleExtender/__init__.py:64 +#: addon/globalPlugins/brailleExtender/__init__.py:67 msgid "Objects" msgstr "Objekti" -#: addon/globalPlugins/brailleExtender/__init__.py:65 +#: addon/globalPlugins/brailleExtender/__init__.py:68 msgid "Review" msgstr "Pregled" -#: addon/globalPlugins/brailleExtender/__init__.py:66 +#: addon/globalPlugins/brailleExtender/__init__.py:69 msgid "Links" msgstr "Veze" -#: addon/globalPlugins/brailleExtender/__init__.py:67 +#: addon/globalPlugins/brailleExtender/__init__.py:70 msgid "Unvisited links" msgstr "Neposjećene veze" -#: addon/globalPlugins/brailleExtender/__init__.py:68 +#: addon/globalPlugins/brailleExtender/__init__.py:71 msgid "Visited links" msgstr "Posjećene veze" -#: addon/globalPlugins/brailleExtender/__init__.py:69 +#: addon/globalPlugins/brailleExtender/__init__.py:72 msgid "Landmarks" msgstr "Orjentiri" -#: addon/globalPlugins/brailleExtender/__init__.py:70 +#: addon/globalPlugins/brailleExtender/__init__.py:73 msgid "Headings" msgstr "Naslovi" -#: addon/globalPlugins/brailleExtender/__init__.py:71 +#: addon/globalPlugins/brailleExtender/__init__.py:74 msgid "Headings at level 1" msgstr "Naslovi na razini 1" -#: addon/globalPlugins/brailleExtender/__init__.py:72 +#: addon/globalPlugins/brailleExtender/__init__.py:75 msgid "Headings at level 2" msgstr "Naslovi na razini 2" -#: addon/globalPlugins/brailleExtender/__init__.py:73 +#: addon/globalPlugins/brailleExtender/__init__.py:76 msgid "Headings at level 3" msgstr "Naslovi na razini 3" -#: addon/globalPlugins/brailleExtender/__init__.py:74 +#: addon/globalPlugins/brailleExtender/__init__.py:77 msgid "Headings at level 4" msgstr "Naslovi na razini 4" -#: addon/globalPlugins/brailleExtender/__init__.py:75 +#: addon/globalPlugins/brailleExtender/__init__.py:78 msgid "Headings at level 5" msgstr "Naslovi na razini 5" -#: addon/globalPlugins/brailleExtender/__init__.py:76 +#: addon/globalPlugins/brailleExtender/__init__.py:79 msgid "Headings at level 6" msgstr "Naslovi na razini 6" -#: addon/globalPlugins/brailleExtender/__init__.py:77 +#: addon/globalPlugins/brailleExtender/__init__.py:80 msgid "Lists" msgstr "Popisi" -#: addon/globalPlugins/brailleExtender/__init__.py:78 +#: addon/globalPlugins/brailleExtender/__init__.py:81 msgid "List items" msgstr "Elementi popisa" -#: addon/globalPlugins/brailleExtender/__init__.py:79 +#: addon/globalPlugins/brailleExtender/__init__.py:82 msgid "Graphics" msgstr "Slike" -#: addon/globalPlugins/brailleExtender/__init__.py:80 +#: addon/globalPlugins/brailleExtender/__init__.py:83 msgid "Block quotes" msgstr "Citati" -#: addon/globalPlugins/brailleExtender/__init__.py:81 +#: addon/globalPlugins/brailleExtender/__init__.py:84 msgid "Buttons" msgstr "Gumbi" -#: addon/globalPlugins/brailleExtender/__init__.py:82 +#: addon/globalPlugins/brailleExtender/__init__.py:85 msgid "Form fields" msgstr "Polja obrazaca" -#: addon/globalPlugins/brailleExtender/__init__.py:83 +#: addon/globalPlugins/brailleExtender/__init__.py:86 msgid "Edit fields" msgstr "Polja za uređivanje" -#: addon/globalPlugins/brailleExtender/__init__.py:84 +#: addon/globalPlugins/brailleExtender/__init__.py:87 msgid "Radio buttons" msgstr "Izborni gumbi" -#: addon/globalPlugins/brailleExtender/__init__.py:85 +#: addon/globalPlugins/brailleExtender/__init__.py:88 msgid "Combo boxes" msgstr "Odabirni okviri" -#: addon/globalPlugins/brailleExtender/__init__.py:86 +#: addon/globalPlugins/brailleExtender/__init__.py:89 msgid "Check boxes" msgstr "Potvrdni okviri" -#: addon/globalPlugins/brailleExtender/__init__.py:87 +#: addon/globalPlugins/brailleExtender/__init__.py:90 msgid "Not link blocks" msgstr "Tekst izvan bloka linkova" -#: addon/globalPlugins/brailleExtender/__init__.py:88 +#: addon/globalPlugins/brailleExtender/__init__.py:91 msgid "Frames" msgstr "Okviri" -#: addon/globalPlugins/brailleExtender/__init__.py:89 +#: addon/globalPlugins/brailleExtender/__init__.py:92 msgid "Separators" msgstr "Rastavljači" -#: addon/globalPlugins/brailleExtender/__init__.py:90 +#: addon/globalPlugins/brailleExtender/__init__.py:93 msgid "Embedded objects" msgstr "Ugrađeni objekti" -#: addon/globalPlugins/brailleExtender/__init__.py:91 +#: addon/globalPlugins/brailleExtender/__init__.py:94 msgid "Annotations" msgstr "Anotacije" -#: addon/globalPlugins/brailleExtender/__init__.py:92 +#: addon/globalPlugins/brailleExtender/__init__.py:95 msgid "Spelling errors" msgstr "Pravopisne pogreške" -#: addon/globalPlugins/brailleExtender/__init__.py:93 +#: addon/globalPlugins/brailleExtender/__init__.py:96 msgid "Tables" msgstr "tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:94 +#: addon/globalPlugins/brailleExtender/__init__.py:97 msgid "Move in table" msgstr "Premještanje po tablici" -#: addon/globalPlugins/brailleExtender/__init__.py:100 +#: addon/globalPlugins/brailleExtender/__init__.py:103 msgid "If pressed twice, presents the information in browse mode" msgstr "ako je pritisnuto dvaput, prikazuje informacije u brajičnom pregledu" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Docu&mentation" msgstr "&Pomoć" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Opens the addon's documentation." msgstr "Otvara pomoc dodatka." -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "&Settings" msgstr "&Postavke" -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "Opens the addons' settings." msgstr "Otvara postavke dodatka." -#: addon/globalPlugins/brailleExtender/__init__.py:265 -msgid "Braille &dictionaries" -msgstr "Brajični &Rječnici" +#: addon/globalPlugins/brailleExtender/__init__.py:270 +msgid "Table &dictionaries" +msgstr "&Rječnici tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:265 +#: addon/globalPlugins/brailleExtender/__init__.py:270 msgid "'Braille dictionaries' menu" msgstr "Izbornik 'brajičnih rječnika'" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "&Global dictionary" msgstr "&Globalni rječnik" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -193,11 +193,11 @@ msgstr "" "Dijaloški okvir u kojem se može dodati globalni rječnik putem dodavanja " "zapisa u isti." -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "&Table dictionary" msgstr "&Rječnik tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -205,228 +205,252 @@ msgstr "" "Rječnik specifičan za brajičnu tablicu u kojem se mogu dodati zapisi " "specifični za tablicu." -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "Te&mporary dictionary" msgstr "&Privremeni rječnik" -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." msgstr "" "Dijaloški okvir privremenih rječnika u kojem možete dodati zapise za isti." -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:278 +msgid "Advanced &input mode dictionary" +msgstr "Rječnik naprednog načina unosa" + +#: addon/globalPlugins/brailleExtender/__init__.py:278 +msgid "Advanced input mode configuration" +msgstr "Konfiguracija naprednog načina unosa" + +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" msgstr "&Brza pokretanja" -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "Quick launches configuration" msgstr "Konfiguracija brzih pokretanja" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "&Profile editor" msgstr "Uređivač &profila" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "Profile editor" msgstr "uređivač profila" -#: addon/globalPlugins/brailleExtender/__init__.py:285 +#: addon/globalPlugins/brailleExtender/__init__.py:296 msgid "Overview of the current input braille table" msgstr "Pregled trenutne brajične tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload add-on" msgstr "Ponovno učitaj dodatak" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload this add-on." msgstr "Ponovno učitava dodatak." -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "&Check for update" msgstr "&Provjeri, postoji li nova inačica" -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "Checks if update is available" msgstr "Provjerava, postoji li nadogradnja" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "&Website" msgstr "&Web stranica" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "Open addon's website." msgstr "Otvara web stranicu dodatka." -#: addon/globalPlugins/brailleExtender/__init__.py:293 +#: addon/globalPlugins/brailleExtender/__init__.py:304 msgid "&Braille Extender" msgstr "&Braille Extender" -#: addon/globalPlugins/brailleExtender/__init__.py:297 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:319 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Global dictionary" msgstr "Globalni rječnik" -#: addon/globalPlugins/brailleExtender/__init__.py:302 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:324 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Table dictionary" msgstr "Rječnik tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:306 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:328 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Temporary dictionary" msgstr "Privremeni rječnik" -#: addon/globalPlugins/brailleExtender/__init__.py:416 +#: addon/globalPlugins/brailleExtender/__init__.py:438 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "Character" msgstr "Znak" -#: addon/globalPlugins/brailleExtender/__init__.py:417 +#: addon/globalPlugins/brailleExtender/__init__.py:439 msgid "Word" msgstr "Riječ" -#: addon/globalPlugins/brailleExtender/__init__.py:418 +#: addon/globalPlugins/brailleExtender/__init__.py:440 msgid "Line" msgstr "Redak" -#: addon/globalPlugins/brailleExtender/__init__.py:419 +#: addon/globalPlugins/brailleExtender/__init__.py:441 msgid "Paragraph" msgstr "Odlomak" -#: addon/globalPlugins/brailleExtender/__init__.py:420 +#: addon/globalPlugins/brailleExtender/__init__.py:442 msgid "Page" msgstr "Stranica" -#: addon/globalPlugins/brailleExtender/__init__.py:421 +#: addon/globalPlugins/brailleExtender/__init__.py:443 msgid "Document" msgstr "Dokument" -#: addon/globalPlugins/brailleExtender/__init__.py:457 +#: addon/globalPlugins/brailleExtender/__init__.py:479 msgid "Not available here" msgstr "Nije ovdje dostupno" -#: addon/globalPlugins/brailleExtender/__init__.py:475 #: addon/globalPlugins/brailleExtender/__init__.py:497 +#: addon/globalPlugins/brailleExtender/__init__.py:519 msgid "Not supported here or browse mode not enabled" msgstr "Nije podržano ovdje, ili način pregleda nije uključen" -#: addon/globalPlugins/brailleExtender/__init__.py:477 +#: addon/globalPlugins/brailleExtender/__init__.py:499 msgid "Select previous rotor setting" msgstr "Označi prethodnu postavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:478 +#: addon/globalPlugins/brailleExtender/__init__.py:500 msgid "Select next rotor setting" msgstr "Označi slijedeću postavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:526 +#: addon/globalPlugins/brailleExtender/__init__.py:548 msgid "Move to previous item depending rotor setting" msgstr "Prebacuje se na prethodnu ovisnu stavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:527 +#: addon/globalPlugins/brailleExtender/__init__.py:549 msgid "Move to next item depending rotor setting" msgstr "Prebacuje se na sljedeću stavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:535 +#: addon/globalPlugins/brailleExtender/__init__.py:557 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" msgstr "" "Varira ovisno o postavci rotora. NPR: u načinu objekta, slično kao NVDA+enter" -#: addon/globalPlugins/brailleExtender/__init__.py:538 +#: addon/globalPlugins/brailleExtender/__init__.py:560 msgid "Move to previous item using rotor setting" msgstr "Prebacuje se na prethodnu stavku koristeći postavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:539 +#: addon/globalPlugins/brailleExtender/__init__.py:561 msgid "Move to next item using rotor setting" msgstr "prebacuje se na sljedeću postavku koristeći postavku rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:543 +#: addon/globalPlugins/brailleExtender/__init__.py:565 #, python-format msgid "Braille keyboard %s" msgstr "Brajična tipkovnica %s" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "locked" msgstr "Zaključano" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "unlocked" msgstr "OtključanoOtključano" -#: addon/globalPlugins/brailleExtender/__init__.py:544 +#: addon/globalPlugins/brailleExtender/__init__.py:566 msgid "Lock/unlock braille keyboard" msgstr "Zaključava/otključava brajičnu tipkovnicu" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#, python-format -msgid "Dots 7 and 8: %s" -msgstr "Točkice 7 i 8: %s" +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 +msgid "enabled" +msgstr "Omogućeno" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 msgid "disabled" msgstr "Onemogućeno" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 -msgid "enabled" -msgstr "Omogućeno" +#: addon/globalPlugins/brailleExtender/__init__.py:571 +#, python-format +msgid "One hand mode %s" +msgstr "Način jedne ruke %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:572 +msgid "Enable/disable one hand mode feature" +msgstr "Uključuje ili isključuje način rada jednom rukom" -#: addon/globalPlugins/brailleExtender/__init__.py:550 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#, python-format +msgid "Dots 7 and 8: %s" +msgstr "Točkice 7 i 8: %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:578 msgid "Hide/show dots 7 and 8" msgstr "Pokaži/sakrij točkice 7 i 8" -#: addon/globalPlugins/brailleExtender/__init__.py:555 +#: addon/globalPlugins/brailleExtender/__init__.py:583 #, python-format msgid "BRF mode: %s" msgstr "Način formatirane brajice: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:556 +#: addon/globalPlugins/brailleExtender/__init__.py:584 msgid "Enable/disable BRF mode" msgstr "Uključuje ili isključuje način formatirane brajice" -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:588 #, python-format msgid "Modifier keys %s" msgstr "Modifikatorske tipke %s" -#: addon/globalPlugins/brailleExtender/__init__.py:561 +#: addon/globalPlugins/brailleExtender/__init__.py:589 msgid "Lock/unlock modifiers keys" msgstr "Otključava/zaključava modifikatorske tipke" -#: addon/globalPlugins/brailleExtender/__init__.py:567 +#: addon/globalPlugins/brailleExtender/__init__.py:595 msgid "Enable/disable Attribra" msgstr "Omoguči/onemoguči attribru" -#: addon/globalPlugins/brailleExtender/__init__.py:577 +#: addon/globalPlugins/brailleExtender/__init__.py:605 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "Brzi pristup opciji \"izgovori trenutni redak pri prebacivanju\"" -#: addon/globalPlugins/brailleExtender/__init__.py:582 +#: addon/globalPlugins/brailleExtender/__init__.py:610 msgid "Speech on" msgstr "Govor je uključen" -#: addon/globalPlugins/brailleExtender/__init__.py:585 +#: addon/globalPlugins/brailleExtender/__init__.py:613 msgid "Speech off" msgstr "Govor je isključen" -#: addon/globalPlugins/brailleExtender/__init__.py:587 +#: addon/globalPlugins/brailleExtender/__init__.py:615 msgid "Toggle speech on or off" msgstr "Uključuje ili isključuje govor" -#: addon/globalPlugins/brailleExtender/__init__.py:595 +#: addon/globalPlugins/brailleExtender/__init__.py:623 msgid "No extra info for this element" msgstr "Nema dodatnih informacija za ovaj element" #. Translators: Input help mode message for report extra infos command. -#: addon/globalPlugins/brailleExtender/__init__.py:599 +#: addon/globalPlugins/brailleExtender/__init__.py:627 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -434,45 +458,45 @@ msgstr "" "Izvještava neke dodatne informacije o trenutnom elementu. Na primjer URL " "trenutnog linka" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid " Input table" msgstr " ulazna brajična tablica" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid "Output table" msgstr "Izlazna brajična tablica" -#: addon/globalPlugins/brailleExtender/__init__.py:606 +#: addon/globalPlugins/brailleExtender/__init__.py:634 #, python-format msgid "Table overview (%s)" msgstr "Pregled tablice (%s)" -#: addon/globalPlugins/brailleExtender/__init__.py:607 +#: addon/globalPlugins/brailleExtender/__init__.py:635 msgid "Display an overview of current input braille table" msgstr "Prikazuje pregled trenutne ulazne brajične tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:612 -#: addon/globalPlugins/brailleExtender/__init__.py:620 -#: addon/globalPlugins/brailleExtender/__init__.py:627 +#: addon/globalPlugins/brailleExtender/__init__.py:640 +#: addon/globalPlugins/brailleExtender/__init__.py:648 +#: addon/globalPlugins/brailleExtender/__init__.py:655 msgid "No text selection" msgstr "Nema označenog teksta" -#: addon/globalPlugins/brailleExtender/__init__.py:613 +#: addon/globalPlugins/brailleExtender/__init__.py:641 msgid "Unicode Braille conversion" msgstr "Konverzija u brajični unicode" -#: addon/globalPlugins/brailleExtender/__init__.py:614 +#: addon/globalPlugins/brailleExtender/__init__.py:642 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" msgstr "" "Pretvara tekst u Unicode brajicu i prikazuje ga kao virtualiziranu poruku" -#: addon/globalPlugins/brailleExtender/__init__.py:621 +#: addon/globalPlugins/brailleExtender/__init__.py:649 msgid "Braille Unicode to cell descriptions" msgstr "Brajični unicode na opise znakova" -#: addon/globalPlugins/brailleExtender/__init__.py:622 +#: addon/globalPlugins/brailleExtender/__init__.py:650 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -480,11 +504,11 @@ msgstr "" "Pretvara tekst u format opisa brajičnih ćelija i prikazuje ga u virtualnom " "prozoru" -#: addon/globalPlugins/brailleExtender/__init__.py:629 +#: addon/globalPlugins/brailleExtender/__init__.py:657 msgid "Cell descriptions to braille Unicode" msgstr "Opisi znakova na brajični unicode" -#: addon/globalPlugins/brailleExtender/__init__.py:630 +#: addon/globalPlugins/brailleExtender/__init__.py:658 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -492,84 +516,102 @@ msgstr "" "Opisuje brajičnu ćeliju brajičnim unicode znakovima. to jest.: u polje za " "uređivanje napišite '125-24-0-1-123-123'. a špsčoke tpga izvršite ovu komandu" -#: addon/globalPlugins/brailleExtender/__init__.py:634 +#: addon/globalPlugins/brailleExtender/__init__.py:663 +#, python-format +msgid "Advanced braille input mode %s" +msgstr "Način naprednog uređivanja teksta %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:664 +msgid "Enable/disable the advanced input mode" +msgstr "Uključuje ili isključuje napredni način unosa" + +#: addon/globalPlugins/brailleExtender/__init__.py:669 +#, python-format +msgid "Description of undefined characters %s" +msgstr "Opis Nedefiniranih znakova %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:671 +msgid "Enable/disable description of undefined characters" +msgstr "Uključuje ili isključuje opis nedefiniranih znakova" + +#: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" msgstr "Dohvati položaj teksta ispod pokazivača" -#: addon/globalPlugins/brailleExtender/__init__.py:660 +#: addon/globalPlugins/brailleExtender/__init__.py:701 msgid "Hour and date with autorefresh" msgstr "Datum i vrijeme s automatskim osvježavanjem" -#: addon/globalPlugins/brailleExtender/__init__.py:673 +#: addon/globalPlugins/brailleExtender/__init__.py:714 msgid "Autoscroll stopped" msgstr "automatsko čitanje je zaustavljeno" -#: addon/globalPlugins/brailleExtender/__init__.py:680 +#: addon/globalPlugins/brailleExtender/__init__.py:721 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "" "Nije moguće pokrenuti automatsko čitanje. Više informacija nalazi se u NVDA " "zapisniku." -#: addon/globalPlugins/brailleExtender/__init__.py:685 +#: addon/globalPlugins/brailleExtender/__init__.py:726 msgid "Enable/disable autoscroll" msgstr "Uključuje ili isključuje automatsko čitanje" -#: addon/globalPlugins/brailleExtender/__init__.py:700 +#: addon/globalPlugins/brailleExtender/__init__.py:741 msgid "Increase the master volume" msgstr "povećava vrijednost automatske glasnoće" -#: addon/globalPlugins/brailleExtender/__init__.py:717 +#: addon/globalPlugins/brailleExtender/__init__.py:758 msgid "Decrease the master volume" msgstr "Smanjuje vrijednost glavne glasnoće" -#: addon/globalPlugins/brailleExtender/__init__.py:723 +#: addon/globalPlugins/brailleExtender/__init__.py:764 msgid "Muted sound" msgstr "zvuk je utišan" -#: addon/globalPlugins/brailleExtender/__init__.py:725 +#: addon/globalPlugins/brailleExtender/__init__.py:766 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "Ottišan zvuk (%3d%%)" -#: addon/globalPlugins/brailleExtender/__init__.py:731 +#: addon/globalPlugins/brailleExtender/__init__.py:772 msgid "Mute or unmute sound" msgstr "utišaj ili ottišaj zvuk" -#: addon/globalPlugins/brailleExtender/__init__.py:736 +#: addon/globalPlugins/brailleExtender/__init__.py:777 #, python-format msgid "Show the %s documentation" msgstr "Prikazuje pomoć %s" -#: addon/globalPlugins/brailleExtender/__init__.py:774 +#: addon/globalPlugins/brailleExtender/__init__.py:815 msgid "No such file or directory" msgstr "Nema takve mape ili datoteke" -#: addon/globalPlugins/brailleExtender/__init__.py:776 +#: addon/globalPlugins/brailleExtender/__init__.py:817 msgid "Opens a custom program/file. Go to settings to define them" msgstr "" "Otvara prilagođeni program/datoteku. Otvorite postavke, kako biste ih " "definirali" -#: addon/globalPlugins/brailleExtender/__init__.py:783 +#: addon/globalPlugins/brailleExtender/__init__.py:824 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "Provjerava postoji li nadogradnja %s, i preuzima istu" -#: addon/globalPlugins/brailleExtender/__init__.py:813 +#: addon/globalPlugins/brailleExtender/__init__.py:854 msgid "Increase autoscroll delay" msgstr "povećaj brzinu automatskog čitanja" -#: addon/globalPlugins/brailleExtender/__init__.py:814 +#: addon/globalPlugins/brailleExtender/__init__.py:855 msgid "Decrease autoscroll delay" msgstr "Smanji brzinu automatskog čitanja" -#: addon/globalPlugins/brailleExtender/__init__.py:818 -#: addon/globalPlugins/brailleExtender/__init__.py:836 +#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:877 msgid "Please use NVDA 2017.3 minimum for this feature" msgstr "Molimo koristite NVDA minimalno 2017.3 kako bi ova značajka radila" -#: addon/globalPlugins/brailleExtender/__init__.py:820 -#: addon/globalPlugins/brailleExtender/__init__.py:838 +#: addon/globalPlugins/brailleExtender/__init__.py:861 +#: addon/globalPlugins/brailleExtender/__init__.py:879 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -577,49 +619,49 @@ msgstr "" "Morate koristiti najmanje dvije tablice za ovu mogučnost. Molimo popunite " "postavke" -#: addon/globalPlugins/brailleExtender/__init__.py:827 +#: addon/globalPlugins/brailleExtender/__init__.py:868 #, python-format msgid "Input: %s" msgstr "Ulaz: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:831 +#: addon/globalPlugins/brailleExtender/__init__.py:872 msgid "Switch between his favorite input braille tables" msgstr "Prebacuje između ulaznih brajičnih tablica" -#: addon/globalPlugins/brailleExtender/__init__.py:847 +#: addon/globalPlugins/brailleExtender/__init__.py:888 #, python-format msgid "Output: %s" msgstr "Izlaz: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:850 +#: addon/globalPlugins/brailleExtender/__init__.py:891 msgid "Switch between his favorite output braille tables" msgstr "Prebacuje između izlaznih brajičnih tablica" -#: addon/globalPlugins/brailleExtender/__init__.py:856 +#: addon/globalPlugins/brailleExtender/__init__.py:897 #, python-brace-format msgid "I⣿O:{I}" msgstr "I⣿O:{I}" -#: addon/globalPlugins/brailleExtender/__init__.py:857 +#: addon/globalPlugins/brailleExtender/__init__.py:898 #, python-brace-format msgid "Input and output: {I}." msgstr "Ulaz i izlaz: {I}." -#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:900 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "I:{I} ⣿ O: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:860 +#: addon/globalPlugins/brailleExtender/__init__.py:901 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Ulaz: {I}; Izlaz: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:864 +#: addon/globalPlugins/brailleExtender/__init__.py:905 msgid "Announce the current input and output braille tables" msgstr "Izgovaranje trenutne ulazne i izlazne brajične tablice" -#: addon/globalPlugins/brailleExtender/__init__.py:869 +#: addon/globalPlugins/brailleExtender/__init__.py:910 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -627,7 +669,7 @@ msgstr "" "Dohvaća Unicode vrijednost znaka tamo gje se načazi pokazivač. Također " "dodaje binarnu, oktalnu, te heksadecimalnu vrijednost." -#: addon/globalPlugins/brailleExtender/__init__.py:877 +#: addon/globalPlugins/brailleExtender/__init__.py:918 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -635,110 +677,110 @@ msgstr "" "Prikaži izlaznu govornu informaciju. za označeni tekst. Korisno za emoji " "simbole" -#: addon/globalPlugins/brailleExtender/__init__.py:881 +#: addon/globalPlugins/brailleExtender/__init__.py:922 msgid "No shortcut performed from a braille display" msgstr "Nema izvođenog prečaca sa brajičnog redka" -#: addon/globalPlugins/brailleExtender/__init__.py:885 +#: addon/globalPlugins/brailleExtender/__init__.py:926 msgid "Repeat the last shortcut performed from a braille display" msgstr "Ponovi zadnji prečac sa brajičnog retka" -#: addon/globalPlugins/brailleExtender/__init__.py:899 +#: addon/globalPlugins/brailleExtender/__init__.py:940 #, python-format msgid "%s reloaded" msgstr "%s je ponovno učitan" -#: addon/globalPlugins/brailleExtender/__init__.py:911 +#: addon/globalPlugins/brailleExtender/__init__.py:952 #, python-format msgid "Reload %s" msgstr "Ponovno učitaj %s" -#: addon/globalPlugins/brailleExtender/__init__.py:914 +#: addon/globalPlugins/brailleExtender/__init__.py:955 msgid "Reload the first braille display defined in settings" msgstr "ponovno učitava prvi brajični redak ojeg si definirao u postavkama" -#: addon/globalPlugins/brailleExtender/__init__.py:917 +#: addon/globalPlugins/brailleExtender/__init__.py:958 msgid "Reload the second braille display defined in settings" msgstr "ponovno učitava drugi brajični redak, kojeg si definirao u postavkama" -#: addon/globalPlugins/brailleExtender/__init__.py:923 +#: addon/globalPlugins/brailleExtender/__init__.py:964 msgid "No braille display specified. No reload to do" msgstr "Nije određen brajični redak. Ništa nije potrebno ponovno pokretati" -#: addon/globalPlugins/brailleExtender/__init__.py:960 +#: addon/globalPlugins/brailleExtender/__init__.py:1001 msgid "WIN" msgstr "WIN" -#: addon/globalPlugins/brailleExtender/__init__.py:961 +#: addon/globalPlugins/brailleExtender/__init__.py:1002 msgid "CTRL" msgstr "CTRL" -#: addon/globalPlugins/brailleExtender/__init__.py:962 +#: addon/globalPlugins/brailleExtender/__init__.py:1003 msgid "SHIFT" msgstr "SHIFT" -#: addon/globalPlugins/brailleExtender/__init__.py:963 +#: addon/globalPlugins/brailleExtender/__init__.py:1004 msgid "ALT" msgstr "ALT" -#: addon/globalPlugins/brailleExtender/__init__.py:1065 +#: addon/globalPlugins/brailleExtender/__init__.py:1106 msgid "Keyboard shortcut cancelled" msgstr "Prečac je odbačen" #. /* docstrings for modifier keys */ -#: addon/globalPlugins/brailleExtender/__init__.py:1073 +#: addon/globalPlugins/brailleExtender/__init__.py:1114 msgid "Emulate pressing down " msgstr "Oponaša pritisak strelice dolje " -#: addon/globalPlugins/brailleExtender/__init__.py:1074 +#: addon/globalPlugins/brailleExtender/__init__.py:1115 msgid " on the system keyboard" msgstr " na tipkovnici sustava" -#: addon/globalPlugins/brailleExtender/__init__.py:1130 +#: addon/globalPlugins/brailleExtender/__init__.py:1171 msgid "Current braille view saved" msgstr "Trenutačni brajični pregled je spremljen" -#: addon/globalPlugins/brailleExtender/__init__.py:1133 +#: addon/globalPlugins/brailleExtender/__init__.py:1174 msgid "Buffer cleaned" msgstr "Spremnik je izbrisan" -#: addon/globalPlugins/brailleExtender/__init__.py:1134 +#: addon/globalPlugins/brailleExtender/__init__.py:1175 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Sprema trenutačni brajični pregled. Pritisnite dva puta brzo, kako biste " "očistili spremnik" -#: addon/globalPlugins/brailleExtender/__init__.py:1139 +#: addon/globalPlugins/brailleExtender/__init__.py:1180 msgid "View saved" msgstr "Pregled je spremljen" -#: addon/globalPlugins/brailleExtender/__init__.py:1140 +#: addon/globalPlugins/brailleExtender/__init__.py:1181 msgid "Buffer empty" msgstr "Spremnik je prazan" -#: addon/globalPlugins/brailleExtender/__init__.py:1141 +#: addon/globalPlugins/brailleExtender/__init__.py:1182 msgid "Show the saved braille view through a flash message" msgstr "Prikazuje spremljeni brajični pregled kao flash poruku." -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Pause" msgstr "Pauza" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Resume" msgstr "Nastavi" -#: addon/globalPlugins/brailleExtender/__init__.py:1217 -#: addon/globalPlugins/brailleExtender/__init__.py:1224 +#: addon/globalPlugins/brailleExtender/__init__.py:1258 +#: addon/globalPlugins/brailleExtender/__init__.py:1265 #, python-format msgid "Auto test type %d" msgstr "Tip automatskog testiranja %d" -#: addon/globalPlugins/brailleExtender/__init__.py:1234 +#: addon/globalPlugins/brailleExtender/__init__.py:1275 msgid "Auto test stopped" msgstr "Automatsko testiranje je zaustavljeno" -#: addon/globalPlugins/brailleExtender/__init__.py:1244 +#: addon/globalPlugins/brailleExtender/__init__.py:1285 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -749,92 +791,376 @@ msgstr "" "testiranja. Koristite razmaknicu za pauziranje ili nstavljanje testa. " "Koristite escape za izlaz" -#: addon/globalPlugins/brailleExtender/__init__.py:1246 +#: addon/globalPlugins/brailleExtender/__init__.py:1287 msgid "Auto test" msgstr "Automatsko testiranje" -#: addon/globalPlugins/brailleExtender/__init__.py:1251 +#: addon/globalPlugins/brailleExtender/__init__.py:1292 msgid "Add dictionary entry or see a dictionary" msgstr "Dodaj zapis u rječnik ili pogledaj rječnik" -#: addon/globalPlugins/brailleExtender/__init__.py:1252 +#: addon/globalPlugins/brailleExtender/__init__.py:1293 msgid "Add a entry in braille dictionary" msgstr "Dodaj zapis u rječnik brajičnih tablica" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon/globalPlugins/brailleExtender/__init__.py:1299 -#: addon/globalPlugins/brailleExtender/dictionaries.py:111 -#: addon/globalPlugins/brailleExtender/dictionaries.py:367 -#: addon/globalPlugins/brailleExtender/dictionaries.py:374 -#: addon/globalPlugins/brailleExtender/dictionaries.py:378 -#: addon/globalPlugins/brailleExtender/dictionaries.py:382 -#: addon/globalPlugins/brailleExtender/settings.py:33 buildVars.py:24 +#: addon/globalPlugins/brailleExtender/__init__.py:1344 +#: addon/globalPlugins/brailleExtender/dictionaries.py:112 +#: addon/globalPlugins/brailleExtender/dictionaries.py:369 +#: addon/globalPlugins/brailleExtender/dictionaries.py:376 +#: addon/globalPlugins/brailleExtender/dictionaries.py:380 +#: addon/globalPlugins/brailleExtender/dictionaries.py:384 +#: addon/globalPlugins/brailleExtender/settings.py:35 +#: addon/globalPlugins/brailleExtender/settings.py:388 buildVars.py:24 msgid "Braille Extender" msgstr "Braille Extender" -#: addon/globalPlugins/brailleExtender/addonDoc.py:33 -#, python-format -msgid "%s braille display" -msgstr "%s brajični redak" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +msgid "HUC8" +msgstr "HUC8" -#: addon/globalPlugins/brailleExtender/addonDoc.py:34 -#, python-format -msgid "profile loaded: %s" -msgstr "Profil je učitan: %s" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:258 +msgid "Hexadecimal" +msgstr "Heksadecimalni" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:65 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:259 +msgid "Decimal" +msgstr "Decimalni" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:66 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:260 +msgid "Octal" +msgstr "Oktalni" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:67 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:261 +msgid "Binary" +msgstr "Binarni" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/addonDoc.py:46 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:239 +msgid "Representation of undefined characters" +msgstr "Opis nedefiniranih znakova" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:48 +msgid "" +"The extension allows you to customize how an undefined character should be " +"represented within a braille table. To do so, go to the braille table " +"settings. You can choose between the following representations:" +msgstr "" +"Dodatak vam omogućuje podešavanje izgleda nedefiniranog znaka unutar " +"brajične tablice. Kako biste to podesili, uđite u postavke. Možete izabrati " +"između sljedećih prikaza:" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:52 +msgid "" +"You can also combine this option with the “describe the character if " +"possible” setting." +msgstr "" +"Ovu opciju možete kombinirati sa postavkom “Opiši znakove ako je to moguće”." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:54 +msgid "Notes:" +msgstr "Upozorenja:" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:56 +msgid "" +"To distinguish the undefined set of characters while maximizing space, the " +"best combination is the usage of the HUC8 representation without checking " +"the “describe character if possible” option." +msgstr "" +"U cilju razlikovanja nedefiniranih znakova i dobivanju na slobodnom " +"prostoru, the najbolje je koristiti prikaz HUC8 bez označavanja potvrdnog " +"okvira “Opiši znak ako je to moguće”." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:57 +#, python-brace-format +msgid "To learn more about the HUC representation, see {url}" +msgstr "Kako biste saznali više o prikazu HUC, Pogledajte {url}" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:58 +msgid "" +"Keep in mind that definitions in tables and those in your table dictionaries " +"take precedence over character descriptions, which also take precedence over " +"the chosen representation for undefined characters." +msgstr "" +"Imajte na umu da definicije u tablicama, te one u rječnicima tablice imaju " +"prednost nad opisima znakova, koje opet imaju prednost nad izabranim " +"prikazom nedefiniranih znakova." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +msgid "Getting Current Character Info" +msgstr "Dobivanje informacije o trenutnom znaku" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +msgid "" +"This feature allows you to obtain various information regarding the " +"character under the cursor using the current input braille table, such as:" +msgstr "" +"Ova vam značajka omogućuje dobivanje raznih informacija o znaku pod kursorom " +"koristeći trenutnu brajičnu tablicu, kao što su to:" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +msgid "" +"the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " +"values; A description of the character if possible; - The Unicode Braille " +"representation and the Braille dot pattern." +msgstr "" +"prikazi HUC8 i HUC6; Heksadecimalnu, decimalnu, oktalnu i binarnu " +"vrijednost; Opis znaka ako je dostupan; - Brajični unicode prikaz i " +"vrijednost u točkicama." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:67 +msgid "" +"Pressing the defined gesture associated to this function once shows you the " +"information in a flash message and a double-press displays the same " +"information in a virtual NVDA buffer." +msgstr "" +"Kada pritisnete ovaj prečac jedamput, prikazat će se brza poruka a dvostruku " +"pritisak pokazuje informaciju u virtualnom spremniku." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:69 +msgid "" +"On supported displays the defined gesture is ⡉+space. No system gestures are " +"defined by default." +msgstr "" +"Na podržanim brajičnim retcima prečac je ⡉+razmaknica. Podrazumjevano nisu " +"definirani prečaci sustava." + +#: addon/globalPlugins/brailleExtender/addonDoc.py:71 +#, python-brace-format +msgid "" +"For example, for the '{chosenChar}' character, we will get the following " +"information:" +msgstr "" +"Na primjer, za izabrani '{chosenChar}' znak, dobit ćemo slijedeće " +"informacije:" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:74 +msgid "Advanced Braille Input" +msgstr "Napredni unos brajičnih znakova" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:76 +msgid "" +"This feature allows you to enter any character from its HUC8 representation " +"or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " +"develop abbreviations. To use this function, enter the advanced input mode " +"and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊" +"+space (on supported displays). Press the same gesture to exit this mode. " +"Alternatively, an option allows you to automatically exit this mode after " +"entering a single pattern. " +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:80 +msgid "Specify the basis as follows" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "⠭ or ⠓" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "for a hexadecimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:83 +msgid "for a decimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:84 +msgid "for an octal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +msgid "" +"Enter the value of the character according to the previously selected basis." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:88 +msgid "Press Space to validate." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:91 +msgid "" +"For abbreviations, you must first add them in the dialog box - Advanced mode " +"dictionaries -. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +msgid "Here are some examples of sequences to be entered for given characters:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +msgid "Note: the HUC6 input is currently not supported." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:100 +msgid "One-hand mode" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:102 +msgid "" +"This feature allows you to compose a cell in several steps. This can be " +"activated in the general settings of the extension's preferences or on the " +"fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " +"Three input methods are available." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:103 +msgid "Method #1: fill a cell in 2 stages on both sides" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:105 +msgid "" +"With this method, type the left side dots, then the right side dots. If one " +"side is empty, type the dots correspondig to the opposite side twice, or " +"type the dots corresponding to the non-empty side in 2 steps." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:106 +#: addon/globalPlugins/brailleExtender/addonDoc.py:115 +msgid "For example:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:108 +msgid "For ⠛: press dots 1-2 then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:109 +msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:110 +msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:112 +msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:114 +msgid "" +"Using this method, you can compose a cell with one hand, regardless of which " +"side of the Braille keyboard you choose. The first step allows you to enter " +"dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " +"An empty cell will be obtained by pressing the space key twice." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:117 +msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +msgid "For ⠘: press space then 1-2, or space then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +msgid "" +"Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " +"validate the character)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:126 +msgid "Dots 1-2, then dots 4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:128 +msgid "Dot 1, then dots 2-4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +msgid "Dots 1-2-4, then dot 5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:130 +msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:131 +msgid "Etc." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:150 +msgid "Documentation" +msgstr "Dokumentacija" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:160 +msgid "Driver loaded" +msgstr "Upravljački program je upitan" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:161 +msgid "Profile" +msgstr "Profil" -#: addon/globalPlugins/brailleExtender/addonDoc.py:51 +#: addon/globalPlugins/brailleExtender/addonDoc.py:175 msgid "Simple keys" msgstr "jednostavne tipke" -#: addon/globalPlugins/brailleExtender/addonDoc.py:53 +#: addon/globalPlugins/brailleExtender/addonDoc.py:177 msgid "Usual shortcuts" msgstr "uobičajeni prečaci" -#: addon/globalPlugins/brailleExtender/addonDoc.py:55 +#: addon/globalPlugins/brailleExtender/addonDoc.py:179 msgid "Standard NVDA commands" msgstr "standardni NVDA prečaci" -#: addon/globalPlugins/brailleExtender/addonDoc.py:57 -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/addonDoc.py:182 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Modifier keys" msgstr "Modifikacijske tipke" -#: addon/globalPlugins/brailleExtender/addonDoc.py:59 +#: addon/globalPlugins/brailleExtender/addonDoc.py:185 msgid "Quick navigation keys" msgstr "Tipke za brzu navigaciju" -#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +#: addon/globalPlugins/brailleExtender/addonDoc.py:189 msgid "Rotor feature" msgstr "značajka rotora" -#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +#: addon/globalPlugins/brailleExtender/addonDoc.py:197 msgid "Gadget commands" msgstr "komande gadgeti" -#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +#: addon/globalPlugins/brailleExtender/addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Prečaci definirani izvan dodatka" -#: addon/globalPlugins/brailleExtender/addonDoc.py:85 +#: addon/globalPlugins/brailleExtender/addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "Omogućene konfiguracije tipkovnice" -#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +#: addon/globalPlugins/brailleExtender/addonDoc.py:241 msgid "Keyboard configurations are" msgstr "tipkovničke konfiguracije su" -#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +#: addon/globalPlugins/brailleExtender/addonDoc.py:250 msgid "Warning:" msgstr "Upozorenje:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:94 +#: addon/globalPlugins/brailleExtender/addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "BrailleExtender još uvijek nema profil tipkovničkih prečaca za vaš brajični " "redak." -#: addon/globalPlugins/brailleExtender/addonDoc.py:95 +#: addon/globalPlugins/brailleExtender/addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -842,168 +1168,338 @@ msgstr "" "Međutim, još uvijek možete odrediti nove prečace u NVDA izborniku>ulazne " "geste." -#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +#: addon/globalPlugins/brailleExtender/addonDoc.py:259 msgid "Add-on gestures on the system keyboard" msgstr "Prečaci dodatka na tipkovnici sustava" -#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +#: addon/globalPlugins/brailleExtender/addonDoc.py:282 msgid "Arabic" msgstr "Arapski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +#: addon/globalPlugins/brailleExtender/addonDoc.py:283 msgid "Croatian" msgstr "Hrvatski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:120 +#: addon/globalPlugins/brailleExtender/addonDoc.py:284 msgid "Danish" msgstr "Danski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +#: addon/globalPlugins/brailleExtender/addonDoc.py:285 +msgid "English and French" +msgstr "Engleski i francuski" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" msgstr "njemački" -#: addon/globalPlugins/brailleExtender/addonDoc.py:122 +#: addon/globalPlugins/brailleExtender/addonDoc.py:287 msgid "Hebrew" msgstr "hebrejski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:123 +#: addon/globalPlugins/brailleExtender/addonDoc.py:288 msgid "Persian" msgstr "Perzijski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:124 +#: addon/globalPlugins/brailleExtender/addonDoc.py:289 msgid "Polish" msgstr "Poljski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:125 +#: addon/globalPlugins/brailleExtender/addonDoc.py:290 msgid "Russian" msgstr "Ruski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +#: addon/globalPlugins/brailleExtender/addonDoc.py:293 msgid "Copyrights and acknowledgements" msgstr "Autorska prava i zahvale" -#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +#: addon/globalPlugins/brailleExtender/addonDoc.py:299 msgid "and other contributors" msgstr "I drugi suradnici" -#: addon/globalPlugins/brailleExtender/addonDoc.py:133 +#: addon/globalPlugins/brailleExtender/addonDoc.py:303 msgid "Translators" msgstr "Prevoditelji" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:313 msgid "Code contributions and other" msgstr "doprinosi u kodu i ostalo" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "Dodan je kod treće strane, zaštićen autorskim pravima:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:142 +#: addon/globalPlugins/brailleExtender/addonDoc.py:321 msgid "Thanks also to" msgstr "također zahvaljujem" -#: addon/globalPlugins/brailleExtender/addonDoc.py:144 +#: addon/globalPlugins/brailleExtender/addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "i hvala vam za sve vaše povratne informacije i e-mail komentare" -#: addon/globalPlugins/brailleExtender/addonDoc.py:146 +#: addon/globalPlugins/brailleExtender/addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "%s's pomoć" -#: addon/globalPlugins/brailleExtender/addonDoc.py:162 +#: addon/globalPlugins/brailleExtender/addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "Oponaša pritisak %s na tipkovnici sustava" -#: addon/globalPlugins/brailleExtender/addonDoc.py:169 +#: addon/globalPlugins/brailleExtender/addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "Opis je trenutno nedostupan za ovaj prečac" -#: addon/globalPlugins/brailleExtender/addonDoc.py:187 +#: addon/globalPlugins/brailleExtender/addonDoc.py:377 msgid "caps lock" msgstr "caps lock" -#: addon/globalPlugins/brailleExtender/configBE.py:40 -#: addon/globalPlugins/brailleExtender/configBE.py:47 +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:105 +msgid "all tables" +msgstr "Sve brajične tablice" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:116 +msgid "Advanced input mode dictionary" +msgstr "Rječnik naprednog načina unosa" + +#. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. +#. Translators: The label for the combo box of dictionary entries in table dictionary dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:123 +#: addon/globalPlugins/brailleExtender/dictionaries.py:132 +msgid "Dictionary &entries" +msgstr "&Zapisi u rječniku" + +#. Translators: The label for a column in dictionary entries list used to identify comments for the entry. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 +msgid "Abbreviation" +msgstr "Kratica" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 +msgid "Replace by" +msgstr "Zamjeni sa" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:133 +msgid "Input table" +msgstr "Ulazna brajična tablica" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. +#. Translators: The label for a button in table dictionaries dialog to add new entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:139 +#: addon/globalPlugins/brailleExtender/dictionaries.py:149 +msgid "&Add" +msgstr "&Dodaj" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. +#. Translators: The label for a button in table dictionaries dialog to edit existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:145 +#: addon/globalPlugins/brailleExtender/dictionaries.py:155 +msgid "&Edit" +msgstr "&Uredi" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. +#. Translators: The label for a button in table dictionaries dialog to remove existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:151 +#: addon/globalPlugins/brailleExtender/dictionaries.py:161 +msgid "Re&move" +msgstr "&Ukloni" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:159 +msgid "&Open the dictionary file in an editor" +msgstr "&Otvori datoteku rječnika u uređivaču teksta" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. +#. Translators: The label for a button in table dictionaries dialog to reload dictionary. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:164 +#: addon/globalPlugins/brailleExtender/dictionaries.py:174 +msgid "&Reload the dictionary" +msgstr "&Ponovno učitaj rječnik" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:177 +#: addon/globalPlugins/brailleExtender/dictionaries.py:218 +msgid "Add Dictionary Entry" +msgstr "Dodaj unos u rječnik" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 +msgid "File doesn't exist yet" +msgstr "Datoteka još ne postoji" + +#. Translators: This is the label for the edit dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 +#: addon/globalPlugins/brailleExtender/dictionaries.py:290 +msgid "Edit Dictionary Entry" +msgstr "Uredi zapis u rječniku" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:247 +msgid "&Abreviation" +msgstr "&Kratica" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:252 +msgid "&Replace by" +msgstr "&Zamijeni sa" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 +msgid "Advanced input mode" +msgstr "Napredni način unosa" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 +msgid "E&xit the advanced input mode after typing one pattern" +msgstr "&isključi napredni način unosa prilikom upisivana jedne kombinacije" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 +msgid "Escape sign for Unicode values" +msgstr "Znak escape za vrijednosti Unicode" + +#: addon/globalPlugins/brailleExtender/configBE.py:54 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:248 +msgid "Use braille table behavior" +msgstr "Koristi ponašanje definirano u brajičnoj tablici" + +#: addon/globalPlugins/brailleExtender/configBE.py:55 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:249 +msgid "Dots 1-8 (⣿)" +msgstr "točkice 1-8 (⣿)" + +#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:250 +msgid "Dots 1-6 (⠿)" +msgstr "točkice 1-6 (⠿)" + +#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:251 +msgid "Empty cell (⠀)" +msgstr "prazna ćelija (⠀)" + +#: addon/globalPlugins/brailleExtender/configBE.py:58 +msgid "Other dot pattern (e.g.: 6-123456)" +msgstr "Druga kombinacija točaka (e.g.: 6-123456)" + +#: addon/globalPlugins/brailleExtender/configBE.py:59 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:253 +msgid "Question mark (depending output table)" +msgstr "Upitnik (ovisi o izlaznoj brajičnoj tablici)" + +#: addon/globalPlugins/brailleExtender/configBE.py:60 +msgid "Other sign/pattern (e.g.: \\, ??)" +msgstr "drugi znak ili kombinacija (npr:: \\, ??)" + #: addon/globalPlugins/brailleExtender/configBE.py:61 -#: addon/globalPlugins/brailleExtender/settings.py:421 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:255 +msgid "Hexadecimal, Liblouis style" +msgstr "Heksadecimalni, Liblouis stil" + +#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:256 +msgid "Hexadecimal, HUC8" +msgstr "heksadecimalni, HUC8" + +#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:257 +msgid "Hexadecimal, HUC6" +msgstr "heksadecimalni, HUC6" + +#: addon/globalPlugins/brailleExtender/configBE.py:70 +#: addon/globalPlugins/brailleExtender/configBE.py:77 +#: addon/globalPlugins/brailleExtender/configBE.py:91 +#: addon/globalPlugins/brailleExtender/settings.py:426 msgid "none" msgstr "ništa" -#: addon/globalPlugins/brailleExtender/configBE.py:41 +#: addon/globalPlugins/brailleExtender/configBE.py:71 msgid "braille only" msgstr "samo brajica" -#: addon/globalPlugins/brailleExtender/configBE.py:42 +#: addon/globalPlugins/brailleExtender/configBE.py:72 msgid "speech only" msgstr "samo govor" -#: addon/globalPlugins/brailleExtender/configBE.py:43 -#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/configBE.py:73 +#: addon/globalPlugins/brailleExtender/configBE.py:94 msgid "both" msgstr "oboje" -#: addon/globalPlugins/brailleExtender/configBE.py:48 +#: addon/globalPlugins/brailleExtender/configBE.py:78 msgid "dots 7 and 8" msgstr "točkice 7 i 8" -#: addon/globalPlugins/brailleExtender/configBE.py:49 +#: addon/globalPlugins/brailleExtender/configBE.py:79 msgid "dot 7" msgstr "točkica 7" -#: addon/globalPlugins/brailleExtender/configBE.py:50 +#: addon/globalPlugins/brailleExtender/configBE.py:80 msgid "dot 8" msgstr "točkica 8" -#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/configBE.py:86 msgid "stable" msgstr "stabilna" -#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/configBE.py:87 msgid "development" msgstr "razvojni prsten" -#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/configBE.py:92 msgid "focus mode" msgstr "Način fokusa" -#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/configBE.py:93 msgid "review mode" msgstr "Način pregleda" -#: addon/globalPlugins/brailleExtender/configBE.py:92 +#: addon/globalPlugins/brailleExtender/configBE.py:102 +msgid "Fill a cell in two stages on both sides" +msgstr "Popunjavaj brajičnu ćeliju u dva koraka obostrano" + +#: addon/globalPlugins/brailleExtender/configBE.py:103 +msgid "Fill a cell in two stages on one side (space = empty side)" +msgstr "" +"Popuni brajičnu ćeliju u dva koraka jednostrano (razmaknica je prazni dio " +"ćelije)" + +#: addon/globalPlugins/brailleExtender/configBE.py:104 +msgid "" +"Fill a cell dots by dots (each dot is a toggle, press space to validate the " +"character)" +msgstr "" +"Ispunjavaj brajičnu ćeliju točku po točku (svaka točka je preklopnik, " +"pritisnite razmaknicu za provjeru znaka)" + +#: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" msgstr "zadni poznati" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:29 +#: addon/globalPlugins/brailleExtender/dictionaries.py:30 msgid "Sign" msgstr "znak" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:31 +#: addon/globalPlugins/brailleExtender/dictionaries.py:32 msgid "Math" msgstr "matematički znak ili operand" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:33 +#: addon/globalPlugins/brailleExtender/dictionaries.py:34 msgid "Replace" msgstr "zamjena" -#: addon/globalPlugins/brailleExtender/dictionaries.py:41 +#: addon/globalPlugins/brailleExtender/dictionaries.py:42 msgid "Both (input and output)" msgstr "Ulaz i izlaz" -#: addon/globalPlugins/brailleExtender/dictionaries.py:42 +#: addon/globalPlugins/brailleExtender/dictionaries.py:43 msgid "Backward (input only)" msgstr "Samo ulaz (upis sa tipkovnice)" -#: addon/globalPlugins/brailleExtender/dictionaries.py:43 +#: addon/globalPlugins/brailleExtender/dictionaries.py:44 msgid "Forward (output only)" msgstr "samo izlaz (na brajični redak)" -#: addon/globalPlugins/brailleExtender/dictionaries.py:110 +#: addon/globalPlugins/brailleExtender/dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1012,121 +1508,87 @@ msgstr "" "Jedna ili više greški prisutne su u tablicama rječnika. Rječnici s " "problemima: %s. Kao posljedica, ovi rječnici nisu učitani." -#. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:131 -msgid "Dictionary &entries" -msgstr "&Zapisi u rječniku" - #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon/globalPlugins/brailleExtender/dictionaries.py:134 +#: addon/globalPlugins/brailleExtender/dictionaries.py:135 msgid "Comment" msgstr "Komentar" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon/globalPlugins/brailleExtender/dictionaries.py:136 +#: addon/globalPlugins/brailleExtender/dictionaries.py:137 msgid "Pattern" msgstr "Uzorak" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon/globalPlugins/brailleExtender/dictionaries.py:138 +#: addon/globalPlugins/brailleExtender/dictionaries.py:139 msgid "Representation" msgstr "Prikaz" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:140 +#: addon/globalPlugins/brailleExtender/dictionaries.py:141 msgid "Opcode" msgstr "Kod operanda" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:142 +#: addon/globalPlugins/brailleExtender/dictionaries.py:143 msgid "Direction" msgstr "smjer" -#. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:148 -msgid "&Add" -msgstr "&Dodaj" - -#. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:154 -msgid "&Edit" -msgstr "&Uredi" - -#. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:160 -msgid "Re&move" -msgstr "&Ukloni" - -#. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon/globalPlugins/brailleExtender/dictionaries.py:168 +#. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Otvori trenutnu datoteku rječnika u uređivaču teksta" -#. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon/globalPlugins/brailleExtender/dictionaries.py:173 -msgid "&Reload the dictionary" -msgstr "&Ponovno učitaj rječnik" - -#: addon/globalPlugins/brailleExtender/dictionaries.py:216 -msgid "Add Dictionary Entry" -msgstr "Dodaj unos u rječnik" - -#. Translators: This is the label for the edit dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:288 -msgid "Edit Dictionary Entry" -msgstr "Uredi zapis u rječniku" - #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:294 +#: addon/globalPlugins/brailleExtender/dictionaries.py:296 msgid "Dictionary" msgstr "Rječnik" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Global" msgstr "Globalan" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Table" msgstr "tablica" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Temporary" msgstr "Privremeni" -#: addon/globalPlugins/brailleExtender/dictionaries.py:302 +#: addon/globalPlugins/brailleExtender/dictionaries.py:304 msgid "See &entries" msgstr "Vidi Zap&ise" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:307 +#: addon/globalPlugins/brailleExtender/dictionaries.py:309 msgid "&Text pattern/sign" msgstr "&Uzorak teksta / znak" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:312 +#: addon/globalPlugins/brailleExtender/dictionaries.py:314 msgid "&Braille representation" msgstr "&Brajični prikaz" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:316 +#: addon/globalPlugins/brailleExtender/dictionaries.py:318 msgid "&Comment" msgstr "&Komentar" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:320 +#: addon/globalPlugins/brailleExtender/dictionaries.py:322 msgid "&Opcode" msgstr "&Operand" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:325 +#: addon/globalPlugins/brailleExtender/dictionaries.py:327 msgid "&Direction" msgstr "&Smjer" -#: addon/globalPlugins/brailleExtender/dictionaries.py:366 +#: addon/globalPlugins/brailleExtender/dictionaries.py:368 msgid "Text pattern/sign field is empty." msgstr "Polje uzorak teksta /znak je prazno." -#: addon/globalPlugins/brailleExtender/dictionaries.py:373 +#: addon/globalPlugins/brailleExtender/dictionaries.py:375 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1135,7 +1597,7 @@ msgstr "" "Neispravna vrijednost za polje 'uzorak teksta/znak'. S ovim operandom treba " "odrediti znak. NPR: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:377 +#: addon/globalPlugins/brailleExtender/dictionaries.py:379 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1144,7 +1606,7 @@ msgstr "" "polje 'brajični prikaz' je prazno, morate odrediti nešto s ovim operandom. " "NPR: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:381 +#: addon/globalPlugins/brailleExtender/dictionaries.py:383 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1153,192 +1615,209 @@ msgstr "" "Neispravna vrijednost za polje 'brajični prikaz'. Morate upisati uzorak " "točkica za ovaj operand. Na primjer: %s" -#: addon/globalPlugins/brailleExtender/settings.py:32 +#. Translators: Reported when translation didn't succeed due to unsupported input. +#: addon/globalPlugins/brailleExtender/patchs.py:376 +msgid "Unsupported input" +msgstr "Unos nije podržan" + +#: addon/globalPlugins/brailleExtender/patchs.py:435 +msgid "Unsupported input method" +msgstr "Način unosa nije podržan" + +#: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "Implementacija funkcije je u tijeku. Hvala na razumijevanju.." #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:38 -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:40 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "General" msgstr "Općenito" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:45 +#: addon/globalPlugins/brailleExtender/settings.py:47 msgid "Check for &updates automatically" msgstr "Provjeri automatski, postoji li nadogradnja" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:49 +#: addon/globalPlugins/brailleExtender/settings.py:51 msgid "Add-on update channel" msgstr "Kanal nadogradnji dodatka" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:56 +#: addon/globalPlugins/brailleExtender/settings.py:58 msgid "Say current line while scrolling in" msgstr "Izgovori trenutni redak pri prebacivanju između fragmenata teksta" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:60 +#: addon/globalPlugins/brailleExtender/settings.py:62 msgid "Speech interrupt when scrolling on same line" msgstr "" "Prekid govora pri premještanju između fragmenata teksta u jednom fizičkom " "redku" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:64 +#: addon/globalPlugins/brailleExtender/settings.py:66 msgid "Speech interrupt for unknown gestures" msgstr "Prekid govora za nepoznate geste" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:68 +#: addon/globalPlugins/brailleExtender/settings.py:70 msgid "Announce the character while moving with routing buttons" msgstr "Izvještavaj o znakovima pri pritisku routing tipaka" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:72 +#: addon/globalPlugins/brailleExtender/settings.py:74 msgid "Use cursor keys to route cursor in review mode" msgstr "" "Koristite kursorske tipke kako biste prebacili kursor na znak u načinu " "pregleda" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:76 +#: addon/globalPlugins/brailleExtender/settings.py:78 msgid "Display time and date infinitely" msgstr "Beskonačno prikazuj vrijeme i datum" -#: addon/globalPlugins/brailleExtender/settings.py:78 +#: addon/globalPlugins/brailleExtender/settings.py:80 msgid "Automatic review mode for apps with terminal" msgstr "Automatski način pregleda za konzolne aplikacije" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:82 +#: addon/globalPlugins/brailleExtender/settings.py:84 msgid "Feedback for volume change in" msgstr "povratna informacija za promjenu glasnoće uz pomoć" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:90 +#: addon/globalPlugins/brailleExtender/settings.py:92 msgid "Feedback for modifier keys in" msgstr "Povratna informacija za modifikatorske tipke uz pomoć" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:96 +#: addon/globalPlugins/brailleExtender/settings.py:98 msgid "Play beeps for modifier keys" msgstr "Reproduciraj zvučne signale pri pritisku modifikacijskih tipki" -#: addon/globalPlugins/brailleExtender/settings.py:101 +#: addon/globalPlugins/brailleExtender/settings.py:103 msgid "Right margin on cells" msgstr "desna margina na ćelijama" -#: addon/globalPlugins/brailleExtender/settings.py:101 -#: addon/globalPlugins/brailleExtender/settings.py:113 -#: addon/globalPlugins/brailleExtender/settings.py:356 +#: addon/globalPlugins/brailleExtender/settings.py:103 +#: addon/globalPlugins/brailleExtender/settings.py:115 +#: addon/globalPlugins/brailleExtender/settings.py:366 msgid "for the currrent braille display" msgstr "za trenutni brajični redak" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:105 +#: addon/globalPlugins/brailleExtender/settings.py:107 msgid "Braille keyboard configuration" msgstr "Konfiguracija brajične tipkovnice" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:109 +#: addon/globalPlugins/brailleExtender/settings.py:111 msgid "Reverse forward scroll and back scroll buttons" msgstr "zamjeni mjesta tipkama za čitanje napred /nazad" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:113 +#: addon/globalPlugins/brailleExtender/settings.py:115 msgid "Autoscroll delay (ms)" msgstr "Automatsko čitanje u milisekundama" -#: addon/globalPlugins/brailleExtender/settings.py:114 +#: addon/globalPlugins/brailleExtender/settings.py:116 msgid "First braille display preferred" msgstr "prvi preferirani brajični redak" -#: addon/globalPlugins/brailleExtender/settings.py:116 +#: addon/globalPlugins/brailleExtender/settings.py:118 msgid "Second braille display preferred" msgstr "Drugi preferirani brajični redak" +#: addon/globalPlugins/brailleExtender/settings.py:120 +msgid "One-handed mode" +msgstr "Način jedne ruke" + +#: addon/globalPlugins/brailleExtender/settings.py:124 +msgid "One hand mode method" +msgstr "Metoda unosa načinom jedne ruke" + #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:149 +#: addon/globalPlugins/brailleExtender/settings.py:159 msgid "Text attributes" msgstr "atributi teksta" -#: addon/globalPlugins/brailleExtender/settings.py:153 -#: addon/globalPlugins/brailleExtender/settings.py:200 +#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:210 msgid "Enable this feature" msgstr "Uključi ovu značajku" -#: addon/globalPlugins/brailleExtender/settings.py:155 +#: addon/globalPlugins/brailleExtender/settings.py:165 msgid "Show spelling errors with" msgstr "Pokazuj pravopisne pogreške uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:157 +#: addon/globalPlugins/brailleExtender/settings.py:167 msgid "Show bold with" msgstr "Pokazuj podebljana slova uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:159 +#: addon/globalPlugins/brailleExtender/settings.py:169 msgid "Show italic with" msgstr "Pokazuj kosa slova uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:161 +#: addon/globalPlugins/brailleExtender/settings.py:171 msgid "Show underline with" msgstr "Pokazuj podcrtavanje uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:173 msgid "Show strikethrough with" msgstr "Pokazuj podcrtavanje uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:165 +#: addon/globalPlugins/brailleExtender/settings.py:175 msgid "Show subscript with" msgstr "Pokazuj spuštena slova uz pomoć točkica" -#: addon/globalPlugins/brailleExtender/settings.py:167 +#: addon/globalPlugins/brailleExtender/settings.py:177 msgid "Show superscript with" msgstr "Pokazuj indeks uz pomoć" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:193 +#: addon/globalPlugins/brailleExtender/settings.py:203 msgid "Role labels" msgstr "Oznake kontrola" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Role category" msgstr "kategorija oznaki" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Landmark" msgstr "Orjentir" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Positive state" msgstr "Pozitivna vrijednost" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Negative state" msgstr "Negativna vrijednost" -#: addon/globalPlugins/brailleExtender/settings.py:206 +#: addon/globalPlugins/brailleExtender/settings.py:216 msgid "Role" msgstr "tip" -#: addon/globalPlugins/brailleExtender/settings.py:208 +#: addon/globalPlugins/brailleExtender/settings.py:218 msgid "Actual or new label" msgstr "trenutna ili nova oznaka" -#: addon/globalPlugins/brailleExtender/settings.py:212 +#: addon/globalPlugins/brailleExtender/settings.py:222 msgid "&Reset this role label" msgstr "&Resetiraj ovu oznaku kontrole" -#: addon/globalPlugins/brailleExtender/settings.py:214 +#: addon/globalPlugins/brailleExtender/settings.py:224 msgid "Reset all role labels" msgstr "resetiraj sve oznake kontrola" -#: addon/globalPlugins/brailleExtender/settings.py:279 +#: addon/globalPlugins/brailleExtender/settings.py:289 msgid "You have no customized label." msgstr "Nemaš prilagođenih oznaka." -#: addon/globalPlugins/brailleExtender/settings.py:282 +#: addon/globalPlugins/brailleExtender/settings.py:292 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1346,101 +1825,94 @@ msgid "" msgstr "" "Želiš li zaista resetirati sve oznake? Trenutno imaš %d prilagođenih oznaka." -#: addon/globalPlugins/brailleExtender/settings.py:283 -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:293 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Confirmation" msgstr "Potvrda" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:325 +#: addon/globalPlugins/brailleExtender/settings.py:335 msgid "Braille tables" msgstr "brajične tablice" -#: addon/globalPlugins/brailleExtender/settings.py:330 +#: addon/globalPlugins/brailleExtender/settings.py:340 msgid "Use the current input table" msgstr "Koristi trenutnu ulaznu tablicu" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "Prefered braille tables" msgstr "Preferirane brajične tablice" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "press F1 for help" msgstr "pritisnite F1 za pomoć" -#: addon/globalPlugins/brailleExtender/settings.py:343 +#: addon/globalPlugins/brailleExtender/settings.py:353 msgid "Input braille table for keyboard shortcut keys" msgstr "Ulazna brajična tablica za tipkovničke prečace na tipkovnici" -#: addon/globalPlugins/brailleExtender/settings.py:345 +#: addon/globalPlugins/brailleExtender/settings.py:355 msgid "None" msgstr "Ništa" -#: addon/globalPlugins/brailleExtender/settings.py:348 +#: addon/globalPlugins/brailleExtender/settings.py:358 msgid "Secondary output table to use" msgstr "Sekundarna brajična tablica koja će se koristiti" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:352 -msgid "Display tab signs as spaces" -msgstr "prilayuj ynakove tabulacije kao raymake" +#: addon/globalPlugins/brailleExtender/settings.py:362 +msgid "Display &tab signs as spaces" +msgstr "Prikazuj &tabulatore kao razmake" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:356 -msgid "Number of space for a tab sign" -msgstr "Broj raymaka ya jedan ynak tab" +#: addon/globalPlugins/brailleExtender/settings.py:366 +msgid "Number of &space for a tab sign" +msgstr "Broj &razmaka za jedan znak tabulatora" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:358 -msgid "Prevent undefined characters with Hexadecimal Unicode value" -msgstr "" -"Onemogućavanje prikazivanja heksadecimalnih vrijednosti pri nedefiniranim " -"znakovima" +#: addon/globalPlugins/brailleExtender/settings.py:367 +msgid "Alternative and &custom braille tables" +msgstr "Alternativne i &prilagođene brajične tablice" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:361 +#: addon/globalPlugins/brailleExtender/settings.py:387 msgid "" -"Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +"NVDA must be restarted for some new options to take effect. Do you want " +"restart now?" msgstr "" -"Prikaži nedefinirane znakove kao NPR: 0 kao prazna ćelija, 12345678, " -"6-123456)" - -#: addon/globalPlugins/brailleExtender/settings.py:363 -msgid "Alternative and &custom braille tables" -msgstr "Alternativne i &prilagođene brajične tablice" +"NVDA mora ponovno biti pokrenut kako bi neke nove opcije stupile na snagu. " +"Želite li sada ponovno pokrenuti?" -#: addon/globalPlugins/brailleExtender/settings.py:420 +#: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" msgstr "ulaz i izlaz" -#: addon/globalPlugins/brailleExtender/settings.py:422 +#: addon/globalPlugins/brailleExtender/settings.py:427 msgid "input only" msgstr "Samo ulaz" -#: addon/globalPlugins/brailleExtender/settings.py:423 +#: addon/globalPlugins/brailleExtender/settings.py:428 msgid "output only" msgstr "samo izlaz" -#: addon/globalPlugins/brailleExtender/settings.py:454 +#: addon/globalPlugins/brailleExtender/settings.py:459 #, python-format msgid "Table name: %s" msgstr "Naziv tablice: %s" -#: addon/globalPlugins/brailleExtender/settings.py:455 +#: addon/globalPlugins/brailleExtender/settings.py:460 #, python-format msgid "File name: %s" msgstr "naziv datoteke: %s" -#: addon/globalPlugins/brailleExtender/settings.py:456 +#: addon/globalPlugins/brailleExtender/settings.py:461 #, python-format msgid "In switches: %s" msgstr "u rotorima: %s" -#: addon/globalPlugins/brailleExtender/settings.py:457 +#: addon/globalPlugins/brailleExtender/settings.py:462 msgid "About this table" msgstr "O tablici" -#: addon/globalPlugins/brailleExtender/settings.py:460 +#: addon/globalPlugins/brailleExtender/settings.py:465 msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" @@ -1449,7 +1921,7 @@ msgstr "" "lijevu ili desnu strelicu kako biste dodali ili uklonili brajične tablice iz " "rotora" -#: addon/globalPlugins/brailleExtender/settings.py:461 +#: addon/globalPlugins/brailleExtender/settings.py:466 msgid "" "You can also press 'comma' key to get the file name of the selected table " "and 'semicolon' key to view miscellaneous infos on the selected table" @@ -1458,125 +1930,125 @@ msgstr "" "datoteke brajične tablice i 'točka zarez' kako biste dobili više dodatnih " "informacija o brajičnoj tablici" -#: addon/globalPlugins/brailleExtender/settings.py:462 +#: addon/globalPlugins/brailleExtender/settings.py:467 msgid "Contextual help" msgstr "kontekstna pomoć" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:478 +#: addon/globalPlugins/brailleExtender/settings.py:483 msgid "Custom braille tables" msgstr "Prilagođene brajične tablice" -#: addon/globalPlugins/brailleExtender/settings.py:488 +#: addon/globalPlugins/brailleExtender/settings.py:493 msgid "Use a custom table as input table" msgstr "Koristi prilagođenu brajičnu tablicu kao ulaznu" -#: addon/globalPlugins/brailleExtender/settings.py:489 +#: addon/globalPlugins/brailleExtender/settings.py:494 msgid "Use a custom table as output table" msgstr "Koristi prilagođenu brajičnu tablicu kao izlaznu tablicu" -#: addon/globalPlugins/brailleExtender/settings.py:490 +#: addon/globalPlugins/brailleExtender/settings.py:495 msgid "&Add a braille table" msgstr "&Dodaj brajičnu tablicu" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:514 +#: addon/globalPlugins/brailleExtender/settings.py:519 msgid "Add a braille table" msgstr "Dodaj brajičnu tablicu" -#: addon/globalPlugins/brailleExtender/settings.py:520 +#: addon/globalPlugins/brailleExtender/settings.py:525 msgid "Display name" msgstr "Prikazno ime" -#: addon/globalPlugins/brailleExtender/settings.py:521 +#: addon/globalPlugins/brailleExtender/settings.py:526 msgid "Description" msgstr "Opis" -#: addon/globalPlugins/brailleExtender/settings.py:522 +#: addon/globalPlugins/brailleExtender/settings.py:527 msgid "Path" msgstr "Odredište" -#: addon/globalPlugins/brailleExtender/settings.py:523 -#: addon/globalPlugins/brailleExtender/settings.py:594 +#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:599 msgid "&Browse" msgstr "&Pregledaj" -#: addon/globalPlugins/brailleExtender/settings.py:526 +#: addon/globalPlugins/brailleExtender/settings.py:531 msgid "Contracted (grade 2) braille table" msgstr "Kratkopisna brajična tablica" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Available for" msgstr "Dostupno za" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input and output" msgstr "Ulaz i izlaz" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input only" msgstr "Samo ulaz" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Output only" msgstr "Samo zilaz" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Choose a table file" msgstr "Odaberite datoteku tablice" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Liblouis table files" msgstr "datoteke liblouis tablica" -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Please specify a display name." msgstr "Molimo odredite ime prikaza." -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Invalid display name" msgstr "Nepravilno ime prikaza" -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 #, python-format msgid "The specified path is not valid (%s)." msgstr "Odredište koje ste odredili je nepravilno (%s)." -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 msgid "Invalid path" msgstr "Nepravilno odredište" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:578 +#: addon/globalPlugins/brailleExtender/settings.py:583 msgid "Quick launches" msgstr "Brza pokretanja" -#: addon/globalPlugins/brailleExtender/settings.py:589 +#: addon/globalPlugins/brailleExtender/settings.py:594 msgid "&Gestures" msgstr "&geste" -#: addon/globalPlugins/brailleExtender/settings.py:592 +#: addon/globalPlugins/brailleExtender/settings.py:597 msgid "Location (file path, URL or command)" msgstr "Lokacija (Put do datoteke, URL ili komanda)" -#: addon/globalPlugins/brailleExtender/settings.py:595 +#: addon/globalPlugins/brailleExtender/settings.py:600 msgid "&Remove this gesture" msgstr "&Izbriši ovu gestu" -#: addon/globalPlugins/brailleExtender/settings.py:596 +#: addon/globalPlugins/brailleExtender/settings.py:601 msgid "&Add a quick launch" msgstr "&Dodaj brzo pokretanje" -#: addon/globalPlugins/brailleExtender/settings.py:625 +#: addon/globalPlugins/brailleExtender/settings.py:630 msgid "Unable to associate this gesture. Please enter another, now" msgstr "Ne mogu pridjeliti tu gestu. Upišite drugu, sada" -#: addon/globalPlugins/brailleExtender/settings.py:630 +#: addon/globalPlugins/brailleExtender/settings.py:635 msgid "Out of capture" msgstr "Izvan dosega" -#: addon/globalPlugins/brailleExtender/settings.py:632 +#: addon/globalPlugins/brailleExtender/settings.py:637 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -1585,21 +2057,21 @@ msgstr "" "Unesite gestu s brajičnog retka {NAME_BRAILLE_DISPLAY}. Kabo biste odustali, " "pritisnite razmaknicu." -#: addon/globalPlugins/brailleExtender/settings.py:640 +#: addon/globalPlugins/brailleExtender/settings.py:645 #, python-format msgid "OK. The gesture captured is %s" msgstr "U redu. Primljena gesta je %s" -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Are you sure to want to delete this shorcut?" msgstr "Jeste li sugurni da želite ukloniti ovaj prečac?" -#: addon/globalPlugins/brailleExtender/settings.py:666 +#: addon/globalPlugins/brailleExtender/settings.py:671 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} uklonjeno" -#: addon/globalPlugins/brailleExtender/settings.py:677 +#: addon/globalPlugins/brailleExtender/settings.py:682 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -1607,106 +2079,153 @@ msgstr "" "Molimo pritisnite željenu kombinaciju tipaka za brzo pokretanje. Pritisnite " "\"razmaknicu\" kako biste odustali" -#: addon/globalPlugins/brailleExtender/settings.py:680 +#: addon/globalPlugins/brailleExtender/settings.py:685 msgid "Don't add a quick launch" msgstr "Ne dodavaj brzo pokretanje" -#: addon/globalPlugins/brailleExtender/settings.py:706 +#: addon/globalPlugins/brailleExtender/settings.py:711 #, python-brace-format msgid "Choose a file for {0}" msgstr "Odaberite datoteku za {0}" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Please create or select a quick launch first" msgstr "Najprije označite ili stvorite brzo pokretanje." -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Error" msgstr "greška" -#: addon/globalPlugins/brailleExtender/settings.py:723 +#: addon/globalPlugins/brailleExtender/settings.py:728 msgid "Profiles editor" msgstr "Uređivač profila" -#: addon/globalPlugins/brailleExtender/settings.py:734 +#: addon/globalPlugins/brailleExtender/settings.py:739 msgid "You must have a braille display to editing a profile" msgstr "Trebate posjedovati brajični redak, kako bise mogli uređivati profile" -#: addon/globalPlugins/brailleExtender/settings.py:738 +#: addon/globalPlugins/brailleExtender/settings.py:743 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "Mapa profiles je nedostupna ili ne postoji. Nemoguće uređivati profile." -#: addon/globalPlugins/brailleExtender/settings.py:744 +#: addon/globalPlugins/brailleExtender/settings.py:749 msgid "Profile to edit" msgstr "Profil za uređivanje" -#: addon/globalPlugins/brailleExtender/settings.py:750 +#: addon/globalPlugins/brailleExtender/settings.py:755 msgid "Gestures category" msgstr "Kategorija gesti" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Single keys" msgstr "Pojedinačne tipke" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Practical shortcuts" msgstr "Praktični prečaci" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "NVDA commands" msgstr "NVDA komande" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Addon features" msgstr "Funkcije dodatka" -#: addon/globalPlugins/brailleExtender/settings.py:755 +#: addon/globalPlugins/brailleExtender/settings.py:760 msgid "Gestures list" msgstr "Popis gesti" -#: addon/globalPlugins/brailleExtender/settings.py:764 +#: addon/globalPlugins/brailleExtender/settings.py:769 msgid "Add gesture" msgstr "Dodaj gestu" -#: addon/globalPlugins/brailleExtender/settings.py:766 +#: addon/globalPlugins/brailleExtender/settings.py:771 msgid "Remove this gesture" msgstr "Ukloni ovaj prečac" -#: addon/globalPlugins/brailleExtender/settings.py:769 +#: addon/globalPlugins/brailleExtender/settings.py:774 msgid "Assign a braille gesture" msgstr "Dodijeli gestu" -#: addon/globalPlugins/brailleExtender/settings.py:776 +#: addon/globalPlugins/brailleExtender/settings.py:781 msgid "Remove this profile" msgstr "Izbriši ovaj profil" -#: addon/globalPlugins/brailleExtender/settings.py:779 +#: addon/globalPlugins/brailleExtender/settings.py:784 msgid "Add a profile" msgstr "Dodaj prvilo" -#: addon/globalPlugins/brailleExtender/settings.py:785 +#: addon/globalPlugins/brailleExtender/settings.py:790 msgid "Name for the new profile" msgstr "Naziv novog profila" -#: addon/globalPlugins/brailleExtender/settings.py:791 +#: addon/globalPlugins/brailleExtender/settings.py:796 msgid "Create" msgstr "Stvori" -#: addon/globalPlugins/brailleExtender/settings.py:854 +#: addon/globalPlugins/brailleExtender/settings.py:859 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "Ne mogu učitati ovaj profil. Izobličena ili nedostupna datoteka" -#: addon/globalPlugins/brailleExtender/settings.py:873 +#: addon/globalPlugins/brailleExtender/settings.py:878 msgid "Undefined" msgstr "Nedefinirano" #. Translators: title of add-on parameters dialog. -#: addon/globalPlugins/brailleExtender/settings.py:902 +#: addon/globalPlugins/brailleExtender/settings.py:909 msgid "Settings" msgstr "Postavke" +#. Translators: label of a dialog. +#: addon/globalPlugins/brailleExtender/undefinedChars.py:244 +msgid "Representation &method" +msgstr "Način prikaza" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:252 +#, python-brace-format +msgid "Other dot pattern (e.g.: {dotPatternSample})" +msgstr "Druga brajična kombinacija (e.g.: {dotPatternSample})" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:254 +#, python-brace-format +msgid "Other sign/pattern (e.g.: {signPatternSample})" +msgstr "Drugi znak (Npr: {signPatternSample})" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:272 +msgid "Specify another pattern" +msgstr "Odredi drugu kombinaciju" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:276 +msgid "Describe undefined characters if possible" +msgstr "Opisuj nedefinirane znakove ako je to moguće" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:284 +msgid "Also describe extended characters (e.g.: country flags)" +msgstr "Također opisuj druge znakove (npr: zastave država)" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:291 +msgid "Start tag" +msgstr "Početni tag" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:296 +msgid "End tag" +msgstr "Završni tag" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:307 +msgid "Language" +msgstr "Jezik" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:310 +msgid "Use the current output table" +msgstr "Koristi trenutnu izlaznu brajičnu tablicu" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:323 +msgid "Braille table" +msgstr "Brajična tablica" + #: addon/globalPlugins/brailleExtender/updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" @@ -1737,69 +2256,69 @@ msgstr "Dijaloški okvir za provjeru nadogradnje već je pokrenut!" msgid "{addonName}'s update" msgstr "Nadogradnja {addonName}-a" -#: addon/globalPlugins/brailleExtender/utils.py:189 +#: addon/globalPlugins/brailleExtender/utils.py:194 msgid "Reload successful" msgstr "Ponovno učitavanje uspješno" -#: addon/globalPlugins/brailleExtender/utils.py:192 +#: addon/globalPlugins/brailleExtender/utils.py:197 msgid "Reload failed" msgstr "ponovno učitavanje neuspješno" -#: addon/globalPlugins/brailleExtender/utils.py:197 -#: addon/globalPlugins/brailleExtender/utils.py:207 +#: addon/globalPlugins/brailleExtender/utils.py:203 +#: addon/globalPlugins/brailleExtender/utils.py:218 msgid "Not a character" msgstr "Nije znak" -#: addon/globalPlugins/brailleExtender/utils.py:201 -msgid "unknown" -msgstr "Nepoznato" +#: addon/globalPlugins/brailleExtender/utils.py:208 +msgid "N/A" +msgstr "Nije dostupno" -#: addon/globalPlugins/brailleExtender/utils.py:330 +#: addon/globalPlugins/brailleExtender/utils.py:312 msgid "Available combinations" msgstr "Dostupne kombinacije" -#: addon/globalPlugins/brailleExtender/utils.py:332 +#: addon/globalPlugins/brailleExtender/utils.py:314 msgid "One combination available" msgstr "Jedna kombinacija dostupna" -#: addon/globalPlugins/brailleExtender/utils.py:349 +#: addon/globalPlugins/brailleExtender/utils.py:325 msgid "space" msgstr "razmak" -#: addon/globalPlugins/brailleExtender/utils.py:350 +#: addon/globalPlugins/brailleExtender/utils.py:326 msgid "left SHIFT" msgstr "Lijevi SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:351 +#: addon/globalPlugins/brailleExtender/utils.py:327 msgid "right SHIFT" msgstr "desni SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:352 +#: addon/globalPlugins/brailleExtender/utils.py:328 msgid "left selector" msgstr "Lijevi odabirnik" -#: addon/globalPlugins/brailleExtender/utils.py:353 +#: addon/globalPlugins/brailleExtender/utils.py:329 msgid "right selector" msgstr "Desni odabirnik" -#: addon/globalPlugins/brailleExtender/utils.py:354 +#: addon/globalPlugins/brailleExtender/utils.py:330 msgid "dot" msgstr "točkica" -#: addon/globalPlugins/brailleExtender/utils.py:369 +#: addon/globalPlugins/brailleExtender/utils.py:345 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} na {brailleDisplay}" -#: addon/globalPlugins/brailleExtender/utils.py:446 +#: addon/globalPlugins/brailleExtender/utils.py:422 msgid "No text" msgstr "Nema teksta" -#: addon/globalPlugins/brailleExtender/utils.py:455 +#: addon/globalPlugins/brailleExtender/utils.py:431 msgid "Not text" msgstr "Nije tekst" -#: addon/globalPlugins/brailleExtender/utils.py:475 +#: addon/globalPlugins/brailleExtender/utils.py:451 msgid "No text selected" msgstr "Nema označenog teksta" @@ -1913,6 +2432,29 @@ msgstr "" msgid "actions and quick navigation through a rotor" msgstr "Brzo kretanje i navigacija putem rotora" +#~ msgid "Braille &dictionaries" +#~ msgstr "Brajični &Rječnici" + +#~ msgid "%s braille display" +#~ msgstr "%s brajični redak" + +#~ msgid "profile loaded: %s" +#~ msgstr "Profil je učitan: %s" + +#~ msgid "Prevent undefined characters with Hexadecimal Unicode value" +#~ msgstr "" +#~ "Onemogućavanje prikazivanja heksadecimalnih vrijednosti pri nedefiniranim " +#~ "znakovima" + +#~ msgid "" +#~ "Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +#~ msgstr "" +#~ "Prikaži nedefinirane znakove kao NPR: 0 kao prazna ćelija, 12345678, " +#~ "6-123456)" + +#~ msgid "unknown" +#~ msgstr "Nepoznato" + #~ msgid "" #~ "In virtual documents (HTML/PDF/…) you can navigate element type by " #~ "element type using keyboard. These navigation keys should work with your " @@ -1946,9 +2488,6 @@ msgstr "Brzo kretanje i navigacija putem rotora" #~ msgid "Braille tables configuration" #~ msgstr "Konfiguracija brajičnih tablica" -#~ msgid "Text attributes configuration" -#~ msgstr "Konfiguracija prikazivanja brajičnog formatiranja teksta" - #~ msgid "Role &labels" #~ msgstr "&Oznake kontrola" @@ -1995,9 +2534,6 @@ msgstr "Brzo kretanje i navigacija putem rotora" #~ msgid "Enable Attribra" #~ msgstr "Omogući Attribru" -#~ msgid "braille tables" -#~ msgstr "Brajične tablice" - #~ msgid "Unable to save or download update file. Opening your browser" #~ msgstr "" #~ "Nije moguče otvoriti ili spremiti datoteku. Otvaram vaš internetski " @@ -2246,9 +2782,6 @@ msgstr "Brzo kretanje i navigacija putem rotora" #~ msgid "Category" #~ msgstr "Kategorija" -#~ msgid "Profile" -#~ msgstr "Profil" - #~ msgid "Bold" #~ msgstr "podebljanje" @@ -2297,9 +2830,6 @@ msgstr "Brzo kretanje i navigacija putem rotora" #~ msgid "Feature Not Implemented Yet" #~ msgstr "Značajka još uvijek nije implementirana" -#~ msgid "Advanced rules" -#~ msgstr "Napredna pravila" - #~ msgid "&Edit this rule" #~ msgstr "&Uredi ovo pravilo" From 529c97412121511a66cfe31336dde0c0dcfa0fbf Mon Sep 17 00:00:00 2001 From: zstanecic Date: Wed, 15 Apr 2020 16:39:40 +0200 Subject: [PATCH 62/87] croatian ranslation is completed. --- addon/locale/hr/LC_MESSAGES/nvda.po | 74 +++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 19 deletions(-) diff --git a/addon/locale/hr/LC_MESSAGES/nvda.po b/addon/locale/hr/LC_MESSAGES/nvda.po index 95c84702..f9b2e79e 100644 --- a/addon/locale/hr/LC_MESSAGES/nvda.po +++ b/addon/locale/hr/LC_MESSAGES/nvda.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-15 12:18+0100\n" +"PO-Revision-Date: 2020-04-15 16:39+0100\n" "Last-Translator: zvonimir stanecic \n" "Language-Team: \n" "Language: hr\n" @@ -958,35 +958,42 @@ msgid "" "Alternatively, an option allows you to automatically exit this mode after " "entering a single pattern. " msgstr "" +"Ova vam opcija omogućuje unos bilo kojeg znaka koristeći njegov HUC8 izgled " +"ili njegovu heksadecimalnu/decimalnu/oktalnu/binarnu vrijednost. Čak " +"štoviše, omogućuje vam razvoj skraćenica. Kako biste mogli koristiti ovu " +"funkciju, uključite ga i upišite znak. Podrazumjevane prečice: NVDA+Windows" +"+i ili ⡊+razmaknica (na podržanim brajičnim retcima). Pritisnite isti prečac " +"za izlaz. Alternativno, opcija vam dozvoljava isključivanje ovog načina " +"poslije upisanog samo jednog znaka. " #: addon/globalPlugins/brailleExtender/addonDoc.py:80 msgid "Specify the basis as follows" -msgstr "" +msgstr "Odredite brojevnu bazu vrijednosti kako slijedi" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "⠭ or ⠓" -msgstr "" +msgstr "⠭ ili ⠓" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "for a hexadecimal value" -msgstr "" +msgstr "za heksadecimalnu vrijednost" #: addon/globalPlugins/brailleExtender/addonDoc.py:83 msgid "for a decimal value" -msgstr "" +msgstr "za decimalnu vrijednost" #: addon/globalPlugins/brailleExtender/addonDoc.py:84 msgid "for an octal value" -msgstr "" +msgstr "Za oktalnu vrijednost" #: addon/globalPlugins/brailleExtender/addonDoc.py:87 msgid "" "Enter the value of the character according to the previously selected basis." -msgstr "" +msgstr "Upišite znak u skladu sa odabranom brojevnom bazom." #: addon/globalPlugins/brailleExtender/addonDoc.py:88 msgid "Press Space to validate." -msgstr "" +msgstr "Pritisnite razmaknicu za provjeru." #: addon/globalPlugins/brailleExtender/addonDoc.py:91 msgid "" @@ -994,18 +1001,21 @@ msgid "" "dictionaries -. Then, you just have to enter your abbreviation and press " "space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." msgstr "" +"za skraćenice, prvo ih morate dodati u dijaloški okvir - rječnici naprednog " +"načina unosa -. Poslije toga trebate upisati vašu kraticu i pritisnuti enter " +"za raširivanje. na primjer, možete pridružiti — ⠎⠺ — sa — sendvič —." #: addon/globalPlugins/brailleExtender/addonDoc.py:93 msgid "Here are some examples of sequences to be entered for given characters:" -msgstr "" +msgstr "Ovdje su primjeri za upis znakova pri korištenju raznih kombinacija:" #: addon/globalPlugins/brailleExtender/addonDoc.py:97 msgid "Note: the HUC6 input is currently not supported." -msgstr "" +msgstr "Napomena: HUC6 unos nije podržan." #: addon/globalPlugins/brailleExtender/addonDoc.py:100 msgid "One-hand mode" -msgstr "" +msgstr "Način upisa jednom rukom" #: addon/globalPlugins/brailleExtender/addonDoc.py:102 msgid "" @@ -1014,10 +1024,14 @@ msgid "" "fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " "Three input methods are available." msgstr "" +"Ova vam funkcija omogućuje upis znakova u nekoliko koraka. Opa opcija može " +"biti aktivirana u općim postavkama dodatka ili s pomoću podrazumjevanog " +"prečaca NVDA+Windows+h (⡂+razmaknica na podržanim brajičnim retcima). Tri " +"metode unosa su dostupne." #: addon/globalPlugins/brailleExtender/addonDoc.py:103 msgid "Method #1: fill a cell in 2 stages on both sides" -msgstr "" +msgstr "Metoda #1: popuni ćeliju u dva koraka obostrano" #: addon/globalPlugins/brailleExtender/addonDoc.py:105 msgid "" @@ -1025,27 +1039,34 @@ msgid "" "side is empty, type the dots correspondig to the opposite side twice, or " "type the dots corresponding to the non-empty side in 2 steps." msgstr "" +"Uz pomoć ove metode, upisujte točke lijeve strane, a potom desne strane. Akj " +"je jedna strana prazna, upisujte točke koje odgovaraju točkama suprotne " +"strane dvaput, ili upisujte točke koje odgovaraju strani koja nije prazna u " +"dva koraka." #: addon/globalPlugins/brailleExtender/addonDoc.py:106 #: addon/globalPlugins/brailleExtender/addonDoc.py:115 msgid "For example:" -msgstr "" +msgstr "Na primjer:" #: addon/globalPlugins/brailleExtender/addonDoc.py:108 msgid "For ⠛: press dots 1-2 then dots 4-5." -msgstr "" +msgstr "za ⠛: pritisnite točkice 1-2 a potom točkice 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:109 msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." msgstr "" +"za ⠃: upišite točkice 1-2 a potom točkice 1-2, ili točku 1 a potom točku 2." #: addon/globalPlugins/brailleExtender/addonDoc.py:110 msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." -msgstr "" +msgstr "Za ⠘: upišite 4-5 a potom 4-5, ili točku 4 a potom točku 5." #: addon/globalPlugins/brailleExtender/addonDoc.py:112 msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" msgstr "" +"Metoda#2: ispuni ćeliju u dva koraka jednostrano (razmaknica označava praznu " +"stranu)" #: addon/globalPlugins/brailleExtender/addonDoc.py:114 msgid "" @@ -1054,48 +1075,63 @@ msgid "" "dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " "An empty cell will be obtained by pressing the space key twice." msgstr "" +"Koristeći ovu metodu, Možete upisivati jednom rukom neovisno o tome koji dio " +"brajične tipkovnice poželite koristiti. Prvi vam korak omogućuje unos " +"točkica 1-2-3-7 a drugi 4-5-6-8. Ako je jedna strana prazna, Pritisnite " +"razmaknicu. Praznu ćete ćeliju dobiti pritišćući razmaknicu dvaput." #: addon/globalPlugins/brailleExtender/addonDoc.py:117 msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." msgstr "" +"Za ⠛: pritisnite točkice 1-2 potom točkice 1-2, ili točkice 4-5 a potomdots " +"4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:118 msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." msgstr "" +"Za ⠃: Pritisnite točkice 1-2 a potom razmaknicu, ili 4-5 a potom space." #: addon/globalPlugins/brailleExtender/addonDoc.py:119 msgid "For ⠘: press space then 1-2, or space then dots 4-5." msgstr "" +"Za ⠘: pritisnite razmaknicu a potom 1-2, ili pritisnite razmaknicu a potom " +"točkice 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:121 msgid "" "Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " "validate the character)" msgstr "" +"Metoda #3: ispunite ćeliju točku po točku (svaka točkica je preklopnik, " +"pritisnite razmaknicu za provjeru znaka)" #: addon/globalPlugins/brailleExtender/addonDoc.py:126 msgid "Dots 1-2, then dots 4-5, then space." -msgstr "" +msgstr "točkice 1-2, potom točkice 4-5, a potom razmaknica." #: addon/globalPlugins/brailleExtender/addonDoc.py:127 msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." msgstr "" +"Točkice 1-2-3, potom točkica 3 (za ispravak), a potom točkice 4-5, a potom " +"razmaknicu." #: addon/globalPlugins/brailleExtender/addonDoc.py:128 msgid "Dot 1, then dots 2-4-5, then space." -msgstr "" +msgstr "točkica 1, potom točkice 2-4-5, a potom razmaknica." #: addon/globalPlugins/brailleExtender/addonDoc.py:129 msgid "Dots 1-2-4, then dot 5, then space." -msgstr "" +msgstr "točkice 1-2-4, potom točkica 5, a potom razmaknica." #: addon/globalPlugins/brailleExtender/addonDoc.py:130 msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." msgstr "" +"točkica 2, potom točkica 1, potom točkica 5, potom točkica 4, i potom " +"razmaknica." #: addon/globalPlugins/brailleExtender/addonDoc.py:131 msgid "Etc." -msgstr "" +msgstr "Itd." #: addon/globalPlugins/brailleExtender/addonDoc.py:150 msgid "Documentation" From 4bc3ca3bfa88c070c91546f66b3e3f324db9e918 Mon Sep 17 00:00:00 2001 From: zstanecic Date: Thu, 16 Apr 2020 14:37:56 +0200 Subject: [PATCH 63/87] russian localization beta, not complete yet... work in progress --- addon/locale/ru/LC_MESSAGES/nvda.po | 1470 ++++++++++++++++++--------- 1 file changed, 989 insertions(+), 481 deletions(-) diff --git a/addon/locale/ru/LC_MESSAGES/nvda.po b/addon/locale/ru/LC_MESSAGES/nvda.po index 52a79d32..9bc7c2fc 100644 --- a/addon/locale/ru/LC_MESSAGES/nvda.po +++ b/addon/locale/ru/LC_MESSAGES/nvda.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender dev-18.08.04-105046\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-03-19 09:08+0100\n" -"PO-Revision-Date: 2020-03-19 09:12+0100\n" +"POT-Creation-Date: 2020-04-15 09:24+0200\n" +"PO-Revision-Date: 2020-04-16 14:36+0100\n" "Last-Translator: Zvonimir \n" "Language-Team: \n" "Language: ru_RU\n" @@ -19,175 +19,175 @@ msgstr "" "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" -#: addon/globalPlugins/brailleExtender/__init__.py:61 +#: addon/globalPlugins/brailleExtender/__init__.py:64 msgid "Default" msgstr "по умолчанию" -#: addon/globalPlugins/brailleExtender/__init__.py:62 +#: addon/globalPlugins/brailleExtender/__init__.py:65 msgid "Moving in the text" msgstr "Перемещение по тексту" -#: addon/globalPlugins/brailleExtender/__init__.py:63 +#: addon/globalPlugins/brailleExtender/__init__.py:66 msgid "Text selection" msgstr "выделение текста" -#: addon/globalPlugins/brailleExtender/__init__.py:64 +#: addon/globalPlugins/brailleExtender/__init__.py:67 msgid "Objects" msgstr "объекты" -#: addon/globalPlugins/brailleExtender/__init__.py:65 +#: addon/globalPlugins/brailleExtender/__init__.py:68 msgid "Review" msgstr "просмотр" -#: addon/globalPlugins/brailleExtender/__init__.py:66 +#: addon/globalPlugins/brailleExtender/__init__.py:69 msgid "Links" msgstr "ссылки" -#: addon/globalPlugins/brailleExtender/__init__.py:67 +#: addon/globalPlugins/brailleExtender/__init__.py:70 msgid "Unvisited links" msgstr "непосещённые ссылки" -#: addon/globalPlugins/brailleExtender/__init__.py:68 +#: addon/globalPlugins/brailleExtender/__init__.py:71 msgid "Visited links" msgstr "Посещённые ссылки" -#: addon/globalPlugins/brailleExtender/__init__.py:69 +#: addon/globalPlugins/brailleExtender/__init__.py:72 msgid "Landmarks" msgstr "Ориентир" -#: addon/globalPlugins/brailleExtender/__init__.py:70 +#: addon/globalPlugins/brailleExtender/__init__.py:73 msgid "Headings" msgstr "Заголовки" -#: addon/globalPlugins/brailleExtender/__init__.py:71 +#: addon/globalPlugins/brailleExtender/__init__.py:74 msgid "Headings at level 1" msgstr "Заголовки первого уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:72 +#: addon/globalPlugins/brailleExtender/__init__.py:75 msgid "Headings at level 2" msgstr "Заголовки второго уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:73 +#: addon/globalPlugins/brailleExtender/__init__.py:76 msgid "Headings at level 3" msgstr "Заголовки третьего уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:74 +#: addon/globalPlugins/brailleExtender/__init__.py:77 msgid "Headings at level 4" msgstr "Заголовки четвёртого уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:75 +#: addon/globalPlugins/brailleExtender/__init__.py:78 msgid "Headings at level 5" msgstr "Заголовки пятого уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:76 +#: addon/globalPlugins/brailleExtender/__init__.py:79 msgid "Headings at level 6" msgstr "Заголовки шестого уровня" -#: addon/globalPlugins/brailleExtender/__init__.py:77 +#: addon/globalPlugins/brailleExtender/__init__.py:80 msgid "Lists" msgstr "Списки" -#: addon/globalPlugins/brailleExtender/__init__.py:78 +#: addon/globalPlugins/brailleExtender/__init__.py:81 msgid "List items" msgstr "Элементы списков" -#: addon/globalPlugins/brailleExtender/__init__.py:79 +#: addon/globalPlugins/brailleExtender/__init__.py:82 msgid "Graphics" msgstr "изображения" -#: addon/globalPlugins/brailleExtender/__init__.py:80 +#: addon/globalPlugins/brailleExtender/__init__.py:83 msgid "Block quotes" msgstr "цитаты" -#: addon/globalPlugins/brailleExtender/__init__.py:81 +#: addon/globalPlugins/brailleExtender/__init__.py:84 msgid "Buttons" msgstr "Кнопки" -#: addon/globalPlugins/brailleExtender/__init__.py:82 +#: addon/globalPlugins/brailleExtender/__init__.py:85 msgid "Form fields" msgstr "образцы" -#: addon/globalPlugins/brailleExtender/__init__.py:83 +#: addon/globalPlugins/brailleExtender/__init__.py:86 msgid "Edit fields" msgstr "Редакторы" -#: addon/globalPlugins/brailleExtender/__init__.py:84 +#: addon/globalPlugins/brailleExtender/__init__.py:87 msgid "Radio buttons" msgstr "избирательные кнопки" -#: addon/globalPlugins/brailleExtender/__init__.py:85 +#: addon/globalPlugins/brailleExtender/__init__.py:88 msgid "Combo boxes" msgstr "комбинированные списки" -#: addon/globalPlugins/brailleExtender/__init__.py:86 +#: addon/globalPlugins/brailleExtender/__init__.py:89 msgid "Check boxes" msgstr "флажки" -#: addon/globalPlugins/brailleExtender/__init__.py:87 +#: addon/globalPlugins/brailleExtender/__init__.py:90 msgid "Not link blocks" msgstr "тексты после ссылок" -#: addon/globalPlugins/brailleExtender/__init__.py:88 +#: addon/globalPlugins/brailleExtender/__init__.py:91 msgid "Frames" msgstr "фреймы" -#: addon/globalPlugins/brailleExtender/__init__.py:89 +#: addon/globalPlugins/brailleExtender/__init__.py:92 msgid "Separators" msgstr "сепараторы" -#: addon/globalPlugins/brailleExtender/__init__.py:90 +#: addon/globalPlugins/brailleExtender/__init__.py:93 msgid "Embedded objects" msgstr "внедрённые объекты" -#: addon/globalPlugins/brailleExtender/__init__.py:91 +#: addon/globalPlugins/brailleExtender/__init__.py:94 msgid "Annotations" msgstr "Аннотации" -#: addon/globalPlugins/brailleExtender/__init__.py:92 +#: addon/globalPlugins/brailleExtender/__init__.py:95 msgid "Spelling errors" msgstr "орфографические ошибки" -#: addon/globalPlugins/brailleExtender/__init__.py:93 +#: addon/globalPlugins/brailleExtender/__init__.py:96 msgid "Tables" msgstr "таблицы" -#: addon/globalPlugins/brailleExtender/__init__.py:94 +#: addon/globalPlugins/brailleExtender/__init__.py:97 msgid "Move in table" msgstr "Перемещение по таблицы" -#: addon/globalPlugins/brailleExtender/__init__.py:100 +#: addon/globalPlugins/brailleExtender/__init__.py:103 msgid "If pressed twice, presents the information in browse mode" msgstr "Подвойному нажатию показывает информацию в режиме просмотра" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Docu&mentation" msgstr "&Справка" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Opens the addon's documentation." msgstr "Открывает руководство пользователя для дополнения." -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "&Settings" msgstr "&Настройки" -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "Opens the addons' settings." msgstr "Открывает настройки дополнения." -#: addon/globalPlugins/brailleExtender/__init__.py:265 -msgid "Braille &dictionaries" -msgstr "Брайлевские &словари" +#: addon/globalPlugins/brailleExtender/__init__.py:270 +msgid "Table &dictionaries" +msgstr "&Словари таблиц" -#: addon/globalPlugins/brailleExtender/__init__.py:265 +#: addon/globalPlugins/brailleExtender/__init__.py:270 msgid "'Braille dictionaries' menu" msgstr "Меню 'Брайлевские словари'" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "&Global dictionary" msgstr "&Глобальный словарь" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -195,11 +195,11 @@ msgstr "" "Диалоговое окно, в котором возможно создать глобальный словарь, добавляя " "словарные статьи." -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "&Table dictionary" msgstr "Словарь таблицы" -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -207,11 +207,11 @@ msgstr "" "Диалоговое окно, в котором возможно создать словарь для конкретной " "брайлевской таблицы, добавляя словарные статьи." -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "Te&mporary dictionary" msgstr "&Временный словарь" -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." @@ -219,119 +219,128 @@ msgstr "" "Диалоговое окно, в котором возможно создать временный словарь, добавляя " "словарные статьи." -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:278 +msgid "Advanced &input mode dictionary" +msgstr "Настройки &расширенного ввода" + +#: addon/globalPlugins/brailleExtender/__init__.py:278 +msgid "Advanced input mode configuration" +msgstr "Настройки режима расширенного ввода" + +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" msgstr "&Приложения для быстрого запуска" -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "Quick launches configuration" msgstr "Настройки приложений для быстрого запуска" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "&Profile editor" msgstr "&Редактор профилей" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "Profile editor" msgstr "Редактор профилей" -#: addon/globalPlugins/brailleExtender/__init__.py:285 +#: addon/globalPlugins/brailleExtender/__init__.py:296 msgid "Overview of the current input braille table" msgstr "обзор текущей брайлевской таблицы" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload add-on" msgstr "Перезагрузить дополнение" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload this add-on." msgstr "Перезагружает дополнение." -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "&Check for update" msgstr "&Проверить наличие обновлений" -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "Checks if update is available" msgstr "Проверяет наличие обновления" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "&Website" msgstr "&Web страница" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "Open addon's website." msgstr "Открыть web страницу дополнения." -#: addon/globalPlugins/brailleExtender/__init__.py:293 +#: addon/globalPlugins/brailleExtender/__init__.py:304 msgid "&Braille Extender" msgstr "&Braille Extender" -#: addon/globalPlugins/brailleExtender/__init__.py:297 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:319 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Global dictionary" msgstr "Глобальный словарь" -#: addon/globalPlugins/brailleExtender/__init__.py:302 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:324 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Table dictionary" msgstr "Словарь таблицы" -#: addon/globalPlugins/brailleExtender/__init__.py:306 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:328 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Temporary dictionary" msgstr "Временный словарь" -#: addon/globalPlugins/brailleExtender/__init__.py:416 +#: addon/globalPlugins/brailleExtender/__init__.py:438 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "Character" msgstr "Символ" -#: addon/globalPlugins/brailleExtender/__init__.py:417 +#: addon/globalPlugins/brailleExtender/__init__.py:439 msgid "Word" msgstr "Слово" -#: addon/globalPlugins/brailleExtender/__init__.py:418 +#: addon/globalPlugins/brailleExtender/__init__.py:440 msgid "Line" msgstr "Строка" -#: addon/globalPlugins/brailleExtender/__init__.py:419 +#: addon/globalPlugins/brailleExtender/__init__.py:441 msgid "Paragraph" msgstr "Абзац" -#: addon/globalPlugins/brailleExtender/__init__.py:420 +#: addon/globalPlugins/brailleExtender/__init__.py:442 msgid "Page" msgstr "Страница" -#: addon/globalPlugins/brailleExtender/__init__.py:421 +#: addon/globalPlugins/brailleExtender/__init__.py:443 msgid "Document" msgstr "Документ" -#: addon/globalPlugins/brailleExtender/__init__.py:457 +#: addon/globalPlugins/brailleExtender/__init__.py:479 msgid "Not available here" msgstr "Недоступно здесь" -#: addon/globalPlugins/brailleExtender/__init__.py:475 #: addon/globalPlugins/brailleExtender/__init__.py:497 +#: addon/globalPlugins/brailleExtender/__init__.py:519 msgid "Not supported here or browse mode not enabled" msgstr "Не поддерживается здесь или режим просмотра не включён" -#: addon/globalPlugins/brailleExtender/__init__.py:477 +#: addon/globalPlugins/brailleExtender/__init__.py:499 msgid "Select previous rotor setting" msgstr "Выбрать предыдущую настройку в роторе" -#: addon/globalPlugins/brailleExtender/__init__.py:478 +#: addon/globalPlugins/brailleExtender/__init__.py:500 msgid "Select next rotor setting" msgstr "выбрать следующую настройку в роторе" -#: addon/globalPlugins/brailleExtender/__init__.py:526 +#: addon/globalPlugins/brailleExtender/__init__.py:548 msgid "Move to previous item depending rotor setting" msgstr "Перейти к предыдущему элементу выбранной настройки ротора" -#: addon/globalPlugins/brailleExtender/__init__.py:527 +#: addon/globalPlugins/brailleExtender/__init__.py:549 msgid "Move to next item depending rotor setting" msgstr "Перейти к следующему элементу выбранной настройки ротора" -#: addon/globalPlugins/brailleExtender/__init__.py:535 +#: addon/globalPlugins/brailleExtender/__init__.py:557 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" @@ -339,98 +348,113 @@ msgstr "" "варьируется в зависимости от настройки ротора. к примеру в режиме навигации " "по объектам выполняет туже функцию, что и NVDA+enter" -#: addon/globalPlugins/brailleExtender/__init__.py:538 +#: addon/globalPlugins/brailleExtender/__init__.py:560 msgid "Move to previous item using rotor setting" msgstr "перейти к предыдущемуэлементуьиспользуя текущую настройку ротора" -#: addon/globalPlugins/brailleExtender/__init__.py:539 +#: addon/globalPlugins/brailleExtender/__init__.py:561 msgid "Move to next item using rotor setting" msgstr "Перейти к следующему элементу, используя текущую настройку ротора." -#: addon/globalPlugins/brailleExtender/__init__.py:543 +#: addon/globalPlugins/brailleExtender/__init__.py:565 #, python-format msgid "Braille keyboard %s" msgstr "Брайлевская клавиатура %s" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "locked" msgstr "Заблокирована" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "unlocked" msgstr "Разблокирована" -#: addon/globalPlugins/brailleExtender/__init__.py:544 +#: addon/globalPlugins/brailleExtender/__init__.py:566 msgid "Lock/unlock braille keyboard" msgstr "Заблокировать/разблокировать брайлевскую клавиатуру" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#, python-format -msgid "Dots 7 and 8: %s" -msgstr "Точки 7 и 8: %s" +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 +msgid "enabled" +msgstr "Включено" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 msgid "disabled" msgstr "Выключено" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 -msgid "enabled" -msgstr "Включено" +#: addon/globalPlugins/brailleExtender/__init__.py:571 +#, python-format +msgid "One hand mode %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:572 +msgid "Enable/disable one hand mode feature" +msgstr "включить или выключить режим одной руки" -#: addon/globalPlugins/brailleExtender/__init__.py:550 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#, python-format +msgid "Dots 7 and 8: %s" +msgstr "Точки 7 и 8: %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:578 msgid "Hide/show dots 7 and 8" msgstr "Скрыть/показывать точки 7 и 8" -#: addon/globalPlugins/brailleExtender/__init__.py:555 +#: addon/globalPlugins/brailleExtender/__init__.py:583 #, python-format msgid "BRF mode: %s" msgstr "режим форматированного брайля: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:556 +#: addon/globalPlugins/brailleExtender/__init__.py:584 msgid "Enable/disable BRF mode" msgstr "Включить/выключить режим форматированного брайля" -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:588 #, python-format msgid "Modifier keys %s" msgstr "модификаторы %s" -#: addon/globalPlugins/brailleExtender/__init__.py:561 +#: addon/globalPlugins/brailleExtender/__init__.py:589 msgid "Lock/unlock modifiers keys" msgstr "блокирует/разблокирует модификаторы" -#: addon/globalPlugins/brailleExtender/__init__.py:567 +#: addon/globalPlugins/brailleExtender/__init__.py:595 msgid "Enable/disable Attribra" msgstr "включить/выключить отображение атребутов текста" -#: addon/globalPlugins/brailleExtender/__init__.py:577 +#: addon/globalPlugins/brailleExtender/__init__.py:605 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "быстрый доступ к опции \"произносить текущую строку при прокрутке\"" -#: addon/globalPlugins/brailleExtender/__init__.py:582 +#: addon/globalPlugins/brailleExtender/__init__.py:610 msgid "Speech on" msgstr "Речь включена" -#: addon/globalPlugins/brailleExtender/__init__.py:585 +#: addon/globalPlugins/brailleExtender/__init__.py:613 msgid "Speech off" msgstr "Речь выключена" -#: addon/globalPlugins/brailleExtender/__init__.py:587 +#: addon/globalPlugins/brailleExtender/__init__.py:615 msgid "Toggle speech on or off" msgstr "Включает или выключает речь" -#: addon/globalPlugins/brailleExtender/__init__.py:595 +#: addon/globalPlugins/brailleExtender/__init__.py:623 msgid "No extra info for this element" msgstr "Нет дополнительной информации для этого элемента" #. Translators: Input help mode message for report extra infos command. -#: addon/globalPlugins/brailleExtender/__init__.py:599 +#: addon/globalPlugins/brailleExtender/__init__.py:627 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -438,34 +462,34 @@ msgstr "" "предоставляет дополнительную информацию к текущему элементу, например адрес " "ссылки" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid " Input table" msgstr " Таблица ввода" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid "Output table" msgstr "Таблица вывода" -#: addon/globalPlugins/brailleExtender/__init__.py:606 +#: addon/globalPlugins/brailleExtender/__init__.py:634 #, python-format msgid "Table overview (%s)" msgstr "обзор таблицы (%s)" -#: addon/globalPlugins/brailleExtender/__init__.py:607 +#: addon/globalPlugins/brailleExtender/__init__.py:635 msgid "Display an overview of current input braille table" msgstr "Показать обзор актуальной брайлевской таблицы ввода" -#: addon/globalPlugins/brailleExtender/__init__.py:612 -#: addon/globalPlugins/brailleExtender/__init__.py:620 -#: addon/globalPlugins/brailleExtender/__init__.py:627 +#: addon/globalPlugins/brailleExtender/__init__.py:640 +#: addon/globalPlugins/brailleExtender/__init__.py:648 +#: addon/globalPlugins/brailleExtender/__init__.py:655 msgid "No text selection" msgstr "нет выделенного текста" -#: addon/globalPlugins/brailleExtender/__init__.py:613 +#: addon/globalPlugins/brailleExtender/__init__.py:641 msgid "Unicode Braille conversion" msgstr "Преобразование в брайлевский юникод" -#: addon/globalPlugins/brailleExtender/__init__.py:614 +#: addon/globalPlugins/brailleExtender/__init__.py:642 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" @@ -473,11 +497,11 @@ msgstr "" "Преобразует выделенный текст в брайлевском юникоде, и показывает его в окне " "просмотра" -#: addon/globalPlugins/brailleExtender/__init__.py:621 +#: addon/globalPlugins/brailleExtender/__init__.py:649 msgid "Braille Unicode to cell descriptions" msgstr "юникод брайл до описаний знаков" -#: addon/globalPlugins/brailleExtender/__init__.py:622 +#: addon/globalPlugins/brailleExtender/__init__.py:650 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -485,11 +509,11 @@ msgstr "" "Преобразует выделенный текст в описание брайлевских клеток и показывает его " "в окне просмотра" -#: addon/globalPlugins/brailleExtender/__init__.py:629 +#: addon/globalPlugins/brailleExtender/__init__.py:657 msgid "Cell descriptions to braille Unicode" msgstr "Описаний знаков до юникод брайля" -#: addon/globalPlugins/brailleExtender/__init__.py:630 +#: addon/globalPlugins/brailleExtender/__init__.py:658 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -497,85 +521,103 @@ msgstr "" "Описание брайлевских клеток в брайлевский юникод. Напр: в редактор напишите " "'125-24-0-1-123-123'. Потом выделите этот текст и выполните эту команду" -#: addon/globalPlugins/brailleExtender/__init__.py:634 +#: addon/globalPlugins/brailleExtender/__init__.py:663 +#, python-format +msgid "Advanced braille input mode %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:664 +msgid "Enable/disable the advanced input mode" +msgstr "Включить или выключить режим расширенного ввода" + +#: addon/globalPlugins/brailleExtender/__init__.py:669 +#, python-format +msgid "Description of undefined characters %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:671 +msgid "Enable/disable description of undefined characters" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" msgstr "получить информацию о позиции курсора в тексте" -#: addon/globalPlugins/brailleExtender/__init__.py:660 +#: addon/globalPlugins/brailleExtender/__init__.py:701 msgid "Hour and date with autorefresh" msgstr "Дата и время с автообновлением" -#: addon/globalPlugins/brailleExtender/__init__.py:673 +#: addon/globalPlugins/brailleExtender/__init__.py:714 msgid "Autoscroll stopped" msgstr "Автопрокрутка остановлена" -#: addon/globalPlugins/brailleExtender/__init__.py:680 +#: addon/globalPlugins/brailleExtender/__init__.py:721 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "" "Невозможно начать автопрокрутку. Чтобы узнать больше, откройте записник NVDA." -#: addon/globalPlugins/brailleExtender/__init__.py:685 +#: addon/globalPlugins/brailleExtender/__init__.py:726 msgid "Enable/disable autoscroll" msgstr "Включить/выключить автопрокрутку" -#: addon/globalPlugins/brailleExtender/__init__.py:700 +#: addon/globalPlugins/brailleExtender/__init__.py:741 msgid "Increase the master volume" msgstr "Увеличить громкость" -#: addon/globalPlugins/brailleExtender/__init__.py:717 +#: addon/globalPlugins/brailleExtender/__init__.py:758 msgid "Decrease the master volume" msgstr "уменьшить громкость" -#: addon/globalPlugins/brailleExtender/__init__.py:723 +#: addon/globalPlugins/brailleExtender/__init__.py:764 msgid "Muted sound" msgstr " звук выключен" -#: addon/globalPlugins/brailleExtender/__init__.py:725 +#: addon/globalPlugins/brailleExtender/__init__.py:766 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "звук включен (%3d%%)" -#: addon/globalPlugins/brailleExtender/__init__.py:731 +#: addon/globalPlugins/brailleExtender/__init__.py:772 msgid "Mute or unmute sound" msgstr "включить или выключить звук" -#: addon/globalPlugins/brailleExtender/__init__.py:736 +#: addon/globalPlugins/brailleExtender/__init__.py:777 #, python-format msgid "Show the %s documentation" msgstr "Показать справку %s" -#: addon/globalPlugins/brailleExtender/__init__.py:774 +#: addon/globalPlugins/brailleExtender/__init__.py:815 msgid "No such file or directory" msgstr "Нет такого файла или папки" -#: addon/globalPlugins/brailleExtender/__init__.py:776 +#: addon/globalPlugins/brailleExtender/__init__.py:817 msgid "Opens a custom program/file. Go to settings to define them" msgstr "" "Открывает настроенну вами программу/файл. войдите в настройки, чтобы " "определить их" -#: addon/globalPlugins/brailleExtender/__init__.py:783 +#: addon/globalPlugins/brailleExtender/__init__.py:824 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "" "Проверяет наличие обновлений %s, и начинает загрузку, если обновление " "доступно" -#: addon/globalPlugins/brailleExtender/__init__.py:813 +#: addon/globalPlugins/brailleExtender/__init__.py:854 msgid "Increase autoscroll delay" msgstr "Увеличить задержку автопрокрутки" -#: addon/globalPlugins/brailleExtender/__init__.py:814 +#: addon/globalPlugins/brailleExtender/__init__.py:855 msgid "Decrease autoscroll delay" msgstr "уменьшить задержку автопрокрутки" -#: addon/globalPlugins/brailleExtender/__init__.py:818 -#: addon/globalPlugins/brailleExtender/__init__.py:836 +#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:877 msgid "Please use NVDA 2017.3 minimum for this feature" msgstr "Пожалуйста используйте NVDA 2017.3 для этой функции" -#: addon/globalPlugins/brailleExtender/__init__.py:820 -#: addon/globalPlugins/brailleExtender/__init__.py:838 +#: addon/globalPlugins/brailleExtender/__init__.py:861 +#: addon/globalPlugins/brailleExtender/__init__.py:879 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -583,50 +625,50 @@ msgstr "" "для использования данной функции необходимо выбрать не менее двух таблиц. " "пожалуйста, выполните соответствующий пункт настроек." -#: addon/globalPlugins/brailleExtender/__init__.py:827 +#: addon/globalPlugins/brailleExtender/__init__.py:868 #, python-format msgid "Input: %s" msgstr "Ввод: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:831 +#: addon/globalPlugins/brailleExtender/__init__.py:872 msgid "Switch between his favorite input braille tables" msgstr "Переключение между вашими предпочитаемыми таблицами ввода" -#: addon/globalPlugins/brailleExtender/__init__.py:847 +#: addon/globalPlugins/brailleExtender/__init__.py:888 #, python-format msgid "Output: %s" msgstr "Вывод: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:850 +#: addon/globalPlugins/brailleExtender/__init__.py:891 msgid "Switch between his favorite output braille tables" msgstr "" "Переключение между вашими предпочитаемыми таблицами брайлевского вывода" -#: addon/globalPlugins/brailleExtender/__init__.py:856 +#: addon/globalPlugins/brailleExtender/__init__.py:897 #, python-brace-format msgid "I⣿O:{I}" msgstr "I⣿O:{I}" -#: addon/globalPlugins/brailleExtender/__init__.py:857 +#: addon/globalPlugins/brailleExtender/__init__.py:898 #, python-brace-format msgid "Input and output: {I}." msgstr "Ввод и вывод: {I}." -#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:900 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "I:{I} ⣿ O: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:860 +#: addon/globalPlugins/brailleExtender/__init__.py:901 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Ввод: {I}; Вывод: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:864 +#: addon/globalPlugins/brailleExtender/__init__.py:905 msgid "Announce the current input and output braille tables" msgstr "Объявляет текущие брайлевские таблицы ввода и вывода" -#: addon/globalPlugins/brailleExtender/__init__.py:869 +#: addon/globalPlugins/brailleExtender/__init__.py:910 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -634,7 +676,7 @@ msgstr "" "Даёт значение в юникоде для символа под курсором, также десятеричное, " "бинарное и октальное восьмиричное значение." -#: addon/globalPlugins/brailleExtender/__init__.py:877 +#: addon/globalPlugins/brailleExtender/__init__.py:918 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -642,110 +684,110 @@ msgstr "" "Показывать речевую информацию для выделённого текста на брайлевском дисплее. " "Это например, полезно для эмодзи" -#: addon/globalPlugins/brailleExtender/__init__.py:881 +#: addon/globalPlugins/brailleExtender/__init__.py:922 msgid "No shortcut performed from a braille display" msgstr "Нет выполненой комбинасии клавиш" -#: addon/globalPlugins/brailleExtender/__init__.py:885 +#: addon/globalPlugins/brailleExtender/__init__.py:926 msgid "Repeat the last shortcut performed from a braille display" msgstr "Повторяет последнюю комбинацию клавишей на брайлевском дисплее" -#: addon/globalPlugins/brailleExtender/__init__.py:899 +#: addon/globalPlugins/brailleExtender/__init__.py:940 #, python-format msgid "%s reloaded" msgstr "%s перезагружен" -#: addon/globalPlugins/brailleExtender/__init__.py:911 +#: addon/globalPlugins/brailleExtender/__init__.py:952 #, python-format msgid "Reload %s" msgstr "перезагрузить %s" -#: addon/globalPlugins/brailleExtender/__init__.py:914 +#: addon/globalPlugins/brailleExtender/__init__.py:955 msgid "Reload the first braille display defined in settings" msgstr "Перезагружает первый брайлевский дисплей, установленный в настройках" -#: addon/globalPlugins/brailleExtender/__init__.py:917 +#: addon/globalPlugins/brailleExtender/__init__.py:958 msgid "Reload the second braille display defined in settings" msgstr "Перезагружает вторый брайлевский дисплей установленный в настройках" -#: addon/globalPlugins/brailleExtender/__init__.py:923 +#: addon/globalPlugins/brailleExtender/__init__.py:964 msgid "No braille display specified. No reload to do" msgstr "Нет определённого Брайлевского дисплея. Нечего перезагружать" -#: addon/globalPlugins/brailleExtender/__init__.py:960 +#: addon/globalPlugins/brailleExtender/__init__.py:1001 msgid "WIN" msgstr "WIN" -#: addon/globalPlugins/brailleExtender/__init__.py:961 +#: addon/globalPlugins/brailleExtender/__init__.py:1002 msgid "CTRL" msgstr "CTRL" -#: addon/globalPlugins/brailleExtender/__init__.py:962 +#: addon/globalPlugins/brailleExtender/__init__.py:1003 msgid "SHIFT" msgstr "SHIFT" -#: addon/globalPlugins/brailleExtender/__init__.py:963 +#: addon/globalPlugins/brailleExtender/__init__.py:1004 msgid "ALT" msgstr "ALT" -#: addon/globalPlugins/brailleExtender/__init__.py:1065 +#: addon/globalPlugins/brailleExtender/__init__.py:1106 msgid "Keyboard shortcut cancelled" msgstr "Горячая клавиша отменена" #. /* docstrings for modifier keys */ -#: addon/globalPlugins/brailleExtender/__init__.py:1073 +#: addon/globalPlugins/brailleExtender/__init__.py:1114 msgid "Emulate pressing down " msgstr "эмулирует нажатие стрелки вниз " -#: addon/globalPlugins/brailleExtender/__init__.py:1074 +#: addon/globalPlugins/brailleExtender/__init__.py:1115 msgid " on the system keyboard" msgstr " На системной клавиатуре" -#: addon/globalPlugins/brailleExtender/__init__.py:1130 +#: addon/globalPlugins/brailleExtender/__init__.py:1171 msgid "Current braille view saved" msgstr "актуальный брайлевский просмотр сохранён" -#: addon/globalPlugins/brailleExtender/__init__.py:1133 +#: addon/globalPlugins/brailleExtender/__init__.py:1174 msgid "Buffer cleaned" msgstr "Буфер очищен" -#: addon/globalPlugins/brailleExtender/__init__.py:1134 +#: addon/globalPlugins/brailleExtender/__init__.py:1175 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Сохраняет актуальный просмотр брайля. Нажмите дважды быстро, чтобы очистить " "буфер" -#: addon/globalPlugins/brailleExtender/__init__.py:1139 +#: addon/globalPlugins/brailleExtender/__init__.py:1180 msgid "View saved" msgstr "Просмотр сохранён" -#: addon/globalPlugins/brailleExtender/__init__.py:1140 +#: addon/globalPlugins/brailleExtender/__init__.py:1181 msgid "Buffer empty" msgstr "Буфер пуст" -#: addon/globalPlugins/brailleExtender/__init__.py:1141 +#: addon/globalPlugins/brailleExtender/__init__.py:1182 msgid "Show the saved braille view through a flash message" msgstr "Показывает подгляд брайля через флеш сообщение." -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Pause" msgstr "пауза" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Resume" msgstr "возобновить" -#: addon/globalPlugins/brailleExtender/__init__.py:1217 -#: addon/globalPlugins/brailleExtender/__init__.py:1224 +#: addon/globalPlugins/brailleExtender/__init__.py:1258 +#: addon/globalPlugins/brailleExtender/__init__.py:1265 #, python-format msgid "Auto test type %d" msgstr "Тип автотеста %d" -#: addon/globalPlugins/brailleExtender/__init__.py:1234 +#: addon/globalPlugins/brailleExtender/__init__.py:1275 msgid "Auto test stopped" msgstr "Автотест остановлен" -#: addon/globalPlugins/brailleExtender/__init__.py:1244 +#: addon/globalPlugins/brailleExtender/__init__.py:1285 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -756,90 +798,353 @@ msgstr "" "изменить тип теста. Используйте кнопку пробел, чтобы прервать или " "возобновить тест. Используйте искейп для выхода" -#: addon/globalPlugins/brailleExtender/__init__.py:1246 +#: addon/globalPlugins/brailleExtender/__init__.py:1287 msgid "Auto test" msgstr "автотест" -#: addon/globalPlugins/brailleExtender/__init__.py:1251 +#: addon/globalPlugins/brailleExtender/__init__.py:1292 msgid "Add dictionary entry or see a dictionary" msgstr "Добавьте словарьную статью или посмотрите словарь" -#: addon/globalPlugins/brailleExtender/__init__.py:1252 +#: addon/globalPlugins/brailleExtender/__init__.py:1293 msgid "Add a entry in braille dictionary" msgstr "Добавь статью в брайлевский словарь" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon/globalPlugins/brailleExtender/__init__.py:1299 -#: addon/globalPlugins/brailleExtender/dictionaries.py:111 -#: addon/globalPlugins/brailleExtender/dictionaries.py:367 -#: addon/globalPlugins/brailleExtender/dictionaries.py:374 -#: addon/globalPlugins/brailleExtender/dictionaries.py:378 -#: addon/globalPlugins/brailleExtender/dictionaries.py:382 -#: addon/globalPlugins/brailleExtender/settings.py:33 buildVars.py:24 +#: addon/globalPlugins/brailleExtender/__init__.py:1344 +#: addon/globalPlugins/brailleExtender/dictionaries.py:112 +#: addon/globalPlugins/brailleExtender/dictionaries.py:369 +#: addon/globalPlugins/brailleExtender/dictionaries.py:376 +#: addon/globalPlugins/brailleExtender/dictionaries.py:380 +#: addon/globalPlugins/brailleExtender/dictionaries.py:384 +#: addon/globalPlugins/brailleExtender/settings.py:35 +#: addon/globalPlugins/brailleExtender/settings.py:388 buildVars.py:24 msgid "Braille Extender" msgstr "Braille Extender" -#: addon/globalPlugins/brailleExtender/addonDoc.py:33 -#, python-format -msgid "%s braille display" -msgstr "Брайлевский дисплей %s" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +msgid "HUC8" +msgstr "" -#: addon/globalPlugins/brailleExtender/addonDoc.py:34 -#, python-format -msgid "profile loaded: %s" -msgstr "профиль загружен: %s" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:258 +msgid "Hexadecimal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:65 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:259 +msgid "Decimal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:66 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:260 +msgid "Octal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:67 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:261 +msgid "Binary" +msgstr "Двоичная" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/addonDoc.py:46 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:239 +msgid "Representation of undefined characters" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:48 +msgid "" +"The extension allows you to customize how an undefined character should be " +"represented within a braille table. To do so, go to the braille table " +"settings. You can choose between the following representations:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:52 +msgid "" +"You can also combine this option with the “describe the character if " +"possible” setting." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:54 +msgid "Notes:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:56 +msgid "" +"To distinguish the undefined set of characters while maximizing space, the " +"best combination is the usage of the HUC8 representation without checking " +"the “describe character if possible” option." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:57 +#, python-brace-format +msgid "To learn more about the HUC representation, see {url}" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:58 +msgid "" +"Keep in mind that definitions in tables and those in your table dictionaries " +"take precedence over character descriptions, which also take precedence over " +"the chosen representation for undefined characters." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +msgid "Getting Current Character Info" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +msgid "" +"This feature allows you to obtain various information regarding the " +"character under the cursor using the current input braille table, such as:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +msgid "" +"the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " +"values; A description of the character if possible; - The Unicode Braille " +"representation and the Braille dot pattern." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:67 +msgid "" +"Pressing the defined gesture associated to this function once shows you the " +"information in a flash message and a double-press displays the same " +"information in a virtual NVDA buffer." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:69 +msgid "" +"On supported displays the defined gesture is ⡉+space. No system gestures are " +"defined by default." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:71 +#, python-brace-format +msgid "" +"For example, for the '{chosenChar}' character, we will get the following " +"information:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:74 +msgid "Advanced Braille Input" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:76 +msgid "" +"This feature allows you to enter any character from its HUC8 representation " +"or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " +"develop abbreviations. To use this function, enter the advanced input mode " +"and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊" +"+space (on supported displays). Press the same gesture to exit this mode. " +"Alternatively, an option allows you to automatically exit this mode after " +"entering a single pattern. " +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:80 +msgid "Specify the basis as follows" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "⠭ or ⠓" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "for a hexadecimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:83 +msgid "for a decimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:84 +msgid "for an octal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +msgid "" +"Enter the value of the character according to the previously selected basis." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:88 +msgid "Press Space to validate." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:91 +msgid "" +"For abbreviations, you must first add them in the dialog box - Advanced mode " +"dictionaries -. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +msgid "Here are some examples of sequences to be entered for given characters:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +msgid "Note: the HUC6 input is currently not supported." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:100 +msgid "One-hand mode" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:102 +msgid "" +"This feature allows you to compose a cell in several steps. This can be " +"activated in the general settings of the extension's preferences or on the " +"fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " +"Three input methods are available." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:103 +msgid "Method #1: fill a cell in 2 stages on both sides" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:105 +msgid "" +"With this method, type the left side dots, then the right side dots. If one " +"side is empty, type the dots correspondig to the opposite side twice, or " +"type the dots corresponding to the non-empty side in 2 steps." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:106 +#: addon/globalPlugins/brailleExtender/addonDoc.py:115 +msgid "For example:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:108 +msgid "For ⠛: press dots 1-2 then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:109 +msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:110 +msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:112 +msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:114 +msgid "" +"Using this method, you can compose a cell with one hand, regardless of which " +"side of the Braille keyboard you choose. The first step allows you to enter " +"dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " +"An empty cell will be obtained by pressing the space key twice." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:117 +msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." +msgstr "" -#: addon/globalPlugins/brailleExtender/addonDoc.py:51 +#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +msgid "For ⠘: press space then 1-2, or space then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +msgid "" +"Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " +"validate the character)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:126 +msgid "Dots 1-2, then dots 4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:128 +msgid "Dot 1, then dots 2-4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +msgid "Dots 1-2-4, then dot 5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:130 +msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:131 +msgid "Etc." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:150 +msgid "Documentation" +msgstr "Справка" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:160 +msgid "Driver loaded" +msgstr "Драйвер перезагружен" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:161 +msgid "Profile" +msgstr "Профиль" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:175 msgid "Simple keys" msgstr "Простые сочетания клавиш" -#: addon/globalPlugins/brailleExtender/addonDoc.py:53 +#: addon/globalPlugins/brailleExtender/addonDoc.py:177 msgid "Usual shortcuts" msgstr "стандартные сочитания клавиш" -#: addon/globalPlugins/brailleExtender/addonDoc.py:55 +#: addon/globalPlugins/brailleExtender/addonDoc.py:179 msgid "Standard NVDA commands" msgstr "Стандартные команды NVDA" -#: addon/globalPlugins/brailleExtender/addonDoc.py:57 -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/addonDoc.py:182 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Modifier keys" msgstr "Модификаторы" -#: addon/globalPlugins/brailleExtender/addonDoc.py:59 +#: addon/globalPlugins/brailleExtender/addonDoc.py:185 msgid "Quick navigation keys" msgstr "Клавиши быстрой навигации" -#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +#: addon/globalPlugins/brailleExtender/addonDoc.py:189 msgid "Rotor feature" msgstr "Функция ротора" -#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +#: addon/globalPlugins/brailleExtender/addonDoc.py:197 msgid "Gadget commands" msgstr "специальные команды дополнения" -#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +#: addon/globalPlugins/brailleExtender/addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Сочетания клавиш назначенные вне дополнения" -#: addon/globalPlugins/brailleExtender/addonDoc.py:85 +#: addon/globalPlugins/brailleExtender/addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "установленные профили клавиатуры брайлевского ввода" -#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +#: addon/globalPlugins/brailleExtender/addonDoc.py:241 msgid "Keyboard configurations are" msgstr "доступны следующие профили конфигурации брайлевской клавиатуры:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +#: addon/globalPlugins/brailleExtender/addonDoc.py:250 msgid "Warning:" msgstr "предупреждение" -#: addon/globalPlugins/brailleExtender/addonDoc.py:94 +#: addon/globalPlugins/brailleExtender/addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "У Braille extender ещё нет жестов для вашего брайдевского дисплея." -#: addon/globalPlugins/brailleExtender/addonDoc.py:95 +#: addon/globalPlugins/brailleExtender/addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -847,172 +1152,338 @@ msgstr "" "однако вы можете самостоятельно назначить сочетания горячих клавиш для " "большинства функций Braille Extender в настройках жестов ввода NVDA." -#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +#: addon/globalPlugins/brailleExtender/addonDoc.py:259 msgid "Add-on gestures on the system keyboard" msgstr "Жесты дополнения на системной клавиатуре" -#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +#: addon/globalPlugins/brailleExtender/addonDoc.py:282 msgid "Arabic" msgstr "Арабский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +#: addon/globalPlugins/brailleExtender/addonDoc.py:283 msgid "Croatian" msgstr "хорватский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:120 +#: addon/globalPlugins/brailleExtender/addonDoc.py:284 msgid "Danish" msgstr "Датский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +#: addon/globalPlugins/brailleExtender/addonDoc.py:285 +msgid "English and French" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" msgstr "немецкий" -#: addon/globalPlugins/brailleExtender/addonDoc.py:122 +#: addon/globalPlugins/brailleExtender/addonDoc.py:287 msgid "Hebrew" msgstr "Иврит" -#: addon/globalPlugins/brailleExtender/addonDoc.py:123 +#: addon/globalPlugins/brailleExtender/addonDoc.py:288 msgid "Persian" msgstr "персидский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:124 +#: addon/globalPlugins/brailleExtender/addonDoc.py:289 msgid "Polish" msgstr "Польский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:125 +#: addon/globalPlugins/brailleExtender/addonDoc.py:290 msgid "Russian" msgstr "русский" -#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +#: addon/globalPlugins/brailleExtender/addonDoc.py:293 msgid "Copyrights and acknowledgements" msgstr "Авторские права и благодарность" -#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +#: addon/globalPlugins/brailleExtender/addonDoc.py:299 msgid "and other contributors" msgstr "и другие сотрудники" -#: addon/globalPlugins/brailleExtender/addonDoc.py:133 +#: addon/globalPlugins/brailleExtender/addonDoc.py:303 msgid "Translators" msgstr "переводчики" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:313 msgid "Code contributions and other" msgstr "Внесение в код и другие" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "" "содержит Дополнительные фрагменты кода от третьих лиц, защищенные авторским " "правом. " -#: addon/globalPlugins/brailleExtender/addonDoc.py:142 +#: addon/globalPlugins/brailleExtender/addonDoc.py:321 msgid "Thanks also to" msgstr "спасибо также" -#: addon/globalPlugins/brailleExtender/addonDoc.py:144 +#: addon/globalPlugins/brailleExtender/addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "" "а Также, спасибо всем вам за ваши коментарии пересланные по электронной " "почте." -#: addon/globalPlugins/brailleExtender/addonDoc.py:146 +#: addon/globalPlugins/brailleExtender/addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "помощь для %s" -#: addon/globalPlugins/brailleExtender/addonDoc.py:162 +#: addon/globalPlugins/brailleExtender/addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "эмулирует нажатие %s на системной клавиатуре." -#: addon/globalPlugins/brailleExtender/addonDoc.py:169 +#: addon/globalPlugins/brailleExtender/addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "описание функции данного сочитания клавиш пока недоступно." -#: addon/globalPlugins/brailleExtender/addonDoc.py:187 +#: addon/globalPlugins/brailleExtender/addonDoc.py:377 msgid "caps lock" msgstr "caps lock" -#: addon/globalPlugins/brailleExtender/configBE.py:40 -#: addon/globalPlugins/brailleExtender/configBE.py:47 +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:105 +msgid "all tables" +msgstr "Все таблицы" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:116 +msgid "Advanced input mode dictionary" +msgstr "Словарь расширенного ввода" + +#. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. +#. Translators: The label for the combo box of dictionary entries in table dictionary dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:123 +#: addon/globalPlugins/brailleExtender/dictionaries.py:132 +msgid "Dictionary &entries" +msgstr "Словарные &статьи" + +#. Translators: The label for a column in dictionary entries list used to identify comments for the entry. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 +msgid "Abbreviation" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 +msgid "Replace by" +msgstr "Заменить с" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:133 +msgid "Input table" +msgstr "Таблица ввода" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. +#. Translators: The label for a button in table dictionaries dialog to add new entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:139 +#: addon/globalPlugins/brailleExtender/dictionaries.py:149 +msgid "&Add" +msgstr "&Добавить" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. +#. Translators: The label for a button in table dictionaries dialog to edit existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:145 +#: addon/globalPlugins/brailleExtender/dictionaries.py:155 +msgid "&Edit" +msgstr "&Редактировать" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. +#. Translators: The label for a button in table dictionaries dialog to remove existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:151 +#: addon/globalPlugins/brailleExtender/dictionaries.py:161 +msgid "Re&move" +msgstr "&Удалить" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:159 +msgid "&Open the dictionary file in an editor" +msgstr "&Открыть файл словаря в текстовом редакторе" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. +#. Translators: The label for a button in table dictionaries dialog to reload dictionary. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:164 +#: addon/globalPlugins/brailleExtender/dictionaries.py:174 +msgid "&Reload the dictionary" +msgstr "&Перезагрузить словарь" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:177 +#: addon/globalPlugins/brailleExtender/dictionaries.py:218 +msgid "Add Dictionary Entry" +msgstr "Добавить словарь" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 +msgid "File doesn't exist yet" +msgstr "" + +#. Translators: This is the label for the edit dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 +#: addon/globalPlugins/brailleExtender/dictionaries.py:290 +msgid "Edit Dictionary Entry" +msgstr "Редактировать словарную статью" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:247 +msgid "&Abreviation" +msgstr "&Сокращение" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:252 +msgid "&Replace by" +msgstr "&Заменить с" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 +msgid "Advanced input mode" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 +msgid "E&xit the advanced input mode after typing one pattern" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 +msgid "Escape sign for Unicode values" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:54 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:248 +msgid "Use braille table behavior" +msgstr "Использовать поведение брайлевской таблицы" + +#: addon/globalPlugins/brailleExtender/configBE.py:55 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:249 +msgid "Dots 1-8 (⣿)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:250 +msgid "Dots 1-6 (⠿)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:251 +msgid "Empty cell (⠀)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:58 +msgid "Other dot pattern (e.g.: 6-123456)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:59 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:253 +msgid "Question mark (depending output table)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:60 +msgid "Other sign/pattern (e.g.: \\, ??)" +msgstr "" + #: addon/globalPlugins/brailleExtender/configBE.py:61 -#: addon/globalPlugins/brailleExtender/settings.py:421 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:255 +msgid "Hexadecimal, Liblouis style" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:256 +msgid "Hexadecimal, HUC8" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:257 +msgid "Hexadecimal, HUC6" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:70 +#: addon/globalPlugins/brailleExtender/configBE.py:77 +#: addon/globalPlugins/brailleExtender/configBE.py:91 +#: addon/globalPlugins/brailleExtender/settings.py:426 msgid "none" msgstr "Ничего" -#: addon/globalPlugins/brailleExtender/configBE.py:41 +#: addon/globalPlugins/brailleExtender/configBE.py:71 msgid "braille only" msgstr "Только брайль" -#: addon/globalPlugins/brailleExtender/configBE.py:42 +#: addon/globalPlugins/brailleExtender/configBE.py:72 msgid "speech only" msgstr "Только речь" -#: addon/globalPlugins/brailleExtender/configBE.py:43 -#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/configBE.py:73 +#: addon/globalPlugins/brailleExtender/configBE.py:94 msgid "both" msgstr "брайль и речь" -#: addon/globalPlugins/brailleExtender/configBE.py:48 +#: addon/globalPlugins/brailleExtender/configBE.py:78 msgid "dots 7 and 8" msgstr "точки 7 и 8" -#: addon/globalPlugins/brailleExtender/configBE.py:49 +#: addon/globalPlugins/brailleExtender/configBE.py:79 msgid "dot 7" msgstr "точка 7" -#: addon/globalPlugins/brailleExtender/configBE.py:50 +#: addon/globalPlugins/brailleExtender/configBE.py:80 msgid "dot 8" msgstr "точка 8" -#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/configBE.py:86 msgid "stable" msgstr "стабильный" -#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/configBE.py:87 msgid "development" msgstr "для разработчиков" -#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/configBE.py:92 msgid "focus mode" msgstr "Режим фокуса" -#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/configBE.py:93 msgid "review mode" msgstr "Режим просмотра" -#: addon/globalPlugins/brailleExtender/configBE.py:92 +#: addon/globalPlugins/brailleExtender/configBE.py:102 +msgid "Fill a cell in two stages on both sides" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:103 +msgid "Fill a cell in two stages on one side (space = empty side)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:104 +msgid "" +"Fill a cell dots by dots (each dot is a toggle, press space to validate the " +"character)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" msgstr "Последний известный" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:29 +#: addon/globalPlugins/brailleExtender/dictionaries.py:30 msgid "Sign" msgstr "Знак" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:31 +#: addon/globalPlugins/brailleExtender/dictionaries.py:32 msgid "Math" msgstr "Математика" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:33 +#: addon/globalPlugins/brailleExtender/dictionaries.py:34 msgid "Replace" msgstr "Замена" -#: addon/globalPlugins/brailleExtender/dictionaries.py:41 +#: addon/globalPlugins/brailleExtender/dictionaries.py:42 msgid "Both (input and output)" msgstr "Ввод и вывод одновременно" -#: addon/globalPlugins/brailleExtender/dictionaries.py:42 +#: addon/globalPlugins/brailleExtender/dictionaries.py:43 msgid "Backward (input only)" msgstr "назад, только ввод" -#: addon/globalPlugins/brailleExtender/dictionaries.py:43 +#: addon/globalPlugins/brailleExtender/dictionaries.py:44 msgid "Forward (output only)" msgstr "вперёд, только вывод" -#: addon/globalPlugins/brailleExtender/dictionaries.py:110 +#: addon/globalPlugins/brailleExtender/dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1021,121 +1492,87 @@ msgstr "" "Одна или больше одной ошибки присутствуют в словарных таблицах. Спорные " "таблицы: %s. Как последствие, эти словари не будут загружены." -#. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:131 -msgid "Dictionary &entries" -msgstr "Словарные &статьи" - #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon/globalPlugins/brailleExtender/dictionaries.py:134 +#: addon/globalPlugins/brailleExtender/dictionaries.py:135 msgid "Comment" msgstr "комментарий" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon/globalPlugins/brailleExtender/dictionaries.py:136 +#: addon/globalPlugins/brailleExtender/dictionaries.py:137 msgid "Pattern" msgstr "Образец" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon/globalPlugins/brailleExtender/dictionaries.py:138 +#: addon/globalPlugins/brailleExtender/dictionaries.py:139 msgid "Representation" msgstr "отображение" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:140 +#: addon/globalPlugins/brailleExtender/dictionaries.py:141 msgid "Opcode" msgstr "Оператор" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:142 +#: addon/globalPlugins/brailleExtender/dictionaries.py:143 msgid "Direction" msgstr "смер" -#. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:148 -msgid "&Add" -msgstr "&Добавить" - -#. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:154 -msgid "&Edit" -msgstr "&Редактировать" - -#. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:160 -msgid "Re&move" -msgstr "&Удалить" - -#. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon/globalPlugins/brailleExtender/dictionaries.py:168 +#. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Отрыть актуалный файл словаря в редакторе" -#. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon/globalPlugins/brailleExtender/dictionaries.py:173 -msgid "&Reload the dictionary" -msgstr "&Перезагрузить словарь" - -#: addon/globalPlugins/brailleExtender/dictionaries.py:216 -msgid "Add Dictionary Entry" -msgstr "Добавить словарь" - -#. Translators: This is the label for the edit dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:288 -msgid "Edit Dictionary Entry" -msgstr "Редактировать словарную статью" - #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:294 +#: addon/globalPlugins/brailleExtender/dictionaries.py:296 msgid "Dictionary" msgstr "Словарь" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Global" msgstr "Глобальный" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Table" msgstr "таблица" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Temporary" msgstr "временный" -#: addon/globalPlugins/brailleExtender/dictionaries.py:302 +#: addon/globalPlugins/brailleExtender/dictionaries.py:304 msgid "See &entries" msgstr "&Посмотреть статьи" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:307 +#: addon/globalPlugins/brailleExtender/dictionaries.py:309 msgid "&Text pattern/sign" msgstr "&Образец текста/знак" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:312 +#: addon/globalPlugins/brailleExtender/dictionaries.py:314 msgid "&Braille representation" msgstr "&Брайлевское отображение" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:316 +#: addon/globalPlugins/brailleExtender/dictionaries.py:318 msgid "&Comment" msgstr "&Комментарий" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:320 +#: addon/globalPlugins/brailleExtender/dictionaries.py:322 msgid "&Opcode" msgstr "&Оператор" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:325 +#: addon/globalPlugins/brailleExtender/dictionaries.py:327 msgid "&Direction" msgstr "&Смер" -#: addon/globalPlugins/brailleExtender/dictionaries.py:366 +#: addon/globalPlugins/brailleExtender/dictionaries.py:368 msgid "Text pattern/sign field is empty." msgstr "Поле Образца текста/знак - пустое." -#: addon/globalPlugins/brailleExtender/dictionaries.py:373 +#: addon/globalPlugins/brailleExtender/dictionaries.py:375 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1144,7 +1581,7 @@ msgstr "" "Неправильный внос для поля 'образец текста/знак'. Надо определить знак с " "оператором. Напр: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:377 +#: addon/globalPlugins/brailleExtender/dictionaries.py:379 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1153,7 +1590,7 @@ msgstr "" "Поле 'представление брайля' пусто, Надо что-нибудь определить с этим " "оператором. Напр: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:381 +#: addon/globalPlugins/brailleExtender/dictionaries.py:383 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1162,191 +1599,208 @@ msgstr "" "неправильный внос для поля 'отображение брайля'. Тут надо вписывать точки. " "напр.: %s" -#: addon/globalPlugins/brailleExtender/settings.py:32 +#. Translators: Reported when translation didn't succeed due to unsupported input. +#: addon/globalPlugins/brailleExtender/patchs.py:376 +msgid "Unsupported input" +msgstr "Неподдержанный ввод" + +#: addon/globalPlugins/brailleExtender/patchs.py:435 +msgid "Unsupported input method" +msgstr "Метод ввода не поддерживается" + +#: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "" "Имплементация этой фукции продлится некоторое время. Спасибо з терпение." #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:38 -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:40 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "General" msgstr "Общее" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:45 +#: addon/globalPlugins/brailleExtender/settings.py:47 msgid "Check for &updates automatically" msgstr "Проверять наличие &обновлений автоматически" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:49 +#: addon/globalPlugins/brailleExtender/settings.py:51 msgid "Add-on update channel" msgstr "Канал обновлений" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:56 +#: addon/globalPlugins/brailleExtender/settings.py:58 msgid "Say current line while scrolling in" msgstr "Произнести актуальную строку при прокрутке в режиме" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:60 +#: addon/globalPlugins/brailleExtender/settings.py:62 msgid "Speech interrupt when scrolling on same line" msgstr "Прервать речь, когда прокрутка находится в той же самой строке" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:64 +#: addon/globalPlugins/brailleExtender/settings.py:66 msgid "Speech interrupt for unknown gestures" msgstr "Прервать речь при выполнении неизвестного жеста" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:68 +#: addon/globalPlugins/brailleExtender/settings.py:70 msgid "Announce the character while moving with routing buttons" msgstr "" "озвучивать по символам во время навигации с помощью клавиш маршрутизации " "курсора." #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:72 +#: addon/globalPlugins/brailleExtender/settings.py:74 msgid "Use cursor keys to route cursor in review mode" msgstr "Использовать клавиши стрелок для перемещения фокуса в режиме просмотра" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:76 +#: addon/globalPlugins/brailleExtender/settings.py:78 msgid "Display time and date infinitely" msgstr "Всегда показывать дату и время" -#: addon/globalPlugins/brailleExtender/settings.py:78 +#: addon/globalPlugins/brailleExtender/settings.py:80 msgid "Automatic review mode for apps with terminal" msgstr "автоматически переходить в режим просмотра в терминальных приложениях" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:82 +#: addon/globalPlugins/brailleExtender/settings.py:84 msgid "Feedback for volume change in" msgstr "оповещать об изменении громкости в" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:90 +#: addon/globalPlugins/brailleExtender/settings.py:92 msgid "Feedback for modifier keys in" msgstr "объявлять модификаторы" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:96 +#: addon/globalPlugins/brailleExtender/settings.py:98 msgid "Play beeps for modifier keys" msgstr "проигрывать звуковой сигнал после нажатия кнопок НВДА" -#: addon/globalPlugins/brailleExtender/settings.py:101 +#: addon/globalPlugins/brailleExtender/settings.py:103 msgid "Right margin on cells" msgstr " отступление клеток по правому краю" -#: addon/globalPlugins/brailleExtender/settings.py:101 -#: addon/globalPlugins/brailleExtender/settings.py:113 -#: addon/globalPlugins/brailleExtender/settings.py:356 +#: addon/globalPlugins/brailleExtender/settings.py:103 +#: addon/globalPlugins/brailleExtender/settings.py:115 +#: addon/globalPlugins/brailleExtender/settings.py:366 msgid "for the currrent braille display" msgstr "для актуального брайлевского дисплея" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:105 +#: addon/globalPlugins/brailleExtender/settings.py:107 msgid "Braille keyboard configuration" msgstr "Настройки брайлевской клавиатуры" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:109 +#: addon/globalPlugins/brailleExtender/settings.py:111 msgid "Reverse forward scroll and back scroll buttons" msgstr "заменить левую и правую кнопки прокрутки" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:113 +#: addon/globalPlugins/brailleExtender/settings.py:115 msgid "Autoscroll delay (ms)" msgstr "Задержка автопрокрутки в милисекундах" -#: addon/globalPlugins/brailleExtender/settings.py:114 +#: addon/globalPlugins/brailleExtender/settings.py:116 msgid "First braille display preferred" msgstr "Первый предпочитаемый брайлевский дисплей" -#: addon/globalPlugins/brailleExtender/settings.py:116 +#: addon/globalPlugins/brailleExtender/settings.py:118 msgid "Second braille display preferred" msgstr "Второй предпочитаемый брайлевский дисплей" +#: addon/globalPlugins/brailleExtender/settings.py:120 +msgid "One-handed mode" +msgstr "Режим одной руки" + +#: addon/globalPlugins/brailleExtender/settings.py:124 +msgid "One hand mode method" +msgstr "Метод режима одной руки" + #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:149 +#: addon/globalPlugins/brailleExtender/settings.py:159 msgid "Text attributes" msgstr "Форматирование текста" -#: addon/globalPlugins/brailleExtender/settings.py:153 -#: addon/globalPlugins/brailleExtender/settings.py:200 +#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:210 msgid "Enable this feature" msgstr "Включить эту функцию" -#: addon/globalPlugins/brailleExtender/settings.py:155 +#: addon/globalPlugins/brailleExtender/settings.py:165 msgid "Show spelling errors with" msgstr "Показывать орфографические ошибки с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:157 +#: addon/globalPlugins/brailleExtender/settings.py:167 msgid "Show bold with" msgstr "Показывать жирный шрифт с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:159 +#: addon/globalPlugins/brailleExtender/settings.py:169 msgid "Show italic with" msgstr "Показывать курсив с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:161 +#: addon/globalPlugins/brailleExtender/settings.py:171 msgid "Show underline with" msgstr "Показывать подчёркивание с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:173 msgid "Show strikethrough with" msgstr "показывать зачеркнутые буквы с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:165 +#: addon/globalPlugins/brailleExtender/settings.py:175 msgid "Show subscript with" msgstr "Показывать подстрочные буквы с помощью" -#: addon/globalPlugins/brailleExtender/settings.py:167 +#: addon/globalPlugins/brailleExtender/settings.py:177 msgid "Show superscript with" msgstr "Показывать надстрочные буквы с помощью" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:193 +#: addon/globalPlugins/brailleExtender/settings.py:203 msgid "Role labels" msgstr "Сокращения элементов" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Role category" msgstr "Категория элемента" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Landmark" msgstr "область" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Positive state" msgstr "положительное состояние" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Negative state" msgstr "Отрицательное состояние" -#: addon/globalPlugins/brailleExtender/settings.py:206 +#: addon/globalPlugins/brailleExtender/settings.py:216 msgid "Role" msgstr "тип элемента" -#: addon/globalPlugins/brailleExtender/settings.py:208 +#: addon/globalPlugins/brailleExtender/settings.py:218 msgid "Actual or new label" msgstr "текущая или новая метка" -#: addon/globalPlugins/brailleExtender/settings.py:212 +#: addon/globalPlugins/brailleExtender/settings.py:222 msgid "&Reset this role label" msgstr "вернуть сокращение для этого элемента к настройкам поумолчанию" -#: addon/globalPlugins/brailleExtender/settings.py:214 +#: addon/globalPlugins/brailleExtender/settings.py:224 msgid "Reset all role labels" msgstr "вернуть все метки к настройкам поумолчанию." -#: addon/globalPlugins/brailleExtender/settings.py:279 +#: addon/globalPlugins/brailleExtender/settings.py:289 msgid "You have no customized label." msgstr "у вас нет пользовательских меток." -#: addon/globalPlugins/brailleExtender/settings.py:282 +#: addon/globalPlugins/brailleExtender/settings.py:292 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1355,99 +1809,94 @@ msgstr "" "вы действительно хотите вернуть все метки к настройкам поумолчанию? в данный " "момент у вас установлено %d пользовательских меток." -#: addon/globalPlugins/brailleExtender/settings.py:283 -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:293 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Confirmation" msgstr "подтверждение" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:325 +#: addon/globalPlugins/brailleExtender/settings.py:335 msgid "Braille tables" msgstr "Брайлевские таблицы" -#: addon/globalPlugins/brailleExtender/settings.py:330 +#: addon/globalPlugins/brailleExtender/settings.py:340 msgid "Use the current input table" msgstr "Использовать актуальную таблицу ввода" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "Prefered braille tables" msgstr "Предпочитаемые брайлевские таблицы" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "press F1 for help" msgstr "Для помощи, нажмите ф1" -#: addon/globalPlugins/brailleExtender/settings.py:343 +#: addon/globalPlugins/brailleExtender/settings.py:353 msgid "Input braille table for keyboard shortcut keys" msgstr "таблица брайлевского ввода для сочитаний горячих клавиш." -#: addon/globalPlugins/brailleExtender/settings.py:345 +#: addon/globalPlugins/brailleExtender/settings.py:355 msgid "None" msgstr "Ничего" -#: addon/globalPlugins/brailleExtender/settings.py:348 +#: addon/globalPlugins/brailleExtender/settings.py:358 msgid "Secondary output table to use" msgstr "Вторичная брайлевская таблица для исьпользования" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:352 -msgid "Display tab signs as spaces" -msgstr "Показывать знаки табуляции как пробелы" +#: addon/globalPlugins/brailleExtender/settings.py:362 +msgid "Display &tab signs as spaces" +msgstr "Показывать знаки табуляции как пробел&ы" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:356 -msgid "Number of space for a tab sign" -msgstr "Число пробелов для одного знака табуляции" +#: addon/globalPlugins/brailleExtender/settings.py:366 +msgid "Number of &space for a tab sign" +msgstr "Число &пробелов для одного знака табуляции" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:358 -msgid "Prevent undefined characters with Hexadecimal Unicode value" -msgstr "Запрещение показывания юникод номеров при неопределённых знаках" +#: addon/globalPlugins/brailleExtender/settings.py:367 +msgid "Alternative and &custom braille tables" +msgstr "Альтернативные и &пользовательские брайлевские таблицы" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:361 +#: addon/globalPlugins/brailleExtender/settings.py:387 msgid "" -"Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +"NVDA must be restarted for some new options to take effect. Do you want " +"restart now?" msgstr "" -"Показывать неопределённые знаки как например: 0 для пустой клетки, 12345678, " -"6-123456)" - -#: addon/globalPlugins/brailleExtender/settings.py:363 -msgid "Alternative and &custom braille tables" -msgstr "Альтернативные и &пользовательские брайлевские таблицы" +"Чтобы некоторые новые опции вступили в силу, NVDA будет перезагружен. Хотите " +"перезагрузить её сейчас?" -#: addon/globalPlugins/brailleExtender/settings.py:420 +#: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" msgstr "Ввод и вывод" -#: addon/globalPlugins/brailleExtender/settings.py:422 +#: addon/globalPlugins/brailleExtender/settings.py:427 msgid "input only" msgstr "Только ввод" -#: addon/globalPlugins/brailleExtender/settings.py:423 +#: addon/globalPlugins/brailleExtender/settings.py:428 msgid "output only" msgstr "Только вывод" -#: addon/globalPlugins/brailleExtender/settings.py:454 +#: addon/globalPlugins/brailleExtender/settings.py:459 #, python-format msgid "Table name: %s" msgstr "Имя таблицы: %s" -#: addon/globalPlugins/brailleExtender/settings.py:455 +#: addon/globalPlugins/brailleExtender/settings.py:460 #, python-format msgid "File name: %s" msgstr "Имя файла: %s" -#: addon/globalPlugins/brailleExtender/settings.py:456 +#: addon/globalPlugins/brailleExtender/settings.py:461 #, python-format msgid "In switches: %s" msgstr "В роторах: %s" -#: addon/globalPlugins/brailleExtender/settings.py:457 +#: addon/globalPlugins/brailleExtender/settings.py:462 msgid "About this table" msgstr "Об этой таблице" -#: addon/globalPlugins/brailleExtender/settings.py:460 +#: addon/globalPlugins/brailleExtender/settings.py:465 msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" @@ -1457,7 +1906,7 @@ msgstr "" "предпочетаемую таблицу в список таблиц ввода и вывода для быстрого " "переключения между ними." -#: addon/globalPlugins/brailleExtender/settings.py:461 +#: addon/globalPlugins/brailleExtender/settings.py:466 msgid "" "You can also press 'comma' key to get the file name of the selected table " "and 'semicolon' key to view miscellaneous infos on the selected table" @@ -1465,126 +1914,126 @@ msgstr "" "вы также можете нажать запятую, чтобы узнать имя файла выбранной таблицы или " "многоточее, чтобы получить дополнительную информацию о таблице." -#: addon/globalPlugins/brailleExtender/settings.py:462 +#: addon/globalPlugins/brailleExtender/settings.py:467 msgid "Contextual help" msgstr "Контекстная помощь" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:478 +#: addon/globalPlugins/brailleExtender/settings.py:483 msgid "Custom braille tables" msgstr "Модифицированные брайлевские таблицы" -#: addon/globalPlugins/brailleExtender/settings.py:488 +#: addon/globalPlugins/brailleExtender/settings.py:493 msgid "Use a custom table as input table" msgstr "Использовать модифицированную таблицу для ввода" -#: addon/globalPlugins/brailleExtender/settings.py:489 +#: addon/globalPlugins/brailleExtender/settings.py:494 msgid "Use a custom table as output table" msgstr "Использовать модифицированную таблицу как таблицу ввода" -#: addon/globalPlugins/brailleExtender/settings.py:490 +#: addon/globalPlugins/brailleExtender/settings.py:495 msgid "&Add a braille table" msgstr "&Добавить брайлевскую таблицу" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:514 +#: addon/globalPlugins/brailleExtender/settings.py:519 msgid "Add a braille table" msgstr "добавление брайлевской таблицы" -#: addon/globalPlugins/brailleExtender/settings.py:520 +#: addon/globalPlugins/brailleExtender/settings.py:525 msgid "Display name" msgstr "Имя дисплея" -#: addon/globalPlugins/brailleExtender/settings.py:521 +#: addon/globalPlugins/brailleExtender/settings.py:526 msgid "Description" msgstr "Описание" -#: addon/globalPlugins/brailleExtender/settings.py:522 +#: addon/globalPlugins/brailleExtender/settings.py:527 msgid "Path" msgstr "путь" -#: addon/globalPlugins/brailleExtender/settings.py:523 -#: addon/globalPlugins/brailleExtender/settings.py:594 +#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:599 msgid "&Browse" msgstr "обзор" -#: addon/globalPlugins/brailleExtender/settings.py:526 +#: addon/globalPlugins/brailleExtender/settings.py:531 msgid "Contracted (grade 2) braille table" msgstr "Брайлевская таблица 2-ой ступени (краткопись)" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Available for" msgstr "Доступны для" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input and output" msgstr "Ввод и вывод" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input only" msgstr "Только ввод" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Output only" msgstr "Только вывод" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Choose a table file" msgstr "Выберьте файл брайлевской таблицы" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Liblouis table files" msgstr "Файлы таблиц Либлуис" -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Please specify a display name." msgstr "пожалуйста, уточните модель брайлевского дисплея." -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Invalid display name" msgstr "Неправильое имя брайлевского дисплея" -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 #, python-format msgid "The specified path is not valid (%s)." msgstr "Определённый путь неправильный (%s)." -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 msgid "Invalid path" msgstr "Неправильный путь" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:578 +#: addon/globalPlugins/brailleExtender/settings.py:583 msgid "Quick launches" msgstr "Быстрый запуск" -#: addon/globalPlugins/brailleExtender/settings.py:589 +#: addon/globalPlugins/brailleExtender/settings.py:594 msgid "&Gestures" msgstr "&Жесты" -#: addon/globalPlugins/brailleExtender/settings.py:592 +#: addon/globalPlugins/brailleExtender/settings.py:597 msgid "Location (file path, URL or command)" msgstr "Местоположение (путь к файлу, URL или жест)" -#: addon/globalPlugins/brailleExtender/settings.py:595 +#: addon/globalPlugins/brailleExtender/settings.py:600 msgid "&Remove this gesture" msgstr "удалить этот жест" -#: addon/globalPlugins/brailleExtender/settings.py:596 +#: addon/globalPlugins/brailleExtender/settings.py:601 msgid "&Add a quick launch" msgstr "добавить клавишу для быстрого запуска" -#: addon/globalPlugins/brailleExtender/settings.py:625 +#: addon/globalPlugins/brailleExtender/settings.py:630 msgid "Unable to associate this gesture. Please enter another, now" msgstr "" "невозможно ассоциировать данный жест. пожалуйста, введите другой жест сейчас." -#: addon/globalPlugins/brailleExtender/settings.py:630 +#: addon/globalPlugins/brailleExtender/settings.py:635 msgid "Out of capture" msgstr "Вне жеста" -#: addon/globalPlugins/brailleExtender/settings.py:632 +#: addon/globalPlugins/brailleExtender/settings.py:637 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -1593,21 +2042,21 @@ msgstr "" "Пожалуйста, введите жест с ващего брайлевского дисплея " "{NAME_BRAILLE_DISPLAY}. Для отмены, пожалуйста, нажмите пробел." -#: addon/globalPlugins/brailleExtender/settings.py:640 +#: addon/globalPlugins/brailleExtender/settings.py:645 #, python-format msgid "OK. The gesture captured is %s" msgstr "OK. жест назначен на клавиши %s" -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Are you sure to want to delete this shorcut?" msgstr "вы действительно хотите удалить данное сочитание горячих клавиш?" -#: addon/globalPlugins/brailleExtender/settings.py:666 +#: addon/globalPlugins/brailleExtender/settings.py:671 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} удален" -#: addon/globalPlugins/brailleExtender/settings.py:677 +#: addon/globalPlugins/brailleExtender/settings.py:682 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -1615,107 +2064,154 @@ msgstr "" "Пожалуйста, введите жалаемый вами жест для данной функции. нажмите \"пробел" "\" для отменения" -#: addon/globalPlugins/brailleExtender/settings.py:680 +#: addon/globalPlugins/brailleExtender/settings.py:685 msgid "Don't add a quick launch" msgstr "Ек добавлять быстрый запуск" -#: addon/globalPlugins/brailleExtender/settings.py:706 +#: addon/globalPlugins/brailleExtender/settings.py:711 #, python-brace-format msgid "Choose a file for {0}" msgstr "Выберьте фал для {0}" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Please create or select a quick launch first" msgstr "" "Пожалуйста, вам надо сначала создать или выбрать команду быстрого запуска" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Error" msgstr "Ошибка" -#: addon/globalPlugins/brailleExtender/settings.py:723 +#: addon/globalPlugins/brailleExtender/settings.py:728 msgid "Profiles editor" msgstr "редактор профилей" -#: addon/globalPlugins/brailleExtender/settings.py:734 +#: addon/globalPlugins/brailleExtender/settings.py:739 msgid "You must have a braille display to editing a profile" msgstr "Чтобы редактировать профиль, вам нужен брайлевский дисплей" -#: addon/globalPlugins/brailleExtender/settings.py:738 +#: addon/globalPlugins/brailleExtender/settings.py:743 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "папка профилей отсутствует или недоступна. невозможно редактировать профили." -#: addon/globalPlugins/brailleExtender/settings.py:744 +#: addon/globalPlugins/brailleExtender/settings.py:749 msgid "Profile to edit" msgstr "Профиль для редактирования" -#: addon/globalPlugins/brailleExtender/settings.py:750 +#: addon/globalPlugins/brailleExtender/settings.py:755 msgid "Gestures category" msgstr "Категория жестов" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Single keys" msgstr "ординарные клавиши" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Practical shortcuts" msgstr "Полезные клавишы" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "NVDA commands" msgstr "Команды NVDA" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Addon features" msgstr "Функции дополнения" -#: addon/globalPlugins/brailleExtender/settings.py:755 +#: addon/globalPlugins/brailleExtender/settings.py:760 msgid "Gestures list" msgstr "Список жестов" -#: addon/globalPlugins/brailleExtender/settings.py:764 +#: addon/globalPlugins/brailleExtender/settings.py:769 msgid "Add gesture" msgstr "Добавить жест" -#: addon/globalPlugins/brailleExtender/settings.py:766 +#: addon/globalPlugins/brailleExtender/settings.py:771 msgid "Remove this gesture" msgstr "Удалить этот жест" -#: addon/globalPlugins/brailleExtender/settings.py:769 +#: addon/globalPlugins/brailleExtender/settings.py:774 msgid "Assign a braille gesture" msgstr "назначте брайлевский жест" -#: addon/globalPlugins/brailleExtender/settings.py:776 +#: addon/globalPlugins/brailleExtender/settings.py:781 msgid "Remove this profile" msgstr "Удалить этот профиль" -#: addon/globalPlugins/brailleExtender/settings.py:779 +#: addon/globalPlugins/brailleExtender/settings.py:784 msgid "Add a profile" msgstr "Добавить профиль" -#: addon/globalPlugins/brailleExtender/settings.py:785 +#: addon/globalPlugins/brailleExtender/settings.py:790 msgid "Name for the new profile" msgstr "Имя нового профиля" -#: addon/globalPlugins/brailleExtender/settings.py:791 +#: addon/globalPlugins/brailleExtender/settings.py:796 msgid "Create" msgstr "Создать" -#: addon/globalPlugins/brailleExtender/settings.py:854 +#: addon/globalPlugins/brailleExtender/settings.py:859 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "невозможно загрузить данный профиль. файл поврежден или недоступен." -#: addon/globalPlugins/brailleExtender/settings.py:873 +#: addon/globalPlugins/brailleExtender/settings.py:878 msgid "Undefined" msgstr "Неопределено" #. Translators: title of add-on parameters dialog. -#: addon/globalPlugins/brailleExtender/settings.py:902 +#: addon/globalPlugins/brailleExtender/settings.py:909 msgid "Settings" msgstr "Настройки" +#. Translators: label of a dialog. +#: addon/globalPlugins/brailleExtender/undefinedChars.py:244 +msgid "Representation &method" +msgstr "&Метод отображения" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:252 +#, python-brace-format +msgid "Other dot pattern (e.g.: {dotPatternSample})" +msgstr "Другая комбинация точек (напр: {dotPatternSample})" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:254 +#, python-brace-format +msgid "Other sign/pattern (e.g.: {signPatternSample})" +msgstr "Другой знак или комбинация точек (например.: {signPatternSample})" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:272 +msgid "Specify another pattern" +msgstr "пожалуйста, определите другие точки" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:276 +msgid "Describe undefined characters if possible" +msgstr "Описывать неопределенные знаки, если возможно" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:284 +msgid "Also describe extended characters (e.g.: country flags)" +msgstr "Такле описывает расширенные знаки (такие как.: флаги государств)" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:291 +msgid "Start tag" +msgstr "Начальная разметка" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:296 +msgid "End tag" +msgstr "Окончательная разметка" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:307 +msgid "Language" +msgstr "Язык" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:310 +msgid "Use the current output table" +msgstr "Использовать актуальную таблицу вывода" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:323 +msgid "Braille table" +msgstr "Брайлевская таблица" + #: addon/globalPlugins/brailleExtender/updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" @@ -1747,69 +2243,69 @@ msgstr "Диалоговое окно обновления уже открыто msgid "{addonName}'s update" msgstr "Обновление {addonName}" -#: addon/globalPlugins/brailleExtender/utils.py:189 +#: addon/globalPlugins/brailleExtender/utils.py:194 msgid "Reload successful" msgstr "Перезагрузка успешна" -#: addon/globalPlugins/brailleExtender/utils.py:192 +#: addon/globalPlugins/brailleExtender/utils.py:197 msgid "Reload failed" msgstr "Перезагрузка неуспешна" -#: addon/globalPlugins/brailleExtender/utils.py:197 -#: addon/globalPlugins/brailleExtender/utils.py:207 +#: addon/globalPlugins/brailleExtender/utils.py:203 +#: addon/globalPlugins/brailleExtender/utils.py:218 msgid "Not a character" msgstr "не является знаком" -#: addon/globalPlugins/brailleExtender/utils.py:201 -msgid "unknown" -msgstr "Неизвестный" +#: addon/globalPlugins/brailleExtender/utils.py:208 +msgid "N/A" +msgstr "недоступно" -#: addon/globalPlugins/brailleExtender/utils.py:330 +#: addon/globalPlugins/brailleExtender/utils.py:312 msgid "Available combinations" msgstr "Доступные сочетания" -#: addon/globalPlugins/brailleExtender/utils.py:332 +#: addon/globalPlugins/brailleExtender/utils.py:314 msgid "One combination available" msgstr "Одно сочетание доступно" -#: addon/globalPlugins/brailleExtender/utils.py:349 +#: addon/globalPlugins/brailleExtender/utils.py:325 msgid "space" msgstr "пробел" -#: addon/globalPlugins/brailleExtender/utils.py:350 +#: addon/globalPlugins/brailleExtender/utils.py:326 msgid "left SHIFT" msgstr "Левый шифт" -#: addon/globalPlugins/brailleExtender/utils.py:351 +#: addon/globalPlugins/brailleExtender/utils.py:327 msgid "right SHIFT" msgstr "правый ШИФТ" -#: addon/globalPlugins/brailleExtender/utils.py:352 +#: addon/globalPlugins/brailleExtender/utils.py:328 msgid "left selector" msgstr "Левое выбирание" -#: addon/globalPlugins/brailleExtender/utils.py:353 +#: addon/globalPlugins/brailleExtender/utils.py:329 msgid "right selector" msgstr "Правое выбирание" -#: addon/globalPlugins/brailleExtender/utils.py:354 +#: addon/globalPlugins/brailleExtender/utils.py:330 msgid "dot" msgstr "точка" -#: addon/globalPlugins/brailleExtender/utils.py:369 +#: addon/globalPlugins/brailleExtender/utils.py:345 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} на {brailleDisplay}" -#: addon/globalPlugins/brailleExtender/utils.py:446 +#: addon/globalPlugins/brailleExtender/utils.py:422 msgid "No text" msgstr "Нет текста" -#: addon/globalPlugins/brailleExtender/utils.py:455 +#: addon/globalPlugins/brailleExtender/utils.py:431 msgid "Not text" msgstr "вне текста" -#: addon/globalPlugins/brailleExtender/utils.py:475 +#: addon/globalPlugins/brailleExtender/utils.py:451 msgid "No text selected" msgstr "Нет выделенного текста" @@ -1928,6 +2424,27 @@ msgid "actions and quick navigation through a rotor" msgstr "" "выполнение некоторых действий и функций быстрой навигации посредством ротора." +#~ msgid "Braille &dictionaries" +#~ msgstr "Брайлевские &словари" + +#~ msgid "%s braille display" +#~ msgstr "Брайлевский дисплей %s" + +#~ msgid "profile loaded: %s" +#~ msgstr "профиль загружен: %s" + +#~ msgid "Prevent undefined characters with Hexadecimal Unicode value" +#~ msgstr "Запрещение показывания юникод номеров при неопределённых знаках" + +#~ msgid "" +#~ "Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +#~ msgstr "" +#~ "Показывать неопределённые знаки как например: 0 для пустой клетки, " +#~ "12345678, 6-123456)" + +#~ msgid "unknown" +#~ msgstr "Неизвестный" + #~ msgid "" #~ "In virtual documents (HTML/PDF/…) you can navigate element type by " #~ "element type using keyboard. These navigation keys should work with your " @@ -1963,9 +2480,6 @@ msgstr "" #~ msgid "Braille tables configuration" #~ msgstr "Настройки брайлевских таблиц" -#~ msgid "Text attributes configuration" -#~ msgstr "Настройки форматирования текста" - #~ msgid "Role &labels" #~ msgstr "&Сокращения элементов" @@ -2015,9 +2529,6 @@ msgstr "" #~ msgid "Enable Attribra" #~ msgstr "включить отображение атребутов текста" -#~ msgid "braille tables" -#~ msgstr "Брайлевские таблицы" - #~ msgid "Unable to save or download update file. Opening your browser" #~ msgstr "Невозможно скачать файл обновления. будет открыт веббраузер" @@ -2083,9 +2594,6 @@ msgstr "" #~ msgid "Improvement concerning" #~ msgstr "улучшение" -#~ msgid "profiles" -#~ msgstr "профили" - #~ msgid "" #~ "Profiles are now reloaded automatically if braille display changes during " #~ "execution" From 0afbba8ed052c08b930a94f1d1e8cdb319978fd7 Mon Sep 17 00:00:00 2001 From: zstanecic Date: Thu, 16 Apr 2020 15:14:24 +0200 Subject: [PATCH 64/87] second russian translation. translated near all things. documentation left --- addon/locale/ru/LC_MESSAGES/nvda.po | 74 +++++++++++++++++------------ 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/addon/locale/ru/LC_MESSAGES/nvda.po b/addon/locale/ru/LC_MESSAGES/nvda.po index 9bc7c2fc..3941f112 100644 --- a/addon/locale/ru/LC_MESSAGES/nvda.po +++ b/addon/locale/ru/LC_MESSAGES/nvda.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: BrailleExtender dev-18.08.04-105046\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-16 14:36+0100\n" +"PO-Revision-Date: 2020-04-16 15:13+0100\n" "Last-Translator: Zvonimir \n" "Language-Team: \n" "Language: ru_RU\n" @@ -396,7 +396,7 @@ msgstr "Выключено" #: addon/globalPlugins/brailleExtender/__init__.py:571 #, python-format msgid "One hand mode %s" -msgstr "" +msgstr "Режим одной руки %s" #: addon/globalPlugins/brailleExtender/__init__.py:572 msgid "Enable/disable one hand mode feature" @@ -524,7 +524,7 @@ msgstr "" #: addon/globalPlugins/brailleExtender/__init__.py:663 #, python-format msgid "Advanced braille input mode %s" -msgstr "" +msgstr "Режим расширенного брайлевского ввода %s" #: addon/globalPlugins/brailleExtender/__init__.py:664 msgid "Enable/disable the advanced input mode" @@ -533,11 +533,11 @@ msgstr "Включить или выключить режим расширенн #: addon/globalPlugins/brailleExtender/__init__.py:669 #, python-format msgid "Description of undefined characters %s" -msgstr "" +msgstr "Описание неопределённых знаков %s" #: addon/globalPlugins/brailleExtender/__init__.py:671 msgid "Enable/disable description of undefined characters" -msgstr "" +msgstr "Включить или выключить описание неопределённых знаков" #: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" @@ -825,25 +825,25 @@ msgstr "Braille Extender" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "HUC8" -msgstr "" +msgstr "HUC8" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:64 #: addon/globalPlugins/brailleExtender/undefinedChars.py:258 msgid "Hexadecimal" -msgstr "" +msgstr "шестнадцатиричный" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:65 #: addon/globalPlugins/brailleExtender/undefinedChars.py:259 msgid "Decimal" -msgstr "" +msgstr "Десятиричный" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:66 #: addon/globalPlugins/brailleExtender/undefinedChars.py:260 msgid "Octal" -msgstr "" +msgstr "Восмиричный" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:67 @@ -855,7 +855,7 @@ msgstr "Двоичная" #: addon/globalPlugins/brailleExtender/addonDoc.py:46 #: addon/globalPlugins/brailleExtender/undefinedChars.py:239 msgid "Representation of undefined characters" -msgstr "" +msgstr "Режим отображения неопределённых знаков" #: addon/globalPlugins/brailleExtender/addonDoc.py:48 msgid "" @@ -863,16 +863,19 @@ msgid "" "represented within a braille table. To do so, go to the braille table " "settings. You can choose between the following representations:" msgstr "" +"Дополнение даёт вам возможность настройки отображения неопределённых знаков " +"внутри брайлевской таблицы. Чтобы настроить этот режим, зайдите в настройки " +"брайлевских таблиц. Возможен выбор следующих отображений:" #: addon/globalPlugins/brailleExtender/addonDoc.py:52 msgid "" "You can also combine this option with the “describe the character if " "possible” setting." -msgstr "" +msgstr "Эту опцию возможно сочетать с опцией “описывать знаки если возможно”." #: addon/globalPlugins/brailleExtender/addonDoc.py:54 msgid "Notes:" -msgstr "" +msgstr "Примечания:" #: addon/globalPlugins/brailleExtender/addonDoc.py:56 msgid "" @@ -880,11 +883,14 @@ msgid "" "best combination is the usage of the HUC8 representation without checking " "the “describe character if possible” option." msgstr "" +"Чтобы различать неопределённые знаки при увеличении места на брайлевском " +"дисплее, самая лучшая комбинация это использование HUC8 отображения без " +"включенной опции “Описать неопределённые знаки если возможно”." #: addon/globalPlugins/brailleExtender/addonDoc.py:57 #, python-brace-format msgid "To learn more about the HUC representation, see {url}" -msgstr "" +msgstr "Чтобы узнать больше об отображении HUC, посмотрите {url}" #: addon/globalPlugins/brailleExtender/addonDoc.py:58 msgid "" @@ -892,10 +898,13 @@ msgid "" "take precedence over character descriptions, which also take precedence over " "the chosen representation for undefined characters." msgstr "" +"Имейте в виду, что определения в ваших таблицах или словарях таблиц имеют " +"приоритет над описаниями знаков, которые тоже имеют приоритет над выбранными " +"отображениями неопределённых знаков." #: addon/globalPlugins/brailleExtender/addonDoc.py:61 msgid "Getting Current Character Info" -msgstr "" +msgstr "получение информации об актуальном знаке" #: addon/globalPlugins/brailleExtender/addonDoc.py:63 msgid "" @@ -1081,7 +1090,7 @@ msgstr "" #: addon/globalPlugins/brailleExtender/addonDoc.py:131 msgid "Etc." -msgstr "" +msgstr "Итд." #: addon/globalPlugins/brailleExtender/addonDoc.py:150 msgid "Documentation" @@ -1170,7 +1179,7 @@ msgstr "Датский" #: addon/globalPlugins/brailleExtender/addonDoc.py:285 msgid "English and French" -msgstr "" +msgstr "Английский и французский" #: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" @@ -1261,7 +1270,7 @@ msgstr "Словарные &статьи" #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 msgid "Abbreviation" -msgstr "" +msgstr "Сокращение" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 msgid "Replace by" @@ -1311,7 +1320,7 @@ msgstr "Добавить словарь" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 msgid "File doesn't exist yet" -msgstr "" +msgstr "Файл ещё не существует" #. Translators: This is the label for the edit dictionary entry dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 @@ -1332,15 +1341,15 @@ msgstr "&Заменить с" #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 msgid "Advanced input mode" -msgstr "" +msgstr "Режим расширенного ввода" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 msgid "E&xit the advanced input mode after typing one pattern" -msgstr "" +msgstr "&Выйти из разсширенного режима ввода после набора одной комбинации" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 msgid "Escape sign for Unicode values" -msgstr "" +msgstr "Знак ескейп для значений юникод" #: addon/globalPlugins/brailleExtender/configBE.py:54 #: addon/globalPlugins/brailleExtender/undefinedChars.py:248 @@ -1350,45 +1359,45 @@ msgstr "Использовать поведение брайлевской та #: addon/globalPlugins/brailleExtender/configBE.py:55 #: addon/globalPlugins/brailleExtender/undefinedChars.py:249 msgid "Dots 1-8 (⣿)" -msgstr "" +msgstr "Точки 1-8 (⣿)" #: addon/globalPlugins/brailleExtender/configBE.py:56 #: addon/globalPlugins/brailleExtender/undefinedChars.py:250 msgid "Dots 1-6 (⠿)" -msgstr "" +msgstr "Точки 1-6 (⠿)" #: addon/globalPlugins/brailleExtender/configBE.py:57 #: addon/globalPlugins/brailleExtender/undefinedChars.py:251 msgid "Empty cell (⠀)" -msgstr "" +msgstr "Пустая клетка (⠀)" #: addon/globalPlugins/brailleExtender/configBE.py:58 msgid "Other dot pattern (e.g.: 6-123456)" -msgstr "" +msgstr "Другая комбинация точек (например.: 6-123456)" #: addon/globalPlugins/brailleExtender/configBE.py:59 #: addon/globalPlugins/brailleExtender/undefinedChars.py:253 msgid "Question mark (depending output table)" -msgstr "" +msgstr "Вопросительный знак (зависит от таблицы вывода)" #: addon/globalPlugins/brailleExtender/configBE.py:60 msgid "Other sign/pattern (e.g.: \\, ??)" -msgstr "" +msgstr "другой знак или комбинация точек (например.: \\, ??)" #: addon/globalPlugins/brailleExtender/configBE.py:61 #: addon/globalPlugins/brailleExtender/undefinedChars.py:255 msgid "Hexadecimal, Liblouis style" -msgstr "" +msgstr "Шестнадцатиричный, Стиль Liblouis" #: addon/globalPlugins/brailleExtender/configBE.py:62 #: addon/globalPlugins/brailleExtender/undefinedChars.py:256 msgid "Hexadecimal, HUC8" -msgstr "" +msgstr "Шестнадцатиричный, HUC8" #: addon/globalPlugins/brailleExtender/configBE.py:63 #: addon/globalPlugins/brailleExtender/undefinedChars.py:257 msgid "Hexadecimal, HUC6" -msgstr "" +msgstr "Шестнадцатиричный, HUC6" #: addon/globalPlugins/brailleExtender/configBE.py:70 #: addon/globalPlugins/brailleExtender/configBE.py:77 @@ -1440,17 +1449,20 @@ msgstr "Режим просмотра" #: addon/globalPlugins/brailleExtender/configBE.py:102 msgid "Fill a cell in two stages on both sides" -msgstr "" +msgstr "Заполнять клетку в двух шагах с обеих сторон" #: addon/globalPlugins/brailleExtender/configBE.py:103 msgid "Fill a cell in two stages on one side (space = empty side)" msgstr "" +"Заполнять клетку в двух шагах на одной стороне (пробел = пустая клетка)" #: addon/globalPlugins/brailleExtender/configBE.py:104 msgid "" "Fill a cell dots by dots (each dot is a toggle, press space to validate the " "character)" msgstr "" +"Заполнять клетку точку в точку (каждая из точек является переключателем, " +"нажмите пробел, чтобы проверить знак)" #: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" From 1f3d5f247aba36782061f56a6fe464bb5ef046fe Mon Sep 17 00:00:00 2001 From: zstanecic Date: Fri, 17 Apr 2020 22:14:32 +0200 Subject: [PATCH 65/87] one more updates, then the correcion goes on --- addon/locale/pl/LC_MESSAGES/nvda.po | 1494 ++++++++++++++++++--------- addon/locale/ru/LC_MESSAGES/nvda.po | 47 +- 2 files changed, 1044 insertions(+), 497 deletions(-) diff --git a/addon/locale/pl/LC_MESSAGES/nvda.po b/addon/locale/pl/LC_MESSAGES/nvda.po index b80383d3..7a848bb4 100644 --- a/addon/locale/pl/LC_MESSAGES/nvda.po +++ b/addon/locale/pl/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-03-19 09:08+0100\n" -"PO-Revision-Date: 2020-03-19 09:11+0100\n" +"POT-Creation-Date: 2020-04-15 09:24+0200\n" +"PO-Revision-Date: 2020-04-17 13:26+0100\n" "Last-Translator: zvonimir stanecic \n" "Language-Team: \n" "Language: pl\n" @@ -17,175 +17,176 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" -#: addon/globalPlugins/brailleExtender/__init__.py:61 +#: addon/globalPlugins/brailleExtender/__init__.py:64 msgid "Default" msgstr "domyślnie" -#: addon/globalPlugins/brailleExtender/__init__.py:62 +#: addon/globalPlugins/brailleExtender/__init__.py:65 msgid "Moving in the text" msgstr "Przemieszczanie po tekście" -#: addon/globalPlugins/brailleExtender/__init__.py:63 +#: addon/globalPlugins/brailleExtender/__init__.py:66 msgid "Text selection" msgstr "zaznaczanie tekstu" -#: addon/globalPlugins/brailleExtender/__init__.py:64 +#: addon/globalPlugins/brailleExtender/__init__.py:67 msgid "Objects" msgstr "Obiekty" -#: addon/globalPlugins/brailleExtender/__init__.py:65 +#: addon/globalPlugins/brailleExtender/__init__.py:68 msgid "Review" msgstr "Przegląd" -#: addon/globalPlugins/brailleExtender/__init__.py:66 +#: addon/globalPlugins/brailleExtender/__init__.py:69 msgid "Links" msgstr "Linki" -#: addon/globalPlugins/brailleExtender/__init__.py:67 +#: addon/globalPlugins/brailleExtender/__init__.py:70 msgid "Unvisited links" msgstr "Linki nieodwiedzone" -#: addon/globalPlugins/brailleExtender/__init__.py:68 +#: addon/globalPlugins/brailleExtender/__init__.py:71 msgid "Visited links" msgstr "Linki odwiedzone" -#: addon/globalPlugins/brailleExtender/__init__.py:69 +#: addon/globalPlugins/brailleExtender/__init__.py:72 msgid "Landmarks" msgstr "Punkty orientacyjne" -#: addon/globalPlugins/brailleExtender/__init__.py:70 +#: addon/globalPlugins/brailleExtender/__init__.py:73 msgid "Headings" msgstr "Nagłówki" -#: addon/globalPlugins/brailleExtender/__init__.py:71 +#: addon/globalPlugins/brailleExtender/__init__.py:74 msgid "Headings at level 1" msgstr "Nagłówki pierwszego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:72 +#: addon/globalPlugins/brailleExtender/__init__.py:75 msgid "Headings at level 2" msgstr "Nagłówki drugiego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:73 +#: addon/globalPlugins/brailleExtender/__init__.py:76 msgid "Headings at level 3" msgstr "Nagłówki trzeciego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:74 +#: addon/globalPlugins/brailleExtender/__init__.py:77 msgid "Headings at level 4" msgstr "Nagłówki czwartego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:75 +#: addon/globalPlugins/brailleExtender/__init__.py:78 msgid "Headings at level 5" msgstr "Nagłówki piątego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:76 +#: addon/globalPlugins/brailleExtender/__init__.py:79 msgid "Headings at level 6" msgstr "Nagłówki szóstego poziomu" -#: addon/globalPlugins/brailleExtender/__init__.py:77 +#: addon/globalPlugins/brailleExtender/__init__.py:80 msgid "Lists" msgstr "Listy" -#: addon/globalPlugins/brailleExtender/__init__.py:78 +#: addon/globalPlugins/brailleExtender/__init__.py:81 msgid "List items" msgstr "elementy listy" -#: addon/globalPlugins/brailleExtender/__init__.py:79 +#: addon/globalPlugins/brailleExtender/__init__.py:82 msgid "Graphics" msgstr "grafiki" -#: addon/globalPlugins/brailleExtender/__init__.py:80 +#: addon/globalPlugins/brailleExtender/__init__.py:83 msgid "Block quotes" msgstr "cytaty" -#: addon/globalPlugins/brailleExtender/__init__.py:81 +#: addon/globalPlugins/brailleExtender/__init__.py:84 msgid "Buttons" msgstr "Przyciski" -#: addon/globalPlugins/brailleExtender/__init__.py:82 +#: addon/globalPlugins/brailleExtender/__init__.py:85 msgid "Form fields" msgstr "formularze" -#: addon/globalPlugins/brailleExtender/__init__.py:83 +#: addon/globalPlugins/brailleExtender/__init__.py:86 msgid "Edit fields" msgstr "pola edycyjne" -#: addon/globalPlugins/brailleExtender/__init__.py:84 +#: addon/globalPlugins/brailleExtender/__init__.py:87 msgid "Radio buttons" msgstr "Przyciski opcji" -#: addon/globalPlugins/brailleExtender/__init__.py:85 +#: addon/globalPlugins/brailleExtender/__init__.py:88 msgid "Combo boxes" msgstr "Listy rozwijane" -#: addon/globalPlugins/brailleExtender/__init__.py:86 +#: addon/globalPlugins/brailleExtender/__init__.py:89 msgid "Check boxes" msgstr "Pola wyboru" -#: addon/globalPlugins/brailleExtender/__init__.py:87 +#: addon/globalPlugins/brailleExtender/__init__.py:90 msgid "Not link blocks" msgstr "tekst poza blokiem linków" -#: addon/globalPlugins/brailleExtender/__init__.py:88 +#: addon/globalPlugins/brailleExtender/__init__.py:91 msgid "Frames" msgstr "ramki" -#: addon/globalPlugins/brailleExtender/__init__.py:89 +#: addon/globalPlugins/brailleExtender/__init__.py:92 msgid "Separators" msgstr "separatory" -#: addon/globalPlugins/brailleExtender/__init__.py:90 +#: addon/globalPlugins/brailleExtender/__init__.py:93 msgid "Embedded objects" msgstr "Obiekty zagnieżdżone" -#: addon/globalPlugins/brailleExtender/__init__.py:91 +#: addon/globalPlugins/brailleExtender/__init__.py:94 msgid "Annotations" msgstr "Adnotacje" -#: addon/globalPlugins/brailleExtender/__init__.py:92 +#: addon/globalPlugins/brailleExtender/__init__.py:95 msgid "Spelling errors" msgstr "błędy pisowni" -#: addon/globalPlugins/brailleExtender/__init__.py:93 +#: addon/globalPlugins/brailleExtender/__init__.py:96 msgid "Tables" msgstr "Tabele" -#: addon/globalPlugins/brailleExtender/__init__.py:94 +#: addon/globalPlugins/brailleExtender/__init__.py:97 msgid "Move in table" msgstr "Przemieszczanie po tabelach" -#: addon/globalPlugins/brailleExtender/__init__.py:100 +#: addon/globalPlugins/brailleExtender/__init__.py:103 msgid "If pressed twice, presents the information in browse mode" msgstr "Po dwukrotnym naciśnięciu, pokazuje informację w trybie przeglądu" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Docu&mentation" msgstr "&Pomoc" -#: addon/globalPlugins/brailleExtender/__init__.py:252 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Opens the addon's documentation." msgstr "Otwiera pomoc dodatku" -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "&Settings" msgstr "&Ustawienia" -#: addon/globalPlugins/brailleExtender/__init__.py:258 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "Opens the addons' settings." msgstr "Otwiera ustawienia dodatku." -#: addon/globalPlugins/brailleExtender/__init__.py:265 -msgid "Braille &dictionaries" -msgstr "&Słowniki brajlowskie" +#: addon/globalPlugins/brailleExtender/__init__.py:270 +#, fuzzy +msgid "Table &dictionaries" +msgstr "Słownik tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:265 +#: addon/globalPlugins/brailleExtender/__init__.py:270 msgid "'Braille dictionaries' menu" msgstr "Meni 'słowniki brajlowskie'" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "&Global dictionary" msgstr "&Słownik ogólny" -#: addon/globalPlugins/brailleExtender/__init__.py:266 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -193,11 +194,11 @@ msgstr "" "Okno dialogowe, w którym można utworzyć słownik globalny dodając wspisy " "słownikowe do listy." -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "&Table dictionary" msgstr "Słownik &tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -205,11 +206,11 @@ msgstr "" "Okno dialogowe, w którym można utworzyć określony dla tablicy brajlowskiej " "słownik dodając do listy wpisy słownikowe." -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "Te&mporary dictionary" msgstr "słownik tym&czasowy" -#: addon/globalPlugins/brailleExtender/__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." @@ -217,119 +218,130 @@ msgstr "" "Okno dialogowe, w którym można utworzyć tymczasowy słownik dodając wpisy " "słownikowe do listy." -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:278 +#, fuzzy +msgid "Advanced &input mode dictionary" +msgstr "Dodaj wpis do słownika brajlowskiego" + +#: addon/globalPlugins/brailleExtender/__init__.py:278 +#, fuzzy +msgid "Advanced input mode configuration" +msgstr "Konfiguracja prezentacji formatowania dokumentu" + +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" msgstr "&Szybkie uruchamianie" -#: addon/globalPlugins/brailleExtender/__init__.py:273 +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "Quick launches configuration" msgstr "Konfiguracja szybkiego uruchamiania" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "&Profile editor" msgstr "Edytor &profili" -#: addon/globalPlugins/brailleExtender/__init__.py:279 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "Profile editor" msgstr "Edytor profili" -#: addon/globalPlugins/brailleExtender/__init__.py:285 +#: addon/globalPlugins/brailleExtender/__init__.py:296 msgid "Overview of the current input braille table" msgstr "przegląd aktualnej tablicy brajlowskiej wprowadzania" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload add-on" msgstr "Wczytaj dodatek ponownie" -#: addon/globalPlugins/brailleExtender/__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload this add-on." msgstr "Wczytuje dodatek ponownie." -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "&Check for update" msgstr "&Sprawdź aktualizację" -#: addon/globalPlugins/brailleExtender/__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "Checks if update is available" msgstr "Sprawdza dostępność nowej wersji" -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "&Website" msgstr "St&rona dodatku..." -#: addon/globalPlugins/brailleExtender/__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "Open addon's website." msgstr "Otwiera stronę www tego dodatku." -#: addon/globalPlugins/brailleExtender/__init__.py:293 +#: addon/globalPlugins/brailleExtender/__init__.py:304 msgid "&Braille Extender" msgstr "&Braille Extender" -#: addon/globalPlugins/brailleExtender/__init__.py:297 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:319 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Global dictionary" msgstr "słownik ogólny" -#: addon/globalPlugins/brailleExtender/__init__.py:302 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:324 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Table dictionary" msgstr "Słownik tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:306 -#: addon/globalPlugins/brailleExtender/dictionaries.py:342 +#: addon/globalPlugins/brailleExtender/__init__.py:328 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Temporary dictionary" msgstr "słownik tymczasowy" -#: addon/globalPlugins/brailleExtender/__init__.py:416 +#: addon/globalPlugins/brailleExtender/__init__.py:438 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "Character" msgstr "Znak" -#: addon/globalPlugins/brailleExtender/__init__.py:417 +#: addon/globalPlugins/brailleExtender/__init__.py:439 msgid "Word" msgstr "słowo" -#: addon/globalPlugins/brailleExtender/__init__.py:418 +#: addon/globalPlugins/brailleExtender/__init__.py:440 msgid "Line" msgstr "Wiersz" -#: addon/globalPlugins/brailleExtender/__init__.py:419 +#: addon/globalPlugins/brailleExtender/__init__.py:441 msgid "Paragraph" msgstr "Akapit" -#: addon/globalPlugins/brailleExtender/__init__.py:420 +#: addon/globalPlugins/brailleExtender/__init__.py:442 msgid "Page" msgstr "strona" -#: addon/globalPlugins/brailleExtender/__init__.py:421 +#: addon/globalPlugins/brailleExtender/__init__.py:443 msgid "Document" msgstr "Dokument" -#: addon/globalPlugins/brailleExtender/__init__.py:457 +#: addon/globalPlugins/brailleExtender/__init__.py:479 msgid "Not available here" msgstr "Niedostępne tutaj" -#: addon/globalPlugins/brailleExtender/__init__.py:475 #: addon/globalPlugins/brailleExtender/__init__.py:497 +#: addon/globalPlugins/brailleExtender/__init__.py:519 msgid "Not supported here or browse mode not enabled" msgstr "Nie wspierane tutaj lub nie włączony tryb przeglądu" -#: addon/globalPlugins/brailleExtender/__init__.py:477 +#: addon/globalPlugins/brailleExtender/__init__.py:499 msgid "Select previous rotor setting" msgstr "Wybierz poprzednie ustawienie rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:478 +#: addon/globalPlugins/brailleExtender/__init__.py:500 msgid "Select next rotor setting" msgstr "wybierz następne ustawienie rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:526 +#: addon/globalPlugins/brailleExtender/__init__.py:548 msgid "Move to previous item depending rotor setting" msgstr "przenosi do poprzedniego zależnego ustawienia rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:527 +#: addon/globalPlugins/brailleExtender/__init__.py:549 msgid "Move to next item depending rotor setting" msgstr "Przenosi do następnego zależnego ustawienia rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:535 +#: addon/globalPlugins/brailleExtender/__init__.py:557 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" @@ -337,100 +349,116 @@ msgstr "" "Zależy od ustawienia rotora. Np. w trybie obiektowym, jest to podobne do " "skrótu NVDA+Enter" -#: addon/globalPlugins/brailleExtender/__init__.py:538 +#: addon/globalPlugins/brailleExtender/__init__.py:560 msgid "Move to previous item using rotor setting" msgstr "Przenosi do poprzedniego elementu przy użyciu rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:539 +#: addon/globalPlugins/brailleExtender/__init__.py:561 msgid "Move to next item using rotor setting" msgstr "Przenosi do następnego elementu przy użyciu rotora" -#: addon/globalPlugins/brailleExtender/__init__.py:543 +#: addon/globalPlugins/brailleExtender/__init__.py:565 #, python-format msgid "Braille keyboard %s" msgstr "Klawiatura brajlowska %s" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "locked" msgstr "zablokowane" -#: addon/globalPlugins/brailleExtender/__init__.py:543 -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "unlocked" msgstr "odblokowane" -#: addon/globalPlugins/brailleExtender/__init__.py:544 +#: addon/globalPlugins/brailleExtender/__init__.py:566 msgid "Lock/unlock braille keyboard" msgstr "Odblokuj / zablokuj klawiaturę brajlowską" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#, python-format -msgid "Dots 7 and 8: %s" -msgstr "punkty 7 i 8: %s" +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 +msgid "enabled" +msgstr "włączone" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 msgid "disabled" msgstr "wyłączone" -#: addon/globalPlugins/brailleExtender/__init__.py:548 -#: addon/globalPlugins/brailleExtender/__init__.py:555 -#: addon/globalPlugins/brailleExtender/__init__.py:566 -msgid "enabled" -msgstr "włączone" +#: addon/globalPlugins/brailleExtender/__init__.py:571 +#, python-format +msgid "One hand mode %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:572 +#, fuzzy +msgid "Enable/disable one hand mode feature" +msgstr "włącza lub wyłącza tryb formatowanego brajla amerykańskiego" + +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#, python-format +msgid "Dots 7 and 8: %s" +msgstr "punkty 7 i 8: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:550 +#: addon/globalPlugins/brailleExtender/__init__.py:578 msgid "Hide/show dots 7 and 8" msgstr "Pokaż/ukryj punkty 7 i 8" -#: addon/globalPlugins/brailleExtender/__init__.py:555 +#: addon/globalPlugins/brailleExtender/__init__.py:583 #, python-format msgid "BRF mode: %s" msgstr "Tryb formatowanego brajla amerykańskiego: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:556 +#: addon/globalPlugins/brailleExtender/__init__.py:584 msgid "Enable/disable BRF mode" msgstr "włącza lub wyłącza tryb formatowanego brajla amerykańskiego" -#: addon/globalPlugins/brailleExtender/__init__.py:560 +#: addon/globalPlugins/brailleExtender/__init__.py:588 #, python-format msgid "Modifier keys %s" msgstr "Modyfikatory %s" -#: addon/globalPlugins/brailleExtender/__init__.py:561 +#: addon/globalPlugins/brailleExtender/__init__.py:589 msgid "Lock/unlock modifiers keys" msgstr "Odblokowuje/blokuje modyfikatory oraz klawiaturę" -#: addon/globalPlugins/brailleExtender/__init__.py:567 +#: addon/globalPlugins/brailleExtender/__init__.py:595 msgid "Enable/disable Attribra" msgstr "włącza/wyłącza attribrę" -#: addon/globalPlugins/brailleExtender/__init__.py:577 +#: addon/globalPlugins/brailleExtender/__init__.py:605 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "" "Szybki dostęp do opcji \"wypowiadaj aktualny wiersz przy przemieszczaniu się" "\"" -#: addon/globalPlugins/brailleExtender/__init__.py:582 +#: addon/globalPlugins/brailleExtender/__init__.py:610 msgid "Speech on" msgstr "mowa włączona" -#: addon/globalPlugins/brailleExtender/__init__.py:585 +#: addon/globalPlugins/brailleExtender/__init__.py:613 msgid "Speech off" msgstr "Mowa wyłączona" -#: addon/globalPlugins/brailleExtender/__init__.py:587 +#: addon/globalPlugins/brailleExtender/__init__.py:615 msgid "Toggle speech on or off" msgstr "Włącza lub wyłącza mowe" -#: addon/globalPlugins/brailleExtender/__init__.py:595 +#: addon/globalPlugins/brailleExtender/__init__.py:623 msgid "No extra info for this element" msgstr "Nie ma dodatkowej informacji dla tego elementu" #. Translators: Input help mode message for report extra infos command. -#: addon/globalPlugins/brailleExtender/__init__.py:599 +#: addon/globalPlugins/brailleExtender/__init__.py:627 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -438,34 +466,34 @@ msgstr "" "Pokazuje informacje dodatkowe dla tego elementu. Na przykład adres URL dla " "linku" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid " Input table" msgstr " tablica wprowadzania" -#: addon/globalPlugins/brailleExtender/__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid "Output table" msgstr "Tablica wyjścia" -#: addon/globalPlugins/brailleExtender/__init__.py:606 +#: addon/globalPlugins/brailleExtender/__init__.py:634 #, python-format msgid "Table overview (%s)" msgstr "Informacje o tablicy brajlowskiej (%s)" -#: addon/globalPlugins/brailleExtender/__init__.py:607 +#: addon/globalPlugins/brailleExtender/__init__.py:635 msgid "Display an overview of current input braille table" msgstr "Wyświetla przegląd aktualnej tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:612 -#: addon/globalPlugins/brailleExtender/__init__.py:620 -#: addon/globalPlugins/brailleExtender/__init__.py:627 +#: addon/globalPlugins/brailleExtender/__init__.py:640 +#: addon/globalPlugins/brailleExtender/__init__.py:648 +#: addon/globalPlugins/brailleExtender/__init__.py:655 msgid "No text selection" msgstr "Brak zaznaczenia tekstu" -#: addon/globalPlugins/brailleExtender/__init__.py:613 +#: addon/globalPlugins/brailleExtender/__init__.py:641 msgid "Unicode Braille conversion" msgstr "Konwersja do brajla unikodowego" -#: addon/globalPlugins/brailleExtender/__init__.py:614 +#: addon/globalPlugins/brailleExtender/__init__.py:642 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" @@ -473,11 +501,11 @@ msgstr "" "przekształca zaznaczenie tekstu do brajla unikodowego i wyświetla " "zaznaczenie w wirtualizowanym oknie" -#: addon/globalPlugins/brailleExtender/__init__.py:621 +#: addon/globalPlugins/brailleExtender/__init__.py:649 msgid "Braille Unicode to cell descriptions" msgstr "Brajl unikodowy do opisu znaków" -#: addon/globalPlugins/brailleExtender/__init__.py:622 +#: addon/globalPlugins/brailleExtender/__init__.py:650 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -485,11 +513,11 @@ msgstr "" "Przekształca zaznaczenie tekstu do opisów komórek brajlowskich i wyświetla " "zaznaczenie w wirtualizowanym oknie" -#: addon/globalPlugins/brailleExtender/__init__.py:629 +#: addon/globalPlugins/brailleExtender/__init__.py:657 msgid "Cell descriptions to braille Unicode" msgstr "Opis brajlowskich komórek do brajla unikodowego" -#: addon/globalPlugins/brailleExtender/__init__.py:630 +#: addon/globalPlugins/brailleExtender/__init__.py:658 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -498,85 +526,104 @@ msgstr "" "edycji wpisz '125-24-0-1-123-123'. a następnie zaznacz ten tekst i naciśnij " "ten skrót klawiszowy" -#: addon/globalPlugins/brailleExtender/__init__.py:634 +#: addon/globalPlugins/brailleExtender/__init__.py:663 +#, python-format +msgid "Advanced braille input mode %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:664 +#, fuzzy +msgid "Enable/disable the advanced input mode" +msgstr "włącza lub wyłącza tryb formatowanego brajla amerykańskiego" + +#: addon/globalPlugins/brailleExtender/__init__.py:669 +#, python-format +msgid "Description of undefined characters %s" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:671 +msgid "Enable/disable description of undefined characters" +msgstr "" + +#: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" msgstr "pokazuje aktualną pozycję kursora w tekście" -#: addon/globalPlugins/brailleExtender/__init__.py:660 +#: addon/globalPlugins/brailleExtender/__init__.py:701 msgid "Hour and date with autorefresh" msgstr "Data i godzina z automatycznym odświeżaniem" -#: addon/globalPlugins/brailleExtender/__init__.py:673 +#: addon/globalPlugins/brailleExtender/__init__.py:714 msgid "Autoscroll stopped" msgstr "Czytanie automatyczne zatrzymane" -#: addon/globalPlugins/brailleExtender/__init__.py:680 +#: addon/globalPlugins/brailleExtender/__init__.py:721 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "" "Nie można uruchomić automatycznego czytania. więcej informacji znajduje się " "w dzienniku NVDA." -#: addon/globalPlugins/brailleExtender/__init__.py:685 +#: addon/globalPlugins/brailleExtender/__init__.py:726 msgid "Enable/disable autoscroll" msgstr "włącza lub wyłącza czytanie automatyczne" -#: addon/globalPlugins/brailleExtender/__init__.py:700 +#: addon/globalPlugins/brailleExtender/__init__.py:741 msgid "Increase the master volume" msgstr "Zwiększa głośność główną" -#: addon/globalPlugins/brailleExtender/__init__.py:717 +#: addon/globalPlugins/brailleExtender/__init__.py:758 msgid "Decrease the master volume" msgstr "Zmniejsza głośność główną" -#: addon/globalPlugins/brailleExtender/__init__.py:723 +#: addon/globalPlugins/brailleExtender/__init__.py:764 msgid "Muted sound" msgstr "Dźwięk wyciszony" -#: addon/globalPlugins/brailleExtender/__init__.py:725 +#: addon/globalPlugins/brailleExtender/__init__.py:766 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "wyciszenie wyłączone (%3d%%)" -#: addon/globalPlugins/brailleExtender/__init__.py:731 +#: addon/globalPlugins/brailleExtender/__init__.py:772 msgid "Mute or unmute sound" msgstr "Wycisz lub nie wyciszaj dźwięku" -#: addon/globalPlugins/brailleExtender/__init__.py:736 +#: addon/globalPlugins/brailleExtender/__init__.py:777 #, python-format msgid "Show the %s documentation" msgstr "Pokazuje pomoc dla %s" -#: addon/globalPlugins/brailleExtender/__init__.py:774 +#: addon/globalPlugins/brailleExtender/__init__.py:815 msgid "No such file or directory" msgstr "Niema takiego pliku lub katalogu" -#: addon/globalPlugins/brailleExtender/__init__.py:776 +#: addon/globalPlugins/brailleExtender/__init__.py:817 msgid "Opens a custom program/file. Go to settings to define them" msgstr "" "Otwiera dostosowany program/plik. Proszę wejść do ustawień, aby zdefiniować" -#: addon/globalPlugins/brailleExtender/__init__.py:783 +#: addon/globalPlugins/brailleExtender/__init__.py:824 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "" "Sprawdza, czy jest dostępna nowa wersja %s ,i rozpoczyna pobieranie, jeśli " "ją znajdzie." -#: addon/globalPlugins/brailleExtender/__init__.py:813 +#: addon/globalPlugins/brailleExtender/__init__.py:854 msgid "Increase autoscroll delay" msgstr "zwiększa oczekiwanie na automatyczne czytanie" -#: addon/globalPlugins/brailleExtender/__init__.py:814 +#: addon/globalPlugins/brailleExtender/__init__.py:855 msgid "Decrease autoscroll delay" msgstr "zmniejsza oczekiwanie na automatyczne czytanie" -#: addon/globalPlugins/brailleExtender/__init__.py:818 -#: addon/globalPlugins/brailleExtender/__init__.py:836 +#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:877 msgid "Please use NVDA 2017.3 minimum for this feature" msgstr "Proszę używać minimum NVDA 2017.3 dla tej funkcji" -#: addon/globalPlugins/brailleExtender/__init__.py:820 -#: addon/globalPlugins/brailleExtender/__init__.py:838 +#: addon/globalPlugins/brailleExtender/__init__.py:861 +#: addon/globalPlugins/brailleExtender/__init__.py:879 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -584,49 +631,49 @@ msgstr "" "Dla tej funkcji należy wybrać chociaż dwie tablice brajlowskie. Proszę " "uzupełnić ustawienia!" -#: addon/globalPlugins/brailleExtender/__init__.py:827 +#: addon/globalPlugins/brailleExtender/__init__.py:868 #, python-format msgid "Input: %s" msgstr "Wprowadzanie: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:831 +#: addon/globalPlugins/brailleExtender/__init__.py:872 msgid "Switch between his favorite input braille tables" msgstr "Przełącza pomiędzy ulubionymi tablicami wprowadzania" -#: addon/globalPlugins/brailleExtender/__init__.py:847 +#: addon/globalPlugins/brailleExtender/__init__.py:888 #, python-format msgid "Output: %s" msgstr "wyjście: %s" -#: addon/globalPlugins/brailleExtender/__init__.py:850 +#: addon/globalPlugins/brailleExtender/__init__.py:891 msgid "Switch between his favorite output braille tables" msgstr "przełącza pomiędzy ulubionymi tablicami wyjścia" -#: addon/globalPlugins/brailleExtender/__init__.py:856 +#: addon/globalPlugins/brailleExtender/__init__.py:897 #, python-brace-format msgid "I⣿O:{I}" msgstr "I⣿O:{I}" -#: addon/globalPlugins/brailleExtender/__init__.py:857 +#: addon/globalPlugins/brailleExtender/__init__.py:898 #, python-brace-format msgid "Input and output: {I}." msgstr "Wprowadzanie i wyjście: {I}." -#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:900 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "I:{I} ⣿ O: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:860 +#: addon/globalPlugins/brailleExtender/__init__.py:901 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Wprowadzanie: {I}; Wyjście: {O}" -#: addon/globalPlugins/brailleExtender/__init__.py:864 +#: addon/globalPlugins/brailleExtender/__init__.py:905 msgid "Announce the current input and output braille tables" msgstr "Wymawia aktualną tablicę wprowadzania i wyjścia" -#: addon/globalPlugins/brailleExtender/__init__.py:869 +#: addon/globalPlugins/brailleExtender/__init__.py:910 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -634,7 +681,7 @@ msgstr "" "Pokazuje wartość unikodową znaku, na którym znajduje się kursor, a także " "decymalny, oktalny i binarny odpowiednik." -#: addon/globalPlugins/brailleExtender/__init__.py:877 +#: addon/globalPlugins/brailleExtender/__init__.py:918 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -642,111 +689,111 @@ msgstr "" "Wyświetlaj tekst wyjściowy (pochodzący od syntezatora mowy) Użyteczne dla " "emoji" -#: addon/globalPlugins/brailleExtender/__init__.py:881 +#: addon/globalPlugins/brailleExtender/__init__.py:922 msgid "No shortcut performed from a braille display" msgstr "Brak skrótu klawiatury brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:885 +#: addon/globalPlugins/brailleExtender/__init__.py:926 msgid "Repeat the last shortcut performed from a braille display" msgstr "Powtórz ostatni skrót klawiatury brajlowskiej" -#: addon/globalPlugins/brailleExtender/__init__.py:899 +#: addon/globalPlugins/brailleExtender/__init__.py:940 #, python-format msgid "%s reloaded" msgstr "%s ponownie wczytany" -#: addon/globalPlugins/brailleExtender/__init__.py:911 +#: addon/globalPlugins/brailleExtender/__init__.py:952 #, python-format msgid "Reload %s" msgstr "Ponownie wczytuje %s" -#: addon/globalPlugins/brailleExtender/__init__.py:914 +#: addon/globalPlugins/brailleExtender/__init__.py:955 msgid "Reload the first braille display defined in settings" msgstr "Wczytuję pierwszy ustawiony monitor brajlowski " -#: addon/globalPlugins/brailleExtender/__init__.py:917 +#: addon/globalPlugins/brailleExtender/__init__.py:958 msgid "Reload the second braille display defined in settings" msgstr "Wczytuje drugi ustawiony monitor brajlowski" -#: addon/globalPlugins/brailleExtender/__init__.py:923 +#: addon/globalPlugins/brailleExtender/__init__.py:964 msgid "No braille display specified. No reload to do" msgstr "" "Brak określonego monitora brajlowskiego. Nie można niczego ponownie wczytać." -#: addon/globalPlugins/brailleExtender/__init__.py:960 +#: addon/globalPlugins/brailleExtender/__init__.py:1001 msgid "WIN" msgstr "WIN" -#: addon/globalPlugins/brailleExtender/__init__.py:961 +#: addon/globalPlugins/brailleExtender/__init__.py:1002 msgid "CTRL" msgstr "CTRL" -#: addon/globalPlugins/brailleExtender/__init__.py:962 +#: addon/globalPlugins/brailleExtender/__init__.py:1003 msgid "SHIFT" msgstr "SHIFT" -#: addon/globalPlugins/brailleExtender/__init__.py:963 +#: addon/globalPlugins/brailleExtender/__init__.py:1004 msgid "ALT" msgstr "ALT" -#: addon/globalPlugins/brailleExtender/__init__.py:1065 +#: addon/globalPlugins/brailleExtender/__init__.py:1106 msgid "Keyboard shortcut cancelled" msgstr "Anulowano skrót klawiszowy" #. /* docstrings for modifier keys */ -#: addon/globalPlugins/brailleExtender/__init__.py:1073 +#: addon/globalPlugins/brailleExtender/__init__.py:1114 msgid "Emulate pressing down " msgstr "Emuluje wciśnięcie strzałki w dół " -#: addon/globalPlugins/brailleExtender/__init__.py:1074 +#: addon/globalPlugins/brailleExtender/__init__.py:1115 msgid " on the system keyboard" msgstr " na klawiaturze systemowej" -#: addon/globalPlugins/brailleExtender/__init__.py:1130 +#: addon/globalPlugins/brailleExtender/__init__.py:1171 msgid "Current braille view saved" msgstr "Aktualny brajlowski przegląd zapisany" -#: addon/globalPlugins/brailleExtender/__init__.py:1133 +#: addon/globalPlugins/brailleExtender/__init__.py:1174 msgid "Buffer cleaned" msgstr "bufor wyczyszczony" -#: addon/globalPlugins/brailleExtender/__init__.py:1134 +#: addon/globalPlugins/brailleExtender/__init__.py:1175 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Zapisuje aktualny brajlowski przegląd. Proszę nacisnąć dwa razy, aby " "wyczyszczyć bufor" -#: addon/globalPlugins/brailleExtender/__init__.py:1139 +#: addon/globalPlugins/brailleExtender/__init__.py:1180 msgid "View saved" msgstr "Przegląd zapisany" -#: addon/globalPlugins/brailleExtender/__init__.py:1140 +#: addon/globalPlugins/brailleExtender/__init__.py:1181 msgid "Buffer empty" msgstr "bufor jest pusty" -#: addon/globalPlugins/brailleExtender/__init__.py:1141 +#: addon/globalPlugins/brailleExtender/__init__.py:1182 msgid "Show the saved braille view through a flash message" msgstr "Pokazuje zapisany przegląd brajlu za pomocą wiadomości błyskawicznej" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Pause" msgstr "Wstrzymaj" -#: addon/globalPlugins/brailleExtender/__init__.py:1175 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Resume" msgstr "Wznów" -#: addon/globalPlugins/brailleExtender/__init__.py:1217 -#: addon/globalPlugins/brailleExtender/__init__.py:1224 +#: addon/globalPlugins/brailleExtender/__init__.py:1258 +#: addon/globalPlugins/brailleExtender/__init__.py:1265 #, python-format msgid "Auto test type %d" msgstr "Typ testu automatycznego %d" -#: addon/globalPlugins/brailleExtender/__init__.py:1234 +#: addon/globalPlugins/brailleExtender/__init__.py:1275 msgid "Auto test stopped" msgstr "Testowanie automatyczne zatrzymane" -#: addon/globalPlugins/brailleExtender/__init__.py:1244 +#: addon/globalPlugins/brailleExtender/__init__.py:1285 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -756,92 +803,359 @@ msgstr "" "zmienić szybkość lub strzałek lewo prawo, aby zmienić typ testu. Użyj " "spacji, aby zatrzymać lub wznowić test. Użyj klawisza escape, aby wyjść" -#: addon/globalPlugins/brailleExtender/__init__.py:1246 +#: addon/globalPlugins/brailleExtender/__init__.py:1287 msgid "Auto test" msgstr "Testowanie automatyczne" -#: addon/globalPlugins/brailleExtender/__init__.py:1251 +#: addon/globalPlugins/brailleExtender/__init__.py:1292 msgid "Add dictionary entry or see a dictionary" msgstr "Dodaj wpis do słownika lub zobacz słownik" -#: addon/globalPlugins/brailleExtender/__init__.py:1252 +#: addon/globalPlugins/brailleExtender/__init__.py:1293 msgid "Add a entry in braille dictionary" msgstr "Dodaj wpis do słownika brajlowskiego" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon/globalPlugins/brailleExtender/__init__.py:1299 -#: addon/globalPlugins/brailleExtender/dictionaries.py:111 -#: addon/globalPlugins/brailleExtender/dictionaries.py:367 -#: addon/globalPlugins/brailleExtender/dictionaries.py:374 -#: addon/globalPlugins/brailleExtender/dictionaries.py:378 -#: addon/globalPlugins/brailleExtender/dictionaries.py:382 -#: addon/globalPlugins/brailleExtender/settings.py:33 buildVars.py:24 +#: addon/globalPlugins/brailleExtender/__init__.py:1344 +#: addon/globalPlugins/brailleExtender/dictionaries.py:112 +#: addon/globalPlugins/brailleExtender/dictionaries.py:369 +#: addon/globalPlugins/brailleExtender/dictionaries.py:376 +#: addon/globalPlugins/brailleExtender/dictionaries.py:380 +#: addon/globalPlugins/brailleExtender/dictionaries.py:384 +#: addon/globalPlugins/brailleExtender/settings.py:35 +#: addon/globalPlugins/brailleExtender/settings.py:388 buildVars.py:24 msgid "Braille Extender" msgstr "Braille Extender" -#: addon/globalPlugins/brailleExtender/addonDoc.py:33 -#, python-format -msgid "%s braille display" -msgstr "Monitor brajlowski %s" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +msgid "HUC8" +msgstr "" -#: addon/globalPlugins/brailleExtender/addonDoc.py:34 -#, python-format -msgid "profile loaded: %s" -msgstr "Profil wczytany: %s" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:258 +msgid "Hexadecimal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:65 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:259 +msgid "Decimal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:66 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:260 +msgid "Octal" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:67 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:261 +#, fuzzy +msgid "Binary" +msgstr "Słownik" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/addonDoc.py:46 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:239 +msgid "Representation of undefined characters" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:48 +msgid "" +"The extension allows you to customize how an undefined character should be " +"represented within a braille table. To do so, go to the braille table " +"settings. You can choose between the following representations:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:52 +msgid "" +"You can also combine this option with the “describe the character if " +"possible” setting." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:54 +msgid "Notes:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:56 +msgid "" +"To distinguish the undefined set of characters while maximizing space, the " +"best combination is the usage of the HUC8 representation without checking " +"the “describe character if possible” option." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:57 +#, python-brace-format +msgid "To learn more about the HUC representation, see {url}" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:58 +msgid "" +"Keep in mind that definitions in tables and those in your table dictionaries " +"take precedence over character descriptions, which also take precedence over " +"the chosen representation for undefined characters." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +msgid "Getting Current Character Info" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +msgid "" +"This feature allows you to obtain various information regarding the " +"character under the cursor using the current input braille table, such as:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +msgid "" +"the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " +"values; A description of the character if possible; - The Unicode Braille " +"representation and the Braille dot pattern." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:67 +msgid "" +"Pressing the defined gesture associated to this function once shows you the " +"information in a flash message and a double-press displays the same " +"information in a virtual NVDA buffer." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:69 +msgid "" +"On supported displays the defined gesture is ⡉+space. No system gestures are " +"defined by default." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:71 +#, python-brace-format +msgid "" +"For example, for the '{chosenChar}' character, we will get the following " +"information:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:74 +#, fuzzy +msgid "Advanced Braille Input" +msgstr "reguły zaawansowane" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:76 +msgid "" +"This feature allows you to enter any character from its HUC8 representation " +"or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " +"develop abbreviations. To use this function, enter the advanced input mode " +"and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊" +"+space (on supported displays). Press the same gesture to exit this mode. " +"Alternatively, an option allows you to automatically exit this mode after " +"entering a single pattern. " +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:80 +msgid "Specify the basis as follows" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "⠭ or ⠓" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 +msgid "for a hexadecimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:83 +msgid "for a decimal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:84 +msgid "for an octal value" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +msgid "" +"Enter the value of the character according to the previously selected basis." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:88 +msgid "Press Space to validate." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:91 +msgid "" +"For abbreviations, you must first add them in the dialog box - Advanced mode " +"dictionaries -. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +msgid "Here are some examples of sequences to be entered for given characters:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +msgid "Note: the HUC6 input is currently not supported." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:100 +msgid "One-hand mode" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:102 +msgid "" +"This feature allows you to compose a cell in several steps. This can be " +"activated in the general settings of the extension's preferences or on the " +"fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " +"Three input methods are available." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:103 +msgid "Method #1: fill a cell in 2 stages on both sides" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:105 +msgid "" +"With this method, type the left side dots, then the right side dots. If one " +"side is empty, type the dots correspondig to the opposite side twice, or " +"type the dots corresponding to the non-empty side in 2 steps." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:106 +#: addon/globalPlugins/brailleExtender/addonDoc.py:115 +msgid "For example:" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:108 +msgid "For ⠛: press dots 1-2 then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:109 +msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:110 +msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:112 +msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:114 +msgid "" +"Using this method, you can compose a cell with one hand, regardless of which " +"side of the Braille keyboard you choose. The first step allows you to enter " +"dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " +"An empty cell will be obtained by pressing the space key twice." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:117 +msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +msgid "For ⠘: press space then 1-2, or space then dots 4-5." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +msgid "" +"Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " +"validate the character)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:126 +msgid "Dots 1-2, then dots 4-5, then space." +msgstr "" -#: addon/globalPlugins/brailleExtender/addonDoc.py:51 +#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:128 +msgid "Dot 1, then dots 2-4-5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +msgid "Dots 1-2-4, then dot 5, then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:130 +msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:131 +msgid "Etc." +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:150 +#, fuzzy +msgid "Documentation" +msgstr "&Pomoc" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:160 +#, fuzzy +msgid "Driver loaded" +msgstr "%s ponownie wczytany" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:161 +msgid "Profile" +msgstr "Profil" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:175 msgid "Simple keys" msgstr "Klawisze podstawowe" -#: addon/globalPlugins/brailleExtender/addonDoc.py:53 +#: addon/globalPlugins/brailleExtender/addonDoc.py:177 msgid "Usual shortcuts" msgstr "Klawisze zwyczajne" -#: addon/globalPlugins/brailleExtender/addonDoc.py:55 +#: addon/globalPlugins/brailleExtender/addonDoc.py:179 msgid "Standard NVDA commands" msgstr "Standardowe skróty NVDA" -#: addon/globalPlugins/brailleExtender/addonDoc.py:57 -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/addonDoc.py:182 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Modifier keys" msgstr "modyfikatory" -#: addon/globalPlugins/brailleExtender/addonDoc.py:59 +#: addon/globalPlugins/brailleExtender/addonDoc.py:185 msgid "Quick navigation keys" msgstr "polecenia szybkiej nawigacji" -#: addon/globalPlugins/brailleExtender/addonDoc.py:61 +#: addon/globalPlugins/brailleExtender/addonDoc.py:189 msgid "Rotor feature" msgstr "Funkcje rotora" -#: addon/globalPlugins/brailleExtender/addonDoc.py:63 +#: addon/globalPlugins/brailleExtender/addonDoc.py:197 msgid "Gadget commands" msgstr "Polecenia gadżetowe" -#: addon/globalPlugins/brailleExtender/addonDoc.py:65 +#: addon/globalPlugins/brailleExtender/addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Skróty zdefiniowane poza dodatkiem" -#: addon/globalPlugins/brailleExtender/addonDoc.py:85 +#: addon/globalPlugins/brailleExtender/addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "domyślne konfiguracje klawiatury" -#: addon/globalPlugins/brailleExtender/addonDoc.py:87 +#: addon/globalPlugins/brailleExtender/addonDoc.py:241 msgid "Keyboard configurations are" msgstr "Konfiguracje klawiatury to" -#: addon/globalPlugins/brailleExtender/addonDoc.py:93 +#: addon/globalPlugins/brailleExtender/addonDoc.py:250 msgid "Warning:" msgstr "Uwaga:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:94 +#: addon/globalPlugins/brailleExtender/addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "Braille extender jeszcze nie ma mapy gestów do twojego monitora " "brajlowskiego." -#: addon/globalPlugins/brailleExtender/addonDoc.py:95 +#: addon/globalPlugins/brailleExtender/addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -849,169 +1163,344 @@ msgstr "" "można jednak przydzielić swoje własne gesty w \"dialogu zdarzeń wejścia\" w " "\"ustawieniach\" NVDA." -#: addon/globalPlugins/brailleExtender/addonDoc.py:97 +#: addon/globalPlugins/brailleExtender/addonDoc.py:259 msgid "Add-on gestures on the system keyboard" msgstr "Polecenia dodatku na klawiaturze systemowej" -#: addon/globalPlugins/brailleExtender/addonDoc.py:118 +#: addon/globalPlugins/brailleExtender/addonDoc.py:282 msgid "Arabic" msgstr "arabski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:119 +#: addon/globalPlugins/brailleExtender/addonDoc.py:283 msgid "Croatian" msgstr "Chorwacki" -#: addon/globalPlugins/brailleExtender/addonDoc.py:120 +#: addon/globalPlugins/brailleExtender/addonDoc.py:284 msgid "Danish" msgstr "Duński" -#: addon/globalPlugins/brailleExtender/addonDoc.py:121 +#: addon/globalPlugins/brailleExtender/addonDoc.py:285 +msgid "English and French" +msgstr "" + +#: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" msgstr "niemiecki" -#: addon/globalPlugins/brailleExtender/addonDoc.py:122 +#: addon/globalPlugins/brailleExtender/addonDoc.py:287 msgid "Hebrew" msgstr "hebrajski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:123 +#: addon/globalPlugins/brailleExtender/addonDoc.py:288 msgid "Persian" msgstr "perski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:124 +#: addon/globalPlugins/brailleExtender/addonDoc.py:289 msgid "Polish" msgstr "Polski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:125 +#: addon/globalPlugins/brailleExtender/addonDoc.py:290 msgid "Russian" msgstr "rosyjski" -#: addon/globalPlugins/brailleExtender/addonDoc.py:127 +#: addon/globalPlugins/brailleExtender/addonDoc.py:293 msgid "Copyrights and acknowledgements" msgstr "Prawa autorskie i podziękowania" -#: addon/globalPlugins/brailleExtender/addonDoc.py:129 +#: addon/globalPlugins/brailleExtender/addonDoc.py:299 msgid "and other contributors" msgstr "i inni współtwórcy" -#: addon/globalPlugins/brailleExtender/addonDoc.py:133 +#: addon/globalPlugins/brailleExtender/addonDoc.py:303 msgid "Translators" msgstr "tłumacze" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:313 msgid "Code contributions and other" msgstr "wkład do kodu i inne" -#: addon/globalPlugins/brailleExtender/addonDoc.py:139 +#: addon/globalPlugins/brailleExtender/addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "" "Dołączony został dodatkowy kod trzeciej strony, chroniony prawem autorskim:" -#: addon/globalPlugins/brailleExtender/addonDoc.py:142 +#: addon/globalPlugins/brailleExtender/addonDoc.py:321 msgid "Thanks also to" msgstr "dziękuję również" -#: addon/globalPlugins/brailleExtender/addonDoc.py:144 +#: addon/globalPlugins/brailleExtender/addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "I dziękuję państwu za informacje zwrotne i e-maile." -#: addon/globalPlugins/brailleExtender/addonDoc.py:146 +#: addon/globalPlugins/brailleExtender/addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "Pomoc dla %sa" -#: addon/globalPlugins/brailleExtender/addonDoc.py:162 +#: addon/globalPlugins/brailleExtender/addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "emuluje wciśnięcie %s na klawiaturze systemowej" -#: addon/globalPlugins/brailleExtender/addonDoc.py:169 +#: addon/globalPlugins/brailleExtender/addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "Opis tego skrótu jest tymczasowo niedostępny" -#: addon/globalPlugins/brailleExtender/addonDoc.py:187 +#: addon/globalPlugins/brailleExtender/addonDoc.py:377 msgid "caps lock" msgstr "caps lock" -#: addon/globalPlugins/brailleExtender/configBE.py:40 -#: addon/globalPlugins/brailleExtender/configBE.py:47 +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:105 +#, fuzzy +msgid "all tables" +msgstr "Tablice brajlowskie" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:116 +#, fuzzy +msgid "Advanced input mode dictionary" +msgstr "Dodaj wpis do słownika brajlowskiego" + +#. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. +#. Translators: The label for the combo box of dictionary entries in table dictionary dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:123 +#: addon/globalPlugins/brailleExtender/dictionaries.py:132 +msgid "Dictionary &entries" +msgstr "&Wpisy słownika" + +#. Translators: The label for a column in dictionary entries list used to identify comments for the entry. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 +msgid "Abbreviation" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 +#, fuzzy +msgid "Replace by" +msgstr "Zamiana" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:133 +#, fuzzy +msgid "Input table" +msgstr " tablica wprowadzania" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. +#. Translators: The label for a button in table dictionaries dialog to add new entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:139 +#: addon/globalPlugins/brailleExtender/dictionaries.py:149 +msgid "&Add" +msgstr "&Dodaj" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. +#. Translators: The label for a button in table dictionaries dialog to edit existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:145 +#: addon/globalPlugins/brailleExtender/dictionaries.py:155 +msgid "&Edit" +msgstr "&Edytuj" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. +#. Translators: The label for a button in table dictionaries dialog to remove existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:151 +#: addon/globalPlugins/brailleExtender/dictionaries.py:161 +msgid "Re&move" +msgstr "&Usuń" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:159 +#, fuzzy +msgid "&Open the dictionary file in an editor" +msgstr "&Otwórz plik słownika w edytorze tekstowym" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. +#. Translators: The label for a button in table dictionaries dialog to reload dictionary. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:164 +#: addon/globalPlugins/brailleExtender/dictionaries.py:174 +msgid "&Reload the dictionary" +msgstr "&Wczytaj słownik" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:177 +#: addon/globalPlugins/brailleExtender/dictionaries.py:218 +msgid "Add Dictionary Entry" +msgstr "Dodaj wpis do słownika" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 +msgid "File doesn't exist yet" +msgstr "" + +#. Translators: This is the label for the edit dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 +#: addon/globalPlugins/brailleExtender/dictionaries.py:290 +msgid "Edit Dictionary Entry" +msgstr "Edytuj wpis słownikowy" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:247 +#, fuzzy +msgid "&Abreviation" +msgstr "&Kierunek" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:252 +#, fuzzy +msgid "&Replace by" +msgstr "Zamiana" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 +#, fuzzy +msgid "Advanced input mode" +msgstr "reguły zaawansowane" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 +msgid "E&xit the advanced input mode after typing one pattern" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 +msgid "Escape sign for Unicode values" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:54 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:248 +#, fuzzy +msgid "Use braille table behavior" +msgstr "tablice brajlowskie" + +#: addon/globalPlugins/brailleExtender/configBE.py:55 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:249 +msgid "Dots 1-8 (⣿)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:250 +msgid "Dots 1-6 (⠿)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:251 +msgid "Empty cell (⠀)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:58 +msgid "Other dot pattern (e.g.: 6-123456)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:59 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:253 +msgid "Question mark (depending output table)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:60 +msgid "Other sign/pattern (e.g.: \\, ??)" +msgstr "" + #: addon/globalPlugins/brailleExtender/configBE.py:61 -#: addon/globalPlugins/brailleExtender/settings.py:421 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:255 +msgid "Hexadecimal, Liblouis style" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:256 +msgid "Hexadecimal, HUC8" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:257 +msgid "Hexadecimal, HUC6" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:70 +#: addon/globalPlugins/brailleExtender/configBE.py:77 +#: addon/globalPlugins/brailleExtender/configBE.py:91 +#: addon/globalPlugins/brailleExtender/settings.py:426 msgid "none" msgstr "Brak" -#: addon/globalPlugins/brailleExtender/configBE.py:41 +#: addon/globalPlugins/brailleExtender/configBE.py:71 msgid "braille only" msgstr "tylko brajlem" -#: addon/globalPlugins/brailleExtender/configBE.py:42 +#: addon/globalPlugins/brailleExtender/configBE.py:72 msgid "speech only" msgstr "tylko mową" -#: addon/globalPlugins/brailleExtender/configBE.py:43 -#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/configBE.py:73 +#: addon/globalPlugins/brailleExtender/configBE.py:94 msgid "both" msgstr "Brajlem i mową" -#: addon/globalPlugins/brailleExtender/configBE.py:48 +#: addon/globalPlugins/brailleExtender/configBE.py:78 msgid "dots 7 and 8" msgstr "punkty 7 i 8" -#: addon/globalPlugins/brailleExtender/configBE.py:49 +#: addon/globalPlugins/brailleExtender/configBE.py:79 msgid "dot 7" msgstr "punkt 7" -#: addon/globalPlugins/brailleExtender/configBE.py:50 +#: addon/globalPlugins/brailleExtender/configBE.py:80 msgid "dot 8" msgstr "punkt 8" -#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/configBE.py:86 msgid "stable" msgstr "stabilny" -#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/configBE.py:87 msgid "development" msgstr "Rozwojowy pierścień" -#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/configBE.py:92 msgid "focus mode" msgstr "Tryb punktu uwagi" -#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/configBE.py:93 msgid "review mode" msgstr "Tryb przeglądu" -#: addon/globalPlugins/brailleExtender/configBE.py:92 +#: addon/globalPlugins/brailleExtender/configBE.py:102 +msgid "Fill a cell in two stages on both sides" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:103 +msgid "Fill a cell in two stages on one side (space = empty side)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:104 +msgid "" +"Fill a cell dots by dots (each dot is a toggle, press space to validate the " +"character)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" msgstr "ostatni połączony" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:29 +#: addon/globalPlugins/brailleExtender/dictionaries.py:30 msgid "Sign" msgstr "Znak" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:31 +#: addon/globalPlugins/brailleExtender/dictionaries.py:32 msgid "Math" msgstr "Matematyka" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:33 +#: addon/globalPlugins/brailleExtender/dictionaries.py:34 msgid "Replace" msgstr "Zamiana" -#: addon/globalPlugins/brailleExtender/dictionaries.py:41 +#: addon/globalPlugins/brailleExtender/dictionaries.py:42 msgid "Both (input and output)" msgstr "Wprowadzanie i wyjście" -#: addon/globalPlugins/brailleExtender/dictionaries.py:42 +#: addon/globalPlugins/brailleExtender/dictionaries.py:43 msgid "Backward (input only)" msgstr "Wprowadzanie" -#: addon/globalPlugins/brailleExtender/dictionaries.py:43 +#: addon/globalPlugins/brailleExtender/dictionaries.py:44 msgid "Forward (output only)" msgstr "tylko wyjście" -#: addon/globalPlugins/brailleExtender/dictionaries.py:110 +#: addon/globalPlugins/brailleExtender/dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1020,121 +1509,87 @@ msgstr "" "Jeden lub więcej błędów napotkano w słownikach tablicach. słowniki, o " "których mowa: %s. W takim skutku, te tablice nie będą wczytane." -#. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:131 -msgid "Dictionary &entries" -msgstr "&Wpisy słownika" - #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon/globalPlugins/brailleExtender/dictionaries.py:134 +#: addon/globalPlugins/brailleExtender/dictionaries.py:135 msgid "Comment" msgstr "Komentarz" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon/globalPlugins/brailleExtender/dictionaries.py:136 +#: addon/globalPlugins/brailleExtender/dictionaries.py:137 msgid "Pattern" msgstr "wzorzec" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon/globalPlugins/brailleExtender/dictionaries.py:138 +#: addon/globalPlugins/brailleExtender/dictionaries.py:139 msgid "Representation" msgstr "Wyświetlanie" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:140 +#: addon/globalPlugins/brailleExtender/dictionaries.py:141 msgid "Opcode" msgstr "kod operatora" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon/globalPlugins/brailleExtender/dictionaries.py:142 +#: addon/globalPlugins/brailleExtender/dictionaries.py:143 msgid "Direction" msgstr "Kierunek" -#. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:148 -msgid "&Add" -msgstr "&Dodaj" - -#. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:154 -msgid "&Edit" -msgstr "&Edytuj" - -#. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon/globalPlugins/brailleExtender/dictionaries.py:160 -msgid "Re&move" -msgstr "&Usuń" - -#. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon/globalPlugins/brailleExtender/dictionaries.py:168 +#. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Otwórz plik słownika w edytorze tekstowym" -#. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon/globalPlugins/brailleExtender/dictionaries.py:173 -msgid "&Reload the dictionary" -msgstr "&Wczytaj słownik" - -#: addon/globalPlugins/brailleExtender/dictionaries.py:216 -msgid "Add Dictionary Entry" -msgstr "Dodaj wpis do słownika" - -#. Translators: This is the label for the edit dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:288 -msgid "Edit Dictionary Entry" -msgstr "Edytuj wpis słownikowy" - #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:294 +#: addon/globalPlugins/brailleExtender/dictionaries.py:296 msgid "Dictionary" msgstr "Słownik" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Global" msgstr "Ogólny" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Table" msgstr "tablica" -#: addon/globalPlugins/brailleExtender/dictionaries.py:296 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Temporary" msgstr "tymczasowy" -#: addon/globalPlugins/brailleExtender/dictionaries.py:302 +#: addon/globalPlugins/brailleExtender/dictionaries.py:304 msgid "See &entries" msgstr "Zobacz &Wpisy" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:307 +#: addon/globalPlugins/brailleExtender/dictionaries.py:309 msgid "&Text pattern/sign" msgstr "&wzorzec tekstu/znak" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:312 +#: addon/globalPlugins/brailleExtender/dictionaries.py:314 msgid "&Braille representation" msgstr "&Wyświetlanie brajla" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:316 +#: addon/globalPlugins/brailleExtender/dictionaries.py:318 msgid "&Comment" msgstr "&Komentarz" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:320 +#: addon/globalPlugins/brailleExtender/dictionaries.py:322 msgid "&Opcode" msgstr "&kod operatora" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon/globalPlugins/brailleExtender/dictionaries.py:325 +#: addon/globalPlugins/brailleExtender/dictionaries.py:327 msgid "&Direction" msgstr "&Kierunek" -#: addon/globalPlugins/brailleExtender/dictionaries.py:366 +#: addon/globalPlugins/brailleExtender/dictionaries.py:368 msgid "Text pattern/sign field is empty." msgstr "Pole tekst/wzorzec jest puste." -#: addon/globalPlugins/brailleExtender/dictionaries.py:373 +#: addon/globalPlugins/brailleExtender/dictionaries.py:375 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1143,7 +1598,7 @@ msgstr "" "Niepoprawna wartość dla pola 'wzorzec tekstu/znak'. Trzeba określić znak z " "tym operatorem kodu. NP: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:377 +#: addon/globalPlugins/brailleExtender/dictionaries.py:379 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1152,7 +1607,7 @@ msgstr "" "Pole 'wyświetlanie znaku' jest puste, coś musi być określone, gdy ten " "operator kodu jest wybrany. NP: %s" -#: addon/globalPlugins/brailleExtender/dictionaries.py:381 +#: addon/globalPlugins/brailleExtender/dictionaries.py:383 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1161,191 +1616,208 @@ msgstr "" "Nieprawidłowa wartość dla pola 'wyświetlanie znaku'. Musisz napisać wzorce " "punktów z tym operatorem. NP: %s" -#: addon/globalPlugins/brailleExtender/settings.py:32 +#. Translators: Reported when translation didn't succeed due to unsupported input. +#: addon/globalPlugins/brailleExtender/patchs.py:376 +msgid "Unsupported input" +msgstr "" + +#: addon/globalPlugins/brailleExtender/patchs.py:435 +msgid "Unsupported input method" +msgstr "" + +#: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "Implementacja tej funkcji jeszcze trwa. Dziękujemy za cierpliwość." #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:38 -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:40 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "General" msgstr "Ogólne" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:45 +#: addon/globalPlugins/brailleExtender/settings.py:47 msgid "Check for &updates automatically" msgstr "Automatycznie sprawdzaj, czy jest nowa wersja" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:49 +#: addon/globalPlugins/brailleExtender/settings.py:51 msgid "Add-on update channel" msgstr "Kanał aktualizacji dodatku" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:56 +#: addon/globalPlugins/brailleExtender/settings.py:58 msgid "Say current line while scrolling in" msgstr "Wypowiadaj aktualny wiersz przy przemieszczaniu się w" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:60 +#: addon/globalPlugins/brailleExtender/settings.py:62 msgid "Speech interrupt when scrolling on same line" msgstr "Przerwij mowę przy przemieszczaniu się w tym samym wierszu" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:64 +#: addon/globalPlugins/brailleExtender/settings.py:66 msgid "Speech interrupt for unknown gestures" msgstr "Przerywanie mowy dla nieznanych klawiszy" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:68 +#: addon/globalPlugins/brailleExtender/settings.py:70 msgid "Announce the character while moving with routing buttons" msgstr "" "Wypowiada znak podczas przemieszczania się za pomocą przycisków routingó" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:72 +#: addon/globalPlugins/brailleExtender/settings.py:74 msgid "Use cursor keys to route cursor in review mode" msgstr "" "Aby przemieszczać się do konkretnego znaku w trybie przeglądu, użyj klawiszy " "strzałek " #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:76 +#: addon/globalPlugins/brailleExtender/settings.py:78 msgid "Display time and date infinitely" msgstr "Wyświetlaj datę i czas w nieskończoność" -#: addon/globalPlugins/brailleExtender/settings.py:78 +#: addon/globalPlugins/brailleExtender/settings.py:80 msgid "Automatic review mode for apps with terminal" msgstr "Automatyczny tryb przeglądania dla aplikacji konsolowych" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:82 +#: addon/globalPlugins/brailleExtender/settings.py:84 msgid "Feedback for volume change in" msgstr "Informacja zwrotna dla zmiany głośności w" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:90 +#: addon/globalPlugins/brailleExtender/settings.py:92 msgid "Feedback for modifier keys in" msgstr "Informacja zwrotna dla modyfikatorów w" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:96 +#: addon/globalPlugins/brailleExtender/settings.py:98 msgid "Play beeps for modifier keys" msgstr "Odtwarzaj sygnały dźwiękowe dla modyfikatorów" -#: addon/globalPlugins/brailleExtender/settings.py:101 +#: addon/globalPlugins/brailleExtender/settings.py:103 msgid "Right margin on cells" msgstr "Prawy margines na komórkach brajlowskich" -#: addon/globalPlugins/brailleExtender/settings.py:101 -#: addon/globalPlugins/brailleExtender/settings.py:113 -#: addon/globalPlugins/brailleExtender/settings.py:356 +#: addon/globalPlugins/brailleExtender/settings.py:103 +#: addon/globalPlugins/brailleExtender/settings.py:115 +#: addon/globalPlugins/brailleExtender/settings.py:366 msgid "for the currrent braille display" msgstr "dla aktualnego monitora brajlowskiego" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:105 +#: addon/globalPlugins/brailleExtender/settings.py:107 msgid "Braille keyboard configuration" msgstr "Konfiguracja klawiatury brajlowskiej" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:109 +#: addon/globalPlugins/brailleExtender/settings.py:111 msgid "Reverse forward scroll and back scroll buttons" msgstr "Zamień przyciski czytania" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:113 +#: addon/globalPlugins/brailleExtender/settings.py:115 msgid "Autoscroll delay (ms)" msgstr "czekanie na automatyczne czytanie w milisekundach" -#: addon/globalPlugins/brailleExtender/settings.py:114 +#: addon/globalPlugins/brailleExtender/settings.py:116 msgid "First braille display preferred" msgstr "Pierwszy preferowany monitor brajlowski" -#: addon/globalPlugins/brailleExtender/settings.py:116 +#: addon/globalPlugins/brailleExtender/settings.py:118 msgid "Second braille display preferred" msgstr "Drugi preferowany monitor brajlowski" +#: addon/globalPlugins/brailleExtender/settings.py:120 +msgid "One-handed mode" +msgstr "" + +#: addon/globalPlugins/brailleExtender/settings.py:124 +msgid "One hand mode method" +msgstr "" + #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:149 +#: addon/globalPlugins/brailleExtender/settings.py:159 msgid "Text attributes" msgstr "Właściwości formatowania tekstu" -#: addon/globalPlugins/brailleExtender/settings.py:153 -#: addon/globalPlugins/brailleExtender/settings.py:200 +#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:210 msgid "Enable this feature" msgstr "Włącz tę funkcję" -#: addon/globalPlugins/brailleExtender/settings.py:155 +#: addon/globalPlugins/brailleExtender/settings.py:165 msgid "Show spelling errors with" msgstr "Pokazuj błędy pisowni za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:157 +#: addon/globalPlugins/brailleExtender/settings.py:167 msgid "Show bold with" msgstr "Pokazuj pogrubiony tekst za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:159 +#: addon/globalPlugins/brailleExtender/settings.py:169 msgid "Show italic with" msgstr "Pokazuj kursywę za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:161 +#: addon/globalPlugins/brailleExtender/settings.py:171 msgid "Show underline with" msgstr "Pokazuj podkreślenie za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:173 msgid "Show strikethrough with" msgstr "Pokazuj przekreślenie za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:165 +#: addon/globalPlugins/brailleExtender/settings.py:175 msgid "Show subscript with" msgstr "Pokazuj indeks dolny za pomocą" -#: addon/globalPlugins/brailleExtender/settings.py:167 +#: addon/globalPlugins/brailleExtender/settings.py:177 msgid "Show superscript with" msgstr "Pokazuj indeks górny za pomocą" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:193 +#: addon/globalPlugins/brailleExtender/settings.py:203 msgid "Role labels" msgstr "Oznaczenia kontrolek" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Role category" msgstr "Kategoria kontrolki" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Landmark" msgstr "Punkt orientacyjny" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Positive state" msgstr "Stan pozytywny" -#: addon/globalPlugins/brailleExtender/settings.py:202 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Negative state" msgstr "Stan negatywny" -#: addon/globalPlugins/brailleExtender/settings.py:206 +#: addon/globalPlugins/brailleExtender/settings.py:216 msgid "Role" msgstr "Kontrolka" -#: addon/globalPlugins/brailleExtender/settings.py:208 +#: addon/globalPlugins/brailleExtender/settings.py:218 msgid "Actual or new label" msgstr "Aktualne lub nowe oznaczenie" -#: addon/globalPlugins/brailleExtender/settings.py:212 +#: addon/globalPlugins/brailleExtender/settings.py:222 msgid "&Reset this role label" msgstr "&Zresetuj to spersonalizowane oznaczenie" -#: addon/globalPlugins/brailleExtender/settings.py:214 +#: addon/globalPlugins/brailleExtender/settings.py:224 msgid "Reset all role labels" msgstr "Zresetuj wszystkie spersonalizowane oznaczenia" -#: addon/globalPlugins/brailleExtender/settings.py:279 +#: addon/globalPlugins/brailleExtender/settings.py:289 msgid "You have no customized label." msgstr "Nie masz spersonalizowanego oznaczenia." -#: addon/globalPlugins/brailleExtender/settings.py:282 +#: addon/globalPlugins/brailleExtender/settings.py:292 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1354,101 +1826,94 @@ msgstr "" "Czy na pewno chcesz zresetować wszystkie oznaczenia? aktualnie masz %d " "spersonalizowanych oznaczeń." -#: addon/globalPlugins/brailleExtender/settings.py:283 -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:293 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Confirmation" msgstr "potwierdzenie" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:325 +#: addon/globalPlugins/brailleExtender/settings.py:335 msgid "Braille tables" msgstr "Tablice brajlowskie" -#: addon/globalPlugins/brailleExtender/settings.py:330 +#: addon/globalPlugins/brailleExtender/settings.py:340 msgid "Use the current input table" msgstr "Używaj aktualnej tablicy wprowadzania" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "Prefered braille tables" msgstr "Ulubione &tablice brajlowskie" -#: addon/globalPlugins/brailleExtender/settings.py:339 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "press F1 for help" msgstr "Naciśnij F1 dla pomocy" -#: addon/globalPlugins/brailleExtender/settings.py:343 +#: addon/globalPlugins/brailleExtender/settings.py:353 msgid "Input braille table for keyboard shortcut keys" msgstr "Tablica wprowadzania dla skrótów klawiszowych" -#: addon/globalPlugins/brailleExtender/settings.py:345 +#: addon/globalPlugins/brailleExtender/settings.py:355 msgid "None" msgstr "Brak" -#: addon/globalPlugins/brailleExtender/settings.py:348 +#: addon/globalPlugins/brailleExtender/settings.py:358 msgid "Secondary output table to use" msgstr "Wtórna tablica wyjścia do użycia" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:352 -msgid "Display tab signs as spaces" +#: addon/globalPlugins/brailleExtender/settings.py:362 +#, fuzzy +msgid "Display &tab signs as spaces" msgstr "Wyświetl znaki tabulacji jako spacje" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:356 -msgid "Number of space for a tab sign" +#: addon/globalPlugins/brailleExtender/settings.py:366 +#, fuzzy +msgid "Number of &space for a tab sign" msgstr "Liczba odstępów dla znaku tabulacji" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:358 -msgid "Prevent undefined characters with Hexadecimal Unicode value" -msgstr "" -"Zapobieganie wyświetlaniu znaków niezdefiniowanych jako wartości " -"heksadecymalnych" +#: addon/globalPlugins/brailleExtender/settings.py:367 +msgid "Alternative and &custom braille tables" +msgstr "Alternatywne i &tablice brajlowskie użytkownika" -#. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:361 +#: addon/globalPlugins/brailleExtender/settings.py:387 msgid "" -"Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +"NVDA must be restarted for some new options to take effect. Do you want " +"restart now?" msgstr "" -"Wyświetlaj znaki niezdefiniowane jako np: 0 pusta komórka, 12345678, " -"6-123456)" -#: addon/globalPlugins/brailleExtender/settings.py:363 -msgid "Alternative and &custom braille tables" -msgstr "Alternatywne i &tablice brajlowskie użytkownika" - -#: addon/globalPlugins/brailleExtender/settings.py:420 +#: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" msgstr "Wprowadzanie i wyjście" -#: addon/globalPlugins/brailleExtender/settings.py:422 +#: addon/globalPlugins/brailleExtender/settings.py:427 msgid "input only" msgstr "tylko wprowadzanie" -#: addon/globalPlugins/brailleExtender/settings.py:423 +#: addon/globalPlugins/brailleExtender/settings.py:428 msgid "output only" msgstr "Tylko wyjście" -#: addon/globalPlugins/brailleExtender/settings.py:454 +#: addon/globalPlugins/brailleExtender/settings.py:459 #, python-format msgid "Table name: %s" msgstr "nazwa tablicy: %s" -#: addon/globalPlugins/brailleExtender/settings.py:455 +#: addon/globalPlugins/brailleExtender/settings.py:460 #, python-format msgid "File name: %s" msgstr "Nazwa pliku: %s" -#: addon/globalPlugins/brailleExtender/settings.py:456 +#: addon/globalPlugins/brailleExtender/settings.py:461 #, python-format msgid "In switches: %s" msgstr "w rotorach: %s" -#: addon/globalPlugins/brailleExtender/settings.py:457 +#: addon/globalPlugins/brailleExtender/settings.py:462 msgid "About this table" msgstr "O tej tablicy" -#: addon/globalPlugins/brailleExtender/settings.py:460 +#: addon/globalPlugins/brailleExtender/settings.py:465 msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" @@ -1457,7 +1922,7 @@ msgstr "" "spację, a następnie strzałkę w lewo lub w prawo, aby usunąć wybraną tablice " "brajlowską lub dodać ją do rotorów" -#: addon/globalPlugins/brailleExtender/settings.py:461 +#: addon/globalPlugins/brailleExtender/settings.py:466 msgid "" "You can also press 'comma' key to get the file name of the selected table " "and 'semicolon' key to view miscellaneous infos on the selected table" @@ -1466,125 +1931,125 @@ msgstr "" "brajlowskiej i klawisz 'średnik' aby uzyskać rozmaite informacje dotyczące " "wybranej tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/settings.py:462 +#: addon/globalPlugins/brailleExtender/settings.py:467 msgid "Contextual help" msgstr "Pomoc kontekstowa" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:478 +#: addon/globalPlugins/brailleExtender/settings.py:483 msgid "Custom braille tables" msgstr "tablice brajlowskie użytkownika" -#: addon/globalPlugins/brailleExtender/settings.py:488 +#: addon/globalPlugins/brailleExtender/settings.py:493 msgid "Use a custom table as input table" msgstr "Używaj tablicy użytkownika jako tablicę wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:489 +#: addon/globalPlugins/brailleExtender/settings.py:494 msgid "Use a custom table as output table" msgstr "Używać tablicy użytkownika jako tablicę wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:490 +#: addon/globalPlugins/brailleExtender/settings.py:495 msgid "&Add a braille table" msgstr "&Dodaj tablicę brajlowską" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:514 +#: addon/globalPlugins/brailleExtender/settings.py:519 msgid "Add a braille table" msgstr "Dodawanie tablicy brajlowskiej" -#: addon/globalPlugins/brailleExtender/settings.py:520 +#: addon/globalPlugins/brailleExtender/settings.py:525 msgid "Display name" msgstr "Nazwa wyświetlana" -#: addon/globalPlugins/brailleExtender/settings.py:521 +#: addon/globalPlugins/brailleExtender/settings.py:526 msgid "Description" msgstr "Opis" -#: addon/globalPlugins/brailleExtender/settings.py:522 +#: addon/globalPlugins/brailleExtender/settings.py:527 msgid "Path" msgstr "Scieżka" -#: addon/globalPlugins/brailleExtender/settings.py:523 -#: addon/globalPlugins/brailleExtender/settings.py:594 +#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:599 msgid "&Browse" msgstr "&Przeglądaj" -#: addon/globalPlugins/brailleExtender/settings.py:526 +#: addon/globalPlugins/brailleExtender/settings.py:531 msgid "Contracted (grade 2) braille table" msgstr "tablica brajlowska skrótów" #. Translators: label of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Available for" msgstr "Dostępne dla" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input and output" msgstr "Wprowadzanie i wyjście" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input only" msgstr "Tylko wprowadzanie" -#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Output only" msgstr "Tylko wyjście" -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Choose a table file" msgstr "Proszę wybrać tablicę " -#: addon/globalPlugins/brailleExtender/settings.py:534 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Liblouis table files" msgstr "Pliki tablic liblouis" -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Please specify a display name." msgstr "Proszę wprowadzić nazwę wyswietlaną." -#: addon/globalPlugins/brailleExtender/settings.py:546 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Invalid display name" msgstr "Nieprawidłowa nazwa wyświetlana" -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 #, python-format msgid "The specified path is not valid (%s)." msgstr "Określona ścieżka jest nieprawidłowa (%s)." -#: addon/globalPlugins/brailleExtender/settings.py:550 +#: addon/globalPlugins/brailleExtender/settings.py:555 msgid "Invalid path" msgstr "Nieprawidłowa ścieżka" #. Translators: title of a dialog. -#: addon/globalPlugins/brailleExtender/settings.py:578 +#: addon/globalPlugins/brailleExtender/settings.py:583 msgid "Quick launches" msgstr "Szybkie uruchamianie" -#: addon/globalPlugins/brailleExtender/settings.py:589 +#: addon/globalPlugins/brailleExtender/settings.py:594 msgid "&Gestures" msgstr "&Zdarzenia wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:592 +#: addon/globalPlugins/brailleExtender/settings.py:597 msgid "Location (file path, URL or command)" msgstr "Lokalizacja(ścieżka do pliku, URL lub komenda)" -#: addon/globalPlugins/brailleExtender/settings.py:595 +#: addon/globalPlugins/brailleExtender/settings.py:600 msgid "&Remove this gesture" msgstr "&Usuń to zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:596 +#: addon/globalPlugins/brailleExtender/settings.py:601 msgid "&Add a quick launch" msgstr "&Dodaj zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:625 +#: addon/globalPlugins/brailleExtender/settings.py:630 msgid "Unable to associate this gesture. Please enter another, now" msgstr "Nie można skojarzyć zdarzenia wejścia. Proszę wpisać inne" -#: addon/globalPlugins/brailleExtender/settings.py:630 +#: addon/globalPlugins/brailleExtender/settings.py:635 msgid "Out of capture" msgstr "Poza przechwytem" -#: addon/globalPlugins/brailleExtender/settings.py:632 +#: addon/globalPlugins/brailleExtender/settings.py:637 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -1593,21 +2058,21 @@ msgstr "" "Proszę państwa wprowadzić zdarzenie wejścia z państwa linijki brajlowskiej " "{NAME_BRAILLE_DISPLAY}. Aby anulować, trzeba nacisnąć spację." -#: addon/globalPlugins/brailleExtender/settings.py:640 +#: addon/globalPlugins/brailleExtender/settings.py:645 #, python-format msgid "OK. The gesture captured is %s" msgstr "OK. Przechwycone zdarzenie wejścia to %s" -#: addon/globalPlugins/brailleExtender/settings.py:657 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Are you sure to want to delete this shorcut?" msgstr "Czy na pewno chcesz usunąć ten skrót?" -#: addon/globalPlugins/brailleExtender/settings.py:666 +#: addon/globalPlugins/brailleExtender/settings.py:671 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} usunięto" -#: addon/globalPlugins/brailleExtender/settings.py:677 +#: addon/globalPlugins/brailleExtender/settings.py:682 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -1615,107 +2080,157 @@ msgstr "" "Proszę wprowadzić chciane zdarzenie wejścia z klawiatury. Proszę nacisnąć " "\"spację\" aby anulować" -#: addon/globalPlugins/brailleExtender/settings.py:680 +#: addon/globalPlugins/brailleExtender/settings.py:685 msgid "Don't add a quick launch" msgstr "Nie dodawaj zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:706 +#: addon/globalPlugins/brailleExtender/settings.py:711 #, python-brace-format msgid "Choose a file for {0}" msgstr "Proszę wybrać plik dla {0}" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Please create or select a quick launch first" msgstr "Najpierw wybierz, lub utwórz zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:719 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Error" msgstr "Błąd" -#: addon/globalPlugins/brailleExtender/settings.py:723 +#: addon/globalPlugins/brailleExtender/settings.py:728 msgid "Profiles editor" msgstr "Edytor profili" -#: addon/globalPlugins/brailleExtender/settings.py:734 +#: addon/globalPlugins/brailleExtender/settings.py:739 msgid "You must have a braille display to editing a profile" msgstr "do edytowania profilu niezbędne jest posiadanie linijki brajlowskiej" -#: addon/globalPlugins/brailleExtender/settings.py:738 +#: addon/globalPlugins/brailleExtender/settings.py:743 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "Katalog Profiles nie jest widoczny, lub jest on niedostępny. Nie można " "edytować profili" -#: addon/globalPlugins/brailleExtender/settings.py:744 +#: addon/globalPlugins/brailleExtender/settings.py:749 msgid "Profile to edit" msgstr "Profil do edycji" -#: addon/globalPlugins/brailleExtender/settings.py:750 +#: addon/globalPlugins/brailleExtender/settings.py:755 msgid "Gestures category" msgstr "Kategoria zdarzeń wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Single keys" msgstr "Pojedyńcze skróty" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Practical shortcuts" msgstr "Skróty praktyczne" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "NVDA commands" msgstr "Polecenia NVDA" -#: addon/globalPlugins/brailleExtender/settings.py:751 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Addon features" msgstr "Funkcje dodatku" -#: addon/globalPlugins/brailleExtender/settings.py:755 +#: addon/globalPlugins/brailleExtender/settings.py:760 msgid "Gestures list" msgstr "Spis zdarzeń wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:764 +#: addon/globalPlugins/brailleExtender/settings.py:769 msgid "Add gesture" msgstr "dodaj zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:766 +#: addon/globalPlugins/brailleExtender/settings.py:771 msgid "Remove this gesture" msgstr "Usuń to zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:769 +#: addon/globalPlugins/brailleExtender/settings.py:774 msgid "Assign a braille gesture" msgstr "Przydziel brajlowskie zdarzenie wejścia" -#: addon/globalPlugins/brailleExtender/settings.py:776 +#: addon/globalPlugins/brailleExtender/settings.py:781 msgid "Remove this profile" msgstr "usuń profil" -#: addon/globalPlugins/brailleExtender/settings.py:779 +#: addon/globalPlugins/brailleExtender/settings.py:784 msgid "Add a profile" msgstr "dodaj profil" -#: addon/globalPlugins/brailleExtender/settings.py:785 +#: addon/globalPlugins/brailleExtender/settings.py:790 msgid "Name for the new profile" msgstr "Nazwa nowego profilu" -#: addon/globalPlugins/brailleExtender/settings.py:791 +#: addon/globalPlugins/brailleExtender/settings.py:796 msgid "Create" msgstr "Utwórz" -#: addon/globalPlugins/brailleExtender/settings.py:854 +#: addon/globalPlugins/brailleExtender/settings.py:859 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "Nie można załadować tego profilu. Uszkodzony lub niedostępny plik" -#: addon/globalPlugins/brailleExtender/settings.py:873 +#: addon/globalPlugins/brailleExtender/settings.py:878 msgid "Undefined" msgstr "Nieokreślone" #. Translators: title of add-on parameters dialog. -#: addon/globalPlugins/brailleExtender/settings.py:902 +#: addon/globalPlugins/brailleExtender/settings.py:909 msgid "Settings" msgstr "Ustawienia" +#. Translators: label of a dialog. +#: addon/globalPlugins/brailleExtender/undefinedChars.py:244 +#, fuzzy +msgid "Representation &method" +msgstr "Wyświetlanie" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:252 +#, python-brace-format +msgid "Other dot pattern (e.g.: {dotPatternSample})" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:254 +#, python-brace-format +msgid "Other sign/pattern (e.g.: {signPatternSample})" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:272 +msgid "Specify another pattern" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:276 +msgid "Describe undefined characters if possible" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:284 +msgid "Also describe extended characters (e.g.: country flags)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:291 +msgid "Start tag" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:296 +msgid "End tag" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:307 +msgid "Language" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:310 +#, fuzzy +msgid "Use the current output table" +msgstr "Używaj aktualnej tablicy wprowadzania" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:323 +#, fuzzy +msgid "Braille table" +msgstr "Tablice brajlowskie" + #: addon/globalPlugins/brailleExtender/updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" @@ -1746,69 +2261,69 @@ msgstr "Okno dialogowe aktualizacji jest już uruchomione!" msgid "{addonName}'s update" msgstr "Aktualizacja {addonName}-a" -#: addon/globalPlugins/brailleExtender/utils.py:189 +#: addon/globalPlugins/brailleExtender/utils.py:194 msgid "Reload successful" msgstr "Ponowne wczytywanie powiodło się" -#: addon/globalPlugins/brailleExtender/utils.py:192 +#: addon/globalPlugins/brailleExtender/utils.py:197 msgid "Reload failed" msgstr "ponowne wczytywanie nie powiodło się" -#: addon/globalPlugins/brailleExtender/utils.py:197 -#: addon/globalPlugins/brailleExtender/utils.py:207 +#: addon/globalPlugins/brailleExtender/utils.py:203 +#: addon/globalPlugins/brailleExtender/utils.py:218 msgid "Not a character" msgstr "nie jest znakiem" -#: addon/globalPlugins/brailleExtender/utils.py:201 -msgid "unknown" -msgstr "Nieznane" +#: addon/globalPlugins/brailleExtender/utils.py:208 +msgid "N/A" +msgstr "" -#: addon/globalPlugins/brailleExtender/utils.py:330 +#: addon/globalPlugins/brailleExtender/utils.py:312 msgid "Available combinations" msgstr "dostępne skróty" -#: addon/globalPlugins/brailleExtender/utils.py:332 +#: addon/globalPlugins/brailleExtender/utils.py:314 msgid "One combination available" msgstr "Jeden dostępny skrót" -#: addon/globalPlugins/brailleExtender/utils.py:349 +#: addon/globalPlugins/brailleExtender/utils.py:325 msgid "space" msgstr "spacja" -#: addon/globalPlugins/brailleExtender/utils.py:350 +#: addon/globalPlugins/brailleExtender/utils.py:326 msgid "left SHIFT" msgstr "lewy SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:351 +#: addon/globalPlugins/brailleExtender/utils.py:327 msgid "right SHIFT" msgstr "PRAWY SHIFT" -#: addon/globalPlugins/brailleExtender/utils.py:352 +#: addon/globalPlugins/brailleExtender/utils.py:328 msgid "left selector" msgstr "Lewe zaznaczanie" -#: addon/globalPlugins/brailleExtender/utils.py:353 +#: addon/globalPlugins/brailleExtender/utils.py:329 msgid "right selector" msgstr "Prawe zaznaczanie" -#: addon/globalPlugins/brailleExtender/utils.py:354 +#: addon/globalPlugins/brailleExtender/utils.py:330 msgid "dot" msgstr "punkt" -#: addon/globalPlugins/brailleExtender/utils.py:369 +#: addon/globalPlugins/brailleExtender/utils.py:345 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} na {brailleDisplay}" -#: addon/globalPlugins/brailleExtender/utils.py:446 +#: addon/globalPlugins/brailleExtender/utils.py:422 msgid "No text" msgstr "Brak tekstu" -#: addon/globalPlugins/brailleExtender/utils.py:455 +#: addon/globalPlugins/brailleExtender/utils.py:431 msgid "Not text" msgstr "Nie jest tekstem" -#: addon/globalPlugins/brailleExtender/utils.py:475 +#: addon/globalPlugins/brailleExtender/utils.py:451 msgid "No text selected" msgstr "Brak zaznaczonego tekstu" @@ -1929,6 +2444,29 @@ msgstr "" msgid "actions and quick navigation through a rotor" msgstr "akcje i szybka nawigacja za pomocą rotora" +#~ msgid "Braille &dictionaries" +#~ msgstr "&Słowniki brajlowskie" + +#~ msgid "%s braille display" +#~ msgstr "Monitor brajlowski %s" + +#~ msgid "profile loaded: %s" +#~ msgstr "Profil wczytany: %s" + +#~ msgid "Prevent undefined characters with Hexadecimal Unicode value" +#~ msgstr "" +#~ "Zapobieganie wyświetlaniu znaków niezdefiniowanych jako wartości " +#~ "heksadecymalnych" + +#~ msgid "" +#~ "Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +#~ msgstr "" +#~ "Wyświetlaj znaki niezdefiniowane jako np: 0 pusta komórka, 12345678, " +#~ "6-123456)" + +#~ msgid "unknown" +#~ msgstr "Nieznane" + #~ msgid "" #~ "In virtual documents (HTML/PDF/…) you can navigate element type by " #~ "element type using keyboard. These navigation keys should work with your " @@ -1962,9 +2500,6 @@ msgstr "akcje i szybka nawigacja za pomocą rotora" #~ msgid "Braille tables configuration" #~ msgstr "Konfiguracja tablic brajlowskich" -#~ msgid "Text attributes configuration" -#~ msgstr "Konfiguracja prezentacji formatowania dokumentu" - #~ msgid "Role &labels" #~ msgstr "&Oznaczenia kontrolek" @@ -2006,9 +2541,6 @@ msgstr "akcje i szybka nawigacja za pomocą rotora" #~ msgid "Enable Attribra" #~ msgstr "włącz attribrę" -#~ msgid "braille tables" -#~ msgstr "tablice brajlowskie" - #~ msgid "" #~ "You can find some ideas of features for BrailleExtender that might be " #~ "implemented here" @@ -2268,9 +2800,6 @@ msgstr "akcje i szybka nawigacja za pomocą rotora" #~ msgid "Category" #~ msgstr "kategoria" -#~ msgid "Profile" -#~ msgstr "Profil" - #~ msgid "Bold" #~ msgstr "Pogrubienie" @@ -2323,9 +2852,6 @@ msgstr "akcje i szybka nawigacja za pomocą rotora" #~ msgid "Feature Not Implemented Yet" #~ msgstr "Jeszczę niezaimplementowana funkcja" -#~ msgid "Advanced rules" -#~ msgstr "reguły zaawansowane" - #~ msgid "&Edit this rule" #~ msgstr "&Edytuj regułę" diff --git a/addon/locale/ru/LC_MESSAGES/nvda.po b/addon/locale/ru/LC_MESSAGES/nvda.po index 3941f112..c4c9788b 100644 --- a/addon/locale/ru/LC_MESSAGES/nvda.po +++ b/addon/locale/ru/LC_MESSAGES/nvda.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: BrailleExtender dev-18.08.04-105046\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-16 15:13+0100\n" +"PO-Revision-Date: 2020-04-17 22:14+0100\n" "Last-Translator: Zvonimir \n" "Language-Team: \n" "Language: ru_RU\n" @@ -911,6 +911,8 @@ msgid "" "This feature allows you to obtain various information regarding the " "character under the cursor using the current input braille table, such as:" msgstr "" +"Эта функция позволяет вам получить информацию о знаке под курсором используя " +"актуальную брайлевскую таблицу, такую как:" #: addon/globalPlugins/brailleExtender/addonDoc.py:65 msgid "" @@ -918,6 +920,9 @@ msgid "" "values; A description of the character if possible; - The Unicode Braille " "representation and the Braille dot pattern." msgstr "" +"Изображения HUC8 и HUC6; шестнадцатиричное, десятиричное, восмиричное или " +"двоичное значения; и если возможно, описание знака; - отображение в " +"брайлевском юникоде и комбинация точек." #: addon/globalPlugins/brailleExtender/addonDoc.py:67 msgid "" @@ -925,23 +930,28 @@ msgid "" "information in a flash message and a double-press displays the same " "information in a virtual NVDA buffer." msgstr "" +"Нажимая однажды клавишную комбинацию связанную с этой функцией,показывается " +"информация в скором сообщении а нажатие дважды показывает Показывает ту-же " +"самую информацию в виртуальном окне NVDA." #: addon/globalPlugins/brailleExtender/addonDoc.py:69 msgid "" "On supported displays the defined gesture is ⡉+space. No system gestures are " "defined by default." msgstr "" +"На поддержанных брайлевских дисплеях жест по умолчанию - ⡉+пробел. По " +"умолчанию нет клавишной комбинации в системе." #: addon/globalPlugins/brailleExtender/addonDoc.py:71 #, python-brace-format msgid "" "For example, for the '{chosenChar}' character, we will get the following " "information:" -msgstr "" +msgstr "Например, для '{chosenChar}' знака, получаем следующую информацию:" #: addon/globalPlugins/brailleExtender/addonDoc.py:74 msgid "Advanced Braille Input" -msgstr "" +msgstr "Расширенный брайлевский ввод" #: addon/globalPlugins/brailleExtender/addonDoc.py:76 msgid "" @@ -953,35 +963,42 @@ msgid "" "Alternatively, an option allows you to automatically exit this mode after " "entering a single pattern. " msgstr "" +"Эта функция даёт вам возможность написания знаков в отображении HUC8 или в " +"их сестнадцатиричных, десятеричных, восмиричных, или двоичных. Даже у вас " +"есть возможность развития сокращений. Чтобы пользоватся этим функционалом, " +"включите расширенный ввод и напишите желанный вами знак. Жесты по умолчанию: " +"NVDA+Windows+i или ⡊+space (на поддержанных дисплеях. Нажмите тот же самый " +"жест, чтобы выйти. Алтернативно, существует опция, которая даёт вам " +"возможность выйти из этого режима. " #: addon/globalPlugins/brailleExtender/addonDoc.py:80 msgid "Specify the basis as follows" -msgstr "" +msgstr "Определите базу как следует" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "⠭ or ⠓" -msgstr "" +msgstr "⠭ или ⠓" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "for a hexadecimal value" -msgstr "" +msgstr "для шестнадцатиричного значения" #: addon/globalPlugins/brailleExtender/addonDoc.py:83 msgid "for a decimal value" -msgstr "" +msgstr "Для десятиричного значения" #: addon/globalPlugins/brailleExtender/addonDoc.py:84 msgid "for an octal value" -msgstr "" +msgstr "Для восмиричного значения" #: addon/globalPlugins/brailleExtender/addonDoc.py:87 msgid "" "Enter the value of the character according to the previously selected basis." -msgstr "" +msgstr "Начните писать знак в соответствии с выбранной базой." #: addon/globalPlugins/brailleExtender/addonDoc.py:88 msgid "Press Space to validate." -msgstr "" +msgstr "Чтобы проверить, нажмите пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:91 msgid "" @@ -989,18 +1006,22 @@ msgid "" "dictionaries -. Then, you just have to enter your abbreviation and press " "space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." msgstr "" +"Для сокращений, сначала нужно их добавить в диалоговом окне - словари " +"расширенного ввода -. после этого, начинаете писать своё сокращение и " +"нажимаете пробел чтобы расширить его. Например, Возможно прикрутить — ⠎⠺ — к" +"— слову бутерброд —." #: addon/globalPlugins/brailleExtender/addonDoc.py:93 msgid "Here are some examples of sequences to be entered for given characters:" -msgstr "" +msgstr "Здесь приводятся примеры дл некоторых знаков:" #: addon/globalPlugins/brailleExtender/addonDoc.py:97 msgid "Note: the HUC6 input is currently not supported." -msgstr "" +msgstr "Примечание: Ввод HUC6 не поддерживается." #: addon/globalPlugins/brailleExtender/addonDoc.py:100 msgid "One-hand mode" -msgstr "" +msgstr "Режим одной рукой" #: addon/globalPlugins/brailleExtender/addonDoc.py:102 msgid "" From e7228f3c2b2a18fcc1a99e8f452cdae770634d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:11:35 +0200 Subject: [PATCH 66/87] L10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 1974 ++++++++++++++++++--------- 1 file changed, 1316 insertions(+), 658 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index 06cfac0c..5baedd7f 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-02-08 14:11+0100\n" -"PO-Revision-Date: 2020-02-08 14:19+0100\n" +"POT-Creation-Date: 2020-04-18 10:11+0200\n" +"PO-Revision-Date: 2020-04-18 11:11+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -11,180 +11,179 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.3\n" -"X-Poedit-Basepath: ../../..\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" -#: addon\globalPlugins\brailleExtender\__init__.py:61 +#: addon\globalPlugins\brailleExtender\__init__.py:67 msgid "Default" msgstr "Par défaut" -#: addon\globalPlugins\brailleExtender\__init__.py:62 +#: addon\globalPlugins\brailleExtender\__init__.py:68 msgid "Moving in the text" msgstr "Déplacement dans le texte" -#: addon\globalPlugins\brailleExtender\__init__.py:63 +#: addon\globalPlugins\brailleExtender\__init__.py:69 msgid "Text selection" msgstr "Sélection de texte" -#: addon\globalPlugins\brailleExtender\__init__.py:64 +#: addon\globalPlugins\brailleExtender\__init__.py:70 msgid "Objects" msgstr "Objets" -#: addon\globalPlugins\brailleExtender\__init__.py:65 +#: addon\globalPlugins\brailleExtender\__init__.py:71 msgid "Review" msgstr "Revue" -#: addon\globalPlugins\brailleExtender\__init__.py:66 +#: addon\globalPlugins\brailleExtender\__init__.py:72 msgid "Links" msgstr "Liens" -#: addon\globalPlugins\brailleExtender\__init__.py:67 +#: addon\globalPlugins\brailleExtender\__init__.py:73 msgid "Unvisited links" msgstr "Liens non visités" -#: addon\globalPlugins\brailleExtender\__init__.py:68 +#: addon\globalPlugins\brailleExtender\__init__.py:74 msgid "Visited links" msgstr "Liens visités" -#: addon\globalPlugins\brailleExtender\__init__.py:69 +#: addon\globalPlugins\brailleExtender\__init__.py:75 msgid "Landmarks" msgstr "Repères" -#: addon\globalPlugins\brailleExtender\__init__.py:70 +#: addon\globalPlugins\brailleExtender\__init__.py:76 msgid "Headings" msgstr "Titres de niveau" -#: addon\globalPlugins\brailleExtender\__init__.py:71 +#: addon\globalPlugins\brailleExtender\__init__.py:77 msgid "Headings at level 1" msgstr "Titres de niveau 1" -#: addon\globalPlugins\brailleExtender\__init__.py:72 +#: addon\globalPlugins\brailleExtender\__init__.py:78 msgid "Headings at level 2" msgstr "Titres de niveau 2" -#: addon\globalPlugins\brailleExtender\__init__.py:73 +#: addon\globalPlugins\brailleExtender\__init__.py:79 msgid "Headings at level 3" msgstr "Titres de niveau 3" -#: addon\globalPlugins\brailleExtender\__init__.py:74 +#: addon\globalPlugins\brailleExtender\__init__.py:80 msgid "Headings at level 4" msgstr "Titres de niveau 4" -#: addon\globalPlugins\brailleExtender\__init__.py:75 +#: addon\globalPlugins\brailleExtender\__init__.py:81 msgid "Headings at level 5" msgstr "Titres de niveau 5" -#: addon\globalPlugins\brailleExtender\__init__.py:76 +#: addon\globalPlugins\brailleExtender\__init__.py:82 msgid "Headings at level 6" msgstr "Titres de niveau 6" -#: addon\globalPlugins\brailleExtender\__init__.py:77 +#: addon\globalPlugins\brailleExtender\__init__.py:83 msgid "Lists" msgstr "Listes" -#: addon\globalPlugins\brailleExtender\__init__.py:78 +#: addon\globalPlugins\brailleExtender\__init__.py:84 msgid "List items" msgstr "Éléments de liste" -#: addon\globalPlugins\brailleExtender\__init__.py:79 +#: addon\globalPlugins\brailleExtender\__init__.py:85 msgid "Graphics" msgstr "Graphiques" -#: addon\globalPlugins\brailleExtender\__init__.py:80 +#: addon\globalPlugins\brailleExtender\__init__.py:86 msgid "Block quotes" msgstr "Citations" -#: addon\globalPlugins\brailleExtender\__init__.py:81 +#: addon\globalPlugins\brailleExtender\__init__.py:87 msgid "Buttons" msgstr "Boutons" -#: addon\globalPlugins\brailleExtender\__init__.py:82 +#: addon\globalPlugins\brailleExtender\__init__.py:88 msgid "Form fields" msgstr "Champs de formulaire" -#: addon\globalPlugins\brailleExtender\__init__.py:83 +#: addon\globalPlugins\brailleExtender\__init__.py:89 msgid "Edit fields" msgstr "Champs d’édition" -#: addon\globalPlugins\brailleExtender\__init__.py:84 +#: addon\globalPlugins\brailleExtender\__init__.py:90 msgid "Radio buttons" msgstr "Boutons radio" -#: addon\globalPlugins\brailleExtender\__init__.py:85 +#: addon\globalPlugins\brailleExtender\__init__.py:91 msgid "Combo boxes" msgstr "Listes déroulantes" -#: addon\globalPlugins\brailleExtender\__init__.py:86 +#: addon\globalPlugins\brailleExtender\__init__.py:92 msgid "Check boxes" msgstr "Cases à cocher" -#: addon\globalPlugins\brailleExtender\__init__.py:87 +#: addon\globalPlugins\brailleExtender\__init__.py:93 msgid "Not link blocks" msgstr "Fin de bloc de liens" -#: addon\globalPlugins\brailleExtender\__init__.py:88 +#: addon\globalPlugins\brailleExtender\__init__.py:94 msgid "Frames" msgstr "Cadres" -#: addon\globalPlugins\brailleExtender\__init__.py:89 +#: addon\globalPlugins\brailleExtender\__init__.py:95 msgid "Separators" msgstr "Séparateurs" -#: addon\globalPlugins\brailleExtender\__init__.py:90 +#: addon\globalPlugins\brailleExtender\__init__.py:96 msgid "Embedded objects" msgstr "Objets embarqués" -#: addon\globalPlugins\brailleExtender\__init__.py:91 +#: addon\globalPlugins\brailleExtender\__init__.py:97 msgid "Annotations" msgstr "Annotations" -#: addon\globalPlugins\brailleExtender\__init__.py:92 +#: addon\globalPlugins\brailleExtender\__init__.py:98 msgid "Spelling errors" msgstr "Erreurs d’orthographe" -#: addon\globalPlugins\brailleExtender\__init__.py:93 +#: addon\globalPlugins\brailleExtender\__init__.py:99 msgid "Tables" msgstr "Tableaux" -#: addon\globalPlugins\brailleExtender\__init__.py:94 +#: addon\globalPlugins\brailleExtender\__init__.py:100 msgid "Move in table" msgstr "Déplacement dans le tableau" -#: addon\globalPlugins\brailleExtender\__init__.py:100 +#: addon\globalPlugins\brailleExtender\__init__.py:106 msgid "If pressed twice, presents the information in browse mode" msgstr "Deux appuis : présenter l’information en mode navigation" -#: addon\globalPlugins\brailleExtender\__init__.py:252 +#: addon\globalPlugins\brailleExtender\__init__.py:260 msgid "Docu&mentation" msgstr "D&ocumentation" -#: addon\globalPlugins\brailleExtender\__init__.py:252 +#: addon\globalPlugins\brailleExtender\__init__.py:260 msgid "Opens the addon's documentation." msgstr "Ouvre la documentation du module complémentaire." -#: addon\globalPlugins\brailleExtender\__init__.py:258 +#: addon\globalPlugins\brailleExtender\__init__.py:266 msgid "&Settings" msgstr "Para&mètres" -#: addon\globalPlugins\brailleExtender\__init__.py:258 +#: addon\globalPlugins\brailleExtender\__init__.py:266 msgid "Opens the addons' settings." msgstr "Ouvre les paramètres du module complémentaire." -#: addon\globalPlugins\brailleExtender\__init__.py:265 -msgid "Braille &dictionaries" -msgstr "&Dictionnaires braille" +#: addon\globalPlugins\brailleExtender\__init__.py:273 +msgid "Table &dictionaries" +msgstr "Dictionnaires des tables" -#: addon\globalPlugins\brailleExtender\__init__.py:265 +#: addon\globalPlugins\brailleExtender\__init__.py:273 msgid "'Braille dictionaries' menu" msgstr "Menu \"dictionnaires braille\"" -#: addon\globalPlugins\brailleExtender\__init__.py:266 +#: addon\globalPlugins\brailleExtender\__init__.py:274 msgid "&Global dictionary" msgstr "Dictionnaire &global" -#: addon\globalPlugins\brailleExtender\__init__.py:266 +#: addon\globalPlugins\brailleExtender\__init__.py:274 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -192,11 +191,11 @@ msgstr "" "Une boîte de dialogue dans laquelle vous pouvez définir un dictionnaire " "global en ajoutant des entrées de dictionnaire à la liste." -#: addon\globalPlugins\brailleExtender\__init__.py:268 +#: addon\globalPlugins\brailleExtender\__init__.py:276 msgid "&Table dictionary" msgstr "Dictionnaire de la &table" -#: addon\globalPlugins\brailleExtender\__init__.py:268 +#: addon\globalPlugins\brailleExtender\__init__.py:276 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -204,11 +203,11 @@ msgstr "" "Une boîte de dialogue dans laquelle vous pouvez définir un dictionnaire " "spécifique à une table en ajoutant des entrées de dictionnaire à la liste." -#: addon\globalPlugins\brailleExtender\__init__.py:270 +#: addon\globalPlugins\brailleExtender\__init__.py:278 msgid "Te&mporary dictionary" msgstr "Dictionnaire tem&poraire" -#: addon\globalPlugins\brailleExtender\__init__.py:270 +#: addon\globalPlugins\brailleExtender\__init__.py:278 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." @@ -216,121 +215,128 @@ msgstr "" "Une boîte de dialogue dans laquelle vous pouvez définir un dictionnaire " "temporaire en ajoutant des entrées de dictionnaire à la liste." -#: addon\globalPlugins\brailleExtender\__init__.py:273 +#: addon\globalPlugins\brailleExtender\__init__.py:281 +msgid "Advanced &input mode dictionary" +msgstr "D&ictionnaire du mode de saisie avancée" + +#: addon\globalPlugins\brailleExtender\__init__.py:281 +msgid "Advanced input mode configuration" +msgstr "Configuration du mode de saisie avancée" + +#: addon\globalPlugins\brailleExtender\__init__.py:287 msgid "&Quick launches" msgstr "&Lancements rapides" -#: addon\globalPlugins\brailleExtender\__init__.py:273 +#: addon\globalPlugins\brailleExtender\__init__.py:287 msgid "Quick launches configuration" msgstr "Configuration des lancements rapides" -#: addon\globalPlugins\brailleExtender\__init__.py:279 +#: addon\globalPlugins\brailleExtender\__init__.py:293 msgid "&Profile editor" msgstr "Éditeur de &profils" -#: addon\globalPlugins\brailleExtender\__init__.py:279 +#: addon\globalPlugins\brailleExtender\__init__.py:293 msgid "Profile editor" msgstr "Éditeur de profil" -#: addon\globalPlugins\brailleExtender\__init__.py:285 +#: addon\globalPlugins\brailleExtender\__init__.py:299 msgid "Overview of the current input braille table" msgstr "Aperçu de la table braille d’entrée actuelle" -#: addon\globalPlugins\brailleExtender\__init__.py:287 +#: addon\globalPlugins\brailleExtender\__init__.py:301 msgid "Reload add-on" msgstr "Recharger le module" -#: addon\globalPlugins\brailleExtender\__init__.py:287 +#: addon\globalPlugins\brailleExtender\__init__.py:301 msgid "Reload this add-on." msgstr "Recharger cet add-on." -#: addon\globalPlugins\brailleExtender\__init__.py:289 +#: addon\globalPlugins\brailleExtender\__init__.py:303 msgid "&Check for update" msgstr "&Vérifier les mises à jour" -#: addon\globalPlugins\brailleExtender\__init__.py:289 +#: addon\globalPlugins\brailleExtender\__init__.py:303 msgid "Checks if update is available" msgstr "Vérifie si des mises à jour sont disponibles" -#: addon\globalPlugins\brailleExtender\__init__.py:291 +#: addon\globalPlugins\brailleExtender\__init__.py:305 msgid "&Website" msgstr "Site &web" -#: addon\globalPlugins\brailleExtender\__init__.py:291 +#: addon\globalPlugins\brailleExtender\__init__.py:305 msgid "Open addon's website." msgstr "Ouvre le site web du module complémentaire." -#: addon\globalPlugins\brailleExtender\__init__.py:293 -#, fuzzy -#| msgid "Braille Extender" +#: addon\globalPlugins\brailleExtender\__init__.py:307 msgid "&Braille Extender" -msgstr "Braille Extender" +msgstr "&Braille Extender" -#: addon\globalPlugins\brailleExtender\__init__.py:297 -#: addon\globalPlugins\brailleExtender\dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:322 +#: addon\globalPlugins\brailleExtender\dictionaries.py:344 msgid "Global dictionary" msgstr "Dictionnaire global" -#: addon\globalPlugins\brailleExtender\__init__.py:302 -#: addon\globalPlugins\brailleExtender\dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:327 +#: addon\globalPlugins\brailleExtender\dictionaries.py:344 msgid "Table dictionary" msgstr "Dictionnaire de la table" -#: addon\globalPlugins\brailleExtender\__init__.py:306 -#: addon\globalPlugins\brailleExtender\dictionaries.py:342 +#: addon\globalPlugins\brailleExtender\__init__.py:331 +#: addon\globalPlugins\brailleExtender\dictionaries.py:344 msgid "Temporary dictionary" msgstr "Dictionnaire temporaire" -#: addon\globalPlugins\brailleExtender\__init__.py:416 +#: addon\globalPlugins\brailleExtender\__init__.py:441 +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 msgid "Character" msgstr "Caractère" -#: addon\globalPlugins\brailleExtender\__init__.py:417 +#: addon\globalPlugins\brailleExtender\__init__.py:442 msgid "Word" msgstr "Mot" -#: addon\globalPlugins\brailleExtender\__init__.py:418 +#: addon\globalPlugins\brailleExtender\__init__.py:443 msgid "Line" msgstr "Ligne" -#: addon\globalPlugins\brailleExtender\__init__.py:419 +#: addon\globalPlugins\brailleExtender\__init__.py:444 msgid "Paragraph" msgstr "Paragraphe" -#: addon\globalPlugins\brailleExtender\__init__.py:420 +#: addon\globalPlugins\brailleExtender\__init__.py:445 msgid "Page" msgstr "Page" -#: addon\globalPlugins\brailleExtender\__init__.py:421 +#: addon\globalPlugins\brailleExtender\__init__.py:446 msgid "Document" msgstr "Document" -#: addon\globalPlugins\brailleExtender\__init__.py:457 +#: addon\globalPlugins\brailleExtender\__init__.py:482 msgid "Not available here" msgstr "Non disponible ici" -#: addon\globalPlugins\brailleExtender\__init__.py:475 -#: addon\globalPlugins\brailleExtender\__init__.py:497 +#: addon\globalPlugins\brailleExtender\__init__.py:500 +#: addon\globalPlugins\brailleExtender\__init__.py:522 msgid "Not supported here or browse mode not enabled" msgstr "Non supporté ici ou mode navigation non activé" -#: addon\globalPlugins\brailleExtender\__init__.py:477 +#: addon\globalPlugins\brailleExtender\__init__.py:502 msgid "Select previous rotor setting" msgstr "Sélectionnez le réglage précédent du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:478 +#: addon\globalPlugins\brailleExtender\__init__.py:503 msgid "Select next rotor setting" msgstr "Sélectionnez le réglage suivant du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:526 +#: addon\globalPlugins\brailleExtender\__init__.py:551 msgid "Move to previous item depending rotor setting" msgstr "Passer à l’élément précédent en fonction du réglage du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:527 +#: addon\globalPlugins\brailleExtender\__init__.py:552 msgid "Move to next item depending rotor setting" msgstr "Passer à l’élément suivant en fonction du réglage du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:535 +#: addon\globalPlugins\brailleExtender\__init__.py:560 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" @@ -338,98 +344,113 @@ msgstr "" "Varie en fonction du réglage du rotor. Ex : en mode objet, c’est similaire à " "NVDA + entrée" -#: addon\globalPlugins\brailleExtender\__init__.py:538 +#: addon\globalPlugins\brailleExtender\__init__.py:563 msgid "Move to previous item using rotor setting" msgstr "Passer à l’élément précédent en utilisant le réglage du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:539 +#: addon\globalPlugins\brailleExtender\__init__.py:564 msgid "Move to next item using rotor setting" msgstr "Passer à l’élément suivant en utilisant le réglage du rotor" -#: addon\globalPlugins\brailleExtender\__init__.py:543 +#: addon\globalPlugins\brailleExtender\__init__.py:568 #, python-format msgid "Braille keyboard %s" msgstr "Clavier braille %s" -#: addon\globalPlugins\brailleExtender\__init__.py:543 -#: addon\globalPlugins\brailleExtender\__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:568 +#: addon\globalPlugins\brailleExtender\__init__.py:591 msgid "locked" msgstr "verrouillé" -#: addon\globalPlugins\brailleExtender\__init__.py:543 -#: addon\globalPlugins\brailleExtender\__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:568 +#: addon\globalPlugins\brailleExtender\__init__.py:591 msgid "unlocked" msgstr "déverrouillé" -#: addon\globalPlugins\brailleExtender\__init__.py:544 +#: addon\globalPlugins\brailleExtender\__init__.py:569 msgid "Lock/unlock braille keyboard" msgstr "Verrouiller/déverrouiller le clavier braille" -#: addon\globalPlugins\brailleExtender\__init__.py:548 -#, python-format -msgid "Dots 7 and 8: %s" -msgstr "Points 7 et 8 : %s" +#: addon\globalPlugins\brailleExtender\__init__.py:573 +#: addon\globalPlugins\brailleExtender\__init__.py:579 +#: addon\globalPlugins\brailleExtender\__init__.py:586 +#: addon\globalPlugins\brailleExtender\__init__.py:597 +#: addon\globalPlugins\brailleExtender\__init__.py:665 +#: addon\globalPlugins\brailleExtender\__init__.py:671 +msgid "enabled" +msgstr "activé" -#: addon\globalPlugins\brailleExtender\__init__.py:548 -#: addon\globalPlugins\brailleExtender\__init__.py:555 -#: addon\globalPlugins\brailleExtender\__init__.py:566 +#: addon\globalPlugins\brailleExtender\__init__.py:573 +#: addon\globalPlugins\brailleExtender\__init__.py:579 +#: addon\globalPlugins\brailleExtender\__init__.py:586 +#: addon\globalPlugins\brailleExtender\__init__.py:597 +#: addon\globalPlugins\brailleExtender\__init__.py:665 +#: addon\globalPlugins\brailleExtender\__init__.py:671 msgid "disabled" msgstr "désactivé" -#: addon\globalPlugins\brailleExtender\__init__.py:548 -#: addon\globalPlugins\brailleExtender\__init__.py:555 -#: addon\globalPlugins\brailleExtender\__init__.py:566 -msgid "enabled" -msgstr "activé" +#: addon\globalPlugins\brailleExtender\__init__.py:574 +#, python-format +msgid "One hand mode %s" +msgstr "Mode unimanuel %s" -#: addon\globalPlugins\brailleExtender\__init__.py:550 +#: addon\globalPlugins\brailleExtender\__init__.py:575 +msgid "Enable/disable one hand mode feature" +msgstr "Activer / désactiver le mode unimanuel" + +#: addon\globalPlugins\brailleExtender\__init__.py:579 +#, python-format +msgid "Dots 7 and 8: %s" +msgstr "Points 7 et 8 : %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:581 msgid "Hide/show dots 7 and 8" msgstr "Cacher/montrer les points 7 et 8" -#: addon\globalPlugins\brailleExtender\__init__.py:555 +#: addon\globalPlugins\brailleExtender\__init__.py:586 #, python-format msgid "BRF mode: %s" msgstr "Mode BRF : %s" -#: addon\globalPlugins\brailleExtender\__init__.py:556 +#: addon\globalPlugins\brailleExtender\__init__.py:587 msgid "Enable/disable BRF mode" msgstr "Activer / désactiver le mode BRF" -#: addon\globalPlugins\brailleExtender\__init__.py:560 +#: addon\globalPlugins\brailleExtender\__init__.py:591 #, python-format msgid "Modifier keys %s" msgstr "Touches de modification %s" -#: addon\globalPlugins\brailleExtender\__init__.py:561 +#: addon\globalPlugins\brailleExtender\__init__.py:592 msgid "Lock/unlock modifiers keys" msgstr "Verrouiller/déverrouiller les touches de modification" -#: addon\globalPlugins\brailleExtender\__init__.py:567 +#: addon\globalPlugins\brailleExtender\__init__.py:598 msgid "Enable/disable Attribra" msgstr "Activer / désactiver Attribra" -#: addon\globalPlugins\brailleExtender\__init__.py:577 +#: addon\globalPlugins\brailleExtender\__init__.py:608 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "Accès rapide à l’option « dire la ligne en cours lors du défilement »" -#: addon\globalPlugins\brailleExtender\__init__.py:582 +#: addon\globalPlugins\brailleExtender\__init__.py:613 msgid "Speech on" msgstr "Énonciation activée" -#: addon\globalPlugins\brailleExtender\__init__.py:585 +#: addon\globalPlugins\brailleExtender\__init__.py:616 msgid "Speech off" msgstr "Énonciation désactivée" -#: addon\globalPlugins\brailleExtender\__init__.py:587 +#: addon\globalPlugins\brailleExtender\__init__.py:618 msgid "Toggle speech on or off" msgstr "Activer / désactiver la parole" -#: addon\globalPlugins\brailleExtender\__init__.py:595 +#: addon\globalPlugins\brailleExtender\__init__.py:626 msgid "No extra info for this element" msgstr "Pas d’information supplémentaire pour cet élément" #. Translators: Input help mode message for report extra infos command. -#: addon\globalPlugins\brailleExtender\__init__.py:599 +#: addon\globalPlugins\brailleExtender\__init__.py:630 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -437,34 +458,34 @@ msgstr "" "Annonce des informations supplémentaires sur l’élément actuel. Par exemple, " "l’URL sur un lien" -#: addon\globalPlugins\brailleExtender\__init__.py:604 +#: addon\globalPlugins\brailleExtender\__init__.py:635 msgid " Input table" msgstr " table d’entrée" -#: addon\globalPlugins\brailleExtender\__init__.py:604 +#: addon\globalPlugins\brailleExtender\__init__.py:635 msgid "Output table" msgstr "Table de sortie" -#: addon\globalPlugins\brailleExtender\__init__.py:606 +#: addon\globalPlugins\brailleExtender\__init__.py:637 #, python-format msgid "Table overview (%s)" msgstr "Aperçu de table (%s)" -#: addon\globalPlugins\brailleExtender\__init__.py:607 +#: addon\globalPlugins\brailleExtender\__init__.py:638 msgid "Display an overview of current input braille table" msgstr "Afficher un aperçu de la table braille d’entrée actuelle" -#: addon\globalPlugins\brailleExtender\__init__.py:612 -#: addon\globalPlugins\brailleExtender\__init__.py:620 -#: addon\globalPlugins\brailleExtender\__init__.py:627 +#: addon\globalPlugins\brailleExtender\__init__.py:643 +#: addon\globalPlugins\brailleExtender\__init__.py:651 +#: addon\globalPlugins\brailleExtender\__init__.py:658 msgid "No text selection" msgstr "Pas de sélection de texte" -#: addon\globalPlugins\brailleExtender\__init__.py:613 +#: addon\globalPlugins\brailleExtender\__init__.py:644 msgid "Unicode Braille conversion" msgstr "Conversion en Braille Unicode" -#: addon\globalPlugins\brailleExtender\__init__.py:614 +#: addon\globalPlugins\brailleExtender\__init__.py:645 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" @@ -472,11 +493,11 @@ msgstr "" "Convertir la sélection de texte en braille unicode et l’afficher dans un " "message navigable" -#: addon\globalPlugins\brailleExtender\__init__.py:621 +#: addon\globalPlugins\brailleExtender\__init__.py:652 msgid "Braille Unicode to cell descriptions" msgstr "Braille Unicode vers descriptions de cellule" -#: addon\globalPlugins\brailleExtender\__init__.py:622 +#: addon\globalPlugins\brailleExtender\__init__.py:653 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -484,11 +505,11 @@ msgstr "" "Convertir la sélection de texte en descriptions de cellules braille et " "l’afficher dans un message navigable" -#: addon\globalPlugins\brailleExtender\__init__.py:629 +#: addon\globalPlugins\brailleExtender\__init__.py:660 msgid "Cell descriptions to braille Unicode" msgstr "Descriptions de cellules vers braille Unicode" -#: addon\globalPlugins\brailleExtender\__init__.py:630 +#: addon\globalPlugins\brailleExtender\__init__.py:661 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -497,86 +518,99 @@ msgstr "" "champ d’édition, tapez ’125-24-0-1-123-123’. Puis sélectionnez ce texte et " "exécutez cette commande" -#: addon\globalPlugins\brailleExtender\__init__.py:634 +#: addon\globalPlugins\brailleExtender\__init__.py:666 +#, python-format +msgid "Advanced braille input mode %s" +msgstr "Mode de saisie braille avancée %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:667 +msgid "Enable/disable the advanced input mode" +msgstr "Activer / désactiver le mode de saisie avancée" + +#: addon\globalPlugins\brailleExtender\__init__.py:672 +#, python-format +msgid "Description of undefined characters %s" +msgstr "Description des caractères indéfinis %s" + +#: addon\globalPlugins\brailleExtender\__init__.py:674 +msgid "Enable/disable description of undefined characters" +msgstr "Activer / désactiver la description des caractères indéfinis" + +#: addon\globalPlugins\brailleExtender\__init__.py:678 msgid "Get the cursor position of text" msgstr "Obtenir la position du curseur dans le texte" -#: addon\globalPlugins\brailleExtender\__init__.py:660 +#: addon\globalPlugins\brailleExtender\__init__.py:704 msgid "Hour and date with autorefresh" msgstr "Heure et date avec rafraîchissement automatique" -#: addon\globalPlugins\brailleExtender\__init__.py:673 +#: addon\globalPlugins\brailleExtender\__init__.py:717 msgid "Autoscroll stopped" msgstr "Défilement automatique arrêté" -#: addon\globalPlugins\brailleExtender\__init__.py:680 +#: addon\globalPlugins\brailleExtender\__init__.py:724 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "" "Impossible de lancer le défilement automatique. Plus d’informations dans le " "journal NVDA" -#: addon\globalPlugins\brailleExtender\__init__.py:685 +#: addon\globalPlugins\brailleExtender\__init__.py:729 msgid "Enable/disable autoscroll" msgstr "Activer / désactiver le défilement automatique" -#: addon\globalPlugins\brailleExtender\__init__.py:700 +#: addon\globalPlugins\brailleExtender\__init__.py:744 msgid "Increase the master volume" msgstr "Augmenter le volume principal" -#: addon\globalPlugins\brailleExtender\__init__.py:717 +#: addon\globalPlugins\brailleExtender\__init__.py:761 msgid "Decrease the master volume" msgstr "Diminuer le volume principal" -#: addon\globalPlugins\brailleExtender\__init__.py:723 +#: addon\globalPlugins\brailleExtender\__init__.py:767 msgid "Muted sound" msgstr "Son coupé" -#: addon\globalPlugins\brailleExtender\__init__.py:725 +#: addon\globalPlugins\brailleExtender\__init__.py:769 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "Réactivé (%3d%%)" -#: addon\globalPlugins\brailleExtender\__init__.py:731 +#: addon\globalPlugins\brailleExtender\__init__.py:775 msgid "Mute or unmute sound" msgstr "Couper ou rétablir le son" -#: addon\globalPlugins\brailleExtender\__init__.py:736 +#: addon\globalPlugins\brailleExtender\__init__.py:780 #, python-format msgid "Show the %s documentation" msgstr "Afficher la documentation de %s" -#: addon\globalPlugins\brailleExtender\__init__.py:774 +#: addon\globalPlugins\brailleExtender\__init__.py:818 msgid "No such file or directory" msgstr "Aucun fichier ou dossier de ce nom" -#: addon\globalPlugins\brailleExtender\__init__.py:776 +#: addon\globalPlugins\brailleExtender\__init__.py:820 msgid "Opens a custom program/file. Go to settings to define them" msgstr "" "Ouvre un programme / fichier personnalisé. Accédez aux paramètres pour les " "définir" -#: addon\globalPlugins\brailleExtender\__init__.py:783 +#: addon\globalPlugins\brailleExtender\__init__.py:827 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "" "Vérifier les mises à jour de %s, et lance le téléchargement s’il en existe " "une" -#: addon\globalPlugins\brailleExtender\__init__.py:813 +#: addon\globalPlugins\brailleExtender\__init__.py:857 msgid "Increase autoscroll delay" msgstr "Augmenter le délai du défilement automatique" -#: addon\globalPlugins\brailleExtender\__init__.py:814 +#: addon\globalPlugins\brailleExtender\__init__.py:858 msgid "Decrease autoscroll delay" msgstr "Diminuer le délai du défilement automatique" -#: addon\globalPlugins\brailleExtender\__init__.py:818 -#: addon\globalPlugins\brailleExtender\__init__.py:836 -msgid "Please use NVDA 2017.3 minimum for this feature" -msgstr "Veuillez utiliser NVDA 2017.3 pour cette fonctionnalité" - -#: addon\globalPlugins\brailleExtender\__init__.py:820 -#: addon\globalPlugins\brailleExtender\__init__.py:838 +#: addon\globalPlugins\brailleExtender\__init__.py:862 +#: addon\globalPlugins\brailleExtender\__init__.py:877 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -584,49 +618,49 @@ msgstr "" "Vous devez choisir au moins deux tables pour cette fonctionnalité. Merci de " "les renseigner dans les paramètres" -#: addon\globalPlugins\brailleExtender\__init__.py:827 +#: addon\globalPlugins\brailleExtender\__init__.py:869 #, python-format msgid "Input: %s" msgstr "Saisie : %s" -#: addon\globalPlugins\brailleExtender\__init__.py:831 +#: addon\globalPlugins\brailleExtender\__init__.py:873 msgid "Switch between his favorite input braille tables" msgstr "Boucler entre ses tables braille d’entrer" -#: addon\globalPlugins\brailleExtender\__init__.py:847 +#: addon\globalPlugins\brailleExtender\__init__.py:886 #, python-format msgid "Output: %s" msgstr "Affichage : %s" -#: addon\globalPlugins\brailleExtender\__init__.py:850 +#: addon\globalPlugins\brailleExtender\__init__.py:889 msgid "Switch between his favorite output braille tables" msgstr "Boucler entre ses tables de sortie" -#: addon\globalPlugins\brailleExtender\__init__.py:856 +#: addon\globalPlugins\brailleExtender\__init__.py:895 #, python-brace-format msgid "I⣿O:{I}" msgstr "E⣿S:{I}" -#: addon\globalPlugins\brailleExtender\__init__.py:857 +#: addon\globalPlugins\brailleExtender\__init__.py:896 #, python-brace-format msgid "Input and output: {I}." msgstr "Saisie et affichage: {I}." -#: addon\globalPlugins\brailleExtender\__init__.py:859 +#: addon\globalPlugins\brailleExtender\__init__.py:898 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "A: {O} ⣿ S:{I}" -#: addon\globalPlugins\brailleExtender\__init__.py:860 +#: addon\globalPlugins\brailleExtender\__init__.py:899 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Affichage : {O} ; Saisie: {I}" -#: addon\globalPlugins\brailleExtender\__init__.py:864 +#: addon\globalPlugins\brailleExtender\__init__.py:903 msgid "Announce the current input and output braille tables" msgstr "Annoncez les tables braille d’entrée et de sortie actuelles" -#: addon\globalPlugins\brailleExtender\__init__.py:869 +#: addon\globalPlugins\brailleExtender\__init__.py:908 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -634,7 +668,7 @@ msgstr "" "Obtenir la valeur Unicode du caractère sur lequel le curseur se trouve ainsi " "que l’équivalent en décimale, binaire et octale." -#: addon\globalPlugins\brailleExtender\__init__.py:877 +#: addon\globalPlugins\brailleExtender\__init__.py:916 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -642,110 +676,110 @@ msgstr "" "Affiche l'énoncé vocal pour le texte sélectionné en braille. Pratique pour " "les emojis par exemple" -#: addon\globalPlugins\brailleExtender\__init__.py:881 +#: addon\globalPlugins\brailleExtender\__init__.py:920 msgid "No shortcut performed from a braille display" msgstr "Aucun raccourci effectué depuis un afficheur braille" -#: addon\globalPlugins\brailleExtender\__init__.py:885 +#: addon\globalPlugins\brailleExtender\__init__.py:924 msgid "Repeat the last shortcut performed from a braille display" msgstr "Répéter le dernier raccourci effectué depuis un afficheur braille" -#: addon\globalPlugins\brailleExtender\__init__.py:899 +#: addon\globalPlugins\brailleExtender\__init__.py:938 #, python-format msgid "%s reloaded" msgstr "%s rechargé" -#: addon\globalPlugins\brailleExtender\__init__.py:911 +#: addon\globalPlugins\brailleExtender\__init__.py:950 #, python-format msgid "Reload %s" msgstr "Recharger %s" -#: addon\globalPlugins\brailleExtender\__init__.py:914 +#: addon\globalPlugins\brailleExtender\__init__.py:953 msgid "Reload the first braille display defined in settings" msgstr "Recharger le premier afficheur braille défini dans les paramètres" -#: addon\globalPlugins\brailleExtender\__init__.py:917 +#: addon\globalPlugins\brailleExtender\__init__.py:956 msgid "Reload the second braille display defined in settings" msgstr "Recharger le second afficheur braille défini dans les paramètres" -#: addon\globalPlugins\brailleExtender\__init__.py:923 +#: addon\globalPlugins\brailleExtender\__init__.py:962 msgid "No braille display specified. No reload to do" msgstr "Pas d’afficheur braille spécifié. Aucun rechargement à effectuer" -#: addon\globalPlugins\brailleExtender\__init__.py:960 +#: addon\globalPlugins\brailleExtender\__init__.py:999 msgid "WIN" msgstr "" -#: addon\globalPlugins\brailleExtender\__init__.py:961 +#: addon\globalPlugins\brailleExtender\__init__.py:1000 msgid "CTRL" msgstr "" -#: addon\globalPlugins\brailleExtender\__init__.py:962 +#: addon\globalPlugins\brailleExtender\__init__.py:1001 msgid "SHIFT" msgstr "MAJ" -#: addon\globalPlugins\brailleExtender\__init__.py:963 +#: addon\globalPlugins\brailleExtender\__init__.py:1002 msgid "ALT" msgstr "" -#: addon\globalPlugins\brailleExtender\__init__.py:1065 +#: addon\globalPlugins\brailleExtender\__init__.py:1104 msgid "Keyboard shortcut cancelled" msgstr "Raccourci clavier annulé" #. /* docstrings for modifier keys */ -#: addon\globalPlugins\brailleExtender\__init__.py:1073 +#: addon\globalPlugins\brailleExtender\__init__.py:1112 msgid "Emulate pressing down " msgstr "Émuler l’appui maintenu de " -#: addon\globalPlugins\brailleExtender\__init__.py:1074 +#: addon\globalPlugins\brailleExtender\__init__.py:1113 msgid " on the system keyboard" msgstr " sur le clavier du système" -#: addon\globalPlugins\brailleExtender\__init__.py:1130 +#: addon\globalPlugins\brailleExtender\__init__.py:1169 msgid "Current braille view saved" msgstr "Vue braille actuelle sauvegardée" -#: addon\globalPlugins\brailleExtender\__init__.py:1133 +#: addon\globalPlugins\brailleExtender\__init__.py:1172 msgid "Buffer cleaned" msgstr "Tampon vidé" -#: addon\globalPlugins\brailleExtender\__init__.py:1134 +#: addon\globalPlugins\brailleExtender\__init__.py:1173 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Sauvegardez la vue braille actuelle. Appuyez deux fois rapidement pour " "effacer le tampon" -#: addon\globalPlugins\brailleExtender\__init__.py:1139 +#: addon\globalPlugins\brailleExtender\__init__.py:1178 msgid "View saved" msgstr "Vue sauvegardée" -#: addon\globalPlugins\brailleExtender\__init__.py:1140 +#: addon\globalPlugins\brailleExtender\__init__.py:1179 msgid "Buffer empty" msgstr "Tampon vide" -#: addon\globalPlugins\brailleExtender\__init__.py:1141 +#: addon\globalPlugins\brailleExtender\__init__.py:1180 msgid "Show the saved braille view through a flash message" -msgstr "Afficher la vue braille enregistrée via un message flash." +msgstr "Afficher la vue braille enregistrée via un message flash" -#: addon\globalPlugins\brailleExtender\__init__.py:1175 +#: addon\globalPlugins\brailleExtender\__init__.py:1214 msgid "Pause" msgstr "Pause" -#: addon\globalPlugins\brailleExtender\__init__.py:1175 +#: addon\globalPlugins\brailleExtender\__init__.py:1214 msgid "Resume" msgstr "Reprendre" -#: addon\globalPlugins\brailleExtender\__init__.py:1217 -#: addon\globalPlugins\brailleExtender\__init__.py:1224 +#: addon\globalPlugins\brailleExtender\__init__.py:1256 +#: addon\globalPlugins\brailleExtender\__init__.py:1263 #, python-format msgid "Auto test type %d" msgstr "Auto test %d" -#: addon\globalPlugins\brailleExtender\__init__.py:1234 +#: addon\globalPlugins\brailleExtender\__init__.py:1273 msgid "Auto test stopped" msgstr "Défilement automatique arrêté" -#: addon\globalPlugins\brailleExtender\__init__.py:1244 +#: addon\globalPlugins\brailleExtender\__init__.py:1283 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -756,104 +790,419 @@ msgstr "" "de test. Utilisez la touche espace pour faire une pause ou reprendre le " "test. Utilisez la touche d’échappement pour quitter" -#: addon\globalPlugins\brailleExtender\__init__.py:1246 +#: addon\globalPlugins\brailleExtender\__init__.py:1285 msgid "Auto test" msgstr "Auto test" -#: addon\globalPlugins\brailleExtender\__init__.py:1251 +#: addon\globalPlugins\brailleExtender\__init__.py:1290 msgid "Add dictionary entry or see a dictionary" msgstr "Ajouter une entrée de dictionnaire ou consulter un dictionnaire" -#: addon\globalPlugins\brailleExtender\__init__.py:1252 +#: addon\globalPlugins\brailleExtender\__init__.py:1291 msgid "Add a entry in braille dictionary" msgstr "Ajouter une entrée au dictionnaire braille" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon\globalPlugins\brailleExtender\__init__.py:1299 -#: addon\globalPlugins\brailleExtender\dictionaries.py:111 -#: addon\globalPlugins\brailleExtender\dictionaries.py:367 -#: addon\globalPlugins\brailleExtender\dictionaries.py:374 -#: addon\globalPlugins\brailleExtender\dictionaries.py:378 -#: addon\globalPlugins\brailleExtender\dictionaries.py:382 -#: addon\globalPlugins\brailleExtender\settings.py:33 buildVars.py:24 +#: addon\globalPlugins\brailleExtender\__init__.py:1341 +#: addon\globalPlugins\brailleExtender\dictionaries.py:112 +#: addon\globalPlugins\brailleExtender\dictionaries.py:369 +#: addon\globalPlugins\brailleExtender\dictionaries.py:376 +#: addon\globalPlugins\brailleExtender\dictionaries.py:380 +#: addon\globalPlugins\brailleExtender\dictionaries.py:384 +#: addon\globalPlugins\brailleExtender\settings.py:37 buildVars.py:24 msgid "Braille Extender" msgstr "Braille Extender" -#: addon\globalPlugins\brailleExtender\addonDoc.py:33 -#, python-format -msgid "%s braille display" -msgstr "afficheur braille %s" +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +msgid "HUC8" +msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:34 -#, python-format -msgid "profile loaded: %s" -msgstr "profile chargé : %s" +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:65 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:263 +msgid "Hexadecimal" +msgstr "Hexadécimale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:66 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:264 +msgid "Decimal" +msgstr "Décimale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:67 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:265 +msgid "Octal" +msgstr "Octale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\configBE.py:68 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:266 +msgid "Binary" +msgstr "Binaire" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\addonDoc.py:46 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:244 +msgid "Representation of undefined characters" +msgstr "Représentation des caractères indéfinis" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:48 +msgid "" +"The extension allows you to customize how an undefined character should be " +"represented within a braille table. To do so, go to the braille table " +"settings. You can choose between the following representations:" +msgstr "" +"L'extension vous permet de personnaliser la façon dont un caractère non " +"défini doit être représenté dans un tableau braille. Pour ce faire, accédez " +"aux paramètres des tables braille. Vous pouvez choisir entre les " +"représentations suivantes :" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:52 +msgid "" +"You can also combine this option with the “describe the character if " +"possible” setting." +msgstr "" +"Vous pouvez également combiner cette option avec le paramètre « décrire le " +"caractère si possible »." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:54 +msgid "Notes:" +msgstr "Notes :" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:56 +msgid "" +"To distinguish the undefined set of characters while maximizing space, the " +"best combination is the usage of the HUC8 representation without checking " +"the “describe character if possible” option." +msgstr "" +"Pour distinguer les caractères indéfini tout en maximisant l'espace, la " +"meilleure combinaison est l'utilisation de la représentation HUC8 sans " +"cocher l'option « décrire le caractère si possible »." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:57 +#, python-brace-format +msgid "To learn more about the HUC representation, see {url}" +msgstr "Pour en savoir plus sur la représentation HUC, voir {url}" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:58 +msgid "" +"Keep in mind that definitions in tables and those in your table dictionaries " +"take precedence over character descriptions, which also take precedence over " +"the chosen representation for undefined characters." +msgstr "" +"Gardez à l'esprit que les définitions dans les tables et celles dans vos " +"dictionnaires de table ont priorité sur les descriptions de caractères, qui " +"ont également priorité sur la représentation choisie pour les caractères " +"indéfinis." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:61 +msgid "Getting Current Character Info" +msgstr "Obtenir des informations sur le caractère actuel" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:63 +msgid "" +"This feature allows you to obtain various information regarding the " +"character under the cursor using the current input braille table, such as:" +msgstr "" +"Cette fonctionnalité vous permet d'obtenir diverses informations concernant " +"le caractère sous le curseur à l'aide de la table braille d'entrée actuelle, " +"telles que:" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:65 +msgid "" +"the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " +"values; A description of the character if possible; - The Unicode Braille " +"representation and the Braille dot pattern." +msgstr "" +"les représentations HUC8 et HUC6 ; les valeurs hexadécimales, décimales, " +"octales ou binaires ; Une description du caractère si possible ; la " +"représentation braille Unicode et le motif de points braille." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:67 +msgid "" +"Pressing the defined gesture associated to this function once shows you the " +"information in a flash message and a double-press displays the same " +"information in a virtual NVDA buffer." +msgstr "" +"Une pression sur le geste défini associé à cette fonction affiche une fois " +"les informations dans un message flash et une double pression affiche les " +"mêmes informations dans un tampon NVDA virtuel." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:69 +msgid "" +"On supported displays the defined gesture is ⡉+space. No system gestures are " +"defined by default." +msgstr "" +"Sur les afficheurs pris en charge, le geste défini est ⡉+espace. Aucun geste " +"système n'est défini par défaut." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:71 +#, python-brace-format +msgid "" +"For example, for the '{chosenChar}' character, we will get the following " +"information:" +msgstr "" +"Par exemple, pour le caractère '{chosenChar}', nous obtiendrons les " +"informations suivantes :" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:74 +msgid "Advanced Braille Input" +msgstr "Saisie braille avancée" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:76 +msgid "" +"This feature allows you to enter any character from its HUC8 representation " +"or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " +"develop abbreviations. To use this function, enter the advanced input mode " +"and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊" +"+space (on supported displays). Press the same gesture to exit this mode. " +"Alternatively, an option allows you to automatically exit this mode after " +"entering a single pattern. " +msgstr "" +"Cette fonction vous permet de saisir n'importe quel caractère depuis sa " +"représentation HUC8 ou sa valeur hexadécimale / décimale / octale / binaire. " +"De plus, il vous permet de développer des abréviations. Pour utiliser cette " +"fonction, entrez dans le mode de saisie avancé, puis entrez le motif " +"souhaité. Gestes par défaut: NVDA+Windows+i ou ⡊+espace (sur les afficheurs " +"pris en charge). Appuyez sur le même geste pour quitter ce mode. " +"Alternativement, une option vous permet de quitter automatiquement ce mode " +"après avoir entré un seul motif." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:80 +msgid "Specify the basis as follows" +msgstr "Spécifiez la base comme suit" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +msgid "⠭ or ⠓" +msgstr "⠭ ou ⠓" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +msgid "for a hexadecimal value" +msgstr "pour une valeur hexadécimale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:83 +msgid "for a decimal value" +msgstr "pour une valeur décimale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:84 +msgid "for an octal value" +msgstr "pour une valeur octale" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:87 +msgid "" +"Enter the value of the character according to the previously selected basis." +msgstr "Entrez la valeur du caractère selon la base précédemment sélectionnée." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:88 +msgid "Press Space to validate." +msgstr "Appuyez sur Espace pour valider." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:91 +msgid "" +"For abbreviations, you must first add them in the dialog box - Advanced mode " +"dictionaries -. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +msgstr "" +"Pour les abréviations, vous devez d'abord les ajouter dans la boîte de " +"dialogue — Dictionnaires du mode avancé —. Ensuite, il vous suffit de saisir " +"votre abréviation et d'appuyer sur l'espace pour la développer. Par exemple, " +"vous pouvez associer - ⠎⠺ - à - sandwich -." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:93 +msgid "Here are some examples of sequences to be entered for given characters:" +msgstr "" +"Voici quelques exemples de séquences à saisir pour des caractères donnés :" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:97 +msgid "Note: the HUC6 input is currently not supported." +msgstr "Remarque : l'entrée HUC6 n'est actuellement pas prise en charge." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:100 +msgid "One-hand mode" +msgstr "Mode unimanuel" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:102 +msgid "" +"This feature allows you to compose a cell in several steps. This can be " +"activated in the general settings of the extension's preferences or on the " +"fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " +"Three input methods are available." +msgstr "" +"Cette fonctionnalité vous permet de composer une cellule en plusieurs " +"étapes. Ceci peut être activé dans les paramètres généraux des préférences " +"de l'extension ou à la volée en utilisant le geste NVDA + Windows + h par " +"défaut (⡂ + espace sur les afficheurs pris en charge). Trois méthodes de " +"saisie sont disponibles." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:103 +msgid "Method #1: fill a cell in 2 stages on both sides" +msgstr "Méthode n° 1 : remplir une cellule en 2 étapes des deux côtés" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:105 +msgid "" +"With this method, type the left side dots, then the right side dots. If one " +"side is empty, type the dots correspondig to the opposite side twice, or " +"type the dots corresponding to the non-empty side in 2 steps." +msgstr "" +"Avec cette méthode, tapez les points du côté gauche, puis les points du côté " +"droit. Si un côté est vide, tapez deux fois les points correspondant au côté " +"opposé ou tapez les points correspondant au côté non vide en 2 étapes." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:106 +#: addon\globalPlugins\brailleExtender\addonDoc.py:115 +msgid "For example:" +msgstr "Par exemple :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:51 +#: addon\globalPlugins\brailleExtender\addonDoc.py:108 +msgid "For ⠛: press dots 1-2 then dots 4-5." +msgstr "Pour ⠛: appuyez sur les points 1-2 puis sur les points 4-5." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:109 +msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." +msgstr "" +"Pour ⠃: appuyez sur les points 1-2 puis sur les points 1-2, ou sur le point " +"1 puis le point 2." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:110 +msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." +msgstr "Pour ⠘: appuyez sur 4-5 puis 4-5, ou point 4 puis point 5." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:112 +msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" +msgstr "" +"Méthode n° 2 : remplir une cellule en deux étapes sur un côté (espace = côté " +"vide)" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:114 +msgid "" +"Using this method, you can compose a cell with one hand, regardless of which " +"side of the Braille keyboard you choose. The first step allows you to enter " +"dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " +"An empty cell will be obtained by pressing the space key twice." +msgstr "" +"En utilisant cette méthode, vous pouvez composer une cellule d'une seule " +"main, quel que soit le côté du clavier braille que vous choisissez. La " +"première étape vous permet de saisir les points 1-2-3-7 et le second " +"4-5-6-8. Si un côté est vide, appuyez sur espace. Une cellule vide sera " +"obtenue en appuyant deux fois sur la touche espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:117 +msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." +msgstr "" +"Pour ⠛: appuyez sur les points 1-2 puis les points 1-2, ou les points 4-5 " +"puis les points 4-5." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:118 +msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." +msgstr "" +"Pour ⠃ : appuyez sur les points 1-2 puis sur espace ou sur 4-5 puis sur " +"espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:119 +msgid "For ⠘: press space then 1-2, or space then dots 4-5." +msgstr "" +"Pour ⠘ : pressez espace puis sur les points 1-2 ou sur espace puis sur les " +"points 4-5." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:121 +msgid "" +"Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " +"validate the character)" +msgstr "" +"Méthode n° 3 : remplir une cellule points par points (chaque point est une " +"bascule, appuyez sur Espace pour valider le caractère)" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:126 +msgid "Dots 1-2, then dots 4-5, then space." +msgstr "Points 1-2, puis points 4-5, puis espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:127 +msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." +msgstr "" +"Points 1-2-3, puis point 3 (pour corriger), puis points 4-5, puis espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:128 +msgid "Dot 1, then dots 2-4-5, then space." +msgstr "Point 1, puis points 2-4-5, puis espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:129 +msgid "Dots 1-2-4, then dot 5, then space." +msgstr "Points 1-2-4, puis point 5, puis espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:130 +msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." +msgstr "Point 2, puis point 1, puis point 5, puis point 4, puis espace." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:131 +msgid "Etc." +msgstr "Etc.." + +#: addon\globalPlugins\brailleExtender\addonDoc.py:150 +msgid "Documentation" +msgstr "Documentation" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:160 +msgid "Driver loaded" +msgstr "Pilote chargé" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:161 +msgid "Profile" +msgstr "Profil" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:175 msgid "Simple keys" msgstr "Touches simples" -#: addon\globalPlugins\brailleExtender\addonDoc.py:53 +#: addon\globalPlugins\brailleExtender\addonDoc.py:177 msgid "Usual shortcuts" msgstr "Raccourcis usuels" -#: addon\globalPlugins\brailleExtender\addonDoc.py:56 +#: addon\globalPlugins\brailleExtender\addonDoc.py:179 msgid "Standard NVDA commands" msgstr "Commandes NVDA standards" -#: addon\globalPlugins\brailleExtender\addonDoc.py:59 -#: addon\globalPlugins\brailleExtender\settings.py:751 +#: addon\globalPlugins\brailleExtender\addonDoc.py:182 +#: addon\globalPlugins\brailleExtender\settings.py:511 msgid "Modifier keys" msgstr "Touches de modification" -#: addon\globalPlugins\brailleExtender\addonDoc.py:62 +#: addon\globalPlugins\brailleExtender\addonDoc.py:185 msgid "Quick navigation keys" msgstr "Touches de navigation rapide" -#: addon\globalPlugins\brailleExtender\addonDoc.py:63 -msgid "" -"In virtual documents (HTML/PDF/…) you can navigate element type by element " -"type using keyboard. These navigation keys should work with your braille " -"terminal equally.

        In addition to these, there are some specific " -"shortcuts:" -msgstr "" -"Dans les documents virtuels (HTML/PDF/…) il vous est possible de naviguer de " -"type d’élément en type d’élément à l’aide de touche clavier. Ces touches de " -"navigation devraient fonctionner depuis le terminal braille.

        En plus " -"de ceux-ci, il existe quelques raccourcis particuliers :" - -#: addon\globalPlugins\brailleExtender\addonDoc.py:66 +#: addon\globalPlugins\brailleExtender\addonDoc.py:189 msgid "Rotor feature" msgstr "Fonction Rotor" -#: addon\globalPlugins\brailleExtender\addonDoc.py:69 +#: addon\globalPlugins\brailleExtender\addonDoc.py:197 msgid "Gadget commands" msgstr "Commandes gadgettes" -#: addon\globalPlugins\brailleExtender\addonDoc.py:73 +#: addon\globalPlugins\brailleExtender\addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Raccourcis définis en dehors du module" -#: addon\globalPlugins\brailleExtender\addonDoc.py:94 +#: addon\globalPlugins\brailleExtender\addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "Configurations de clavier fournies" -#: addon\globalPlugins\brailleExtender\addonDoc.py:96 +#: addon\globalPlugins\brailleExtender\addonDoc.py:241 msgid "Keyboard configurations are" msgstr "Les configurations de clavier sont les suivantes" -#: addon\globalPlugins\brailleExtender\addonDoc.py:101 +#: addon\globalPlugins\brailleExtender\addonDoc.py:250 msgid "Warning:" msgstr "Attention :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:102 +#: addon\globalPlugins\brailleExtender\addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "BrailleExtender n'a pas encore de profil de gestes pour votre afficheur " "braille." -#: addon\globalPlugins\brailleExtender\addonDoc.py:103 +#: addon\globalPlugins\brailleExtender\addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -862,165 +1211,571 @@ msgstr "" "fonctions dans le dialogue « Gestes de commandes » des « Préférences » de " "NVDA." -#: addon\globalPlugins\brailleExtender\addonDoc.py:105 -msgid "Shortcuts on system keyboard specific to the add-on" -msgstr "Raccourcis sur le clavier du système spécifiques au module" - -#: addon\globalPlugins\brailleExtender\addonDoc.py:125 -msgid "Copyrights and acknowledgements" -msgstr "Droits d’auteur et remerciements" - -#: addon\globalPlugins\brailleExtender\addonDoc.py:127 -msgid "Copyright (C) 2016-2020 André-Abush Clause and other contributors:" -msgstr "" -"Copyright (C) 2016-2020 André-Abush Clause, et d’autres contributeurs :" - -#: addon\globalPlugins\brailleExtender\addonDoc.py:131 -msgid "Translators" -msgstr "Traducteurs" +#: addon\globalPlugins\brailleExtender\addonDoc.py:259 +msgid "Add-on gestures on the system keyboard" +msgstr "Gestes du module sur le clavier système" -#: addon\globalPlugins\brailleExtender\addonDoc.py:132 +#: addon\globalPlugins\brailleExtender\addonDoc.py:282 msgid "Arabic" msgstr "Arabe" -#: addon\globalPlugins\brailleExtender\addonDoc.py:133 +#: addon\globalPlugins\brailleExtender\addonDoc.py:283 msgid "Croatian" msgstr "Croate" -#: addon\globalPlugins\brailleExtender\addonDoc.py:134 +#: addon\globalPlugins\brailleExtender\addonDoc.py:284 +msgid "Danish" +msgstr "Danois" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:285 +msgid "English and French" +msgstr "Anglais et français" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:286 msgid "German" msgstr "Allemand" -#: addon\globalPlugins\brailleExtender\addonDoc.py:135 +#: addon\globalPlugins\brailleExtender\addonDoc.py:287 msgid "Hebrew" msgstr "Hébreu" -#: addon\globalPlugins\brailleExtender\addonDoc.py:136 +#: addon\globalPlugins\brailleExtender\addonDoc.py:288 msgid "Persian" msgstr "Persan" -#: addon\globalPlugins\brailleExtender\addonDoc.py:137 +#: addon\globalPlugins\brailleExtender\addonDoc.py:289 msgid "Polish" msgstr "Polonais" -#: addon\globalPlugins\brailleExtender\addonDoc.py:138 +#: addon\globalPlugins\brailleExtender\addonDoc.py:290 msgid "Russian" msgstr "Russe" -#: addon\globalPlugins\brailleExtender\addonDoc.py:140 +#: addon\globalPlugins\brailleExtender\addonDoc.py:293 +msgid "Copyrights and acknowledgements" +msgstr "Droits d’auteur et remerciements" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:299 +msgid "and other contributors" +msgstr "et d'autres contributeurs" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:303 +msgid "Translators" +msgstr "Traducteurs" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:313 msgid "Code contributions and other" msgstr "Contributions de code et autres" -#: addon\globalPlugins\brailleExtender\addonDoc.py:140 +#: addon\globalPlugins\brailleExtender\addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "Du code sous copyright de tiers est inclus :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:143 +#: addon\globalPlugins\brailleExtender\addonDoc.py:321 msgid "Thanks also to" msgstr "Merci également à" -#: addon\globalPlugins\brailleExtender\addonDoc.py:145 +#: addon\globalPlugins\brailleExtender\addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "Et merci beaucoup pour tous vos retours et commentaires." -#: addon\globalPlugins\brailleExtender\addonDoc.py:148 +#: addon\globalPlugins\brailleExtender\addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "Documentation de %s" -#: addon\globalPlugins\brailleExtender\addonDoc.py:164 +#: addon\globalPlugins\brailleExtender\addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "Émuler l’appui de %s sur le clavier du système" -#: addon\globalPlugins\brailleExtender\addonDoc.py:171 +#: addon\globalPlugins\brailleExtender\addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "description actuellement indisponible pour ce raccourci" -#: addon\globalPlugins\brailleExtender\addonDoc.py:189 +#: addon\globalPlugins\brailleExtender\addonDoc.py:377 msgid "caps lock" msgstr "verrouillage majuscules" -#: addon\globalPlugins\brailleExtender\configBE.py:40 -#: addon\globalPlugins\brailleExtender\configBE.py:47 -#: addon\globalPlugins\brailleExtender\configBE.py:61 -#: addon\globalPlugins\brailleExtender\settings.py:421 -msgid "none" -msgstr "aucun" +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:107 +msgid "all tables" +msgstr "toutes les tables braille" -#: addon\globalPlugins\brailleExtender\configBE.py:41 -msgid "braille only" -msgstr "braille seulement" +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:118 +msgid "Advanced input mode dictionary" +msgstr "Dictionnaire du mode d'entrée avancé" + +#. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. +#. Translators: The label for the combo box of dictionary entries in table dictionary dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:125 +#: addon\globalPlugins\brailleExtender\dictionaries.py:132 +msgid "Dictionary &entries" +msgstr "&Entrées du dictionnaire" + +#. Translators: The label for a column in dictionary entries list used to identify comments for the entry. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:133 +msgid "Abbreviation" +msgstr "Abréviation" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:134 +msgid "Replace by" +msgstr "&Remplacer par" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:135 +msgid "Input table" +msgstr "Table de saisie" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. +#. Translators: The label for a button in groups of tables dialog to add new entries. +#. Translators: The label for a button in table dictionaries dialog to add new entries. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:141 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:257 +#: addon\globalPlugins\brailleExtender\dictionaries.py:149 +msgid "&Add" +msgstr "&Ajouter" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. +#. Translators: The label for a button in groups of tables dialog to edit existing entries. +#. Translators: The label for a button in table dictionaries dialog to edit existing entries. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:147 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:263 +#: addon\globalPlugins\brailleExtender\dictionaries.py:155 +msgid "&Edit" +msgstr "&Éditer" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. +#. Translators: The label for a button in groups of tables dialog to remove existing entries. +#. Translators: The label for a button in table dictionaries dialog to remove existing entries. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:153 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:269 +#: addon\globalPlugins\brailleExtender\dictionaries.py:161 +msgid "Re&move" +msgstr "&Supprimer" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:161 +msgid "&Open the dictionary file in an editor" +msgstr "&Ouvrir le fichier de dictionnaire actuel dans un éditeur" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. +#. Translators: The label for a button in table dictionaries dialog to reload dictionary. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:166 +#: addon\globalPlugins\brailleExtender\dictionaries.py:174 +msgid "&Reload the dictionary" +msgstr "&Recharger le dictionnaire" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:179 +#: addon\globalPlugins\brailleExtender\dictionaries.py:218 +msgid "Add Dictionary Entry" +msgstr "Ajouter une entrée au dictionnaire" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:225 +msgid "File doesn't exist yet" +msgstr "Le fichier n'existe pas encore" + +#. Translators: This is the label for the edit dictionary entry dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:246 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:358 +#: addon\globalPlugins\brailleExtender\dictionaries.py:290 +msgid "Edit Dictionary Entry" +msgstr "Modifier une entrée de dictionnaire" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:251 +msgid "&Abreviation" +msgstr "&Abréviation" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:256 +msgid "&Replace by" +msgstr "&Remplacer par" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:281 +msgid "Advanced input mode" +msgstr "Mode de saisie avancée" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:290 +msgid "E&xit the advanced input mode after typing one pattern" +msgstr "&Quitter le mode de saisie avancée après avoir tapé un motif" + +#: addon\globalPlugins\brailleExtender\advancedInputMode.py:297 +msgid "Escape sign for Unicode values" +msgstr "Signe d'échappement pour les valeurs Unicode" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:82 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:367 +#, fuzzy +#| msgid "input only" +msgid "input" +msgstr "saisie seulement" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:83 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:367 +#, fuzzy +#| msgid "output only" +msgid "output" +msgstr "affichage seulement" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:84 +msgid "input and output" +msgstr "saisie et affichage" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:86 +msgid "None" +msgstr "Aucune" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:140 +msgid "Braille tables" +msgstr "Tables braille" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:144 +msgid "Use the current input table" +msgstr "Utiliser la table braille d’entrée actuelle" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:149 +#, fuzzy +#| msgid "Prefered braille tables" +msgid "Prefered input tables" +msgstr "Tables braille préférées" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:155 +#, fuzzy +#| msgid "Prefered braille tables" +msgid "Prefered output tables" +msgstr "Tables braille préférées" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:160 +#, fuzzy +#| msgid "Input braille table for keyboard shortcut keys" +msgid "Input braille table to use for keyboard shortcuts" +msgstr "Table braille d’entrée pour les raccourcis clavier" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:170 +msgid "&Groups of tables" +msgstr "&Groupes de tables" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:173 +msgid "Alternative and &custom braille tables" +msgstr "Tables braille &alternatives et personnalisées" + +#. Translators: label of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:177 +#, fuzzy +#| msgid "Display tab signs as spaces" +msgid "Display &tab signs as spaces" +msgstr "Afficher les signes de tabulation en tant qu’espaces" + +#. Translators: label of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:182 +#, fuzzy +#| msgid "Number of space for a tab sign" +msgid "Number of &space for a tab sign" +msgstr "Nombre d’espaces pour un signe de tabulation" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:182 +#: addon\globalPlugins\brailleExtender\settings.py:105 +#: addon\globalPlugins\brailleExtender\settings.py:117 +msgid "for the currrent braille display" +msgstr "pour l’afficheur braille actuel" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:203 +msgid "Tab size is invalid" +msgstr "La taille de la tabulation n'est pas valide" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:204 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:386 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:394 +#: addon\globalPlugins\brailleExtender\settings.py:479 +msgid "Error" +msgstr "Erreur" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:240 +msgid "Groups of tables" +msgstr "Groupes de tables" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:246 +msgid "List of table groups" +msgstr "Liste des groupes de tables" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:248 +msgid "Name" +msgstr "Nom" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:249 +msgid "Members" +msgstr "Membres" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:250 +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:366 +msgid "Usable in" +msgstr "Utilisable en" + +#. Translators: The label for a button in groups of tables dialog to open groups of tables file in an editor. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:277 +#, fuzzy +#| msgid "&Open the current dictionary file in an editor" +msgid "&Open the groups of tables file in an editor" +msgstr "&Ouvrir le fichier de dictionnaire actuel dans un éditeur" + +#. Translators: The label for a button in groups of tables dialog to reload groups of tables. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:282 +msgid "&Reload the groups of tables" +msgstr "&Recharger les groupes de tables" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:296 +#, fuzzy +#| msgid "Add gesture" +msgid "Add group entry" +msgstr "Ajouter un geste" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:362 +msgid "Group name" +msgstr "Nom du groupe" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:363 +msgid "Group members" +msgstr "Membres du groupe" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:385 +msgid "Please specify a group name" +msgstr "Veuillez spécifier un nom de groupe" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:393 +msgid "Please select at least 2 tables" +msgstr "Veuillez sélectionner au moins 2 tables" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:405 +msgid "Custom braille tables" +msgstr "Tables braille personnalisées" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:414 +msgid "Use a custom table as input table" +msgstr "Utiliser une table personnalisée en tant que table de saisie" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:415 +msgid "Use a custom table as output table" +msgstr "Utiliser une table personnalisée comme table d'affichage" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:416 +msgid "&Add a braille table" +msgstr "&Ajouter une table braille" + +#. Translators: title of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:440 +msgid "Add a braille table" +msgstr "Ajouter une table braille" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:446 +msgid "Display name" +msgstr "Nom d'affichage" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:447 +msgid "Description" +msgstr "Description" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:448 +msgid "Path" +msgstr "Répertoire" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:449 +#: addon\globalPlugins\brailleExtender\settings.py:354 +msgid "&Browse" +msgstr "&Parcourir" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:452 +msgid "Contracted (grade 2) braille table" +msgstr "Table braille abrégé (grade 2)" + +#. Translators: label of a dialog. +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:454 +msgid "Available for" +msgstr "Disponible pour" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:454 +msgid "Input and output" +msgstr "Saisie et affichage" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:454 +msgid "Input only" +msgstr "Saisie seulement" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:454 +msgid "Output only" +msgstr "Affichage seulement" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:460 +msgid "Choose a table file" +msgstr "Choisissez un fichier de table" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:460 +msgid "Liblouis table files" +msgstr "Fichiers de table Liblouis" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:472 +msgid "Please specify a display name." +msgstr "Veuillez spécifier un nom d'affichage." + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:472 +msgid "Invalid display name" +msgstr "Nom d'affichage invalide" + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:476 +#, python-format +msgid "The specified path is not valid (%s)." +msgstr "Le répertoire spécifié est invalide (%s)." + +#: addon\globalPlugins\brailleExtender\brailleTablesExt.py:476 +msgid "Invalid path" +msgstr "Répertoire invalide" + +#: addon\globalPlugins\brailleExtender\configBE.py:55 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:253 +msgid "Use braille table behavior" +msgstr "Utiliser le comportement de la table braille" + +#: addon\globalPlugins\brailleExtender\configBE.py:56 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:254 +msgid "Dots 1-8 (⣿)" +msgstr "Points 1-8 (⣿)" + +#: addon\globalPlugins\brailleExtender\configBE.py:57 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:255 +msgid "Dots 1-6 (⠿)" +msgstr "Points 1-6 (⠿)" + +#: addon\globalPlugins\brailleExtender\configBE.py:58 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:256 +msgid "Empty cell (⠀)" +msgstr "Cellule vide (⠀)" + +#: addon\globalPlugins\brailleExtender\configBE.py:59 +msgid "Other dot pattern (e.g.: 6-123456)" +msgstr "Autre motif de points (p. ex. : 6-123456)" -#: addon\globalPlugins\brailleExtender\configBE.py:42 +#: addon\globalPlugins\brailleExtender\configBE.py:60 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:258 +msgid "Question mark (depending output table)" +msgstr "Point d'interrogation (dépend de la table d'affichage)" + +#: addon\globalPlugins\brailleExtender\configBE.py:61 +msgid "Other sign/pattern (e.g.: \\, ??)" +msgstr "Autre signe / motif (p. ex. : \\, ??)" + +#: addon\globalPlugins\brailleExtender\configBE.py:62 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:260 +msgid "Hexadecimal, Liblouis style" +msgstr "Hexadécimale, style liblouis" + +#: addon\globalPlugins\brailleExtender\configBE.py:63 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:261 +msgid "Hexadecimal, HUC8" +msgstr "Hexadécimale, HUC8" + +#: addon\globalPlugins\brailleExtender\configBE.py:64 +#: addon\globalPlugins\brailleExtender\undefinedChars.py:262 +msgid "Hexadecimal, HUC6" +msgstr "Hexadécimale, HUC6" + +#: addon\globalPlugins\brailleExtender\configBE.py:71 +#: addon\globalPlugins\brailleExtender\configBE.py:78 +#: addon\globalPlugins\brailleExtender\configBE.py:92 +msgid "none" +msgstr "aucun" + +#: addon\globalPlugins\brailleExtender\configBE.py:72 +msgid "braille only" +msgstr "braille seulement" + +#: addon\globalPlugins\brailleExtender\configBE.py:73 msgid "speech only" msgstr "parole seulement" -#: addon\globalPlugins\brailleExtender\configBE.py:43 -#: addon\globalPlugins\brailleExtender\configBE.py:64 +#: addon\globalPlugins\brailleExtender\configBE.py:74 +#: addon\globalPlugins\brailleExtender\configBE.py:95 msgid "both" msgstr "les deux" -#: addon\globalPlugins\brailleExtender\configBE.py:48 +#: addon\globalPlugins\brailleExtender\configBE.py:79 msgid "dots 7 and 8" msgstr "points 7 et 8" -#: addon\globalPlugins\brailleExtender\configBE.py:49 +#: addon\globalPlugins\brailleExtender\configBE.py:80 msgid "dot 7" msgstr "point 7" -#: addon\globalPlugins\brailleExtender\configBE.py:50 +#: addon\globalPlugins\brailleExtender\configBE.py:81 msgid "dot 8" msgstr "point 8" -#: addon\globalPlugins\brailleExtender\configBE.py:56 +#: addon\globalPlugins\brailleExtender\configBE.py:87 msgid "stable" msgstr "stable" -#: addon\globalPlugins\brailleExtender\configBE.py:57 +#: addon\globalPlugins\brailleExtender\configBE.py:88 msgid "development" msgstr "développement" -#: addon\globalPlugins\brailleExtender\configBE.py:62 +#: addon\globalPlugins\brailleExtender\configBE.py:93 msgid "focus mode" msgstr "mode focus" -#: addon\globalPlugins\brailleExtender\configBE.py:63 +#: addon\globalPlugins\brailleExtender\configBE.py:94 msgid "review mode" msgstr "mode revue" -#: addon\globalPlugins\brailleExtender\configBE.py:92 +#: addon\globalPlugins\brailleExtender\configBE.py:103 +msgid "Fill a cell in two stages on both sides" +msgstr "Remplir une cellule en deux étapes des deux côtés" + +#: addon\globalPlugins\brailleExtender\configBE.py:104 +msgid "Fill a cell in two stages on one side (space = empty side)" +msgstr "Remplissez une cellule en deux étapes sur un côté (espace = côté vide)" + +#: addon\globalPlugins\brailleExtender\configBE.py:105 +msgid "" +"Fill a cell dots by dots (each dot is a toggle, press space to validate the " +"character)" +msgstr "" +"Remplissez une cellule points par points (chaque point est une bascule, " +"appuyez sur espace pour valider le caractère)" + +#: addon\globalPlugins\brailleExtender\configBE.py:123 msgid "last known" msgstr "dernier connu" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:29 +#: addon\globalPlugins\brailleExtender\dictionaries.py:30 msgid "Sign" msgstr "Signe" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:31 +#: addon\globalPlugins\brailleExtender\dictionaries.py:32 msgid "Math" msgstr "" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:33 +#: addon\globalPlugins\brailleExtender\dictionaries.py:34 msgid "Replace" msgstr "Remplacement" -#: addon\globalPlugins\brailleExtender\dictionaries.py:41 +#: addon\globalPlugins\brailleExtender\dictionaries.py:42 msgid "Both (input and output)" msgstr "Les deux (saisie et affichage)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:42 +#: addon\globalPlugins\brailleExtender\dictionaries.py:43 msgid "Backward (input only)" msgstr "Arrière (saisie seulement)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:43 +#: addon\globalPlugins\brailleExtender\dictionaries.py:44 msgid "Forward (output only)" msgstr "Avant (affichage seulement)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:110 +#: addon\globalPlugins\brailleExtender\dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1030,121 +1785,87 @@ msgstr "" "Dictionnaires concernés : %s. Par conséquent, ces dictionnaires ne sont pas " "chargés." -#. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:131 -msgid "Dictionary &entries" -msgstr "&Entrées du dictionnaire" - #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon\globalPlugins\brailleExtender\dictionaries.py:134 +#: addon\globalPlugins\brailleExtender\dictionaries.py:135 msgid "Comment" msgstr "Commentaire" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon\globalPlugins\brailleExtender\dictionaries.py:136 +#: addon\globalPlugins\brailleExtender\dictionaries.py:137 msgid "Pattern" msgstr "Modèle" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon\globalPlugins\brailleExtender\dictionaries.py:138 +#: addon\globalPlugins\brailleExtender\dictionaries.py:139 msgid "Representation" msgstr "Représentation" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon\globalPlugins\brailleExtender\dictionaries.py:140 +#: addon\globalPlugins\brailleExtender\dictionaries.py:141 msgid "Opcode" msgstr "" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon\globalPlugins\brailleExtender\dictionaries.py:142 +#: addon\globalPlugins\brailleExtender\dictionaries.py:143 msgid "Direction" msgstr "Sens" -#. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:148 -msgid "&Add" -msgstr "&Ajouter" - -#. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:154 -msgid "&Edit" -msgstr "&Éditer" - -#. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:160 -msgid "Re&move" -msgstr "&Supprimer" - -#. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon\globalPlugins\brailleExtender\dictionaries.py:168 +#. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. +#: addon\globalPlugins\brailleExtender\dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Ouvrir le fichier de dictionnaire actuel dans un éditeur" -#. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon\globalPlugins\brailleExtender\dictionaries.py:173 -msgid "&Reload the dictionary" -msgstr "&Recharger le dictionnaire" - -#: addon\globalPlugins\brailleExtender\dictionaries.py:216 -msgid "Add Dictionary Entry" -msgstr "Ajouter une entrée au dictionnaire" - -#. Translators: This is the label for the edit dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:288 -msgid "Edit Dictionary Entry" -msgstr "Modifier une entrée de dictionnaire" - #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:294 +#: addon\globalPlugins\brailleExtender\dictionaries.py:296 msgid "Dictionary" msgstr "Dictionnaire" -#: addon\globalPlugins\brailleExtender\dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:298 msgid "Global" msgstr "Global" -#: addon\globalPlugins\brailleExtender\dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:298 msgid "Table" msgstr "Table" -#: addon\globalPlugins\brailleExtender\dictionaries.py:296 +#: addon\globalPlugins\brailleExtender\dictionaries.py:298 msgid "Temporary" msgstr "Temporaire" -#: addon\globalPlugins\brailleExtender\dictionaries.py:302 +#: addon\globalPlugins\brailleExtender\dictionaries.py:304 msgid "See &entries" msgstr "Consulter les &entrées" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:307 +#: addon\globalPlugins\brailleExtender\dictionaries.py:309 msgid "&Text pattern/sign" msgstr "&Modèle de texte/signe" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:312 +#: addon\globalPlugins\brailleExtender\dictionaries.py:314 msgid "&Braille representation" msgstr "Représentation &braille" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:316 +#: addon\globalPlugins\brailleExtender\dictionaries.py:318 msgid "&Comment" msgstr "&Commentaire" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:320 +#: addon\globalPlugins\brailleExtender\dictionaries.py:322 msgid "&Opcode" msgstr "" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:325 +#: addon\globalPlugins\brailleExtender\dictionaries.py:327 msgid "&Direction" msgstr "&Sens" -#: addon\globalPlugins\brailleExtender\dictionaries.py:366 +#: addon\globalPlugins\brailleExtender\dictionaries.py:368 msgid "Text pattern/sign field is empty." msgstr "Le champ de modèle de texte/signe est vide." -#: addon\globalPlugins\brailleExtender\dictionaries.py:373 +#: addon\globalPlugins\brailleExtender\dictionaries.py:375 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1153,7 +1874,7 @@ msgstr "" "La valeur du champ « modèle de texte/signe » est incorrecte. Vous devez " "spécifier un caractère avec cet opcode. Ex. : %s" -#: addon\globalPlugins\brailleExtender\dictionaries.py:377 +#: addon\globalPlugins\brailleExtender\dictionaries.py:379 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1162,7 +1883,7 @@ msgstr "" "Le champ de représentation braille est vide. Avec cet opcode, vous devez " "spécifier quelque chose. Ex. : %s" -#: addon\globalPlugins\brailleExtender\dictionaries.py:381 +#: addon\globalPlugins\brailleExtender\dictionaries.py:383 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1171,190 +1892,201 @@ msgstr "" "La valeur du champ « représentation braille » est incorrecte. Avec cet " "opcode, vous devez entrer des motifs de points. Ex. : %s" -#: addon\globalPlugins\brailleExtender\settings.py:32 +#. Translators: Reported when translation didn't succeed due to unsupported input. +#: addon\globalPlugins\brailleExtender\patchs.py:379 +msgid "Unsupported input" +msgstr "Entrée non prise en charge" + +#: addon\globalPlugins\brailleExtender\patchs.py:438 +msgid "Unsupported input method" +msgstr "Méthode de saisie non prise en charge" + +#: addon\globalPlugins\brailleExtender\settings.py:36 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "" "L'implémentation de cette fonctionnalité est en cours. Merci pour votre " "patience." #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:38 -#: addon\globalPlugins\brailleExtender\settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:42 +#: addon\globalPlugins\brailleExtender\settings.py:214 msgid "General" msgstr "Général" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:45 +#: addon\globalPlugins\brailleExtender\settings.py:49 msgid "Check for &updates automatically" msgstr "Vérifier les &mise à jour automatiquement" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:49 +#: addon\globalPlugins\brailleExtender\settings.py:53 msgid "Add-on update channel" msgstr "Canal de mise à jour" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:56 +#: addon\globalPlugins\brailleExtender\settings.py:60 msgid "Say current line while scrolling in" msgstr "Énoncer la ligne actuelle lors du défilement en" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:60 +#: addon\globalPlugins\brailleExtender\settings.py:64 msgid "Speech interrupt when scrolling on same line" msgstr "Interruption de la parole lors du défilement sur une même ligne" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:64 +#: addon\globalPlugins\brailleExtender\settings.py:68 msgid "Speech interrupt for unknown gestures" msgstr "Interrompre la parole lors de gestes inconnus" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:68 +#: addon\globalPlugins\brailleExtender\settings.py:72 msgid "Announce the character while moving with routing buttons" msgstr "Annoncer le caractère lors du déplacement avec les boutons de routage" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:72 +#: addon\globalPlugins\brailleExtender\settings.py:76 msgid "Use cursor keys to route cursor in review mode" msgstr "En mode revue, utiliser les flèches pour déplacer le curseur" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:76 +#: addon\globalPlugins\brailleExtender\settings.py:80 msgid "Display time and date infinitely" msgstr "Afficher l’heure et la date infiniment" -#: addon\globalPlugins\brailleExtender\settings.py:78 +#: addon\globalPlugins\brailleExtender\settings.py:82 msgid "Automatic review mode for apps with terminal" msgstr "Mode de révision automatique pour les applications avec terminal" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:82 +#: addon\globalPlugins\brailleExtender\settings.py:86 msgid "Feedback for volume change in" msgstr "Retour pour le changement de volume en" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:90 +#: addon\globalPlugins\brailleExtender\settings.py:94 msgid "Feedback for modifier keys in" msgstr "Retour pour les touches de modification en" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:96 +#: addon\globalPlugins\brailleExtender\settings.py:100 msgid "Play beeps for modifier keys" msgstr "Jouer des bips pour les touches de modification" -#: addon\globalPlugins\brailleExtender\settings.py:101 +#: addon\globalPlugins\brailleExtender\settings.py:105 msgid "Right margin on cells" msgstr "Marge droite sur les cellules" -#: addon\globalPlugins\brailleExtender\settings.py:101 -#: addon\globalPlugins\brailleExtender\settings.py:113 -#: addon\globalPlugins\brailleExtender\settings.py:356 -msgid "for the currrent braille display" -msgstr "pour l’afficheur braille actuel" - #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:105 +#: addon\globalPlugins\brailleExtender\settings.py:109 msgid "Braille keyboard configuration" msgstr "Configuration du clavier braille" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:109 +#: addon\globalPlugins\brailleExtender\settings.py:113 msgid "Reverse forward scroll and back scroll buttons" msgstr "Inverser les boutons de défilement arrière et avant" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:113 +#: addon\globalPlugins\brailleExtender\settings.py:117 msgid "Autoscroll delay (ms)" msgstr "Délai pour l’auto-défilement (ms)" -#: addon\globalPlugins\brailleExtender\settings.py:114 +#: addon\globalPlugins\brailleExtender\settings.py:118 msgid "First braille display preferred" msgstr "Premier afficheur braille préféré" -#: addon\globalPlugins\brailleExtender\settings.py:116 +#: addon\globalPlugins\brailleExtender\settings.py:120 msgid "Second braille display preferred" msgstr "Second afficheur braille préféré" +#: addon\globalPlugins\brailleExtender\settings.py:122 +msgid "One-handed mode" +msgstr "Mode unimanuel" + +#: addon\globalPlugins\brailleExtender\settings.py:126 +msgid "One hand mode method" +msgstr "Méthode du mode unimanuel" + #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:149 +#: addon\globalPlugins\brailleExtender\settings.py:161 msgid "Text attributes" msgstr "Attributs de texte" -#: addon\globalPlugins\brailleExtender\settings.py:153 -#: addon\globalPlugins\brailleExtender\settings.py:200 +#: addon\globalPlugins\brailleExtender\settings.py:165 +#: addon\globalPlugins\brailleExtender\settings.py:212 msgid "Enable this feature" msgstr "Activer cette fonctionnalité" -#: addon\globalPlugins\brailleExtender\settings.py:155 +#: addon\globalPlugins\brailleExtender\settings.py:167 msgid "Show spelling errors with" msgstr "Montrer les erreurs d’orthographe avec" -#: addon\globalPlugins\brailleExtender\settings.py:157 +#: addon\globalPlugins\brailleExtender\settings.py:169 msgid "Show bold with" msgstr "Montrer la mise en gras avec" -#: addon\globalPlugins\brailleExtender\settings.py:159 +#: addon\globalPlugins\brailleExtender\settings.py:171 msgid "Show italic with" msgstr "Montrer la mise en italique avec" -#: addon\globalPlugins\brailleExtender\settings.py:161 +#: addon\globalPlugins\brailleExtender\settings.py:173 msgid "Show underline with" msgstr "Montrer la mise en souligné avec" -#: addon\globalPlugins\brailleExtender\settings.py:163 +#: addon\globalPlugins\brailleExtender\settings.py:175 msgid "Show strikethrough with" msgstr "Montrer les biffures avec" -#: addon\globalPlugins\brailleExtender\settings.py:165 +#: addon\globalPlugins\brailleExtender\settings.py:177 msgid "Show subscript with" msgstr "Montrer la mise en indice avec" -#: addon\globalPlugins\brailleExtender\settings.py:167 +#: addon\globalPlugins\brailleExtender\settings.py:179 msgid "Show superscript with" msgstr "Montrer la mise en exposant avec" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:193 +#: addon\globalPlugins\brailleExtender\settings.py:205 msgid "Role labels" msgstr "Étiquettes de rôle" -#: addon\globalPlugins\brailleExtender\settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:214 msgid "Role category" msgstr "Catégorie de rôle" -#: addon\globalPlugins\brailleExtender\settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:214 msgid "Landmark" msgstr "Repère" -#: addon\globalPlugins\brailleExtender\settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:214 msgid "Positive state" msgstr "État positif" -#: addon\globalPlugins\brailleExtender\settings.py:202 +#: addon\globalPlugins\brailleExtender\settings.py:214 msgid "Negative state" msgstr "État négatif" -#: addon\globalPlugins\brailleExtender\settings.py:206 +#: addon\globalPlugins\brailleExtender\settings.py:218 msgid "Role" msgstr "Rôle" -#: addon\globalPlugins\brailleExtender\settings.py:208 +#: addon\globalPlugins\brailleExtender\settings.py:220 msgid "Actual or new label" msgstr "Étiquette actuelle ou nouvelle" -#: addon\globalPlugins\brailleExtender\settings.py:212 +#: addon\globalPlugins\brailleExtender\settings.py:224 msgid "&Reset this role label" msgstr "&Réinitialiser cette étiquette de rôle" -#: addon\globalPlugins\brailleExtender\settings.py:214 +#: addon\globalPlugins\brailleExtender\settings.py:226 msgid "Reset all role labels" msgstr "Réinitialiser toutes les étiquettes de rôle" -#: addon\globalPlugins\brailleExtender\settings.py:279 +#: addon\globalPlugins\brailleExtender\settings.py:291 msgid "You have no customized label." msgstr "Vous n’avez aucune étiquette personnalisée." -#: addon\globalPlugins\brailleExtender\settings.py:282 +#: addon\globalPlugins\brailleExtender\settings.py:294 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1363,237 +2095,42 @@ msgstr "" "Voulez-vous vraiment réinitialiser toutes les étiquettes ? Actuellement, " "vous avez %d étiquettes personnalisées." -#: addon\globalPlugins\brailleExtender\settings.py:283 -#: addon\globalPlugins\brailleExtender\settings.py:657 +#: addon\globalPlugins\brailleExtender\settings.py:295 +#: addon\globalPlugins\brailleExtender\settings.py:417 msgid "Confirmation" msgstr "Confirmation" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:325 -msgid "Braille tables" -msgstr "Tables braille" - -#: addon\globalPlugins\brailleExtender\settings.py:330 -msgid "Use the current input table" -msgstr "Utiliser la table braille d’entrée actuelle" - -#: addon\globalPlugins\brailleExtender\settings.py:339 -msgid "Prefered braille tables" -msgstr "Tables braille préférées" - -#: addon\globalPlugins\brailleExtender\settings.py:339 -msgid "press F1 for help" -msgstr "pressez F1 pour de l’aide" - -#: addon\globalPlugins\brailleExtender\settings.py:343 -msgid "Input braille table for keyboard shortcut keys" -msgstr "Table braille d’entrée pour les raccourcis clavier" - -#: addon\globalPlugins\brailleExtender\settings.py:345 -msgid "None" -msgstr "Aucune" - -#: addon\globalPlugins\brailleExtender\settings.py:348 -msgid "Secondary output table to use" -msgstr "Table braille secondaire à utiliser" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:352 -msgid "Display tab signs as spaces" -msgstr "Afficher les signes de tabulation en tant qu’espaces" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:356 -msgid "Number of space for a tab sign" -msgstr "Nombre d’espaces pour un signe de tabulation" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:358 -msgid "Prevent undefined characters with Hexadecimal Unicode value" -msgstr "" -"Empêcher les caractères non définis avec leur valeur hexadécimale Unicode" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:361 -msgid "" -"Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" -msgstr "" -"Afficher les caractères non définis comme (p. ex. : 0 pour une cellule vide, " -"12345678, 6-123456)" - -#: addon\globalPlugins\brailleExtender\settings.py:363 -msgid "Alternative and &custom braille tables" -msgstr "Tables braille &alternatives et personnalisées" - -#: addon\globalPlugins\brailleExtender\settings.py:420 -msgid "input and output" -msgstr "saisie et affichage" - -#: addon\globalPlugins\brailleExtender\settings.py:422 -msgid "input only" -msgstr "saisie seulement" - -#: addon\globalPlugins\brailleExtender\settings.py:423 -msgid "output only" -msgstr "affichage seulement" - -#: addon\globalPlugins\brailleExtender\settings.py:454 -#, python-format -msgid "Table name: %s" -msgstr "Nom de la table : %s" - -#: addon\globalPlugins\brailleExtender\settings.py:455 -#, python-format -msgid "File name: %s" -msgstr "Nom du fichier : %s" - -#: addon\globalPlugins\brailleExtender\settings.py:456 -#, python-format -msgid "In switches: %s" -msgstr "Dans les commutateurs : %s" - -#: addon\globalPlugins\brailleExtender\settings.py:457 -msgid "About this table" -msgstr "À propos de cette table" - -#: addon\globalPlugins\brailleExtender\settings.py:460 -msgid "" -"In this combo box, all tables are present. Press space bar, left or right " -"arrow keys to include (or not) the selected table in switches" -msgstr "" -"Dans cette zone de liste déroulante, toutes les tables sont présentes. " -"Appuyez sur la barre d’espace, les flèches gauche ou droite pour inclure (ou " -"non) la table sélectionnée dans les commutateurs" - -#: addon\globalPlugins\brailleExtender\settings.py:461 -msgid "" -"You can also press 'comma' key to get the file name of the selected table " -"and 'semicolon' key to view miscellaneous infos on the selected table" -msgstr "" -"Vous pouvez également appuyer sur la touche « virgule » pour obtenir le nom " -"du fichier de la table sélectionnée et sur la touche « point-virgule » pour " -"afficher diverses informations sur la table sélectionnée" - -#: addon\globalPlugins\brailleExtender\settings.py:462 -msgid "Contextual help" -msgstr "Aide contextuelle" - -#. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:478 -msgid "Custom braille tables" -msgstr "Tables braille personnalisées" - -#: addon\globalPlugins\brailleExtender\settings.py:488 -msgid "Use a custom table as input table" -msgstr "Utiliser une table personnalisée en tant que table de saisie" - -#: addon\globalPlugins\brailleExtender\settings.py:489 -msgid "Use a custom table as output table" -msgstr "Utiliser une table personnalisée comme table d'affichage" - -#: addon\globalPlugins\brailleExtender\settings.py:490 -msgid "&Add a braille table" -msgstr "&Ajouter une table braille" - -#. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:514 -msgid "Add a braille table" -msgstr "Ajouter une table braille" - -#: addon\globalPlugins\brailleExtender\settings.py:520 -msgid "Display name" -msgstr "Nom d'affichage" - -#: addon\globalPlugins\brailleExtender\settings.py:521 -msgid "Description" -msgstr "Description" - -#: addon\globalPlugins\brailleExtender\settings.py:522 -msgid "Path" -msgstr "Répertoire" - -#: addon\globalPlugins\brailleExtender\settings.py:523 -#: addon\globalPlugins\brailleExtender\settings.py:594 -msgid "&Browse" -msgstr "&Parcourir" - -#: addon\globalPlugins\brailleExtender\settings.py:526 -msgid "Contracted (grade 2) braille table" -msgstr "Table braille abrégé (grade 2)" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:528 -msgid "Available for" -msgstr "Disponible pour" - -#: addon\globalPlugins\brailleExtender\settings.py:528 -msgid "Input and output" -msgstr "Saisie et affichage" - -#: addon\globalPlugins\brailleExtender\settings.py:528 -msgid "Input only" -msgstr "Saisie seulement" - -#: addon\globalPlugins\brailleExtender\settings.py:528 -msgid "Output only" -msgstr "Affichage seulement" - -#: addon\globalPlugins\brailleExtender\settings.py:534 -msgid "Choose a table file" -msgstr "Choisissez un fichier de table" - -#: addon\globalPlugins\brailleExtender\settings.py:534 -msgid "Liblouis table files" -msgstr "Fichiers de table Liblouis" - -#: addon\globalPlugins\brailleExtender\settings.py:546 -msgid "Please specify a display name." -msgstr "Veuillez spécifier un nom d'affichage." - -#: addon\globalPlugins\brailleExtender\settings.py:546 -msgid "Invalid display name" -msgstr "Nom d'affichage invalide" - -#: addon\globalPlugins\brailleExtender\settings.py:550 -#, python-format -msgid "The specified path is not valid (%s)." -msgstr "Le répertoire spécifié est invalide (%s)." - -#: addon\globalPlugins\brailleExtender\settings.py:550 -msgid "Invalid path" -msgstr "Répertoire invalide" - -#. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:578 +#: addon\globalPlugins\brailleExtender\settings.py:338 msgid "Quick launches" msgstr "Lancements rapides" -#: addon\globalPlugins\brailleExtender\settings.py:589 +#: addon\globalPlugins\brailleExtender\settings.py:349 msgid "&Gestures" msgstr "&Gestes" -#: addon\globalPlugins\brailleExtender\settings.py:592 +#: addon\globalPlugins\brailleExtender\settings.py:352 msgid "Location (file path, URL or command)" msgstr "Emplacement (chemin de fichier, URL ou commande)" -#: addon\globalPlugins\brailleExtender\settings.py:595 +#: addon\globalPlugins\brailleExtender\settings.py:355 msgid "&Remove this gesture" msgstr "&Supprimer ce geste" -#: addon\globalPlugins\brailleExtender\settings.py:596 +#: addon\globalPlugins\brailleExtender\settings.py:356 msgid "&Add a quick launch" msgstr "&Ajouter un lancement rapide" -#: addon\globalPlugins\brailleExtender\settings.py:625 +#: addon\globalPlugins\brailleExtender\settings.py:385 msgid "Unable to associate this gesture. Please enter another, now" msgstr "" "Impossible d’associer ce geste. Veuillez en entrer un autre, maintenant" -#: addon\globalPlugins\brailleExtender\settings.py:630 +#: addon\globalPlugins\brailleExtender\settings.py:390 msgid "Out of capture" msgstr "Hors de capture" -#: addon\globalPlugins\brailleExtender\settings.py:632 +#: addon\globalPlugins\brailleExtender\settings.py:392 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -1602,21 +2139,21 @@ msgstr "" "Veuillez entrer un geste depuis votre afficheur braille " "{NAME_BRAILLE_DISPLAY}. Appuyez sur espace pour annuler." -#: addon\globalPlugins\brailleExtender\settings.py:640 +#: addon\globalPlugins\brailleExtender\settings.py:400 #, python-format msgid "OK. The gesture captured is %s" msgstr "OK. Le geste capturé est %s" -#: addon\globalPlugins\brailleExtender\settings.py:657 +#: addon\globalPlugins\brailleExtender\settings.py:417 msgid "Are you sure to want to delete this shorcut?" msgstr "Êtes-vous sûr de vouloir supprimer ce raccourci ?" -#: addon\globalPlugins\brailleExtender\settings.py:666 +#: addon\globalPlugins\brailleExtender\settings.py:426 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} supprimé" -#: addon\globalPlugins\brailleExtender\settings.py:677 +#: addon\globalPlugins\brailleExtender\settings.py:437 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -1624,107 +2161,157 @@ msgstr "" "Veuillez entrer le geste souhaité pour ce nouveau lancement rapide. Pressez " "\"barre espace\" pour annuler." -#: addon\globalPlugins\brailleExtender\settings.py:680 +#: addon\globalPlugins\brailleExtender\settings.py:440 msgid "Don't add a quick launch" msgstr "Ne pas ajouter de lancement rapide" -#: addon\globalPlugins\brailleExtender\settings.py:706 +#: addon\globalPlugins\brailleExtender\settings.py:466 #, python-brace-format msgid "Choose a file for {0}" msgstr "Choisissez un fichier pour {0}" -#: addon\globalPlugins\brailleExtender\settings.py:719 +#: addon\globalPlugins\brailleExtender\settings.py:479 msgid "Please create or select a quick launch first" msgstr "Veuillez d'abord créer ou sélectionner un lancement rapide" -#: addon\globalPlugins\brailleExtender\settings.py:719 -msgid "Error" -msgstr "Erreur" - -#: addon\globalPlugins\brailleExtender\settings.py:723 +#: addon\globalPlugins\brailleExtender\settings.py:483 msgid "Profiles editor" msgstr "Éditeur de profils" -#: addon\globalPlugins\brailleExtender\settings.py:734 +#: addon\globalPlugins\brailleExtender\settings.py:494 msgid "You must have a braille display to editing a profile" msgstr "Vous devez avoir un afficheur braille pour modifier un profil" -#: addon\globalPlugins\brailleExtender\settings.py:738 +#: addon\globalPlugins\brailleExtender\settings.py:498 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "Le répertoire des profils n’est pas présent ou accessible. Impossible de " "modifier les profils" -#: addon\globalPlugins\brailleExtender\settings.py:744 +#: addon\globalPlugins\brailleExtender\settings.py:504 msgid "Profile to edit" msgstr "Profil à éditer" -#: addon\globalPlugins\brailleExtender\settings.py:750 +#: addon\globalPlugins\brailleExtender\settings.py:510 msgid "Gestures category" msgstr "Catégorie de gestes" -#: addon\globalPlugins\brailleExtender\settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:511 msgid "Single keys" msgstr "Touches simples" -#: addon\globalPlugins\brailleExtender\settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:511 msgid "Practical shortcuts" msgstr "Raccourcis usuels" -#: addon\globalPlugins\brailleExtender\settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:511 msgid "NVDA commands" msgstr "Commandes NVDA" -#: addon\globalPlugins\brailleExtender\settings.py:751 +#: addon\globalPlugins\brailleExtender\settings.py:511 msgid "Addon features" msgstr "Fonctionnalités du module" -#: addon\globalPlugins\brailleExtender\settings.py:755 +#: addon\globalPlugins\brailleExtender\settings.py:515 msgid "Gestures list" msgstr "Liste des gestes" -#: addon\globalPlugins\brailleExtender\settings.py:764 +#: addon\globalPlugins\brailleExtender\settings.py:524 msgid "Add gesture" msgstr "Ajouter un geste" -#: addon\globalPlugins\brailleExtender\settings.py:766 +#: addon\globalPlugins\brailleExtender\settings.py:526 msgid "Remove this gesture" msgstr "Supprimer ce geste" -#: addon\globalPlugins\brailleExtender\settings.py:769 +#: addon\globalPlugins\brailleExtender\settings.py:529 msgid "Assign a braille gesture" msgstr "Assigner un geste braille" -#: addon\globalPlugins\brailleExtender\settings.py:776 +#: addon\globalPlugins\brailleExtender\settings.py:536 msgid "Remove this profile" msgstr "Supprimer ce profil" -#: addon\globalPlugins\brailleExtender\settings.py:779 +#: addon\globalPlugins\brailleExtender\settings.py:539 msgid "Add a profile" msgstr "Ajouter un profil" -#: addon\globalPlugins\brailleExtender\settings.py:785 +#: addon\globalPlugins\brailleExtender\settings.py:545 msgid "Name for the new profile" msgstr "Nom pour le nouveau profil" -#: addon\globalPlugins\brailleExtender\settings.py:791 +#: addon\globalPlugins\brailleExtender\settings.py:551 msgid "Create" msgstr "Créer" -#: addon\globalPlugins\brailleExtender\settings.py:854 +#: addon\globalPlugins\brailleExtender\settings.py:614 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "Impossible de charger ce profil. Fichier invalide ou inaccessible" -#: addon\globalPlugins\brailleExtender\settings.py:873 +#: addon\globalPlugins\brailleExtender\settings.py:633 msgid "Undefined" msgstr "Indéfini" #. Translators: title of add-on parameters dialog. -#: addon\globalPlugins\brailleExtender\settings.py:902 +#: addon\globalPlugins\brailleExtender\settings.py:664 msgid "Settings" msgstr "Paramètres" +#. Translators: label of a dialog. +#: addon\globalPlugins\brailleExtender\undefinedChars.py:249 +#, fuzzy +#| msgid "Representation" +msgid "Representation &method" +msgstr "Représentation" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:257 +#, python-brace-format +msgid "Other dot pattern (e.g.: {dotPatternSample})" +msgstr "Autre motif de points (p. ex. : {dotPatternSample})" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:259 +#, python-brace-format +msgid "Other sign/pattern (e.g.: {signPatternSample})" +msgstr "Autre signe / motif (p. ex. : {signPatternSample})" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:278 +msgid "Specify another pattern" +msgstr "Spécifiez un autre motif" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:283 +msgid "Describe undefined characters if possible" +msgstr "Décrire si possible les caractères indéfinis" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:292 +msgid "Also describe extended characters (e.g.: country flags)" +msgstr "" +"Décrire également les caractères étendus (par exemple: drapeaux de pays)" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:299 +msgid "Start tag" +msgstr "Marqueur de début" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:304 +msgid "End tag" +msgstr "Marqueur de fin" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:315 +msgid "Language" +msgstr "Langue" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:318 +#, fuzzy +#| msgid "Use the current input table" +msgid "Use the current output table" +msgstr "Utiliser la table braille d’entrée actuelle" + +#: addon\globalPlugins\brailleExtender\undefinedChars.py:324 +#, fuzzy +#| msgid "Braille tables" +msgid "Braille table" +msgstr "Tables braille" + #: addon\globalPlugins\brailleExtender\updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" @@ -1759,69 +2346,69 @@ msgstr "" msgid "{addonName}'s update" msgstr "Mise à jour de {addonName}" -#: addon\globalPlugins\brailleExtender\utils.py:189 +#: addon\globalPlugins\brailleExtender\utils.py:194 msgid "Reload successful" msgstr "Rechargement réussi" -#: addon\globalPlugins\brailleExtender\utils.py:192 +#: addon\globalPlugins\brailleExtender\utils.py:197 msgid "Reload failed" msgstr "Rechargement échoué" -#: addon\globalPlugins\brailleExtender\utils.py:197 -#: addon\globalPlugins\brailleExtender\utils.py:207 +#: addon\globalPlugins\brailleExtender\utils.py:203 +#: addon\globalPlugins\brailleExtender\utils.py:218 msgid "Not a character" msgstr "Pas un caractère." -#: addon\globalPlugins\brailleExtender\utils.py:201 -msgid "unknown" +#: addon\globalPlugins\brailleExtender\utils.py:208 +msgid "N/A" msgstr "" -#: addon\globalPlugins\brailleExtender\utils.py:330 +#: addon\globalPlugins\brailleExtender\utils.py:312 msgid "Available combinations" msgstr "Combinaisons disponibles" -#: addon\globalPlugins\brailleExtender\utils.py:332 +#: addon\globalPlugins\brailleExtender\utils.py:314 msgid "One combination available" msgstr "Une combinaison disponible" -#: addon\globalPlugins\brailleExtender\utils.py:349 +#: addon\globalPlugins\brailleExtender\utils.py:325 msgid "space" msgstr "espace" -#: addon\globalPlugins\brailleExtender\utils.py:350 +#: addon\globalPlugins\brailleExtender\utils.py:326 msgid "left SHIFT" msgstr "SHIFT gauche" -#: addon\globalPlugins\brailleExtender\utils.py:351 +#: addon\globalPlugins\brailleExtender\utils.py:327 msgid "right SHIFT" msgstr "SHIFT droite" -#: addon\globalPlugins\brailleExtender\utils.py:352 +#: addon\globalPlugins\brailleExtender\utils.py:328 msgid "left selector" msgstr "sélecteur gauche" -#: addon\globalPlugins\brailleExtender\utils.py:353 +#: addon\globalPlugins\brailleExtender\utils.py:329 msgid "right selector" msgstr "sélecteur droit" -#: addon\globalPlugins\brailleExtender\utils.py:354 +#: addon\globalPlugins\brailleExtender\utils.py:330 msgid "dot" msgstr "point" -#: addon\globalPlugins\brailleExtender\utils.py:369 +#: addon\globalPlugins\brailleExtender\utils.py:345 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} sur {brailleDisplay}" -#: addon\globalPlugins\brailleExtender\utils.py:446 +#: addon\globalPlugins\brailleExtender\utils.py:422 msgid "No text" msgstr "Pas de texte" -#: addon\globalPlugins\brailleExtender\utils.py:455 +#: addon\globalPlugins\brailleExtender\utils.py:431 msgid "Not text" msgstr "Ce n’est pas du texte" -#: addon\globalPlugins\brailleExtender\utils.py:475 +#: addon\globalPlugins\brailleExtender\utils.py:451 msgid "No text selected" msgstr "Pas de sélection de texte" @@ -1941,6 +2528,83 @@ msgstr "" msgid "actions and quick navigation through a rotor" msgstr "actions et navigation rapide au travers d’un rotor" +#~ msgid "Braille &dictionaries" +#~ msgstr "&Dictionnaires braille" + +#~ msgid "Please use NVDA 2017.3 minimum for this feature" +#~ msgstr "Veuillez utiliser NVDA 2017.3 pour cette fonctionnalité" + +#~ msgid "%s braille display" +#~ msgstr "afficheur braille %s" + +#~ msgid "profile loaded: %s" +#~ msgstr "profile chargé : %s" + +#~ msgid "" +#~ "In virtual documents (HTML/PDF/…) you can navigate element type by " +#~ "element type using keyboard. These navigation keys should work with your " +#~ "braille terminal equally.

        In addition to these, there are some " +#~ "specific shortcuts:" +#~ msgstr "" +#~ "Dans les documents virtuels (HTML/PDF/…) il vous est possible de naviguer " +#~ "de type d’élément en type d’élément à l’aide de touche clavier. Ces " +#~ "touches de navigation devraient fonctionner depuis le terminal braille.

        En plus de ceux-ci, il existe quelques raccourcis particuliers :" + +#~ msgid "Shortcuts on system keyboard specific to the add-on" +#~ msgstr "Raccourcis sur le clavier du système spécifiques au module" + +#~ msgid "Copyright (C) 2016-2020 André-Abush Clause and other contributors:" +#~ msgstr "" +#~ "Copyright (C) 2016-2020 André-Abush Clause, et d’autres contributeurs :" + +#~ msgid "press F1 for help" +#~ msgstr "pressez F1 pour de l’aide" + +#~ msgid "Secondary output table to use" +#~ msgstr "Table braille secondaire à utiliser" + +#~ msgid "Prevent undefined characters with Hexadecimal Unicode value" +#~ msgstr "" +#~ "Empêcher les caractères non définis avec leur valeur hexadécimale Unicode" + +#~ msgid "" +#~ "Show undefined characters as (e.g.: 0 for blank cell, 12345678, 6-123456)" +#~ msgstr "" +#~ "Afficher les caractères non définis comme (p. ex. : 0 pour une cellule " +#~ "vide, 12345678, 6-123456)" + +#~ msgid "Table name: %s" +#~ msgstr "Nom de la table : %s" + +#~ msgid "File name: %s" +#~ msgstr "Nom du fichier : %s" + +#~ msgid "In switches: %s" +#~ msgstr "Dans les commutateurs : %s" + +#~ msgid "About this table" +#~ msgstr "À propos de cette table" + +#~ msgid "" +#~ "In this combo box, all tables are present. Press space bar, left or right " +#~ "arrow keys to include (or not) the selected table in switches" +#~ msgstr "" +#~ "Dans cette zone de liste déroulante, toutes les tables sont présentes. " +#~ "Appuyez sur la barre d’espace, les flèches gauche ou droite pour inclure " +#~ "(ou non) la table sélectionnée dans les commutateurs" + +#~ msgid "" +#~ "You can also press 'comma' key to get the file name of the selected table " +#~ "and 'semicolon' key to view miscellaneous infos on the selected table" +#~ msgstr "" +#~ "Vous pouvez également appuyer sur la touche « virgule » pour obtenir le " +#~ "nom du fichier de la table sélectionnée et sur la touche « point-" +#~ "virgule » pour afficher diverses informations sur la table sélectionnée" + +#~ msgid "Contextual help" +#~ msgstr "Aide contextuelle" + #~ msgid "%s menu" #~ msgstr "Menu %s" @@ -1956,9 +2620,6 @@ msgstr "actions et navigation rapide au travers d’un rotor" #~ msgid "Braille tables configuration" #~ msgstr "Configuration des tables braille" -#~ msgid "Text attributes configuration" -#~ msgstr "Configuration des attributs de texte" - #~ msgid "Role &labels" #~ msgstr "&Étiquettes de rôle" @@ -2005,9 +2666,6 @@ msgstr "actions et navigation rapide au travers d’un rotor" #~ msgid "Enable Attribra" #~ msgstr "Activer Attribra" -#~ msgid "braille tables" -#~ msgstr "tables braille" - #~ msgid "Unable to save or download update file. Opening your browser" #~ msgstr "" #~ "Impossible d’enregistrer ou de télécharger le fichier de mise à jour. " From 4c1aa45f8ef054b591ff99388955f09bc941eec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:37:52 +0200 Subject: [PATCH 67/87] Small fixes --- addon/globalPlugins/brailleExtender/addonDoc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index ce44bab5..8e5de8ea 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -48,7 +48,7 @@ def getFeaturesDoc(): features = { _("Representation of undefined characters"): [ "

        ", - _("The extension allows you to customize how an undefined character should be represented within a braille table. To do so, go to the braille table settings. You can choose between the following representations:"), + _("The extension allows you to customize how an undefined character should be represented within a braille table. To do so, go to the — Representation of undefined characters — settings. You can choose between the following representations:"), "

          ", ''.join([f"
        • {choice}
        • " for choice in configBE.CHOICES_undefinedCharRepr]), "

        ", @@ -65,7 +65,7 @@ def getFeaturesDoc(): "

        ", _("This feature allows you to obtain various information regarding the character under the cursor using the current input braille table, such as:"), "
        ", - _("the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary values; A description of the character if possible; - The Unicode Braille representation and the Braille dot pattern."), + _("the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary values; A description of the character if possible; the Unicode braille representation and the braille pattern dots."), "

        ", _("Pressing the defined gesture associated to this function once shows you the information in a flash message and a double-press displays the same information in a virtual NVDA buffer."), "
        ", @@ -74,11 +74,11 @@ def getFeaturesDoc(): _(f"For example, for the '{chosenChar}' character, we will get the following information:"), "

        " + utils.currentCharDesc(chosenChar, 0) + "

        ", ], - _("Advanced Braille Input"): [ + _("Advanced braille input"): [ "

        ", _("This feature allows you to enter any character from its HUC8 representation or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to develop abbreviations. To use this function, enter the advanced input mode and then enter the desired pattern. Default gestures: NVDA+Windows+i or ⡊+space (on supported displays). Press the same gesture to exit this mode. Alternatively, an option allows you to automatically exit this mode after entering a single pattern. "), "

        ", - "If you want to enter a character from its HUC8 representation, simply enter the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the interpretation will be performed each time 3 dot combinations are entered. If you wish to enter a character from its hexadecimal, decimal, octal or binary value, do the following:", + _("If you want to enter a character from its HUC8 representation, simply enter the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the interpretation will be performed each time 3 dot combinations are entered. If you wish to enter a character from its hexadecimal, decimal, octal or binary value, do the following:"), "

          ", "
        1. " + _(f"Enter {braillePattern}") + "
        2. ", "
        3. " + _("Specify the basis as follows") + f"{punctuationSeparator}:", @@ -92,7 +92,7 @@ def getFeaturesDoc(): "
        4. " + _("Press Space to validate.") + "
        5. ", "
        ", "

        ", - _("For abbreviations, you must first add them in the dialog box - Advanced mode dictionaries -. Then, you just have to enter your abbreviation and press space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —."), + _('For abbreviations, you must first add them in the dialog box — Advanced mode dictionaries —. Then, you just have to enter your abbreviation and press space to expand it. For example, you can define the following abbreviations: "⠎⠺" with "sandwich", "⠋⠛⠋⠗" to "🇫🇷".'), "

        ", _("Here are some examples of sequences to be entered for given characters:"), "

        ", From 892da186af8fecec0f712489f89cbc641758e729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:46:29 +0200 Subject: [PATCH 68/87] Fix bad key in a variable --- addon/globalPlugins/brailleExtender/addonDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 8e5de8ea..c54af593 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -43,7 +43,7 @@ def getFeaturesDoc(): ch = undefinedCharsSamples[i][0][0] undefinedCharsSamples[i][0] = "%s (%s)" % (ch, utils.getSpeechSymbols(ch)) - braillePattern = config.conf["brailleExtender"]["advancedInputMode"]["startSign"] + braillePattern = config.conf["brailleExtender"]["advancedInputMode"]["escapeSignUnicodeValue"] features = { _("Representation of undefined characters"): [ From 809b1129d05b57c7f91c364f5b36d030079928d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:51:13 +0200 Subject: [PATCH 69/87] l10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 245 ++++++++++++++++------------ 1 file changed, 140 insertions(+), 105 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index 5baedd7f..0cc8c77b 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-18 10:11+0200\n" -"PO-Revision-Date: 2020-04-18 11:11+0200\n" +"POT-Creation-Date: 2020-04-18 11:47+0200\n" +"PO-Revision-Date: 2020-04-18 11:50+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -287,7 +287,7 @@ msgid "Temporary dictionary" msgstr "Dictionnaire temporaire" #: addon\globalPlugins\brailleExtender\__init__.py:441 -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 msgid "Character" msgstr "Caractère" @@ -814,52 +814,58 @@ msgstr "Ajouter une entrée au dictionnaire braille" msgid "Braille Extender" msgstr "Braille Extender" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 msgid "HUC8" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 #: addon\globalPlugins\brailleExtender\configBE.py:65 #: addon\globalPlugins\brailleExtender\undefinedChars.py:263 msgid "Hexadecimal" msgstr "Hexadécimale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 #: addon\globalPlugins\brailleExtender\configBE.py:66 #: addon\globalPlugins\brailleExtender\undefinedChars.py:264 msgid "Decimal" msgstr "Décimale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 #: addon\globalPlugins\brailleExtender\configBE.py:67 #: addon\globalPlugins\brailleExtender\undefinedChars.py:265 msgid "Octal" msgstr "Octale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon\globalPlugins\brailleExtender\addonDoc.py:36 #: addon\globalPlugins\brailleExtender\configBE.py:68 #: addon\globalPlugins\brailleExtender\undefinedChars.py:266 msgid "Binary" msgstr "Binaire" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\addonDoc.py:46 +#: addon\globalPlugins\brailleExtender\addonDoc.py:49 #: addon\globalPlugins\brailleExtender\undefinedChars.py:244 msgid "Representation of undefined characters" msgstr "Représentation des caractères indéfinis" -#: addon\globalPlugins\brailleExtender\addonDoc.py:48 +#: addon\globalPlugins\brailleExtender\addonDoc.py:51 +#, fuzzy +#| msgid "" +#| "The extension allows you to customize how an undefined character should " +#| "be represented within a braille table. To do so, go to the braille table " +#| "settings. You can choose between the following representations:" msgid "" "The extension allows you to customize how an undefined character should be " -"represented within a braille table. To do so, go to the braille table " -"settings. You can choose between the following representations:" +"represented within a braille table. To do so, go to the — Representation of " +"undefined characters — settings. You can choose between the following " +"representations:" msgstr "" "L'extension vous permet de personnaliser la façon dont un caractère non " "défini doit être représenté dans un tableau braille. Pour ce faire, accédez " "aux paramètres des tables braille. Vous pouvez choisir entre les " "représentations suivantes :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:52 +#: addon\globalPlugins\brailleExtender\addonDoc.py:55 msgid "" "You can also combine this option with the “describe the character if " "possible” setting." @@ -867,11 +873,11 @@ msgstr "" "Vous pouvez également combiner cette option avec le paramètre « décrire le " "caractère si possible »." -#: addon\globalPlugins\brailleExtender\addonDoc.py:54 +#: addon\globalPlugins\brailleExtender\addonDoc.py:57 msgid "Notes:" msgstr "Notes :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:56 +#: addon\globalPlugins\brailleExtender\addonDoc.py:59 msgid "" "To distinguish the undefined set of characters while maximizing space, the " "best combination is the usage of the HUC8 representation without checking " @@ -881,12 +887,12 @@ msgstr "" "meilleure combinaison est l'utilisation de la représentation HUC8 sans " "cocher l'option « décrire le caractère si possible »." -#: addon\globalPlugins\brailleExtender\addonDoc.py:57 +#: addon\globalPlugins\brailleExtender\addonDoc.py:60 #, python-brace-format msgid "To learn more about the HUC representation, see {url}" msgstr "Pour en savoir plus sur la représentation HUC, voir {url}" -#: addon\globalPlugins\brailleExtender\addonDoc.py:58 +#: addon\globalPlugins\brailleExtender\addonDoc.py:61 msgid "" "Keep in mind that definitions in tables and those in your table dictionaries " "take precedence over character descriptions, which also take precedence over " @@ -897,11 +903,11 @@ msgstr "" "ont également priorité sur la représentation choisie pour les caractères " "indéfinis." -#: addon\globalPlugins\brailleExtender\addonDoc.py:61 +#: addon\globalPlugins\brailleExtender\addonDoc.py:64 msgid "Getting Current Character Info" msgstr "Obtenir des informations sur le caractère actuel" -#: addon\globalPlugins\brailleExtender\addonDoc.py:63 +#: addon\globalPlugins\brailleExtender\addonDoc.py:66 msgid "" "This feature allows you to obtain various information regarding the " "character under the cursor using the current input braille table, such as:" @@ -910,17 +916,22 @@ msgstr "" "le caractère sous le curseur à l'aide de la table braille d'entrée actuelle, " "telles que:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:65 +#: addon\globalPlugins\brailleExtender\addonDoc.py:68 +#, fuzzy +#| msgid "" +#| "the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or " +#| "binary values; A description of the character if possible; - The Unicode " +#| "Braille representation and the Braille dot pattern." msgid "" "the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " -"values; A description of the character if possible; - The Unicode Braille " -"representation and the Braille dot pattern." +"values; A description of the character if possible; the Unicode braille " +"representation and the braille pattern dots." msgstr "" "les représentations HUC8 et HUC6 ; les valeurs hexadécimales, décimales, " "octales ou binaires ; Une description du caractère si possible ; la " "représentation braille Unicode et le motif de points braille." -#: addon\globalPlugins\brailleExtender\addonDoc.py:67 +#: addon\globalPlugins\brailleExtender\addonDoc.py:70 msgid "" "Pressing the defined gesture associated to this function once shows you the " "information in a flash message and a double-press displays the same " @@ -930,7 +941,7 @@ msgstr "" "les informations dans un message flash et une double pression affiche les " "mêmes informations dans un tampon NVDA virtuel." -#: addon\globalPlugins\brailleExtender\addonDoc.py:69 +#: addon\globalPlugins\brailleExtender\addonDoc.py:72 msgid "" "On supported displays the defined gesture is ⡉+space. No system gestures are " "defined by default." @@ -938,7 +949,7 @@ msgstr "" "Sur les afficheurs pris en charge, le geste défini est ⡉+espace. Aucun geste " "système n'est défini par défaut." -#: addon\globalPlugins\brailleExtender\addonDoc.py:71 +#: addon\globalPlugins\brailleExtender\addonDoc.py:74 #, python-brace-format msgid "" "For example, for the '{chosenChar}' character, we will get the following " @@ -947,11 +958,13 @@ msgstr "" "Par exemple, pour le caractère '{chosenChar}', nous obtiendrons les " "informations suivantes :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:74 -msgid "Advanced Braille Input" +#: addon\globalPlugins\brailleExtender\addonDoc.py:77 +#, fuzzy +#| msgid "Advanced Braille Input" +msgid "Advanced braille input" msgstr "Saisie braille avancée" -#: addon\globalPlugins\brailleExtender\addonDoc.py:76 +#: addon\globalPlugins\brailleExtender\addonDoc.py:79 msgid "" "This feature allows you to enter any character from its HUC8 representation " "or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " @@ -970,60 +983,86 @@ msgstr "" "Alternativement, une option vous permet de quitter automatiquement ce mode " "après avoir entré un seul motif." -#: addon\globalPlugins\brailleExtender\addonDoc.py:80 +#: addon\globalPlugins\brailleExtender\addonDoc.py:81 +msgid "" +"If you want to enter a character from its HUC8 representation, simply enter " +"the HUC8 pattern. Since a HUC8 sequence must fit on 3 cells, the " +"interpretation will be performed each time 3 dot combinations are entered. " +"If you wish to enter a character from its hexadecimal, decimal, octal or " +"binary value, do the following:" +msgstr "" +"Si vous souhaitez saisir un caractère à partir de sa représentation HUC8, " +"entrez simplement le motif HUC8. Puisqu'une séquence HUC8 doit tenir sur 3 " +"cellules, l'interprétation sera effectuée chaque fois que 3 combinaisons de " +"points sont entrées. Si vous souhaitez saisir un caractère à partir de sa " +"valeur hexadécimale, décimale, octale ou binaire, procédez comme suit :" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:83 +#, python-brace-format +msgid "Enter {braillePattern}" +msgstr "Saisissez {braillePattern}" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:84 msgid "Specify the basis as follows" msgstr "Spécifiez la base comme suit" -#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +#: addon\globalPlugins\brailleExtender\addonDoc.py:86 msgid "⠭ or ⠓" msgstr "⠭ ou ⠓" -#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +#: addon\globalPlugins\brailleExtender\addonDoc.py:86 msgid "for a hexadecimal value" msgstr "pour une valeur hexadécimale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:83 +#: addon\globalPlugins\brailleExtender\addonDoc.py:87 msgid "for a decimal value" msgstr "pour une valeur décimale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:84 +#: addon\globalPlugins\brailleExtender\addonDoc.py:88 msgid "for an octal value" msgstr "pour une valeur octale" -#: addon\globalPlugins\brailleExtender\addonDoc.py:87 +#: addon\globalPlugins\brailleExtender\addonDoc.py:91 msgid "" "Enter the value of the character according to the previously selected basis." msgstr "Entrez la valeur du caractère selon la base précédemment sélectionnée." -#: addon\globalPlugins\brailleExtender\addonDoc.py:88 +#: addon\globalPlugins\brailleExtender\addonDoc.py:92 msgid "Press Space to validate." msgstr "Appuyez sur Espace pour valider." -#: addon\globalPlugins\brailleExtender\addonDoc.py:91 +#: addon\globalPlugins\brailleExtender\addonDoc.py:95 +#, fuzzy +#| msgid "" +#| "For abbreviations, you must first add them in the dialog box - Advanced " +#| "mode dictionaries -. Then, you just have to enter your abbreviation and " +#| "press space to expand it. For example, you can associate — ⠎⠺ — with — " +#| "sandwich —." msgid "" -"For abbreviations, you must first add them in the dialog box - Advanced mode " -"dictionaries -. Then, you just have to enter your abbreviation and press " -"space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." +"For abbreviations, you must first add them in the dialog box — Advanced mode " +"dictionaries —. Then, you just have to enter your abbreviation and press " +"space to expand it. For example, you can define the following abbreviations: " +"\"⠎⠺\" with \"sandwich\", \"⠋⠛⠋⠗\" to \"🇫🇷\"." msgstr "" "Pour les abréviations, vous devez d'abord les ajouter dans la boîte de " "dialogue — Dictionnaires du mode avancé —. Ensuite, il vous suffit de saisir " "votre abréviation et d'appuyer sur l'espace pour la développer. Par exemple, " "vous pouvez associer - ⠎⠺ - à - sandwich -." -#: addon\globalPlugins\brailleExtender\addonDoc.py:93 +#: addon\globalPlugins\brailleExtender\addonDoc.py:97 msgid "Here are some examples of sequences to be entered for given characters:" msgstr "" "Voici quelques exemples de séquences à saisir pour des caractères donnés :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:97 +#: addon\globalPlugins\brailleExtender\addonDoc.py:101 msgid "Note: the HUC6 input is currently not supported." msgstr "Remarque : l'entrée HUC6 n'est actuellement pas prise en charge." -#: addon\globalPlugins\brailleExtender\addonDoc.py:100 +#: addon\globalPlugins\brailleExtender\addonDoc.py:104 msgid "One-hand mode" msgstr "Mode unimanuel" -#: addon\globalPlugins\brailleExtender\addonDoc.py:102 +#: addon\globalPlugins\brailleExtender\addonDoc.py:106 msgid "" "This feature allows you to compose a cell in several steps. This can be " "activated in the general settings of the extension's preferences or on the " @@ -1036,11 +1075,11 @@ msgstr "" "défaut (⡂ + espace sur les afficheurs pris en charge). Trois méthodes de " "saisie sont disponibles." -#: addon\globalPlugins\brailleExtender\addonDoc.py:103 +#: addon\globalPlugins\brailleExtender\addonDoc.py:107 msgid "Method #1: fill a cell in 2 stages on both sides" msgstr "Méthode n° 1 : remplir une cellule en 2 étapes des deux côtés" -#: addon\globalPlugins\brailleExtender\addonDoc.py:105 +#: addon\globalPlugins\brailleExtender\addonDoc.py:109 msgid "" "With this method, type the left side dots, then the right side dots. If one " "side is empty, type the dots correspondig to the opposite side twice, or " @@ -1050,32 +1089,32 @@ msgstr "" "droit. Si un côté est vide, tapez deux fois les points correspondant au côté " "opposé ou tapez les points correspondant au côté non vide en 2 étapes." -#: addon\globalPlugins\brailleExtender\addonDoc.py:106 -#: addon\globalPlugins\brailleExtender\addonDoc.py:115 +#: addon\globalPlugins\brailleExtender\addonDoc.py:110 +#: addon\globalPlugins\brailleExtender\addonDoc.py:119 msgid "For example:" msgstr "Par exemple :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:108 +#: addon\globalPlugins\brailleExtender\addonDoc.py:112 msgid "For ⠛: press dots 1-2 then dots 4-5." msgstr "Pour ⠛: appuyez sur les points 1-2 puis sur les points 4-5." -#: addon\globalPlugins\brailleExtender\addonDoc.py:109 +#: addon\globalPlugins\brailleExtender\addonDoc.py:113 msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." msgstr "" "Pour ⠃: appuyez sur les points 1-2 puis sur les points 1-2, ou sur le point " "1 puis le point 2." -#: addon\globalPlugins\brailleExtender\addonDoc.py:110 +#: addon\globalPlugins\brailleExtender\addonDoc.py:114 msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." msgstr "Pour ⠘: appuyez sur 4-5 puis 4-5, ou point 4 puis point 5." -#: addon\globalPlugins\brailleExtender\addonDoc.py:112 +#: addon\globalPlugins\brailleExtender\addonDoc.py:116 msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" msgstr "" "Méthode n° 2 : remplir une cellule en deux étapes sur un côté (espace = côté " "vide)" -#: addon\globalPlugins\brailleExtender\addonDoc.py:114 +#: addon\globalPlugins\brailleExtender\addonDoc.py:118 msgid "" "Using this method, you can compose a cell with one hand, regardless of which " "side of the Braille keyboard you choose. The first step allows you to enter " @@ -1088,25 +1127,25 @@ msgstr "" "4-5-6-8. Si un côté est vide, appuyez sur espace. Une cellule vide sera " "obtenue en appuyant deux fois sur la touche espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:117 +#: addon\globalPlugins\brailleExtender\addonDoc.py:121 msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." msgstr "" "Pour ⠛: appuyez sur les points 1-2 puis les points 1-2, ou les points 4-5 " "puis les points 4-5." -#: addon\globalPlugins\brailleExtender\addonDoc.py:118 +#: addon\globalPlugins\brailleExtender\addonDoc.py:122 msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." msgstr "" "Pour ⠃ : appuyez sur les points 1-2 puis sur espace ou sur 4-5 puis sur " "espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:119 +#: addon\globalPlugins\brailleExtender\addonDoc.py:123 msgid "For ⠘: press space then 1-2, or space then dots 4-5." msgstr "" "Pour ⠘ : pressez espace puis sur les points 1-2 ou sur espace puis sur les " "points 4-5." -#: addon\globalPlugins\brailleExtender\addonDoc.py:121 +#: addon\globalPlugins\brailleExtender\addonDoc.py:125 msgid "" "Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " "validate the character)" @@ -1114,95 +1153,95 @@ msgstr "" "Méthode n° 3 : remplir une cellule points par points (chaque point est une " "bascule, appuyez sur Espace pour valider le caractère)" -#: addon\globalPlugins\brailleExtender\addonDoc.py:126 +#: addon\globalPlugins\brailleExtender\addonDoc.py:130 msgid "Dots 1-2, then dots 4-5, then space." msgstr "Points 1-2, puis points 4-5, puis espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:127 +#: addon\globalPlugins\brailleExtender\addonDoc.py:131 msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." msgstr "" "Points 1-2-3, puis point 3 (pour corriger), puis points 4-5, puis espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:128 +#: addon\globalPlugins\brailleExtender\addonDoc.py:132 msgid "Dot 1, then dots 2-4-5, then space." msgstr "Point 1, puis points 2-4-5, puis espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:129 +#: addon\globalPlugins\brailleExtender\addonDoc.py:133 msgid "Dots 1-2-4, then dot 5, then space." msgstr "Points 1-2-4, puis point 5, puis espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:130 +#: addon\globalPlugins\brailleExtender\addonDoc.py:134 msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." msgstr "Point 2, puis point 1, puis point 5, puis point 4, puis espace." -#: addon\globalPlugins\brailleExtender\addonDoc.py:131 +#: addon\globalPlugins\brailleExtender\addonDoc.py:135 msgid "Etc." msgstr "Etc.." -#: addon\globalPlugins\brailleExtender\addonDoc.py:150 +#: addon\globalPlugins\brailleExtender\addonDoc.py:154 msgid "Documentation" msgstr "Documentation" -#: addon\globalPlugins\brailleExtender\addonDoc.py:160 +#: addon\globalPlugins\brailleExtender\addonDoc.py:164 msgid "Driver loaded" msgstr "Pilote chargé" -#: addon\globalPlugins\brailleExtender\addonDoc.py:161 +#: addon\globalPlugins\brailleExtender\addonDoc.py:165 msgid "Profile" msgstr "Profil" -#: addon\globalPlugins\brailleExtender\addonDoc.py:175 +#: addon\globalPlugins\brailleExtender\addonDoc.py:179 msgid "Simple keys" msgstr "Touches simples" -#: addon\globalPlugins\brailleExtender\addonDoc.py:177 +#: addon\globalPlugins\brailleExtender\addonDoc.py:181 msgid "Usual shortcuts" msgstr "Raccourcis usuels" -#: addon\globalPlugins\brailleExtender\addonDoc.py:179 +#: addon\globalPlugins\brailleExtender\addonDoc.py:183 msgid "Standard NVDA commands" msgstr "Commandes NVDA standards" -#: addon\globalPlugins\brailleExtender\addonDoc.py:182 +#: addon\globalPlugins\brailleExtender\addonDoc.py:186 #: addon\globalPlugins\brailleExtender\settings.py:511 msgid "Modifier keys" msgstr "Touches de modification" -#: addon\globalPlugins\brailleExtender\addonDoc.py:185 +#: addon\globalPlugins\brailleExtender\addonDoc.py:189 msgid "Quick navigation keys" msgstr "Touches de navigation rapide" -#: addon\globalPlugins\brailleExtender\addonDoc.py:189 +#: addon\globalPlugins\brailleExtender\addonDoc.py:193 msgid "Rotor feature" msgstr "Fonction Rotor" -#: addon\globalPlugins\brailleExtender\addonDoc.py:197 +#: addon\globalPlugins\brailleExtender\addonDoc.py:201 msgid "Gadget commands" msgstr "Commandes gadgettes" -#: addon\globalPlugins\brailleExtender\addonDoc.py:210 +#: addon\globalPlugins\brailleExtender\addonDoc.py:214 msgid "Shortcuts defined outside add-on" msgstr "Raccourcis définis en dehors du module" -#: addon\globalPlugins\brailleExtender\addonDoc.py:238 +#: addon\globalPlugins\brailleExtender\addonDoc.py:242 msgid "Keyboard configurations provided" msgstr "Configurations de clavier fournies" -#: addon\globalPlugins\brailleExtender\addonDoc.py:241 +#: addon\globalPlugins\brailleExtender\addonDoc.py:245 msgid "Keyboard configurations are" msgstr "Les configurations de clavier sont les suivantes" -#: addon\globalPlugins\brailleExtender\addonDoc.py:250 +#: addon\globalPlugins\brailleExtender\addonDoc.py:254 msgid "Warning:" msgstr "Attention :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:252 +#: addon\globalPlugins\brailleExtender\addonDoc.py:256 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "BrailleExtender n'a pas encore de profil de gestes pour votre afficheur " "braille." -#: addon\globalPlugins\brailleExtender\addonDoc.py:255 +#: addon\globalPlugins\brailleExtender\addonDoc.py:259 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -1211,89 +1250,89 @@ msgstr "" "fonctions dans le dialogue « Gestes de commandes » des « Préférences » de " "NVDA." -#: addon\globalPlugins\brailleExtender\addonDoc.py:259 +#: addon\globalPlugins\brailleExtender\addonDoc.py:263 msgid "Add-on gestures on the system keyboard" msgstr "Gestes du module sur le clavier système" -#: addon\globalPlugins\brailleExtender\addonDoc.py:282 +#: addon\globalPlugins\brailleExtender\addonDoc.py:286 msgid "Arabic" msgstr "Arabe" -#: addon\globalPlugins\brailleExtender\addonDoc.py:283 +#: addon\globalPlugins\brailleExtender\addonDoc.py:287 msgid "Croatian" msgstr "Croate" -#: addon\globalPlugins\brailleExtender\addonDoc.py:284 +#: addon\globalPlugins\brailleExtender\addonDoc.py:288 msgid "Danish" msgstr "Danois" -#: addon\globalPlugins\brailleExtender\addonDoc.py:285 +#: addon\globalPlugins\brailleExtender\addonDoc.py:289 msgid "English and French" msgstr "Anglais et français" -#: addon\globalPlugins\brailleExtender\addonDoc.py:286 +#: addon\globalPlugins\brailleExtender\addonDoc.py:290 msgid "German" msgstr "Allemand" -#: addon\globalPlugins\brailleExtender\addonDoc.py:287 +#: addon\globalPlugins\brailleExtender\addonDoc.py:291 msgid "Hebrew" msgstr "Hébreu" -#: addon\globalPlugins\brailleExtender\addonDoc.py:288 +#: addon\globalPlugins\brailleExtender\addonDoc.py:292 msgid "Persian" msgstr "Persan" -#: addon\globalPlugins\brailleExtender\addonDoc.py:289 +#: addon\globalPlugins\brailleExtender\addonDoc.py:293 msgid "Polish" msgstr "Polonais" -#: addon\globalPlugins\brailleExtender\addonDoc.py:290 +#: addon\globalPlugins\brailleExtender\addonDoc.py:294 msgid "Russian" msgstr "Russe" -#: addon\globalPlugins\brailleExtender\addonDoc.py:293 +#: addon\globalPlugins\brailleExtender\addonDoc.py:297 msgid "Copyrights and acknowledgements" msgstr "Droits d’auteur et remerciements" -#: addon\globalPlugins\brailleExtender\addonDoc.py:299 +#: addon\globalPlugins\brailleExtender\addonDoc.py:303 msgid "and other contributors" msgstr "et d'autres contributeurs" -#: addon\globalPlugins\brailleExtender\addonDoc.py:303 +#: addon\globalPlugins\brailleExtender\addonDoc.py:307 msgid "Translators" msgstr "Traducteurs" -#: addon\globalPlugins\brailleExtender\addonDoc.py:313 +#: addon\globalPlugins\brailleExtender\addonDoc.py:317 msgid "Code contributions and other" msgstr "Contributions de code et autres" -#: addon\globalPlugins\brailleExtender\addonDoc.py:315 +#: addon\globalPlugins\brailleExtender\addonDoc.py:319 msgid "Additional third party copyrighted code is included:" msgstr "Du code sous copyright de tiers est inclus :" -#: addon\globalPlugins\brailleExtender\addonDoc.py:321 +#: addon\globalPlugins\brailleExtender\addonDoc.py:325 msgid "Thanks also to" msgstr "Merci également à" -#: addon\globalPlugins\brailleExtender\addonDoc.py:323 +#: addon\globalPlugins\brailleExtender\addonDoc.py:327 msgid "And thank you very much for all your feedback and comments." msgstr "Et merci beaucoup pour tous vos retours et commentaires." -#: addon\globalPlugins\brailleExtender\addonDoc.py:327 +#: addon\globalPlugins\brailleExtender\addonDoc.py:331 #, python-format msgid "%s's documentation" msgstr "Documentation de %s" -#: addon\globalPlugins\brailleExtender\addonDoc.py:346 +#: addon\globalPlugins\brailleExtender\addonDoc.py:350 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "Émuler l’appui de %s sur le clavier du système" -#: addon\globalPlugins\brailleExtender\addonDoc.py:357 +#: addon\globalPlugins\brailleExtender\addonDoc.py:361 msgid "description currently unavailable for this shortcut" msgstr "description actuellement indisponible pour ce raccourci" -#: addon\globalPlugins\brailleExtender\addonDoc.py:377 +#: addon\globalPlugins\brailleExtender\addonDoc.py:381 msgid "caps lock" msgstr "verrouillage majuscules" @@ -1406,17 +1445,13 @@ msgstr "Signe d'échappement pour les valeurs Unicode" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:82 #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:367 -#, fuzzy -#| msgid "input only" msgid "input" -msgstr "saisie seulement" +msgstr "saisie" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:83 #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:367 -#, fuzzy -#| msgid "output only" msgid "output" -msgstr "affichage seulement" +msgstr "affichage" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:84 msgid "input and output" From f05f414f361e024a6e2a8743c61f18ffc2c32f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:59:46 +0200 Subject: [PATCH 70/87] fix typo: prefered -> preferred --- .../brailleExtender/brailleTablesExt.py | 32 +++++++++---------- .../globalPlugins/brailleExtender/configBE.py | 12 +++---- .../globalPlugins/brailleExtender/settings.py | 4 +-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 025775fe..d1bdd44a 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -42,21 +42,21 @@ def listTablesIndexes(l, tables): tables = listTablesFileName(tables) return [tables.index(e) for e in l if e in tables] -def getPreferedTables() -> Tuple[List[str]]: +def getPreferredTables() -> Tuple[List[str]]: allInputTablesFileName = listTablesFileName(listInputTables()) allOutputTablesFileName = listTablesFileName(listOutputTables()) - preferedInputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedInput"].split('|') - preferedOutputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedOutput"].split('|') - inputTables = [fn for fn in preferedInputTablesFileName if fn in allInputTablesFileName] - outputTables = [fn for fn in preferedOutputTablesFileName if fn in allOutputTablesFileName] + preferredInputTablesFileName = config.conf["brailleExtender"]["tables"]["preferredInput"].split('|') + preferredOutputTablesFileName = config.conf["brailleExtender"]["tables"]["preferredOutput"].split('|') + inputTables = [fn for fn in preferredInputTablesFileName if fn in allInputTablesFileName] + outputTables = [fn for fn in preferredOutputTablesFileName if fn in allOutputTablesFileName] return inputTables, outputTables -def getPreferedTablesIndexes() -> List[int]: - preferedInputTables, preferedOutputTables = getPreferedTables() +def getPreferredTablesIndexes() -> List[int]: + preferredInputTables, preferredOutputTables = getPreferredTables() inputTables = listTablesFileName(listInputTables()) outputTables = listTablesFileName(listOutputTables()) o = [] - for a, b in [(preferedInputTables, inputTables), (preferedOutputTables, outputTables)]: + for a, b in [(preferredInputTables, inputTables), (preferredOutputTables, outputTables)]: o_ = [] for e in a: if e in b: o_.append(b.index(e)) @@ -140,21 +140,21 @@ class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): title = _("Braille tables") def makeSettings(self, settingsSizer): - listPreferedTablesIndexes = getPreferedTablesIndexes() + listPreferredTablesIndexes = getPreferredTablesIndexes() currentTableLabel = _("Use the current input table") sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.input] - label = _("Prefered input tables") + label = _("Preferred &input tables") self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) - self.inputTables.CheckedItems = listPreferedTablesIndexes[0] + self.inputTables.CheckedItems = listPreferredTablesIndexes[0] self.inputTables.Select(0) tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.output] - label = _("Prefered output tables") + label = _("Preferred &output tables") self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) - self.outputTables.CheckedItems = listPreferedTablesIndexes[1] + self.outputTables.CheckedItems = listPreferredTablesIndexes[1] self.outputTables.Select(0) label = _("Input braille table to use for keyboard shortcuts") @@ -224,14 +224,14 @@ def onSave(self): [self.inputTableShortcuts.GetSelection()-1], listUncontractedInputTables )[0] if self.inputTableShortcuts.GetSelection() > 0 else '?' - config.conf["brailleExtender"]["tables"]["preferedInput"] = inputTables - config.conf["brailleExtender"]["tables"]["preferedOutput"] = outputTables + config.conf["brailleExtender"]["tables"]["preferredInput"] = inputTables + config.conf["brailleExtender"]["tables"]["preferredOutput"] = outputTables config.conf["brailleExtender"]["tables"]["shortcuts"] = tablesShortcuts config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value def postSave(self): - configBE.initializePreferedTables() + configBE.initializePreferredTables() class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 07d7899b..eab8c8fa 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -118,7 +118,7 @@ if not os.path.exists(profilesDir): log.error('Profiles\' path not found') else: log.debug('Profiles\' path (%s) found' % profilesDir) -def getValidBrailleDisplayPrefered(): +def getValidBrailleDisplayPreferred(): l = braille.getDisplayList() l.append(("last", _("last known"))) return l @@ -240,8 +240,8 @@ def getConfspec(): "tables": { "groups": {}, "shortcuts": 'string(default="?")', - "preferedInput": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', - "preferedOutput": f'string(default="{config.conf["braille"]["translationTable"]}")', + "preferredInput": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', + "preferredOutput": f'string(default="{config.conf["braille"]["translationTable"]}")', }, "advancedInputMode": { "stopAfterOneChar": "boolean(default=True)", @@ -320,12 +320,12 @@ def loadConf(): if config.conf["brailleExtender"]["tables"]["shortcuts"] not in brailleTablesExt.listTablesFileName(brailleTablesExt.listUncontractedTables()): config.conf["brailleExtender"]["tables"]["shortcuts"] = '?' if config.conf["brailleExtender"]["features"]["roleLabels"]: loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) - initializePreferedTables() + initializePreferredTables() return True -def initializePreferedTables(): +def initializePreferredTables(): global inputTables, outputTables - inputTables, outputTables = brailleTablesExt.getPreferedTables() + inputTables, outputTables = brailleTablesExt.getPreferredTables() def loadGestures(): if gesturesFileExists: diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 15771529..f3946c82 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -40,8 +40,8 @@ class GeneralDlg(gui.settingsDialogs.SettingsPanel): # Translators: title of a dialog. title = _("General") - bds_k = [k for k, v in configBE.getValidBrailleDisplayPrefered()] - bds_v = [v for k, v in configBE.getValidBrailleDisplayPrefered()] + bds_k = [k for k, v in configBE.getValidBrailleDisplayPreferred()] + bds_v = [v for k, v in configBE.getValidBrailleDisplayPreferred()] def makeSettings(self, settingsSizer): sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) From ca88b5557cbe7d6c9d5197874483b9ceec918095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 11:59:46 +0200 Subject: [PATCH 71/87] fix typo: prefered -> preferred --- .../brailleExtender/brailleTablesExt.py | 32 +++++++++---------- .../globalPlugins/brailleExtender/configBE.py | 12 +++---- .../globalPlugins/brailleExtender/settings.py | 4 +-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 025775fe..d1bdd44a 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -42,21 +42,21 @@ def listTablesIndexes(l, tables): tables = listTablesFileName(tables) return [tables.index(e) for e in l if e in tables] -def getPreferedTables() -> Tuple[List[str]]: +def getPreferredTables() -> Tuple[List[str]]: allInputTablesFileName = listTablesFileName(listInputTables()) allOutputTablesFileName = listTablesFileName(listOutputTables()) - preferedInputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedInput"].split('|') - preferedOutputTablesFileName = config.conf["brailleExtender"]["tables"]["preferedOutput"].split('|') - inputTables = [fn for fn in preferedInputTablesFileName if fn in allInputTablesFileName] - outputTables = [fn for fn in preferedOutputTablesFileName if fn in allOutputTablesFileName] + preferredInputTablesFileName = config.conf["brailleExtender"]["tables"]["preferredInput"].split('|') + preferredOutputTablesFileName = config.conf["brailleExtender"]["tables"]["preferredOutput"].split('|') + inputTables = [fn for fn in preferredInputTablesFileName if fn in allInputTablesFileName] + outputTables = [fn for fn in preferredOutputTablesFileName if fn in allOutputTablesFileName] return inputTables, outputTables -def getPreferedTablesIndexes() -> List[int]: - preferedInputTables, preferedOutputTables = getPreferedTables() +def getPreferredTablesIndexes() -> List[int]: + preferredInputTables, preferredOutputTables = getPreferredTables() inputTables = listTablesFileName(listInputTables()) outputTables = listTablesFileName(listOutputTables()) o = [] - for a, b in [(preferedInputTables, inputTables), (preferedOutputTables, outputTables)]: + for a, b in [(preferredInputTables, inputTables), (preferredOutputTables, outputTables)]: o_ = [] for e in a: if e in b: o_.append(b.index(e)) @@ -140,21 +140,21 @@ class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): title = _("Braille tables") def makeSettings(self, settingsSizer): - listPreferedTablesIndexes = getPreferedTablesIndexes() + listPreferredTablesIndexes = getPreferredTablesIndexes() currentTableLabel = _("Use the current input table") sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) bHelper1 = gui.guiHelper.ButtonHelper(orientation=wx.HORIZONTAL) tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.input] - label = _("Prefered input tables") + label = _("Preferred &input tables") self.inputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) - self.inputTables.CheckedItems = listPreferedTablesIndexes[0] + self.inputTables.CheckedItems = listPreferredTablesIndexes[0] self.inputTables.Select(0) tables = [f"{table.displayName}, {table.fileName}" for table in listTables() if table.output] - label = _("Prefered output tables") + label = _("Preferred &output tables") self.outputTables = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=tables) - self.outputTables.CheckedItems = listPreferedTablesIndexes[1] + self.outputTables.CheckedItems = listPreferredTablesIndexes[1] self.outputTables.Select(0) label = _("Input braille table to use for keyboard shortcuts") @@ -224,14 +224,14 @@ def onSave(self): [self.inputTableShortcuts.GetSelection()-1], listUncontractedInputTables )[0] if self.inputTableShortcuts.GetSelection() > 0 else '?' - config.conf["brailleExtender"]["tables"]["preferedInput"] = inputTables - config.conf["brailleExtender"]["tables"]["preferedOutput"] = outputTables + config.conf["brailleExtender"]["tables"]["preferredInput"] = inputTables + config.conf["brailleExtender"]["tables"]["preferredOutput"] = outputTables config.conf["brailleExtender"]["tables"]["shortcuts"] = tablesShortcuts config.conf["brailleExtender"]["tabSpace"] = self.tabSpace.IsChecked() config.conf["brailleExtender"][f"tabSize_{configBE.curBD}"] = self.tabSize.Value def postSave(self): - configBE.initializePreferedTables() + configBE.initializePreferredTables() class TablesGroupsDlg(gui.settingsDialogs.SettingsDialog): diff --git a/addon/globalPlugins/brailleExtender/configBE.py b/addon/globalPlugins/brailleExtender/configBE.py index 07d7899b..eab8c8fa 100644 --- a/addon/globalPlugins/brailleExtender/configBE.py +++ b/addon/globalPlugins/brailleExtender/configBE.py @@ -118,7 +118,7 @@ if not os.path.exists(profilesDir): log.error('Profiles\' path not found') else: log.debug('Profiles\' path (%s) found' % profilesDir) -def getValidBrailleDisplayPrefered(): +def getValidBrailleDisplayPreferred(): l = braille.getDisplayList() l.append(("last", _("last known"))) return l @@ -240,8 +240,8 @@ def getConfspec(): "tables": { "groups": {}, "shortcuts": 'string(default="?")', - "preferedInput": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', - "preferedOutput": f'string(default="{config.conf["braille"]["translationTable"]}")', + "preferredInput": f'string(default="{config.conf["braille"]["inputTable"]}|unicode-braille.utb")', + "preferredOutput": f'string(default="{config.conf["braille"]["translationTable"]}")', }, "advancedInputMode": { "stopAfterOneChar": "boolean(default=True)", @@ -320,12 +320,12 @@ def loadConf(): if config.conf["brailleExtender"]["tables"]["shortcuts"] not in brailleTablesExt.listTablesFileName(brailleTablesExt.listUncontractedTables()): config.conf["brailleExtender"]["tables"]["shortcuts"] = '?' if config.conf["brailleExtender"]["features"]["roleLabels"]: loadRoleLabels(config.conf["brailleExtender"]["roleLabels"].copy()) - initializePreferedTables() + initializePreferredTables() return True -def initializePreferedTables(): +def initializePreferredTables(): global inputTables, outputTables - inputTables, outputTables = brailleTablesExt.getPreferedTables() + inputTables, outputTables = brailleTablesExt.getPreferredTables() def loadGestures(): if gesturesFileExists: diff --git a/addon/globalPlugins/brailleExtender/settings.py b/addon/globalPlugins/brailleExtender/settings.py index 15771529..f3946c82 100644 --- a/addon/globalPlugins/brailleExtender/settings.py +++ b/addon/globalPlugins/brailleExtender/settings.py @@ -40,8 +40,8 @@ class GeneralDlg(gui.settingsDialogs.SettingsPanel): # Translators: title of a dialog. title = _("General") - bds_k = [k for k, v in configBE.getValidBrailleDisplayPrefered()] - bds_v = [v for k, v in configBE.getValidBrailleDisplayPrefered()] + bds_k = [k for k, v in configBE.getValidBrailleDisplayPreferred()] + bds_v = [v for k, v in configBE.getValidBrailleDisplayPreferred()] def makeSettings(self, settingsSizer): sHelper = gui.guiHelper.BoxSizerHelper(self, sizer=settingsSizer) From 67a8b501a2aa70517c00943171af7a41113c1677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:20:42 +0200 Subject: [PATCH 72/87] l10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 71 ++++++++--------------------- 1 file changed, 19 insertions(+), 52 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index 0cc8c77b..6d2a2d18 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-18 11:47+0200\n" -"PO-Revision-Date: 2020-04-18 11:50+0200\n" +"POT-Creation-Date: 2020-04-18 12:05+0200\n" +"PO-Revision-Date: 2020-04-18 12:18+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -849,21 +849,16 @@ msgid "Representation of undefined characters" msgstr "Représentation des caractères indéfinis" #: addon\globalPlugins\brailleExtender\addonDoc.py:51 -#, fuzzy -#| msgid "" -#| "The extension allows you to customize how an undefined character should " -#| "be represented within a braille table. To do so, go to the braille table " -#| "settings. You can choose between the following representations:" msgid "" "The extension allows you to customize how an undefined character should be " "represented within a braille table. To do so, go to the — Representation of " "undefined characters — settings. You can choose between the following " "representations:" msgstr "" -"L'extension vous permet de personnaliser la façon dont un caractère non " -"défini doit être représenté dans un tableau braille. Pour ce faire, accédez " -"aux paramètres des tables braille. Vous pouvez choisir entre les " -"représentations suivantes :" +"L'extension vous permet de personnaliser la façon dont un caractère indéfini " +"dans une table braille doit être représenté. Pour ce faire, accédez aux " +"paramètres — Représentation des caractères indéfinis —. Vous pouvez choisir " +"entre les représentations suivantes :" #: addon\globalPlugins\brailleExtender\addonDoc.py:55 msgid "" @@ -917,11 +912,6 @@ msgstr "" "telles que:" #: addon\globalPlugins\brailleExtender\addonDoc.py:68 -#, fuzzy -#| msgid "" -#| "the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or " -#| "binary values; A description of the character if possible; - The Unicode " -#| "Braille representation and the Braille dot pattern." msgid "" "the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " "values; A description of the character if possible; the Unicode braille " @@ -929,7 +919,7 @@ msgid "" msgstr "" "les représentations HUC8 et HUC6 ; les valeurs hexadécimales, décimales, " "octales ou binaires ; Une description du caractère si possible ; la " -"représentation braille Unicode et le motif de points braille." +"représentation braille Unicode et les points du motif braille." #: addon\globalPlugins\brailleExtender\addonDoc.py:70 msgid "" @@ -959,8 +949,6 @@ msgstr "" "informations suivantes :" #: addon\globalPlugins\brailleExtender\addonDoc.py:77 -#, fuzzy -#| msgid "Advanced Braille Input" msgid "Advanced braille input" msgstr "Saisie braille avancée" @@ -1032,12 +1020,6 @@ msgid "Press Space to validate." msgstr "Appuyez sur Espace pour valider." #: addon\globalPlugins\brailleExtender\addonDoc.py:95 -#, fuzzy -#| msgid "" -#| "For abbreviations, you must first add them in the dialog box - Advanced " -#| "mode dictionaries -. Then, you just have to enter your abbreviation and " -#| "press space to expand it. For example, you can associate — ⠎⠺ — with — " -#| "sandwich —." msgid "" "For abbreviations, you must first add them in the dialog box — Advanced mode " "dictionaries —. Then, you just have to enter your abbreviation and press " @@ -1047,7 +1029,8 @@ msgstr "" "Pour les abréviations, vous devez d'abord les ajouter dans la boîte de " "dialogue — Dictionnaires du mode avancé —. Ensuite, il vous suffit de saisir " "votre abréviation et d'appuyer sur l'espace pour la développer. Par exemple, " -"vous pouvez associer - ⠎⠺ - à - sandwich -." +"vous pouvez définir les abréviations suivantes: \"⠎⠺\" pour \"sandwich\", " +"\"⠋⠛⠋⠗\" pour \"🇫🇷\"." #: addon\globalPlugins\brailleExtender\addonDoc.py:97 msgid "Here are some examples of sequences to be entered for given characters:" @@ -1471,22 +1454,16 @@ msgid "Use the current input table" msgstr "Utiliser la table braille d’entrée actuelle" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:149 -#, fuzzy -#| msgid "Prefered braille tables" -msgid "Prefered input tables" -msgstr "Tables braille préférées" +msgid "Preferred &input tables" +msgstr "Tables de &saisie braille préférées" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:155 -#, fuzzy -#| msgid "Prefered braille tables" -msgid "Prefered output tables" -msgstr "Tables braille préférées" +msgid "Preferred &output tables" +msgstr "Tables braille d’a&ffichage préférées" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:160 -#, fuzzy -#| msgid "Input braille table for keyboard shortcut keys" msgid "Input braille table to use for keyboard shortcuts" -msgstr "Table braille d’entrée pour les raccourcis clavier" +msgstr "Table braille d’entrée à utiliser pour les raccourcis clavier" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:170 msgid "&Groups of tables" @@ -1498,17 +1475,13 @@ msgstr "Tables braille &alternatives et personnalisées" #. Translators: label of a dialog. #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:177 -#, fuzzy -#| msgid "Display tab signs as spaces" msgid "Display &tab signs as spaces" -msgstr "Afficher les signes de tabulation en tant qu’espaces" +msgstr "Afficher les signes de &tabulation comme des espaces" #. Translators: label of a dialog. #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:182 -#, fuzzy -#| msgid "Number of space for a tab sign" msgid "Number of &space for a tab sign" -msgstr "Nombre d’espaces pour un signe de tabulation" +msgstr "Nombre d’e&spaces pour un signe de tabulation" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:182 #: addon\globalPlugins\brailleExtender\settings.py:105 @@ -1551,10 +1524,8 @@ msgstr "Utilisable en" #. Translators: The label for a button in groups of tables dialog to open groups of tables file in an editor. #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:277 -#, fuzzy -#| msgid "&Open the current dictionary file in an editor" msgid "&Open the groups of tables file in an editor" -msgstr "&Ouvrir le fichier de dictionnaire actuel dans un éditeur" +msgstr "&Ouvrir le fichier de groupes de tables dans un éditeur" #. Translators: The label for a button in groups of tables dialog to reload groups of tables. #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:282 @@ -1562,10 +1533,8 @@ msgid "&Reload the groups of tables" msgstr "&Recharger les groupes de tables" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:296 -#, fuzzy -#| msgid "Add gesture" msgid "Add group entry" -msgstr "Ajouter un geste" +msgstr "Ajouter une entrée de groupe" #: addon\globalPlugins\brailleExtender\brailleTablesExt.py:362 msgid "Group name" @@ -2295,10 +2264,8 @@ msgstr "Paramètres" #. Translators: label of a dialog. #: addon\globalPlugins\brailleExtender\undefinedChars.py:249 -#, fuzzy -#| msgid "Representation" msgid "Representation &method" -msgstr "Représentation" +msgstr "&Méthode de représentation" #: addon\globalPlugins\brailleExtender\undefinedChars.py:257 #, python-brace-format From 917f6139ffb2328d8a1515aa99d8ead2224d32d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:22:44 +0200 Subject: [PATCH 73/87] Fix a label --- addon/globalPlugins/brailleExtender/addonDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index c54af593..5fa8c591 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -92,7 +92,7 @@ def getFeaturesDoc(): "
      • " + _("Press Space to validate.") + "
      • ", "", "

        ", - _('For abbreviations, you must first add them in the dialog box — Advanced mode dictionaries —. Then, you just have to enter your abbreviation and press space to expand it. For example, you can define the following abbreviations: "⠎⠺" with "sandwich", "⠋⠛⠋⠗" to "🇫🇷".'), + _('For abbreviations, you must first add them in the dialog box — Advanced input mode dictionary —. Then, you just have to enter your abbreviation and press space to expand it. For example, you can define the following abbreviations: "⠎⠺" with "sandwich", "⠋⠛⠋⠗" to "🇫🇷".'), "

        ", _("Here are some examples of sequences to be entered for given characters:"), "

        ", From 043f1779eb3cc674f3673a0739d831c6de3553c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:26:09 +0200 Subject: [PATCH 74/87] l10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index 6d2a2d18..d4db2bb5 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-18 12:05+0200\n" -"PO-Revision-Date: 2020-04-18 12:18+0200\n" +"POT-Creation-Date: 2020-04-18 12:23+0200\n" +"PO-Revision-Date: 2020-04-18 12:25+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -1021,16 +1021,16 @@ msgstr "Appuyez sur Espace pour valider." #: addon\globalPlugins\brailleExtender\addonDoc.py:95 msgid "" -"For abbreviations, you must first add them in the dialog box — Advanced mode " -"dictionaries —. Then, you just have to enter your abbreviation and press " -"space to expand it. For example, you can define the following abbreviations: " -"\"⠎⠺\" with \"sandwich\", \"⠋⠛⠋⠗\" to \"🇫🇷\"." +"For abbreviations, you must first add them in the dialog box — Advanced " +"input mode dictionary —. Then, you just have to enter your abbreviation and " +"press space to expand it. For example, you can define the following " +"abbreviations: \"⠎⠺\" with \"sandwich\", \"⠋⠛⠋⠗\" to \"🇫🇷\"." msgstr "" "Pour les abréviations, vous devez d'abord les ajouter dans la boîte de " -"dialogue — Dictionnaires du mode avancé —. Ensuite, il vous suffit de saisir " -"votre abréviation et d'appuyer sur l'espace pour la développer. Par exemple, " -"vous pouvez définir les abréviations suivantes: \"⠎⠺\" pour \"sandwich\", " -"\"⠋⠛⠋⠗\" pour \"🇫🇷\"." +"dialogue — Dictionnaire du mode de saisie avancée —. Ensuite, il vous suffit " +"de saisir votre abréviation et d'appuyer sur l'espace pour la développer. " +"Par exemple, vous pouvez définir les abréviations suivantes: \"⠎⠺\" avec " +"\"sandwich\", \"⠋⠛⠋⠗\" à \"🇫🇷\"." #: addon\globalPlugins\brailleExtender\addonDoc.py:97 msgid "Here are some examples of sequences to be entered for given characters:" From 36812ccb1c7a8646e691d08cf433700eaded2840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:32:04 +0200 Subject: [PATCH 75/87] More translatable strings --- addon/globalPlugins/brailleExtender/addonDoc.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/addonDoc.py b/addon/globalPlugins/brailleExtender/addonDoc.py index 5fa8c591..28f390f4 100644 --- a/addon/globalPlugins/brailleExtender/addonDoc.py +++ b/addon/globalPlugins/brailleExtender/addonDoc.py @@ -124,7 +124,7 @@ def getFeaturesDoc(): "", "

        " + _("Method #3: fill a cell dots by dots (each dot is a toggle, press Space to validate the character)") + "

        ", "

        ", - "In this mode, each dot is a toggle. You must press the space key as soon as the cell you have entered is the desired one to input the character. Thus, the more dots are contained in the cell, the more ways you have to enter the character.", + _("In this mode, each dot is a toggle. You must press the space key as soon as the cell you have entered is the desired one to input the character. Thus, the more dots are contained in the cell, the more ways you have to enter the character."), "
        " + "For example, for ⠛, you can compose the cell in the following ways:", "

          ", "
        • " + _("Dots 1-2, then dots 4-5, then space.") + "
        • ", @@ -153,9 +153,9 @@ def __init__(self, instanceGP): manifestDescription = self.getDescFormated(addonDesc) doc = f"

          {addonSummary} {addonVersion} — " + _("Documentation") + "

          " doc += f"

          {manifestDescription}

          " - doc += "

          Let's explore some features

          " + doc += "

          " + _("Let's explore some features") + "

          " doc += getFeaturesDoc() - doc += "

          Profile gestures

          " + doc += "

          " + _("Profile gestures") + "

          " if configBE.gesturesFileExists: brailleDisplayDriverName = configBE.curBD.capitalize() profileName = "default" From 03fabcce30b0d17c6615efb9c97a1df244a6a0c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:35:23 +0200 Subject: [PATCH 76/87] l10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index d4db2bb5..7362abb1 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-18 12:23+0200\n" -"PO-Revision-Date: 2020-04-18 12:25+0200\n" +"POT-Creation-Date: 2020-04-18 12:33+0200\n" +"PO-Revision-Date: 2020-04-18 12:35+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -1136,6 +1136,18 @@ msgstr "" "Méthode n° 3 : remplir une cellule points par points (chaque point est une " "bascule, appuyez sur Espace pour valider le caractère)" +#: addon\globalPlugins\brailleExtender\addonDoc.py:127 +msgid "" +"In this mode, each dot is a toggle. You must press the space key as soon as " +"the cell you have entered is the desired one to input the character. Thus, " +"the more dots are contained in the cell, the more ways you have to enter the " +"character." +msgstr "" +"Dans ce mode, chaque point est une bascule. Vous devez appuyer sur la touche " +"espace dès que la cellule que vous avez entrée est celle souhaitée pour " +"saisir le caractère. Ainsi, plus il y a de points dans la cellule, plus vous " +"devez saisir de caractères." + #: addon\globalPlugins\brailleExtender\addonDoc.py:130 msgid "Dots 1-2, then dots 4-5, then space." msgstr "Points 1-2, puis points 4-5, puis espace." @@ -1165,6 +1177,14 @@ msgstr "Etc.." msgid "Documentation" msgstr "Documentation" +#: addon\globalPlugins\brailleExtender\addonDoc.py:156 +msgid "Let's explore some features" +msgstr "Explorons quelques fonctionnalités" + +#: addon\globalPlugins\brailleExtender\addonDoc.py:158 +msgid "Profile gestures" +msgstr "Gestes du profil" + #: addon\globalPlugins\brailleExtender\addonDoc.py:164 msgid "Driver loaded" msgstr "Pilote chargé" From 90fb6f05b94c3b0ba16aa67d617b698cd81d41b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Sat, 18 Apr 2020 12:52:07 +0200 Subject: [PATCH 77/87] l10n updates for: fr --- addon/locale/fr/LC_MESSAGES/nvda.po | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po b/addon/locale/fr/LC_MESSAGES/nvda.po index 7362abb1..4b10b725 100644 --- a/addon/locale/fr/LC_MESSAGES/nvda.po +++ b/addon/locale/fr/LC_MESSAGES/nvda.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-18 12:33+0200\n" -"PO-Revision-Date: 2020-04-18 12:35+0200\n" +"POT-Creation-Date: 2020-04-18 12:48+0200\n" +"PO-Revision-Date: 2020-04-18 12:51+0200\n" "Last-Translator: André-Abush CLAUSE \n" "Language-Team: \n" "Language: fr\n" @@ -964,10 +964,10 @@ msgid "" msgstr "" "Cette fonction vous permet de saisir n'importe quel caractère depuis sa " "représentation HUC8 ou sa valeur hexadécimale / décimale / octale / binaire. " -"De plus, il vous permet de développer des abréviations. Pour utiliser cette " -"fonction, entrez dans le mode de saisie avancé, puis entrez le motif " -"souhaité. Gestes par défaut: NVDA+Windows+i ou ⡊+espace (sur les afficheurs " -"pris en charge). Appuyez sur le même geste pour quitter ce mode. " +"De plus, elle vous permet de développer des abréviations. Pour utiliser " +"cette fonctionnalité, entrez dans le mode de saisie avancé, puis entrez le " +"motif souhaité. Gestes par défaut: NVDA+Windows+i ou ⡊+espace (sur les " +"afficheurs pris en charge). Appuyez sur le même geste pour quitter ce mode. " "Alternativement, une option vous permet de quitter automatiquement ce mode " "après avoir entré un seul motif." @@ -2323,14 +2323,10 @@ msgid "Language" msgstr "Langue" #: addon\globalPlugins\brailleExtender\undefinedChars.py:318 -#, fuzzy -#| msgid "Use the current input table" msgid "Use the current output table" -msgstr "Utiliser la table braille d’entrée actuelle" +msgstr "Utiliser la table d'affichage actuelle" #: addon\globalPlugins\brailleExtender\undefinedChars.py:324 -#, fuzzy -#| msgid "Braille tables" msgid "Braille table" msgstr "Tables braille" From e429f5e236ca33f8dd92cb00985a66187c5e2d50 Mon Sep 17 00:00:00 2001 From: zstanecic Date: Sat, 18 Apr 2020 13:05:39 +0200 Subject: [PATCH 78/87] new polish update --- addon/locale/pl/LC_MESSAGES/nvda.po | 248 ++++++++++++++++------------ 1 file changed, 143 insertions(+), 105 deletions(-) diff --git a/addon/locale/pl/LC_MESSAGES/nvda.po b/addon/locale/pl/LC_MESSAGES/nvda.po index 7a848bb4..1cc128e2 100644 --- a/addon/locale/pl/LC_MESSAGES/nvda.po +++ b/addon/locale/pl/LC_MESSAGES/nvda.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: BrailleExtender\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-17 13:26+0100\n" +"PO-Revision-Date: 2020-04-18 13:02+0100\n" "Last-Translator: zvonimir stanecic \n" "Language-Team: \n" "Language: pl\n" @@ -174,9 +174,8 @@ msgid "Opens the addons' settings." msgstr "Otwiera ustawienia dodatku." #: addon/globalPlugins/brailleExtender/__init__.py:270 -#, fuzzy msgid "Table &dictionaries" -msgstr "Słownik tablicy brajlowskiej" +msgstr "&słowniki tablic" #: addon/globalPlugins/brailleExtender/__init__.py:270 msgid "'Braille dictionaries' menu" @@ -219,14 +218,12 @@ msgstr "" "słownikowe do listy." #: addon/globalPlugins/brailleExtender/__init__.py:278 -#, fuzzy msgid "Advanced &input mode dictionary" -msgstr "Dodaj wpis do słownika brajlowskiego" +msgstr "słownik zaawansowanego &trybu wprowadzania" #: addon/globalPlugins/brailleExtender/__init__.py:278 -#, fuzzy msgid "Advanced input mode configuration" -msgstr "Konfiguracja prezentacji formatowania dokumentu" +msgstr "Konfiguracja zaawansowanego trybu wprowadzania" #: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" @@ -397,12 +394,11 @@ msgstr "wyłączone" #: addon/globalPlugins/brailleExtender/__init__.py:571 #, python-format msgid "One hand mode %s" -msgstr "" +msgstr "Tryb jednoręczny %s" #: addon/globalPlugins/brailleExtender/__init__.py:572 -#, fuzzy msgid "Enable/disable one hand mode feature" -msgstr "włącza lub wyłącza tryb formatowanego brajla amerykańskiego" +msgstr "Włącza lub wyłącza tryb jednej ręki" #: addon/globalPlugins/brailleExtender/__init__.py:576 #, python-format @@ -529,21 +525,20 @@ msgstr "" #: addon/globalPlugins/brailleExtender/__init__.py:663 #, python-format msgid "Advanced braille input mode %s" -msgstr "" +msgstr "Tryb zaawansowanego wprowadzania brajla %s" #: addon/globalPlugins/brailleExtender/__init__.py:664 -#, fuzzy msgid "Enable/disable the advanced input mode" -msgstr "włącza lub wyłącza tryb formatowanego brajla amerykańskiego" +msgstr "Włącza lub wyłącza zaawansowane wprowadzanei tekstu" #: addon/globalPlugins/brailleExtender/__init__.py:669 #, python-format msgid "Description of undefined characters %s" -msgstr "" +msgstr "Opisywanie niezdefiniowanych znaków %s" #: addon/globalPlugins/brailleExtender/__init__.py:671 msgid "Enable/disable description of undefined characters" -msgstr "" +msgstr "Włącz lub wyłącz opisywanie niezdefiniowanych znaków." #: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" @@ -830,38 +825,37 @@ msgstr "Braille Extender" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "HUC8" -msgstr "" +msgstr "HUC8" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:64 #: addon/globalPlugins/brailleExtender/undefinedChars.py:258 msgid "Hexadecimal" -msgstr "" +msgstr "Szesnastkowy" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:65 #: addon/globalPlugins/brailleExtender/undefinedChars.py:259 msgid "Decimal" -msgstr "" +msgstr "Dziesiętny" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:66 #: addon/globalPlugins/brailleExtender/undefinedChars.py:260 msgid "Octal" -msgstr "" +msgstr "Usemkowy" #: addon/globalPlugins/brailleExtender/addonDoc.py:35 #: addon/globalPlugins/brailleExtender/configBE.py:67 #: addon/globalPlugins/brailleExtender/undefinedChars.py:261 -#, fuzzy msgid "Binary" -msgstr "Słownik" +msgstr "Binarny" #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/addonDoc.py:46 #: addon/globalPlugins/brailleExtender/undefinedChars.py:239 msgid "Representation of undefined characters" -msgstr "" +msgstr "Reprezentacja niezdefiniowanych znaków" #: addon/globalPlugins/brailleExtender/addonDoc.py:48 msgid "" @@ -869,16 +863,22 @@ msgid "" "represented within a braille table. To do so, go to the braille table " "settings. You can choose between the following representations:" msgstr "" +"Rozszerzenie to pozwala Ci skonfigurować sposób reprezentacji " +"niezdefiniowanych znaków w tablicy brajlowskiej. Aby je skonfigurować, udaj " +"się do ustawień tablic brajlowskich. Możesz wybrać z pośród następujących " +"sposobów reprezentacji niezdefiniowanych znaków." #: addon/globalPlugins/brailleExtender/addonDoc.py:52 msgid "" "You can also combine this option with the “describe the character if " "possible” setting." msgstr "" +"Opcja ta może również działać w połączeniu z ustawieniem \"opisuj znaki, " +"kiedy to możliwe\"." #: addon/globalPlugins/brailleExtender/addonDoc.py:54 msgid "Notes:" -msgstr "" +msgstr "uwagi: " #: addon/globalPlugins/brailleExtender/addonDoc.py:56 msgid "" @@ -886,11 +886,15 @@ msgid "" "best combination is the usage of the HUC8 representation without checking " "the “describe character if possible” option." msgstr "" +"W celu rozdzielenia niezdefiniowanych znaków przy zachowaniu maksymalnej " +"ilości miejsca, najlepszą opcją jest używanie trybu reprezentacji HUC8, z " +"wyłączoną opcją \"opisuj znaki, kiedy to możliwe\"." #: addon/globalPlugins/brailleExtender/addonDoc.py:57 #, python-brace-format msgid "To learn more about the HUC representation, see {url}" msgstr "" +"Jeżeli chcesz dowiedzieć się więcej na temat reprezentacji HUC, zobacz {url}" #: addon/globalPlugins/brailleExtender/addonDoc.py:58 msgid "" @@ -898,16 +902,21 @@ msgid "" "take precedence over character descriptions, which also take precedence over " "the chosen representation for undefined characters." msgstr "" +"Pamiętaj, że definicje tabel, jak i twoje własne definicje w słownikach mają " +"pierwszeństwo nad opisami znaków. Mają również pierwszeństwo nad " +"reprezentacją niezdefiniowanych znaków." #: addon/globalPlugins/brailleExtender/addonDoc.py:61 msgid "Getting Current Character Info" -msgstr "" +msgstr "uzyskiwanie informacji o znaku" #: addon/globalPlugins/brailleExtender/addonDoc.py:63 msgid "" "This feature allows you to obtain various information regarding the " "character under the cursor using the current input braille table, such as:" msgstr "" +"Opcja ta pozwala Ci uzyskać wiele informacji na temat znaku znajdującego się " +"pod kursorem, takich jak\"" #: addon/globalPlugins/brailleExtender/addonDoc.py:65 msgid "" @@ -915,6 +924,9 @@ msgid "" "values; A description of the character if possible; - The Unicode Braille " "representation and the Braille dot pattern." msgstr "" +"Reprezentację w formatach Huc8,, HUC6, szesnastkowym, dziesiętnym, " +"usemkowym, dwójkowym, opis znaku jeżeli to możliwe, brajlowską " +"reprezentację Unicode, jak i wzór brajlowski znaku." #: addon/globalPlugins/brailleExtender/addonDoc.py:67 msgid "" @@ -922,12 +934,17 @@ msgid "" "information in a flash message and a double-press displays the same " "information in a virtual NVDA buffer." msgstr "" +"Pojedyncze naciśnięcie zdefiniowanego dla opcji skrótu pokazuje informacje " +"jako wiadomość błyskawiczną. Podwujne natomiast, umieszcza informacje w " +"wirtualnym buforze NVDA." #: addon/globalPlugins/brailleExtender/addonDoc.py:69 msgid "" "On supported displays the defined gesture is ⡉+space. No system gestures are " "defined by default." msgstr "" +"Dla wspieranych monitorów brajlowskich, domyślnym skrótem dla funkcji jest ⡉" +"+spacja. Systemowe skróty nie są domyślnie ustawione." #: addon/globalPlugins/brailleExtender/addonDoc.py:71 #, python-brace-format @@ -935,11 +952,11 @@ msgid "" "For example, for the '{chosenChar}' character, we will get the following " "information:" msgstr "" +"Na przykład, dla znaku '{chosenChar}' otrzymamy następujące informacje: " #: addon/globalPlugins/brailleExtender/addonDoc.py:74 -#, fuzzy msgid "Advanced Braille Input" -msgstr "reguły zaawansowane" +msgstr "Zaawansowane wprowadzanie brajla" #: addon/globalPlugins/brailleExtender/addonDoc.py:76 msgid "" @@ -951,35 +968,42 @@ msgid "" "Alternatively, an option allows you to automatically exit this mode after " "entering a single pattern. " msgstr "" +"Ta funkcja pozwala Ci wprowadzić dowolny znak w jego reprezentacji HUC8 lub " +"jego wartości szesnastkowej/dziesiętnej/usemkowej/dwójkowej. Co więcej, " +"pozwala Ci ona tworzyć skróty. W celu wykorzystania tej funkcji, włącz " +"zaawansowany tryb wprowadzania a następnie wprowadź odpowiedni wzór. " +"Domyślnie, tryb ten aktywowany jest skrótem NVDA+WINDOWS+I lub ⡊+spacja dla " +"wspieranych monitorów brajlowskich. Naciśnij powyższy sskrót ponownie w celu " +"opuszczenia tego trybu." #: addon/globalPlugins/brailleExtender/addonDoc.py:80 msgid "Specify the basis as follows" -msgstr "" +msgstr "Podaj podstawę jak pokazano poniżej" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "⠭ or ⠓" -msgstr "" +msgstr "⠭ lub ⠓" #: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "for a hexadecimal value" -msgstr "" +msgstr "Dla wartości szesnastkowej" #: addon/globalPlugins/brailleExtender/addonDoc.py:83 msgid "for a decimal value" -msgstr "" +msgstr "Dla wartości dziesiętnej." #: addon/globalPlugins/brailleExtender/addonDoc.py:84 msgid "for an octal value" -msgstr "" +msgstr "Dla wartości usemkowej." #: addon/globalPlugins/brailleExtender/addonDoc.py:87 msgid "" "Enter the value of the character according to the previously selected basis." -msgstr "" +msgstr "Wprowadź wartość znaku w poprzednio wybranej podstawie." #: addon/globalPlugins/brailleExtender/addonDoc.py:88 msgid "Press Space to validate." -msgstr "" +msgstr "Naciśnij spację w celu sprawdzenia." #: addon/globalPlugins/brailleExtender/addonDoc.py:91 msgid "" @@ -987,18 +1011,23 @@ msgid "" "dictionaries -. Then, you just have to enter your abbreviation and press " "space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." msgstr "" +"Skróty musisz najpierw dodać w oknie \"słowniki zaawansowanego trybu\", " +"następnie musisz po prostu wpisać swój skrót i wcisnąć spację w celu jego " +"rozwinięcia. Na przykład, możesz skojarzyć wzór ⠎⠺ ze słowem kanapka." #: addon/globalPlugins/brailleExtender/addonDoc.py:93 msgid "Here are some examples of sequences to be entered for given characters:" msgstr "" +"Poniżej podano przykłady sekwencji które możesz wpisać dla danych znaków:" #: addon/globalPlugins/brailleExtender/addonDoc.py:97 msgid "Note: the HUC6 input is currently not supported." msgstr "" +"Uwaga! Wprowadzanie znaków w reprezentacji HUC6 nie jest obecnie wspierane." #: addon/globalPlugins/brailleExtender/addonDoc.py:100 msgid "One-hand mode" -msgstr "" +msgstr "Tryb jednoręczny" #: addon/globalPlugins/brailleExtender/addonDoc.py:102 msgid "" @@ -1007,10 +1036,14 @@ msgid "" "fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " "Three input methods are available." msgstr "" +"Funkcja ta pozwala ci stworzyć wzór w kilku krokach. W celu aktywacji tej " +"opcji możesz udać się do ustawień ogólnych dodatku lub też wcisnąć skrót NVDA" +"+WINDOWS+H (⡂+spacja dla wspieranych monitorów brajlowskich). Dostępne są " +"trzy metody wprowadzania." #: addon/globalPlugins/brailleExtender/addonDoc.py:103 msgid "Method #1: fill a cell in 2 stages on both sides" -msgstr "" +msgstr "Metoda 1: wypełnij komórkę w dwóch etapach" #: addon/globalPlugins/brailleExtender/addonDoc.py:105 msgid "" @@ -1018,27 +1051,36 @@ msgid "" "side is empty, type the dots correspondig to the opposite side twice, or " "type the dots corresponding to the non-empty side in 2 steps." msgstr "" +"Dla tej metody, wpisz najpierw punkty odpowiadające lewej stronie znaku, a " +"potem te dla prawej strony. Jeżeli znak posiada tylko jedną stronę, wpisz go " +"podwójnie." #: addon/globalPlugins/brailleExtender/addonDoc.py:106 #: addon/globalPlugins/brailleExtender/addonDoc.py:115 msgid "For example:" -msgstr "" +msgstr "Na przykład:" #: addon/globalPlugins/brailleExtender/addonDoc.py:108 msgid "For ⠛: press dots 1-2 then dots 4-5." -msgstr "" +msgstr "Dla znaku ⠛: wciśnij punkty 1-2 a potem punkty 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:109 msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." msgstr "" +"Dla znaku ⠃: wprowadź punkty 1-2 potem punkty 1-2, lub punkt 1 a potem punkt " +"2." #: addon/globalPlugins/brailleExtender/addonDoc.py:110 msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." msgstr "" +"Dla znaku ⠘: wciśnij punkty 4-5 a potem punkty 4-5, lub punkt 4 a potem " +"punkt 5." #: addon/globalPlugins/brailleExtender/addonDoc.py:112 msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" msgstr "" +"Metoda 2: wypełnij komórkę w dwuch etapach, spacja równa się pustej stronie " +"znaku" #: addon/globalPlugins/brailleExtender/addonDoc.py:114 msgid "" @@ -1047,58 +1089,67 @@ msgid "" "dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " "An empty cell will be obtained by pressing the space key twice." msgstr "" +"Używając tej metody, możesz wpisać znak przy pomocy jednej ręki, nie " +"zależnie od tego, którą srronę klawiatury brajlowskiej wybierzesz. Pierwszy " +"krok pozwala ci wpisać punkty 1, 2, 3, 7 a drugi 4, 5, 6, 8. Jeżeli " +"któakolwiek ze stron znaków jest pusta, wciśnij spację. W celu wprowadzenia " +"pustej komórki, wwpisz spację podwójnie." #: addon/globalPlugins/brailleExtender/addonDoc.py:117 msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." msgstr "" +"Dla znaku ⠛: wpisz punkty 1-2 a potem punkty 1-2, lub punkty 4-5 a potem " +"punkty 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:118 msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." msgstr "" +"Dla znaku ⠃: wpisz punkty 1-2 a potem spację, lub punkty 4-5 a potem spację." #: addon/globalPlugins/brailleExtender/addonDoc.py:119 msgid "For ⠘: press space then 1-2, or space then dots 4-5." -msgstr "" +msgstr "Dla znaku ⠘: wpisz spację a potem 1-2, lubb spację a potem punkty 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:121 msgid "" "Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " "validate the character)" msgstr "" +"metoda 3: wpisz znak punkt po punkcie, spacja w celu sprawdzenia znaku." #: addon/globalPlugins/brailleExtender/addonDoc.py:126 msgid "Dots 1-2, then dots 4-5, then space." -msgstr "" +msgstr "Punkty 1-2, potem 4-5 a potem spację." #: addon/globalPlugins/brailleExtender/addonDoc.py:127 msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." msgstr "" +"Punkty 1-2-3, a potem punkt 3 (w celu korekcji), a potem punkty 4-5, a potem " +"spację." #: addon/globalPlugins/brailleExtender/addonDoc.py:128 msgid "Dot 1, then dots 2-4-5, then space." -msgstr "" +msgstr "Dot 1, then dots 2-4-5, then space." #: addon/globalPlugins/brailleExtender/addonDoc.py:129 msgid "Dots 1-2-4, then dot 5, then space." -msgstr "" +msgstr "Dots 1-2-4, then dot 5, then space." #: addon/globalPlugins/brailleExtender/addonDoc.py:130 msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." -msgstr "" +msgstr "Dot 2, then dot 1, then dot 5, then dot 4, and then space." #: addon/globalPlugins/brailleExtender/addonDoc.py:131 msgid "Etc." -msgstr "" +msgstr "ITD." #: addon/globalPlugins/brailleExtender/addonDoc.py:150 -#, fuzzy msgid "Documentation" -msgstr "&Pomoc" +msgstr "Dokumentacja" #: addon/globalPlugins/brailleExtender/addonDoc.py:160 -#, fuzzy msgid "Driver loaded" -msgstr "%s ponownie wczytany" +msgstr "Sterownik wczytany" #: addon/globalPlugins/brailleExtender/addonDoc.py:161 msgid "Profile" @@ -1181,7 +1232,7 @@ msgstr "Duński" #: addon/globalPlugins/brailleExtender/addonDoc.py:285 msgid "English and French" -msgstr "" +msgstr "Angielski i francuzki." #: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" @@ -1251,15 +1302,13 @@ msgid "caps lock" msgstr "caps lock" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:105 -#, fuzzy msgid "all tables" -msgstr "Tablice brajlowskie" +msgstr "Wszystkie tablice" #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:116 -#, fuzzy msgid "Advanced input mode dictionary" -msgstr "Dodaj wpis do słownika brajlowskiego" +msgstr "słownik trybu zaawansowanego wprowadzania" #. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. #. Translators: The label for the combo box of dictionary entries in table dictionary dialog. @@ -1271,17 +1320,15 @@ msgstr "&Wpisy słownika" #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 msgid "Abbreviation" -msgstr "" +msgstr "Skrót" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 -#, fuzzy msgid "Replace by" -msgstr "Zamiana" +msgstr "Zamień na" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:133 -#, fuzzy msgid "Input table" -msgstr " tablica wprowadzania" +msgstr "Tabela wejścia" #. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. #. Translators: The label for a button in table dictionaries dialog to add new entries. @@ -1306,9 +1353,8 @@ msgstr "&Usuń" #. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:159 -#, fuzzy msgid "&Open the dictionary file in an editor" -msgstr "&Otwórz plik słownika w edytorze tekstowym" +msgstr "&Otwórz plik słownika w edytorze" #. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. #. Translators: The label for a button in table dictionaries dialog to reload dictionary. @@ -1324,7 +1370,7 @@ msgstr "Dodaj wpis do słownika" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 msgid "File doesn't exist yet" -msgstr "" +msgstr "Plik jeszcze nie istnieje" #. Translators: This is the label for the edit dictionary entry dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 @@ -1334,78 +1380,74 @@ msgstr "Edytuj wpis słownikowy" #. Translators: This is a label for an edit field in add dictionary entry dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:247 -#, fuzzy msgid "&Abreviation" -msgstr "&Kierunek" +msgstr "&Skrót" #. Translators: This is a label for an edit field in add dictionary entry dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:252 -#, fuzzy msgid "&Replace by" -msgstr "Zamiana" +msgstr "&Zamień na" #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 -#, fuzzy msgid "Advanced input mode" -msgstr "reguły zaawansowane" +msgstr "Tryb zaawansowanego wejścia" #: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 msgid "E&xit the advanced input mode after typing one pattern" -msgstr "" +msgstr "Opuść zaawansowany tryb wprowadzania po wpisaniu pojedynczego wzoru." #: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 msgid "Escape sign for Unicode values" -msgstr "" +msgstr "Znak ucieczki dla wartości Unicode" #: addon/globalPlugins/brailleExtender/configBE.py:54 #: addon/globalPlugins/brailleExtender/undefinedChars.py:248 -#, fuzzy msgid "Use braille table behavior" -msgstr "tablice brajlowskie" +msgstr "Użyj zachowania tablicy brajlowskiej" #: addon/globalPlugins/brailleExtender/configBE.py:55 #: addon/globalPlugins/brailleExtender/undefinedChars.py:249 msgid "Dots 1-8 (⣿)" -msgstr "" +msgstr "Punkty 1-8 (⣿)" #: addon/globalPlugins/brailleExtender/configBE.py:56 #: addon/globalPlugins/brailleExtender/undefinedChars.py:250 msgid "Dots 1-6 (⠿)" -msgstr "" +msgstr "Punkty 1-6 (⠿)" #: addon/globalPlugins/brailleExtender/configBE.py:57 #: addon/globalPlugins/brailleExtender/undefinedChars.py:251 msgid "Empty cell (⠀)" -msgstr "" +msgstr "Pusta komórka (⠀)" #: addon/globalPlugins/brailleExtender/configBE.py:58 msgid "Other dot pattern (e.g.: 6-123456)" -msgstr "" +msgstr "Inny wzór punktów, na przykład 6-123456)" #: addon/globalPlugins/brailleExtender/configBE.py:59 #: addon/globalPlugins/brailleExtender/undefinedChars.py:253 msgid "Question mark (depending output table)" -msgstr "" +msgstr "Znak zapytania (zależny od tabeli wyjścia)" #: addon/globalPlugins/brailleExtender/configBE.py:60 msgid "Other sign/pattern (e.g.: \\, ??)" -msgstr "" +msgstr "Other sign/pattern (e.g.: \\, ??)" #: addon/globalPlugins/brailleExtender/configBE.py:61 #: addon/globalPlugins/brailleExtender/undefinedChars.py:255 msgid "Hexadecimal, Liblouis style" -msgstr "" +msgstr "Szesnastkowy, styl Liblouis." #: addon/globalPlugins/brailleExtender/configBE.py:62 #: addon/globalPlugins/brailleExtender/undefinedChars.py:256 msgid "Hexadecimal, HUC8" -msgstr "" +msgstr "Szesnastkowy, HUC8" #: addon/globalPlugins/brailleExtender/configBE.py:63 #: addon/globalPlugins/brailleExtender/undefinedChars.py:257 msgid "Hexadecimal, HUC6" -msgstr "" +msgstr "Szesnastkowy, HUC6" #: addon/globalPlugins/brailleExtender/configBE.py:70 #: addon/globalPlugins/brailleExtender/configBE.py:77 @@ -1457,17 +1499,17 @@ msgstr "Tryb przeglądu" #: addon/globalPlugins/brailleExtender/configBE.py:102 msgid "Fill a cell in two stages on both sides" -msgstr "" +msgstr "Wypełnij komórkę w dwóch etapach." #: addon/globalPlugins/brailleExtender/configBE.py:103 msgid "Fill a cell in two stages on one side (space = empty side)" -msgstr "" +msgstr "Wypełnij komórkę w duch etapach, spacja dla pustej strony" #: addon/globalPlugins/brailleExtender/configBE.py:104 msgid "" "Fill a cell dots by dots (each dot is a toggle, press space to validate the " "character)" -msgstr "" +msgstr "Wypełnij znak punkt po punkcie, spacja w celu wprowadzenia." #: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" @@ -1619,11 +1661,11 @@ msgstr "" #. Translators: Reported when translation didn't succeed due to unsupported input. #: addon/globalPlugins/brailleExtender/patchs.py:376 msgid "Unsupported input" -msgstr "" +msgstr "Niewspierane wejście." #: addon/globalPlugins/brailleExtender/patchs.py:435 msgid "Unsupported input method" -msgstr "" +msgstr "Nie wspierana metoda wprowadzania." #: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." @@ -1732,11 +1774,11 @@ msgstr "Drugi preferowany monitor brajlowski" #: addon/globalPlugins/brailleExtender/settings.py:120 msgid "One-handed mode" -msgstr "" +msgstr "Tryb jednoręczny" #: addon/globalPlugins/brailleExtender/settings.py:124 msgid "One hand mode method" -msgstr "" +msgstr "Metoda jednoręcznego wprowadzania." #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/settings.py:159 @@ -1862,15 +1904,13 @@ msgstr "Wtórna tablica wyjścia do użycia" #. Translators: label of a dialog. #: addon/globalPlugins/brailleExtender/settings.py:362 -#, fuzzy msgid "Display &tab signs as spaces" -msgstr "Wyświetl znaki tabulacji jako spacje" +msgstr "Wyświetl &znaki tabulatora jako spację" #. Translators: label of a dialog. #: addon/globalPlugins/brailleExtender/settings.py:366 -#, fuzzy msgid "Number of &space for a tab sign" -msgstr "Liczba odstępów dla znaku tabulacji" +msgstr "Liczba &odstępów dla znaku tabulacji" #: addon/globalPlugins/brailleExtender/settings.py:367 msgid "Alternative and &custom braille tables" @@ -1881,6 +1921,7 @@ msgid "" "NVDA must be restarted for some new options to take effect. Do you want " "restart now?" msgstr "" +"NVDA musi zostać uruchomione ponownie w celu zastosowania nowych zmian." #: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" @@ -2183,53 +2224,50 @@ msgstr "Ustawienia" #. Translators: label of a dialog. #: addon/globalPlugins/brailleExtender/undefinedChars.py:244 -#, fuzzy msgid "Representation &method" -msgstr "Wyświetlanie" +msgstr "&Metoda wyświetlania" #: addon/globalPlugins/brailleExtender/undefinedChars.py:252 #, python-brace-format msgid "Other dot pattern (e.g.: {dotPatternSample})" -msgstr "" +msgstr "Inny wzór punktów, na przykład {dotPatternSample})" #: addon/globalPlugins/brailleExtender/undefinedChars.py:254 #, python-brace-format msgid "Other sign/pattern (e.g.: {signPatternSample})" -msgstr "" +msgstr "Inny znak lub wzór na przykład {signPatternSample})" #: addon/globalPlugins/brailleExtender/undefinedChars.py:272 msgid "Specify another pattern" -msgstr "" +msgstr "Wprowadź inny wzór." #: addon/globalPlugins/brailleExtender/undefinedChars.py:276 msgid "Describe undefined characters if possible" -msgstr "" +msgstr "Opisuj niezdefiniowane znaki, jeżeli to możliwe." #: addon/globalPlugins/brailleExtender/undefinedChars.py:284 msgid "Also describe extended characters (e.g.: country flags)" -msgstr "" +msgstr "Opisuj także znaki rozszerzone, na przykład flagi państw." #: addon/globalPlugins/brailleExtender/undefinedChars.py:291 msgid "Start tag" -msgstr "" +msgstr "Znak początku" #: addon/globalPlugins/brailleExtender/undefinedChars.py:296 msgid "End tag" -msgstr "" +msgstr "Znak końca." #: addon/globalPlugins/brailleExtender/undefinedChars.py:307 msgid "Language" -msgstr "" +msgstr "Język" #: addon/globalPlugins/brailleExtender/undefinedChars.py:310 -#, fuzzy msgid "Use the current output table" -msgstr "Używaj aktualnej tablicy wprowadzania" +msgstr "Użyj aktualnej tablicy wyświetlania" #: addon/globalPlugins/brailleExtender/undefinedChars.py:323 -#, fuzzy msgid "Braille table" -msgstr "Tablice brajlowskie" +msgstr "Tablica brajlowska" #: addon/globalPlugins/brailleExtender/updateCheck.py:61 #, python-format @@ -2276,7 +2314,7 @@ msgstr "nie jest znakiem" #: addon/globalPlugins/brailleExtender/utils.py:208 msgid "N/A" -msgstr "" +msgstr "Niedostępny" #: addon/globalPlugins/brailleExtender/utils.py:312 msgid "Available combinations" From 2b3d28d7794e44494ad93b48e50a1e065da4f517 Mon Sep 17 00:00:00 2001 From: zstanecic Date: Sun, 19 Apr 2020 10:06:03 +0200 Subject: [PATCH 79/87] updated the full russian translation. It may require correction --- addon/locale/ru/LC_MESSAGES/nvda.po | 43 +++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/addon/locale/ru/LC_MESSAGES/nvda.po b/addon/locale/ru/LC_MESSAGES/nvda.po index c4c9788b..cadc20ac 100644 --- a/addon/locale/ru/LC_MESSAGES/nvda.po +++ b/addon/locale/ru/LC_MESSAGES/nvda.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: BrailleExtender dev-18.08.04-105046\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-17 22:14+0100\n" +"PO-Revision-Date: 2020-04-19 10:04+0100\n" "Last-Translator: Zvonimir \n" "Language-Team: \n" "Language: ru_RU\n" @@ -1030,10 +1030,14 @@ msgid "" "fly using NVDA+Windows+h gesture by default (⡂+space on supported displays). " "Three input methods are available." msgstr "" +"Эта функция позволяет вам писать текст в нескольких шагах. Эта опция может " +"быть включена в настройках дополнения или на лету, используя NVDA+Windows+h " +"по умолчанию (⡂+пробел на поддержанных брайлевских дисплеях). Три метода " +"ввода доступны." #: addon/globalPlugins/brailleExtender/addonDoc.py:103 msgid "Method #1: fill a cell in 2 stages on both sides" -msgstr "" +msgstr "Метод #1: заполнять клетку в двух шагах двусторонно" #: addon/globalPlugins/brailleExtender/addonDoc.py:105 msgid "" @@ -1041,27 +1045,33 @@ msgid "" "side is empty, type the dots correspondig to the opposite side twice, or " "type the dots corresponding to the non-empty side in 2 steps." msgstr "" +"С помощью этого метода, набирайте точки одной стороны клетки, а потом правую " +"сторону клетки. Если одна сторона пустая, набирайте точки соответствующие " +"обратной стороны два раза, или набирайте точки, которые соответствуют полной " +"стороны в два шага." #: addon/globalPlugins/brailleExtender/addonDoc.py:106 #: addon/globalPlugins/brailleExtender/addonDoc.py:115 msgid "For example:" -msgstr "" +msgstr "Например:" #: addon/globalPlugins/brailleExtender/addonDoc.py:108 msgid "For ⠛: press dots 1-2 then dots 4-5." -msgstr "" +msgstr "для ⠛: набирайте точки 1-2 потом точки 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:109 msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." -msgstr "" +msgstr "Для ⠃: набираййте точки 1-2 потом точки 1-2, или точку 1 потом dot 2." #: addon/globalPlugins/brailleExtender/addonDoc.py:110 msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." -msgstr "" +msgstr "для ⠘: набирайте 4-5 потом 4-5, или точку 4 потом точку 5." #: addon/globalPlugins/brailleExtender/addonDoc.py:112 msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" msgstr "" +"Метод #2: набирайте знаки клетки в двух шагах по одной стороне (пробел = " +"пустая часть клетки)" #: addon/globalPlugins/brailleExtender/addonDoc.py:114 msgid "" @@ -1070,44 +1080,53 @@ msgid "" "dots 1-2-3-7 and the second one 4-5-6-8. If one side is empty, press space. " "An empty cell will be obtained by pressing the space key twice." msgstr "" +"Используя этот метод, вы можете набрать знаки в клетке одной рукой, " +"независимо от выбранной стороны брайлевской клавиатуры. Первый шаг вам " +"позволяет набрать точки 1-2-3-7 а вторая 4-5-6-8. Если одна сторона - пуста, " +"нажмите пробел. Получите пустую клетку после нажатия пробела дважды." #: addon/globalPlugins/brailleExtender/addonDoc.py:117 msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." msgstr "" +"для ⠛: нажмите точки 1-2 потом точки 1-2, или точки 4-5 потом точки 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:118 msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." -msgstr "" +msgstr "Для ⠃: нажмите точки 1-2 а потом пробел, или 4-5 а потом пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:119 msgid "For ⠘: press space then 1-2, or space then dots 4-5." -msgstr "" +msgstr "Для ⠘: нажмите пробел а потом 1-2, или пробел а потом точки 4-5." #: addon/globalPlugins/brailleExtender/addonDoc.py:121 msgid "" "Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " "validate the character)" msgstr "" +"Метод #3: заполнять клетку точку по точку (каждая точка является " +"переключателем, нажмите пробел для проверки знака)" #: addon/globalPlugins/brailleExtender/addonDoc.py:126 msgid "Dots 1-2, then dots 4-5, then space." -msgstr "" +msgstr "Точка 1-2, потом точки 4-5, потом пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:127 msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." msgstr "" +"точки 1-2-3, потом точка 3 (для корректировки), потом точки 4-5, потом " +"пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:128 msgid "Dot 1, then dots 2-4-5, then space." -msgstr "" +msgstr "точка 1, потом точки 2-4-5, потом пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:129 msgid "Dots 1-2-4, then dot 5, then space." -msgstr "" +msgstr "точки 1-2-4, потом точка 5, а потом пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:130 msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." -msgstr "" +msgstr "точка 2, потом точка 1, потом точка 5, потом точка 4, и потом пробел." #: addon/globalPlugins/brailleExtender/addonDoc.py:131 msgid "Etc." From 0de23c692101edf3dacc21aa3d43f737939e7cec Mon Sep 17 00:00:00 2001 From: zstanecic Date: Wed, 22 Apr 2020 09:44:27 +0200 Subject: [PATCH 80/87] russian - fixed spelling error, corrected merits. --- addon/locale/ru/LC_MESSAGES/nvda.po | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/addon/locale/ru/LC_MESSAGES/nvda.po b/addon/locale/ru/LC_MESSAGES/nvda.po index cadc20ac..5556b3e4 100644 --- a/addon/locale/ru/LC_MESSAGES/nvda.po +++ b/addon/locale/ru/LC_MESSAGES/nvda.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: BrailleExtender dev-18.08.04-105046\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" "POT-Creation-Date: 2020-04-15 09:24+0200\n" -"PO-Revision-Date: 2020-04-19 10:04+0100\n" +"PO-Revision-Date: 2020-04-22 09:43+0100\n" "Last-Translator: Zvonimir \n" "Language-Team: \n" "Language: ru_RU\n" @@ -53,7 +53,7 @@ msgstr "Посещённые ссылки" #: addon/globalPlugins/brailleExtender/__init__.py:72 msgid "Landmarks" -msgstr "Ориентир" +msgstr "Ориентиры" #: addon/globalPlugins/brailleExtender/__init__.py:73 msgid "Headings" @@ -225,7 +225,7 @@ msgstr "Настройки &расширенного ввода" #: addon/globalPlugins/brailleExtender/__init__.py:278 msgid "Advanced input mode configuration" -msgstr "Настройки режима расширенного ввода" +msgstr "Настройки расширенного ввода" #: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" @@ -528,7 +528,7 @@ msgstr "Режим расширенного брайлевского ввода #: addon/globalPlugins/brailleExtender/__init__.py:664 msgid "Enable/disable the advanced input mode" -msgstr "Включить или выключить режим расширенного ввода" +msgstr "Включает или выключает режим расширенного ввода" #: addon/globalPlugins/brailleExtender/__init__.py:669 #, python-format @@ -537,7 +537,7 @@ msgstr "Описание неопределённых знаков %s" #: addon/globalPlugins/brailleExtender/__init__.py:671 msgid "Enable/disable description of undefined characters" -msgstr "Включить или выключить описание неопределённых знаков" +msgstr "Включает или выключает описание неопределённых знаков" #: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" @@ -708,7 +708,7 @@ msgstr "Перезагружает первый брайлевский дисп #: addon/globalPlugins/brailleExtender/__init__.py:958 msgid "Reload the second braille display defined in settings" -msgstr "Перезагружает вторый брайлевский дисплей установленный в настройках" +msgstr "Перезагружает второй брайлевский дисплей установленный в настройках" #: addon/globalPlugins/brailleExtender/__init__.py:964 msgid "No braille display specified. No reload to do" @@ -849,7 +849,7 @@ msgstr "Восмиричный" #: addon/globalPlugins/brailleExtender/configBE.py:67 #: addon/globalPlugins/brailleExtender/undefinedChars.py:261 msgid "Binary" -msgstr "Двоичная" +msgstr "Двоичний" #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/addonDoc.py:46 @@ -865,7 +865,7 @@ msgid "" msgstr "" "Дополнение даёт вам возможность настройки отображения неопределённых знаков " "внутри брайлевской таблицы. Чтобы настроить этот режим, зайдите в настройки " -"брайлевских таблиц. Возможен выбор следующих отображений:" +"брайлевских таблиц. Есть возможность выбрать между следующими отображениями:" #: addon/globalPlugins/brailleExtender/addonDoc.py:52 msgid "" @@ -911,8 +911,8 @@ msgid "" "This feature allows you to obtain various information regarding the " "character under the cursor using the current input braille table, such as:" msgstr "" -"Эта функция позволяет вам получить информацию о знаке под курсором используя " -"актуальную брайлевскую таблицу, такую как:" +"Эта функция позволяет вам получить информацию о знаке под курсором, " +"используя актуальную брайлевскую таблицу, такую как:" #: addon/globalPlugins/brailleExtender/addonDoc.py:65 msgid "" @@ -931,8 +931,8 @@ msgid "" "information in a virtual NVDA buffer." msgstr "" "Нажимая однажды клавишную комбинацию связанную с этой функцией,показывается " -"информация в скором сообщении а нажатие дважды показывает Показывает ту-же " -"самую информацию в виртуальном окне NVDA." +"информация в скором сообщении а нажатие дважды показывает ту-же самую " +"информацию в виртуальном окне NVDA." #: addon/globalPlugins/brailleExtender/addonDoc.py:69 msgid "" @@ -964,12 +964,12 @@ msgid "" "entering a single pattern. " msgstr "" "Эта функция даёт вам возможность написания знаков в отображении HUC8 или в " -"их сестнадцатиричных, десятеричных, восмиричных, или двоичных. Даже у вас " +"их шестнадцатиричных, десятеричных, восмиричных, или двоичных. Даже у вас " "есть возможность развития сокращений. Чтобы пользоватся этим функционалом, " "включите расширенный ввод и напишите желанный вами знак. Жесты по умолчанию: " "NVDA+Windows+i или ⡊+space (на поддержанных дисплеях. Нажмите тот же самый " -"жест, чтобы выйти. Алтернативно, существует опция, которая даёт вам " -"возможность выйти из этого режима. " +"жест, чтобы выйти. Альтернативно, существует опция, которая даёт вам " +"возможность выйти из этого режима после набора только одного знака. " #: addon/globalPlugins/brailleExtender/addonDoc.py:80 msgid "Specify the basis as follows" @@ -1150,7 +1150,7 @@ msgstr "Простые сочетания клавиш" #: addon/globalPlugins/brailleExtender/addonDoc.py:177 msgid "Usual shortcuts" -msgstr "стандартные сочитания клавиш" +msgstr "стандартные сочетания клавиш" #: addon/globalPlugins/brailleExtender/addonDoc.py:179 msgid "Standard NVDA commands" @@ -1191,7 +1191,7 @@ msgstr "предупреждение" #: addon/globalPlugins/brailleExtender/addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." -msgstr "У Braille extender ещё нет жестов для вашего брайдевского дисплея." +msgstr "У Braille extender ещё нет жестов для вашего брайлевского дисплея." #: addon/globalPlugins/brailleExtender/addonDoc.py:255 msgid "" @@ -1572,7 +1572,7 @@ msgstr "смер" #. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. #: addon/globalPlugins/brailleExtender/dictionaries.py:169 msgid "&Open the current dictionary file in an editor" -msgstr "&Отрыть актуалный файл словаря в редакторе" +msgstr "&Открыть актуалный файл словаря в редакторе" #. Translators: This is a label for an edit field in add dictionary entry dialog. #: addon/globalPlugins/brailleExtender/dictionaries.py:296 @@ -1663,7 +1663,7 @@ msgstr "Метод ввода не поддерживается" #: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "" -"Имплементация этой фукции продлится некоторое время. Спасибо з терпение." +"Имплементация этой функции продлится некоторое время. Спасибо з терпение." #. Translators: title of a dialog. #: addon/globalPlugins/brailleExtender/settings.py:40 @@ -1893,7 +1893,7 @@ msgstr "Ничего" #: addon/globalPlugins/brailleExtender/settings.py:358 msgid "Secondary output table to use" -msgstr "Вторичная брайлевская таблица для исьпользования" +msgstr "Вторичная брайлевская таблица для использования" #. Translators: label of a dialog. #: addon/globalPlugins/brailleExtender/settings.py:362 @@ -1914,8 +1914,8 @@ msgid "" "NVDA must be restarted for some new options to take effect. Do you want " "restart now?" msgstr "" -"Чтобы некоторые новые опции вступили в силу, NVDA будет перезагружен. Хотите " -"перезагрузить её сейчас?" +"Чтобы некоторые новые опции вступили в силу, NVDA будет перезагружена. " +"Хотите перезагрузить её сейчас?" #: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" @@ -1932,7 +1932,7 @@ msgstr "Только вывод" #: addon/globalPlugins/brailleExtender/settings.py:459 #, python-format msgid "Table name: %s" -msgstr "Имя таблицы: %s" +msgstr "Название таблицы: %s" #: addon/globalPlugins/brailleExtender/settings.py:460 #, python-format @@ -1953,7 +1953,7 @@ msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" msgstr "" -"в данном поле со списком присудствуют все имеющиеся брайлевские таблицы. " +"в данном поле со списком присутствуют все имеющиеся брайлевские таблицы. " "нажмите пробел, стрелку в лево или в право, чтобы не добавлять или добавить " "предпочетаемую таблицу в список таблиц ввода и вывода для быстрого " "переключения между ними." @@ -1964,7 +1964,7 @@ msgid "" "and 'semicolon' key to view miscellaneous infos on the selected table" msgstr "" "вы также можете нажать запятую, чтобы узнать имя файла выбранной таблицы или " -"многоточее, чтобы получить дополнительную информацию о таблице." +"многоточие, чтобы получить дополнительную информацию о таблице." #: addon/globalPlugins/brailleExtender/settings.py:467 msgid "Contextual help" @@ -2032,7 +2032,7 @@ msgstr "Только вывод" #: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Choose a table file" -msgstr "Выберьте файл брайлевской таблицы" +msgstr "Выберите файл брайлевской таблицы" #: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Liblouis table files" @@ -2118,12 +2118,12 @@ msgstr "" #: addon/globalPlugins/brailleExtender/settings.py:685 msgid "Don't add a quick launch" -msgstr "Ек добавлять быстрый запуск" +msgstr "не добавлять быстрый запуск" #: addon/globalPlugins/brailleExtender/settings.py:711 #, python-brace-format msgid "Choose a file for {0}" -msgstr "Выберьте фал для {0}" +msgstr "Выберьте файл для {0}" #: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Please create or select a quick launch first" @@ -2242,7 +2242,7 @@ msgstr "Описывать неопределенные знаки, если в #: addon/globalPlugins/brailleExtender/undefinedChars.py:284 msgid "Also describe extended characters (e.g.: country flags)" -msgstr "Такле описывает расширенные знаки (такие как.: флаги государств)" +msgstr "Также описывает расширенные знаки (такие как.: флаги государств)" #: addon/globalPlugins/brailleExtender/undefinedChars.py:291 msgid "Start tag" @@ -2417,7 +2417,7 @@ msgstr "Проговаривание актуальной строки в реж #: buildVars.py:38 msgid "translate text easily in Unicode braille and vice versa. E.g.: z <--> ⠵" -msgstr "Переведите текст из з уникодового брайля и обратно. напр.: z <--> ⠵" +msgstr "Переведите текст из уникодового брайля и обратно. напр.: z <--> ⠵" #: buildVars.py:39 msgid "" From dc3a6953e074d59a6d496683c5af1c13faa9c4f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Wed, 22 Apr 2020 23:11:27 +0200 Subject: [PATCH 81/87] we can now select a group --- .../globalPlugins/brailleExtender/__init__.py | 57 +++++++++++-------- .../brailleExtender/brailleTablesExt.py | 53 +++++++++++++++++ addon/globalPlugins/brailleExtender/utils.py | 15 +++-- 3 files changed, 98 insertions(+), 27 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index d9cab1f7..45d580a4 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -858,35 +858,46 @@ def script_decreaseDelayAutoScroll(self, gesture): script_decreaseDelayAutoScroll.__doc__ = _("Decrease autoscroll delay") def script_switchInputBrailleTable(self, gesture): - if len(configBE.inputTables) < 2: - return ui.message(_("You must choose at least two tables for this feature. Please fill in the settings")) - if not config.conf["braille"]["inputTable"] in configBE.inputTables: - configBE.inputTables.append(config.conf["braille"]["inputTable"]) - tid = configBE.inputTables.index(config.conf["braille"]["inputTable"]) - nID = tid + 1 if tid + 1 < len(configBE.inputTables) else 0 - brailleInput.handler.table = brailleTables.listTables( - )[brailleTablesExt.listTablesFileName().index(configBE.inputTables[nID])] - ui.message(_("Input: %s") % brailleInput.handler.table.displayName) - return + usableIn = brailleTablesExt.USABLE_INPUT + choices = brailleTablesExt.getPreferredTables()[0] + brailleTablesExt.getGroups(0)[0] + if len(choices) < 2: + return ui.message(_("Please fill at least two tables and/or groups of tables for this feature first")) + newGroup = brailleTablesExt.getGroup( + position=brailleTablesExt.POSITION_NEXT, + usableIn=usableIn + ) + res = brailleTablesExt.setTableOrGroup( + usableIn=usableIn, + e=newGroup + ) + if not res: raise RuntimeError("error") + utils.refreshBD() + dictionaries.setDictTables() + desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) + ui.message(_("Input: %s") % desc) - script_switchInputBrailleTable.__doc__ = _( - "Switch between his favorite input braille tables") + script_switchInputBrailleTable.__doc__ = _("Switch between your favorite input braille tables including groups") def script_switchOutputBrailleTable(self, gesture): - if len(configBE.outputTables) < 2: - return ui.message(_("You must choose at least two tables for this feature. Please fill in the settings")) - if not config.conf["braille"]["translationTable"] in configBE.outputTables: - configBE.outputTables.append(config.conf["braille"]["translationTable"]) - tid = configBE.outputTables.index( - config.conf["braille"]["translationTable"]) - nID = tid + 1 if tid + 1 < len(configBE.outputTables) else 0 - config.conf["braille"]["translationTable"] = configBE.outputTables[nID] + usableIn = brailleTablesExt.USABLE_OUTPUT + choices = brailleTablesExt.getPreferredTables()[1] + brailleTablesExt.getGroups(0)[1] + if len(choices) < 2: + return ui.message(_("Please fill at least two tables and/or groups of tables for this feature first")) + newGroup = brailleTablesExt.getGroup( + position=brailleTablesExt.POSITION_NEXT, + usableIn=usableIn + ) + res = brailleTablesExt.setTableOrGroup( + usableIn=usableIn, + e=newGroup + ) + if not res: raise RuntimeError("error") utils.refreshBD() dictionaries.setDictTables() - ui.message(_("Output: %s") % brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])]) - return + desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) + ui.message(_("Output: %s") % desc) - script_switchOutputBrailleTable.__doc__ = _("Switch between his favorite output braille tables") + script_switchOutputBrailleTable.__doc__ = _("Switch between your favorite output braille tables including groups") def script_currentBrailleTable(self, gesture): inTable = brailleInput.handler.table.displayName diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index d1bdd44a..39b36293 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -20,6 +20,15 @@ addonHandler.initTranslation() +POSITION_CURRENT = "c" +POSITION_PREVIOUS = "p" +POSITION_NEXT = "n" +POSITIONS = [POSITION_CURRENT, POSITION_PREVIOUS, POSITION_NEXT] + +USABLE_INPUT = "i" +USABLE_OUTPUT = "o" +USABLE_LIST = [USABLE_INPUT, USABLE_OUTPUT] + GroupTables = namedtuple("GroupTables", ("name", "members", "usableIn")) listContractedTables = lambda tables=None: [table for table in (tables or listTables()) if table.contracted] @@ -132,7 +141,51 @@ def getGroups(plain=True): o = [group for group in groups if group.usableIn in ['o', 'io']] return i, o +def getAllGroups(usableIn): + usableInIndex = USABLE_LIST.index(usableIn) + return [None] +tablesToGroups(getPreferredTables()[usableInIndex], usableIn=usableIn) + getGroups(0)[usableInIndex] + +def getGroup( + usableIn, + position=POSITION_CURRENT, + choices=None +): + global _currentGroup + if position not in POSITIONS or usableIn not in USABLE_LIST: return None + usableInIndex = USABLE_LIST.index(usableIn) + currentGroup = _currentGroup[usableInIndex] + if not choices: choices = getAllGroups(usableIn) + if currentGroup not in choices: + currentGroup = choices[0] + curPos = choices.index(currentGroup) + newPos = curPos + if position == POSITION_PREVIOUS: newPos = curPos - 1 + elif position == POSITION_NEXT: newPos = curPos + 1 + return choices[newPos % len(choices)] + +def setTableOrGroup(usableIn, e, choices=None): + global _currentGroup + if not usableIn in USABLE_LIST: return False + usableInIndex = USABLE_LIST.index(usableIn) + choices = getAllGroups(usableIn) + if not e in choices: return False + _currentGroup[usableInIndex] = e + return True + +def tablesToGroups(tables, usableIn): + groups = [] + for table in tables: + groups.append(GroupTables( + fileName2displayName([table]), + [table], + usableIn + )) + fileName2displayName + return groups + _groups = None +_currentGroup = [None, None] + class BrailleTablesDlg(gui.settingsDialogs.SettingsPanel): diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 574b5982..b4b58d46 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -25,6 +25,7 @@ import treeInterceptorHandler import unicodedata from .common import * +from . import brailleTablesExt from . import huc from . import dictionaries @@ -478,10 +479,16 @@ def getCurrentBrailleTables(input_=False, brf=False): tables = [] app = appModuleHandler.getAppModuleForNVDAObject(api.getNavigatorObject()) if brailleInput.handler._table.fileName == config.conf["braille"]["translationTable"] and app and app.appName != "nvda": tables += dictionaries.dictTables - if input_: mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) - else: mainTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) - tables += [ - mainTable, + if input_: + mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) + group = brailleTablesExt.getGroup(usableIn='i') + if group: group = group.members + else: + mainTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) + group = brailleTablesExt.getGroup(usableIn='o') + if group: group = group.members + tbl = group or [mainTable] + tables += tbl + [ os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") ] return tables From 5cc8c0d47a951f43ddfbdbd2fda80b23600e6ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 23 Apr 2020 03:30:13 +0200 Subject: [PATCH 82/87] Add the possibility to reorder tables --- .../brailleExtender/brailleTablesExt.py | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 39b36293..2ee2e0af 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -12,6 +12,7 @@ import brailleTables import config from collections import namedtuple +from itertools import permutations from typing import Optional, List, Tuple from brailleTables import listTables from logHandler import log @@ -44,7 +45,7 @@ def fileName2displayName(l): o = [] for e in l: if e in allTablesFileName: o.append(allTablesFileName.index(e)) - return ', '.join([listTables()[e].displayName for e in o]) + return [listTables()[e].displayName for e in o] def listTablesIndexes(l, tables): if not tables: tables = listTables() @@ -176,11 +177,10 @@ def tablesToGroups(tables, usableIn): groups = [] for table in tables: groups.append(GroupTables( - fileName2displayName([table]), + ", ".join(fileName2displayName([table])), [table], usableIn )) - fileName2displayName return groups _groups = None @@ -341,7 +341,7 @@ def onSetEntries(self, evt=None): for group in self.tmpGroups: self.groupsList.Append(( group.name, - fileName2displayName(group.members), + ", ".join(fileName2displayName(group.members)), translateUsableIn(group.usableIn) )) @@ -351,7 +351,7 @@ def onAddClick(self, event): entry = entryDialog.groupEntry self.tmpGroups.append(entry) self.groupsList.Append( - (entry.name, fileName2displayName(entry.members), translateUsableIn(entry.usableIn)) + (entry.name, ", ".join(fileName2displayName(entry.members)), translateUsableIn(entry.usableIn)) ) index = self.groupsList.GetFirstSelected() while index >= 0: @@ -370,12 +370,18 @@ def onEditClick(self, event): entryDialog = GroupEntryDlg(self) entryDialog.name.SetValue(self.tmpGroups[editIndex].name) entryDialog.members.CheckedItems = listTablesIndexes(self.tmpGroups[editIndex].members, listUncontractedInputTables) + entryDialog.refreshOrders() + selectedItem = 0 + try: + selectedItem = list(entryDialog.orderPermutations.keys()).index(tuple(listTablesIndexes(self.tmpGroups[editIndex].members, listUncontractedTables()))) + entryDialog.order.SetSelection(selectedItem) + except ValueError: pass entryDialog.usableIn.CheckedItems = translateUsableInIndexes(self.tmpGroups[editIndex].usableIn) if entryDialog.ShowModal() == wx.ID_OK: entry = entryDialog.groupEntry self.tmpGroups[editIndex] = entry self.groupsList.SetItem(editIndex, 0, entry.name) - self.groupsList.SetItem(editIndex, 1, fileName2displayName(entry.members)) + self.groupsList.SetItem(editIndex, 1, ", ".join(fileName2displayName(entry.members))) self.groupsList.SetItem(editIndex, 2, translateUsableIn(entry.usableIn)) self.groupsList.SetFocus() entryDialog.Destroy() @@ -408,6 +414,8 @@ def onOk(self, evt): class GroupEntryDlg(wx.Dialog): + orderPermutations = {} + def __init__(self, parent=None, title=_("Edit Dictionary Entry")): super().__init__(parent, title=title) mainSizer = wx.BoxSizer(wx.VERTICAL) @@ -416,7 +424,10 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry")): label = _(f"Group members") self.members = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=listTablesDisplayName(listUncontractedTables())) self.members.SetSelection(0) + self.members.Bind(wx.EVT_CHECKLISTBOX, lambda s: self.refreshOrders()) label = _("Usable in") + self.order = sHelper.addLabeledControl(_("Order of the tables"), wx.Choice, choices=[]) + self.refreshOrders() choices = [_("input"), _("output")] self.usableIn = sHelper.addLabeledControl(label, gui.nvdaControls.CustomCheckListBox, choices=choices) self.usableIn.SetSelection(0) @@ -427,10 +438,16 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry")): self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK) self.name.SetFocus() + def refreshOrders(self, evt=None): + tables = listUncontractedTables() + self.orderPermutations = {e: fileName2displayName(getTablesFilenameByID(e, tables)) for e in permutations(self.members.CheckedItems) if e} + self.order.SetItems([", ".join(e) for e in self.orderPermutations.values()]) + self.order.SetSelection(0) + def onOk(self, evt): name = self.name.Value - members = getTablesFilenameByID( - self.members.CheckedItems, listUncontractedTables()) + if not self.orderPermutations: return + members = getTablesFilenameByID(list(self.orderPermutations.keys())[self.order.GetSelection()], listUncontractedTables()) matches = ['i', 'o'] usableIn = ''.join([matches[e] for e in self.usableIn.CheckedItems]) if not name: From e84e5943af98582ca39aff7f8d4c7631897f9570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 23 Apr 2020 12:09:52 +0200 Subject: [PATCH 83/87] Fixup: adds louis/tables to resolve tables --- addon/globalPlugins/brailleExtender/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index b4b58d46..346f5d12 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -180,8 +180,7 @@ def bkToChar(dots, inTable=-1): if inTable == -1: inTable = config.conf["braille"]["inputTable"] char = chr(dots | 0x8000) text = louis.backTranslate( - [osp.join(r"louis\tables", inTable), - "braille-patterns.cti"], + [osp.join(r"louis\tables", inTable), "braille-patterns.cti"], char, mode=louis.dotsIO) chars = text[0] if len(chars) == 1 and chars.isupper(): @@ -482,11 +481,12 @@ def getCurrentBrailleTables(input_=False, brf=False): if input_: mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) group = brailleTablesExt.getGroup(usableIn='i') - if group: group = group.members else: mainTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) group = brailleTablesExt.getGroup(usableIn='o') - if group: group = group.members + if group: + group = group.members + group = [f if '\\' in f else osp.join(r"louis\tables", f) for f in group] tbl = group or [mainTable] tables += tbl + [ os.path.join(brailleTables.TABLES_DIR, "braille-patterns.cti") From ccf57f204a134d6d54d7ef20488462c299fc2adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 24 Apr 2020 04:17:39 +0200 Subject: [PATCH 84/87] Don't include dictionaries when a group is enabled (temporary) --- addon/globalPlugins/brailleExtender/__init__.py | 5 ++--- addon/globalPlugins/brailleExtender/brailleTablesExt.py | 3 +++ addon/globalPlugins/brailleExtender/dictionaries.py | 6 ++++-- addon/globalPlugins/brailleExtender/utils.py | 4 +--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 45d580a4..0fce127b 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -203,7 +203,6 @@ def __init__(self): self.backup__addTextWithFields = braille.TextInfoRegion._addTextWithFields self.backup__update = braille.TextInfoRegion.update self.backup__getTypeformFromFormatField = braille.TextInfoRegion._getTypeformFromFormatField - self.backup__brailleTableDict = config.conf["braille"]["translationTable"] braille.TextInfoRegion._addTextWithFields = decorator(braille.TextInfoRegion._addTextWithFields, "addTextWithFields") braille.TextInfoRegion.update = decorator(braille.TextInfoRegion.update, "update") braille.TextInfoRegion._getTypeformFromFormatField = decorator(braille.TextInfoRegion._getTypeformFromFormatField, "_getTypeformFromFormatField") @@ -250,7 +249,6 @@ def event_gainFocus(self, obj, nextHandler): configBE.curBD = braille.handler.display.name self.onReload(None, 1) - if self.backup__brailleTableDict != config.conf["braille"]["translationTable"]: self.reloadBrailleTables() nextHandler() return @@ -307,7 +305,6 @@ def createMenu(self): self.submenu_item = gui.mainFrame.sysTrayIcon.menu.InsertMenu(2, wx.ID_ANY, "%s (%s)" % (_("&Braille Extender"), addonVersion), self.submenu) def reloadBrailleTables(self): - self.backup__brailleTableDict = config.conf["braille"]["translationTable"] dictionaries.setDictTables() dictionaries.notifyInvalidTables() if config.conf["brailleExtender"]["tabSpace"]: @@ -871,6 +868,7 @@ def script_switchInputBrailleTable(self, gesture): e=newGroup ) if not res: raise RuntimeError("error") + self.reloadBrailleTables() utils.refreshBD() dictionaries.setDictTables() desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) @@ -892,6 +890,7 @@ def script_switchOutputBrailleTable(self, gesture): e=newGroup ) if not res: raise RuntimeError("error") + self.reloadBrailleTables() utils.refreshBD() dictionaries.setDictTables() desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 2ee2e0af..54b5154c 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -183,6 +183,9 @@ def tablesToGroups(tables, usableIn): )) return groups +def groupEnabled(): + return bool(_groups) + _groups = None _currentGroup = [None, None] diff --git a/addon/globalPlugins/brailleExtender/dictionaries.py b/addon/globalPlugins/brailleExtender/dictionaries.py index 6403429d..87a1e30f 100644 --- a/addon/globalPlugins/brailleExtender/dictionaries.py +++ b/addon/globalPlugins/brailleExtender/dictionaries.py @@ -18,6 +18,7 @@ from collections import namedtuple from . import configBE from .common import * +from . import brailleTablesExt from . import huc from logHandler import log @@ -64,6 +65,7 @@ def getValidPathsDict(): return [path for path in paths if valid(path)] def getPathDict(type_): + if brailleTablesExt.groupEnabled(): return '' if type_ == "table": path = os.path.join(configDir, "brailleDicts", config.conf["braille"]["translationTable"]) elif type_ == "tmp": path = os.path.join(configDir, "brailleDicts", "tmp") else: path = os.path.join(configDir, "brailleDicts", "default") @@ -294,7 +296,7 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry"), textPattern='' if specifyDict: # Translators: This is a label for an edit field in add dictionary entry dialog. dictText = _("Dictionary") - outTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] + outTable = brailleTablesExt.fileName2displayName(config.conf["braille"]["translationTable"]) dictChoices = [_("Global"), _("Table")+(" (%s)" % outTable), _("Temporary")] self.dictRadioBox = sHelper.addItem(wx.RadioBox(self, label=dictText, choices=dictChoices)) self.dictRadioBox.SetSelection(1) @@ -340,7 +342,7 @@ def __init__(self, parent=None, title=_("Edit Dictionary Entry"), textPattern='' def onSeeEntriesClick(self, evt): - outTable = configBE.tablesTR[configBE.tablesFN.index(config.conf["braille"]["translationTable"])] + outTable = brailleTablesExt.fileName2displayName(config.conf["braille"]["translationTable"]) label = [_("Global dictionary"), _("Table dictionary")+(" (%s)" % outTable), _("Temporary dictionary")][self.dictRadioBox.GetSelection()] type_ = self.getType_() self.Destroy() diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index 346f5d12..a14fad82 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -261,9 +261,7 @@ def getTextInBraille(t=None, table=[]): if not t: t = getTextSelection() if not t.strip(): return '' if not table or "current" in table: - currentTable = os.path.join(brailleTables.TABLES_DIR, config.conf["braille"]["translationTable"]) - if "current" in table: table[table.index("current")] = currentTable - else: table.append(currentTable) + table = getCurrentBrailleTables() nt = [] res = '' t = t.split("\n") From 98cbce17903326c5833525899e2f40332e44fb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Fri, 24 Apr 2020 08:07:20 +0200 Subject: [PATCH 85/87] various fixes and improvements --- .../globalPlugins/brailleExtender/__init__.py | 20 ++++++--- .../brailleExtender/brailleTablesExt.py | 9 +++- .../brailleExtender/dictionaries.py | 42 ++++++++++++------- addon/globalPlugins/brailleExtender/utils.py | 2 +- 4 files changed, 49 insertions(+), 24 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/__init__.py b/addon/globalPlugins/brailleExtender/__init__.py index 0fce127b..2ad18d39 100644 --- a/addon/globalPlugins/brailleExtender/__init__.py +++ b/addon/globalPlugins/brailleExtender/__init__.py @@ -867,11 +867,13 @@ def script_switchInputBrailleTable(self, gesture): usableIn=usableIn, e=newGroup ) + table = brailleTablesExt.getTable(newGroup.members[0] if newGroup else config.conf["braille"]["inputTable"]) + if table: brailleInput.handler._table = table if not res: raise RuntimeError("error") self.reloadBrailleTables() utils.refreshBD() dictionaries.setDictTables() - desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) + desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default") + " (%s)" % brailleInput.handler.table.displayName) ui.message(_("Input: %s") % desc) script_switchInputBrailleTable.__doc__ = _("Switch between your favorite input braille tables including groups") @@ -893,24 +895,30 @@ def script_switchOutputBrailleTable(self, gesture): self.reloadBrailleTables() utils.refreshBD() dictionaries.setDictTables() - desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else _("Default")) + desc = (newGroup.name + (" (%s)" % _("group") if len(newGroup.members) > 1 else '') if newGroup else (_("Default") + " (%s)" % brailleTablesExt.fileName2displayName([config.conf["braille"]["translationTable"]])[0])) ui.message(_("Output: %s") % desc) script_switchOutputBrailleTable.__doc__ = _("Switch between your favorite output braille tables including groups") def script_currentBrailleTable(self, gesture): - inTable = brailleInput.handler.table.displayName - ouTable = brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])] + inTable = None + ouTable = None + if brailleTablesExt.groupEnabled(): + i = brailleTablesExt.getGroup(brailleTablesExt.USABLE_INPUT) + o = brailleTablesExt.getGroup(brailleTablesExt.USABLE_OUTPUT) + if i: inTable = i.name + if o: ouTable = o.name + if not inTable: inTable = brailleInput.handler.table.displayName + if not ouTable: ouTable = brailleTablesExt.listTablesDisplayName()[brailleTablesExt.listTablesFileName().index(config.conf["braille"]["translationTable"])] if ouTable == inTable: braille.handler.message(_("I⣿O:{I}").format(I=inTable, O=ouTable)) speech.speakMessage(_("Input and output: {I}.").format(I=inTable, O=ouTable)) else: braille.handler.message(_("I:{I} ⣿ O: {O}").format(I=inTable, O=ouTable)) speech.speakMessage(_("Input: {I}; Output: {O}").format(I=inTable, O=ouTable)) - return script_currentBrailleTable.__doc__ = _( - "Announce the current input and output braille tables") + "Announce the current input and output braille tables and/or groups") def script_brlDescChar(self, gesture): utils.currentCharDesc() diff --git a/addon/globalPlugins/brailleExtender/brailleTablesExt.py b/addon/globalPlugins/brailleExtender/brailleTablesExt.py index 54b5154c..83723cf9 100644 --- a/addon/globalPlugins/brailleExtender/brailleTablesExt.py +++ b/addon/globalPlugins/brailleExtender/brailleTablesExt.py @@ -26,8 +26,8 @@ POSITION_NEXT = "n" POSITIONS = [POSITION_CURRENT, POSITION_PREVIOUS, POSITION_NEXT] -USABLE_INPUT = "i" -USABLE_OUTPUT = "o" +USABLE_INPUT = 'i' +USABLE_OUTPUT = 'o' USABLE_LIST = [USABLE_INPUT, USABLE_OUTPUT] GroupTables = namedtuple("GroupTables", ("name", "members", "usableIn")) @@ -78,6 +78,11 @@ def getCustomBrailleTables(): def isContractedTable(fileName): return fileName in listTablesFileName(listContractedTables()) +def getTable(fileName, tables=None): + if not tables: tables = listTables() + for table in tables: + if table.fileName == fileName: return table + return None def getTablesFilenameByID(l: List[int], tables=None) -> List[int]: tablesFileName = [table.fileName for table in (tables or listTables())] diff --git a/addon/globalPlugins/brailleExtender/dictionaries.py b/addon/globalPlugins/brailleExtender/dictionaries.py index 87a1e30f..1156b48a 100644 --- a/addon/globalPlugins/brailleExtender/dictionaries.py +++ b/addon/globalPlugins/brailleExtender/dictionaries.py @@ -46,29 +46,40 @@ } DIRECTION_LABELS_ORDERING = (DIRECTION_BOTH, DIRECTION_FORWARD, DIRECTION_BACKWARD) -dictTables = [] -invalidDictTables = set() +inputTables = [] +outputTables = [] +invalidTables = set() def checkTable(path): - global invalidDictTables + global invalidTables tablesString = b",".join([x.encode("mbcs") if isinstance(x, str) else bytes(x) for x in [path]]) if not louis.liblouis.lou_checkTable(tablesString): log.error("Can't compile: tables %s" % path) - invalidDictTables.add(path) + invalidTables.add(path) return False return True -def getValidPathsDict(): +def getValidPathsDict(usableIn): types = ["tmp", "table", "default"] - paths = [getPathDict(type_) for type_ in types] + paths = [getPathDict(type_, usableIn) for type_ in types] valid = lambda path: os.path.exists(path) and os.path.isfile(path) and checkTable(path) return [path for path in paths if valid(path)] -def getPathDict(type_): - if brailleTablesExt.groupEnabled(): return '' - if type_ == "table": path = os.path.join(configDir, "brailleDicts", config.conf["braille"]["translationTable"]) +def getPathDict(type_, usableIn): + groupEnabled = brailleTablesExt.groupEnabled() + g = brailleTablesExt.getGroup(usableIn=usableIn) + table = os.path.join(configDir, "brailleDicts", config.conf["braille"]["inputTable"]) if usableIn == brailleTablesExt.USABLE_INPUT else config.conf["braille"]["translationTable"] + if type_ == "table": + if groupEnabled and g and g.members: + if len(g.members) == 1: path = os.path.join(configDir, "brailleDicts", g.members[0]) + else: path = '' + else: path = os.path.join(configDir, "brailleDicts", table) elif type_ == "tmp": path = os.path.join(configDir, "brailleDicts", "tmp") - else: path = os.path.join(configDir, "brailleDicts", "default") + else: + if groupEnabled and g and g.members: + if len(g.members) == 1: path = os.path.join(configDir, "brailleDicts", "default") + else: path = '' + else: path = os.path.join(configDir, "brailleDicts", "default") return "%s.cti" % path def getDictionary(type_): @@ -99,18 +110,19 @@ def saveDict(type_, dict_): return True def setDictTables(): - global dictTables - dictTables = getValidPathsDict() - invalidDictTables.clear() + global inputTables, outTable + inputTables = getValidPathsDict(brailleTablesExt.USABLE_INPUT) + outputTables = getValidPathsDict(brailleTablesExt.USABLE_OUTPUT) + invalidTables.clear() def notifyInvalidTables(): - if invalidDictTables: + if invalidTables: dicts = { getPathDict("default"): "default", getPathDict("table"): "table", getPathDict("tmp"): "tmp" } - msg = _("One or more errors are present in dictionaries tables. Concerned dictionaries: %s. As a result, these dictionaries are not loaded.") % ", ".join([dicts[path] for path in invalidDictTables if path in dicts]) + msg = _("One or more errors are present in dictionaries tables. Concerned dictionaries: %s. As a result, these dictionaries are not loaded.") % ", ".join([dicts[path] for path in invalidTables if path in dicts]) wx.CallAfter(gui.messageBox, msg, _("Braille Extender"), wx.OK|wx.ICON_ERROR) def removeTmpDict(): diff --git a/addon/globalPlugins/brailleExtender/utils.py b/addon/globalPlugins/brailleExtender/utils.py index a14fad82..ef12de7e 100644 --- a/addon/globalPlugins/brailleExtender/utils.py +++ b/addon/globalPlugins/brailleExtender/utils.py @@ -475,7 +475,7 @@ def getCurrentBrailleTables(input_=False, brf=False): else: tables = [] app = appModuleHandler.getAppModuleForNVDAObject(api.getNavigatorObject()) - if brailleInput.handler._table.fileName == config.conf["braille"]["translationTable"] and app and app.appName != "nvda": tables += dictionaries.dictTables + if brailleInput.handler._table.fileName == config.conf["braille"]["translationTable"] and app and app.appName != "nvda": tables += dictionaries.inputTables if input_ else dictionaries.outputTables if input_: mainTable = os.path.join(brailleTables.TABLES_DIR, brailleInput.handler._table.fileName) group = brailleTablesExt.getGroup(usableIn='i') From 7b5636ec85ae49683ebdd736eebae763b76b8b10 Mon Sep 17 00:00:00 2001 From: Daniel Gartmann Date: Sun, 3 May 2020 16:12:26 +0200 Subject: [PATCH 86/87] l10n updates for: da --- addon/locale/da/LC_MESSAGES/nvda.po | 1362 +++++++++++++++------------ 1 file changed, 747 insertions(+), 615 deletions(-) diff --git a/addon/locale/da/LC_MESSAGES/nvda.po b/addon/locale/da/LC_MESSAGES/nvda.po index 6b2de2de..6e759295 100644 --- a/addon/locale/da/LC_MESSAGES/nvda.po +++ b/addon/locale/da/LC_MESSAGES/nvda.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: BrailleExtender 20.02.27:19953a8\n" "Report-Msgid-Bugs-To: nvda-translations@groups.io\n" -"POT-Creation-Date: 2020-04-02 01:47+0200\n" -"PO-Revision-Date: 2020-04-09 17:05+0200\n" +"POT-Creation-Date: 2020-04-09 21:04+0200\n" +"PO-Revision-Date: 2020-05-03 13:24+0200\n" "Last-Translator: Daniel Gartmann \n" "Language-Team: \n" "Language: da\n" @@ -19,175 +19,177 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,398,-1,-1,-1,-1,-1\n" -#: addon\globalPlugins\brailleExtender\__init__.py:63 +#: addon/globalPlugins/brailleExtender/__init__.py:64 msgid "Default" msgstr "Standard" -#: addon\globalPlugins\brailleExtender\__init__.py:64 +#: addon/globalPlugins/brailleExtender/__init__.py:65 msgid "Moving in the text" msgstr "Flytter i teksten" -#: addon\globalPlugins\brailleExtender\__init__.py:65 +#: addon/globalPlugins/brailleExtender/__init__.py:66 msgid "Text selection" msgstr "Tekstvalg" -#: addon\globalPlugins\brailleExtender\__init__.py:66 +#: addon/globalPlugins/brailleExtender/__init__.py:67 msgid "Objects" msgstr "Objekter" -#: addon\globalPlugins\brailleExtender\__init__.py:67 +#: addon/globalPlugins/brailleExtender/__init__.py:68 msgid "Review" msgstr "Gennemsyn" -#: addon\globalPlugins\brailleExtender\__init__.py:68 +#: addon/globalPlugins/brailleExtender/__init__.py:69 msgid "Links" msgstr "Links" -#: addon\globalPlugins\brailleExtender\__init__.py:69 +#: addon/globalPlugins/brailleExtender/__init__.py:70 msgid "Unvisited links" msgstr "Ikke-besøgte links" -#: addon\globalPlugins\brailleExtender\__init__.py:70 +#: addon/globalPlugins/brailleExtender/__init__.py:71 msgid "Visited links" msgstr "Besøgte links" -#: addon\globalPlugins\brailleExtender\__init__.py:71 +#: addon/globalPlugins/brailleExtender/__init__.py:72 msgid "Landmarks" msgstr "Landmærker" -#: addon\globalPlugins\brailleExtender\__init__.py:72 +#: addon/globalPlugins/brailleExtender/__init__.py:73 msgid "Headings" msgstr "Overskrifter" -#: addon\globalPlugins\brailleExtender\__init__.py:73 +#: addon/globalPlugins/brailleExtender/__init__.py:74 msgid "Headings at level 1" msgstr "Overskrifter på niveau 1" -#: addon\globalPlugins\brailleExtender\__init__.py:74 +#: addon/globalPlugins/brailleExtender/__init__.py:75 msgid "Headings at level 2" msgstr "Overskrifter på niveau 2" -#: addon\globalPlugins\brailleExtender\__init__.py:75 +#: addon/globalPlugins/brailleExtender/__init__.py:76 msgid "Headings at level 3" msgstr "Overskrifter på niveau 3" -#: addon\globalPlugins\brailleExtender\__init__.py:76 +#: addon/globalPlugins/brailleExtender/__init__.py:77 msgid "Headings at level 4" msgstr "Overskrifter på niveau 4" -#: addon\globalPlugins\brailleExtender\__init__.py:77 +#: addon/globalPlugins/brailleExtender/__init__.py:78 msgid "Headings at level 5" msgstr "Overskrifter på niveau 5" -#: addon\globalPlugins\brailleExtender\__init__.py:78 +#: addon/globalPlugins/brailleExtender/__init__.py:79 msgid "Headings at level 6" msgstr "Overskrifter på niveau 6" -#: addon\globalPlugins\brailleExtender\__init__.py:79 +#: addon/globalPlugins/brailleExtender/__init__.py:80 msgid "Lists" msgstr "Lister" -#: addon\globalPlugins\brailleExtender\__init__.py:80 +#: addon/globalPlugins/brailleExtender/__init__.py:81 msgid "List items" msgstr "Listeelementer" -#: addon\globalPlugins\brailleExtender\__init__.py:81 +#: addon/globalPlugins/brailleExtender/__init__.py:82 msgid "Graphics" msgstr "Grafik" -#: addon\globalPlugins\brailleExtender\__init__.py:82 +#: addon/globalPlugins/brailleExtender/__init__.py:83 msgid "Block quotes" msgstr "Blokcitater" -#: addon\globalPlugins\brailleExtender\__init__.py:83 +#: addon/globalPlugins/brailleExtender/__init__.py:84 msgid "Buttons" msgstr "Knapper" -#: addon\globalPlugins\brailleExtender\__init__.py:84 +#: addon/globalPlugins/brailleExtender/__init__.py:85 msgid "Form fields" msgstr "Formularfelter" -#: addon\globalPlugins\brailleExtender\__init__.py:85 +#: addon/globalPlugins/brailleExtender/__init__.py:86 msgid "Edit fields" msgstr "Editfelter" -#: addon\globalPlugins\brailleExtender\__init__.py:86 +#: addon/globalPlugins/brailleExtender/__init__.py:87 msgid "Radio buttons" msgstr "Radioknapper" -#: addon\globalPlugins\brailleExtender\__init__.py:87 +#: addon/globalPlugins/brailleExtender/__init__.py:88 msgid "Combo boxes" msgstr "Combo boxe" -#: addon\globalPlugins\brailleExtender\__init__.py:88 +#: addon/globalPlugins/brailleExtender/__init__.py:89 msgid "Check boxes" msgstr "Check boxe" -#: addon\globalPlugins\brailleExtender\__init__.py:89 +#: addon/globalPlugins/brailleExtender/__init__.py:90 msgid "Not link blocks" msgstr "Blokke uden links" -#: addon\globalPlugins\brailleExtender\__init__.py:90 +#: addon/globalPlugins/brailleExtender/__init__.py:91 msgid "Frames" msgstr "Rammer" -#: addon\globalPlugins\brailleExtender\__init__.py:91 +#: addon/globalPlugins/brailleExtender/__init__.py:92 msgid "Separators" msgstr "Separatorer" -#: addon\globalPlugins\brailleExtender\__init__.py:92 +#: addon/globalPlugins/brailleExtender/__init__.py:93 msgid "Embedded objects" msgstr "Indlejrede objekter" -#: addon\globalPlugins\brailleExtender\__init__.py:93 +#: addon/globalPlugins/brailleExtender/__init__.py:94 msgid "Annotations" msgstr "Annotationer" -#: addon\globalPlugins\brailleExtender\__init__.py:94 +#: addon/globalPlugins/brailleExtender/__init__.py:95 msgid "Spelling errors" msgstr "Stavefejl" -#: addon\globalPlugins\brailleExtender\__init__.py:95 +#: addon/globalPlugins/brailleExtender/__init__.py:96 msgid "Tables" msgstr "Tabeller" -#: addon\globalPlugins\brailleExtender\__init__.py:96 +#: addon/globalPlugins/brailleExtender/__init__.py:97 msgid "Move in table" msgstr "Flytte i tabel" -#: addon\globalPlugins\brailleExtender\__init__.py:102 +#: addon/globalPlugins/brailleExtender/__init__.py:103 msgid "If pressed twice, presents the information in browse mode" msgstr "Ved to tryk vises informationen i gennemsynstilstand" -#: addon\globalPlugins\brailleExtender\__init__.py:254 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Docu&mentation" msgstr "Doku&mentation" -#: addon\globalPlugins\brailleExtender\__init__.py:254 +#: addon/globalPlugins/brailleExtender/__init__.py:257 msgid "Opens the addon's documentation." msgstr "Åbner tilfføjelsesprogrammets dokumentation." -#: addon\globalPlugins\brailleExtender\__init__.py:260 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "&Settings" msgstr "&Indstillinger" -#: addon\globalPlugins\brailleExtender\__init__.py:260 +#: addon/globalPlugins/brailleExtender/__init__.py:263 msgid "Opens the addons' settings." msgstr "Åbner tilføjelsesprogrammets indstillinger" -#: addon\globalPlugins\brailleExtender\__init__.py:267 -msgid "Braille &dictionaries" -msgstr "Punktskrift&ordbøger" +#: addon/globalPlugins/brailleExtender/__init__.py:270 +#, fuzzy +#| msgid "Table dictionary" +msgid "Table &dictionaries" +msgstr "Tabel-specifik ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:267 +#: addon/globalPlugins/brailleExtender/__init__.py:270 msgid "'Braille dictionaries' menu" msgstr "Menuen 'Punktskriftordbøger'" -#: addon\globalPlugins\brailleExtender\__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "&Global dictionary" msgstr "&Global ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:268 +#: addon/globalPlugins/brailleExtender/__init__.py:271 msgid "" "A dialog where you can set global dictionary by adding dictionary entries to " "the list." @@ -195,11 +197,11 @@ msgstr "" "En dialog til at lave en global ordbog ved at tilføje ordbogselementer til " "listen." -#: addon\globalPlugins\brailleExtender\__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "&Table dictionary" msgstr "&Tabel-specifik ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:270 +#: addon/globalPlugins/brailleExtender/__init__.py:273 msgid "" "A dialog where you can set table-specific dictionary by adding dictionary " "entries to the list." @@ -207,11 +209,11 @@ msgstr "" "En dialog, hvor der kan angives en tabel-specifick ordbog ved at tilføje " "ordbogsemner til listen." -#: addon\globalPlugins\brailleExtender\__init__.py:272 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "Te&mporary dictionary" msgstr "Mi&dlertidig ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:272 +#: addon/globalPlugins/brailleExtender/__init__.py:275 msgid "" "A dialog where you can set temporary dictionary by adding dictionary entries " "to the list." @@ -219,120 +221,132 @@ msgstr "" "En dialog, hvor der kan angives en midlertidig ordbog ved at tilføje " "ordbogsemner til listen." -#: addon\globalPlugins\brailleExtender\__init__.py:275 +#: addon/globalPlugins/brailleExtender/__init__.py:278 +#, fuzzy +#| msgid "Advanced braille input mode %s" +msgid "Advanced &input mode dictionary" +msgstr "Avanceret indtastningstilstand til punktskrift %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:278 +#, fuzzy +#| msgid "Advanced braille input mode %s" +msgid "Advanced input mode configuration" +msgstr "Avanceret indtastningstilstand til punktskrift %s" + +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "&Quick launches" msgstr "&Hurtigstartere" -#: addon\globalPlugins\brailleExtender\__init__.py:275 +#: addon/globalPlugins/brailleExtender/__init__.py:284 msgid "Quick launches configuration" msgstr "Opsætning af Hurtigstartere" -#: addon\globalPlugins\brailleExtender\__init__.py:281 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "&Profile editor" msgstr "&Profileditor" -#: addon\globalPlugins\brailleExtender\__init__.py:281 +#: addon/globalPlugins/brailleExtender/__init__.py:290 msgid "Profile editor" msgstr "Profileditor" -#: addon\globalPlugins\brailleExtender\__init__.py:287 +#: addon/globalPlugins/brailleExtender/__init__.py:296 msgid "Overview of the current input braille table" msgstr "Oversigt over den aktuelle indtastningstabel" -#: addon\globalPlugins\brailleExtender\__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload add-on" msgstr "Genindlæs tilføjelsesprogram" -#: addon\globalPlugins\brailleExtender\__init__.py:289 +#: addon/globalPlugins/brailleExtender/__init__.py:298 msgid "Reload this add-on." msgstr "Genindlæs dette tilføjelsesprogram." -#: addon\globalPlugins\brailleExtender\__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "&Check for update" msgstr "&Søg efter opdateringer" -#: addon\globalPlugins\brailleExtender\__init__.py:291 +#: addon/globalPlugins/brailleExtender/__init__.py:300 msgid "Checks if update is available" msgstr "Undersøger, om der er opdateringer" -#: addon\globalPlugins\brailleExtender\__init__.py:293 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "&Website" msgstr "&Website" -#: addon\globalPlugins\brailleExtender\__init__.py:293 +#: addon/globalPlugins/brailleExtender/__init__.py:302 msgid "Open addon's website." msgstr "Åbn tilføjelsesprogrammets website." -#: addon\globalPlugins\brailleExtender\__init__.py:295 +#: addon/globalPlugins/brailleExtender/__init__.py:304 msgid "&Braille Extender" msgstr "&Udvidelse til Punktskrift" -#: addon\globalPlugins\brailleExtender\__init__.py:310 -#: addon\globalPlugins\brailleExtender\dictionaries.py:343 +#: addon/globalPlugins/brailleExtender/__init__.py:319 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Global dictionary" msgstr "Global ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:315 -#: addon\globalPlugins\brailleExtender\dictionaries.py:343 +#: addon/globalPlugins/brailleExtender/__init__.py:324 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Table dictionary" msgstr "Tabel-specifik ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:319 -#: addon\globalPlugins\brailleExtender\dictionaries.py:343 +#: addon/globalPlugins/brailleExtender/__init__.py:328 +#: addon/globalPlugins/brailleExtender/dictionaries.py:344 msgid "Temporary dictionary" msgstr "Midlertidig ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:429 -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/__init__.py:438 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "Character" msgstr "Tegn" -#: addon\globalPlugins\brailleExtender\__init__.py:430 +#: addon/globalPlugins/brailleExtender/__init__.py:439 msgid "Word" msgstr "Ord" -#: addon\globalPlugins\brailleExtender\__init__.py:431 +#: addon/globalPlugins/brailleExtender/__init__.py:440 msgid "Line" msgstr "Linje" -#: addon\globalPlugins\brailleExtender\__init__.py:432 +#: addon/globalPlugins/brailleExtender/__init__.py:441 msgid "Paragraph" msgstr "Afsnit" -#: addon\globalPlugins\brailleExtender\__init__.py:433 +#: addon/globalPlugins/brailleExtender/__init__.py:442 msgid "Page" msgstr "Side" -#: addon\globalPlugins\brailleExtender\__init__.py:434 +#: addon/globalPlugins/brailleExtender/__init__.py:443 msgid "Document" msgstr "Dokument" -#: addon\globalPlugins\brailleExtender\__init__.py:470 +#: addon/globalPlugins/brailleExtender/__init__.py:479 msgid "Not available here" msgstr "Ikke tilgængelig her" -#: addon\globalPlugins\brailleExtender\__init__.py:488 -#: addon\globalPlugins\brailleExtender\__init__.py:510 +#: addon/globalPlugins/brailleExtender/__init__.py:497 +#: addon/globalPlugins/brailleExtender/__init__.py:519 msgid "Not supported here or browse mode not enabled" msgstr "Understøttes ikke her eller gennemsynstilstand ikke slået til" -#: addon\globalPlugins\brailleExtender\__init__.py:490 +#: addon/globalPlugins/brailleExtender/__init__.py:499 msgid "Select previous rotor setting" msgstr "Vælg forrige rotorindstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:491 +#: addon/globalPlugins/brailleExtender/__init__.py:500 msgid "Select next rotor setting" msgstr "Vælg næste rotorindstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:539 +#: addon/globalPlugins/brailleExtender/__init__.py:548 msgid "Move to previous item depending rotor setting" msgstr "Flytter til forrige element afhængig af rotor-indstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:540 +#: addon/globalPlugins/brailleExtender/__init__.py:549 msgid "Move to next item depending rotor setting" msgstr "Flytter til næste element afhængig af rotor-indstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:548 +#: addon/globalPlugins/brailleExtender/__init__.py:557 msgid "" "Varies depending on rotor setting. Eg: in object mode, it's similar to NVDA" "+enter" @@ -340,115 +354,113 @@ msgstr "" "Varierer alt efter rotor-indstilling. Fx: I objekt-tilstand svarer det til " "NVDA+enter" -#: addon\globalPlugins\brailleExtender\__init__.py:551 +#: addon/globalPlugins/brailleExtender/__init__.py:560 msgid "Move to previous item using rotor setting" msgstr "Flytter til forrige element alt efter rotor-indstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:552 +#: addon/globalPlugins/brailleExtender/__init__.py:561 msgid "Move to next item using rotor setting" msgstr "Flytter til næste element alt efter rotor-indstilling" -#: addon\globalPlugins\brailleExtender\__init__.py:556 +#: addon/globalPlugins/brailleExtender/__init__.py:565 #, python-format msgid "Braille keyboard %s" msgstr "Punktskrifttastatur %s" -#: addon\globalPlugins\brailleExtender\__init__.py:556 -#: addon\globalPlugins\brailleExtender\__init__.py:579 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "locked" msgstr "låst" -#: addon\globalPlugins\brailleExtender\__init__.py:556 -#: addon\globalPlugins\brailleExtender\__init__.py:579 +#: addon/globalPlugins/brailleExtender/__init__.py:565 +#: addon/globalPlugins/brailleExtender/__init__.py:588 msgid "unlocked" msgstr "låst op" -#: addon\globalPlugins\brailleExtender\__init__.py:557 +#: addon/globalPlugins/brailleExtender/__init__.py:566 msgid "Lock/unlock braille keyboard" msgstr "Lås/lås op for punktskrifttastatur" -#: addon\globalPlugins\brailleExtender\__init__.py:561 -#: addon\globalPlugins\brailleExtender\__init__.py:567 -#: addon\globalPlugins\brailleExtender\__init__.py:574 -#: addon\globalPlugins\brailleExtender\__init__.py:585 -#: addon\globalPlugins\brailleExtender\__init__.py:653 -#: addon\globalPlugins\brailleExtender\__init__.py:659 +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 msgid "enabled" msgstr "slået til" -#: addon\globalPlugins\brailleExtender\__init__.py:561 -#: addon\globalPlugins\brailleExtender\__init__.py:567 -#: addon\globalPlugins\brailleExtender\__init__.py:574 -#: addon\globalPlugins\brailleExtender\__init__.py:585 -#: addon\globalPlugins\brailleExtender\__init__.py:653 -#: addon\globalPlugins\brailleExtender\__init__.py:659 +#: addon/globalPlugins/brailleExtender/__init__.py:570 +#: addon/globalPlugins/brailleExtender/__init__.py:576 +#: addon/globalPlugins/brailleExtender/__init__.py:583 +#: addon/globalPlugins/brailleExtender/__init__.py:594 +#: addon/globalPlugins/brailleExtender/__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:668 msgid "disabled" msgstr "slået fra" -#: addon\globalPlugins\brailleExtender\__init__.py:562 +#: addon/globalPlugins/brailleExtender/__init__.py:571 #, python-format msgid "One hand mode %s" msgstr "Enhåndstilstand %s" -#: addon\globalPlugins\brailleExtender\__init__.py:563 -#, fuzzy -#| msgid "Enable/disable BRF mode" +#: addon/globalPlugins/brailleExtender/__init__.py:572 msgid "Enable/disable one hand mode feature" -msgstr "Slå BRF-tilstand til/fra" +msgstr "Slå Enhåndstilstand til/fra" -#: addon\globalPlugins\brailleExtender\__init__.py:567 +#: addon/globalPlugins/brailleExtender/__init__.py:576 #, python-format msgid "Dots 7 and 8: %s" -msgstr "Punkterne 7 og 8: %s" +msgstr "Prikkerne 7 og 8: %s" -#: addon\globalPlugins\brailleExtender\__init__.py:569 +#: addon/globalPlugins/brailleExtender/__init__.py:578 msgid "Hide/show dots 7 and 8" -msgstr "Skjul/vis punkt 7 og 8" +msgstr "Skjul/vis prik 7 og 8" -#: addon\globalPlugins\brailleExtender\__init__.py:574 +#: addon/globalPlugins/brailleExtender/__init__.py:583 #, python-format msgid "BRF mode: %s" msgstr "BRF-tilstand: %s" -#: addon\globalPlugins\brailleExtender\__init__.py:575 +#: addon/globalPlugins/brailleExtender/__init__.py:584 msgid "Enable/disable BRF mode" msgstr "Slå BRF-tilstand til/fra" -#: addon\globalPlugins\brailleExtender\__init__.py:579 +#: addon/globalPlugins/brailleExtender/__init__.py:588 #, python-format msgid "Modifier keys %s" msgstr "Modifikationstaster %s" -#: addon\globalPlugins\brailleExtender\__init__.py:580 +#: addon/globalPlugins/brailleExtender/__init__.py:589 msgid "Lock/unlock modifiers keys" msgstr "Tryk/slip modifikationstaster" -#: addon\globalPlugins\brailleExtender\__init__.py:586 +#: addon/globalPlugins/brailleExtender/__init__.py:595 msgid "Enable/disable Attribra" msgstr "Slå Attribra til/fra" -#: addon\globalPlugins\brailleExtender\__init__.py:596 +#: addon/globalPlugins/brailleExtender/__init__.py:605 msgid "Quick access to the \"say current line while scrolling in\" option" msgstr "Hurtig adgang til indstillingen \"sig aktuel linje under rul i\"" -#: addon\globalPlugins\brailleExtender\__init__.py:601 +#: addon/globalPlugins/brailleExtender/__init__.py:610 msgid "Speech on" msgstr "Tale til" -#: addon\globalPlugins\brailleExtender\__init__.py:604 +#: addon/globalPlugins/brailleExtender/__init__.py:613 msgid "Speech off" msgstr "Tale fra" -#: addon\globalPlugins\brailleExtender\__init__.py:606 +#: addon/globalPlugins/brailleExtender/__init__.py:615 msgid "Toggle speech on or off" msgstr "Slår tale til eller fra" -#: addon\globalPlugins\brailleExtender\__init__.py:614 +#: addon/globalPlugins/brailleExtender/__init__.py:623 msgid "No extra info for this element" msgstr "Ingen yderligere oplysninger om dette emne" #. Translators: Input help mode message for report extra infos command. -#: addon\globalPlugins\brailleExtender\__init__.py:618 +#: addon/globalPlugins/brailleExtender/__init__.py:627 msgid "" "Reports some extra infos for the current element. For example, the URL on a " "link" @@ -456,35 +468,35 @@ msgstr "" "Giver yderligere oplysninger om det aktuelle element. Det kan fx være " "adressen på et link" -#: addon\globalPlugins\brailleExtender\__init__.py:623 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid " Input table" msgstr "Indtastningstabel" -#: addon\globalPlugins\brailleExtender\__init__.py:623 +#: addon/globalPlugins/brailleExtender/__init__.py:632 msgid "Output table" msgstr "Visningstabel" -#: addon\globalPlugins\brailleExtender\__init__.py:625 +#: addon/globalPlugins/brailleExtender/__init__.py:634 #, python-format msgid "Table overview (%s)" msgstr "Tabelvisning (%s)" -#: addon\globalPlugins\brailleExtender\__init__.py:626 +#: addon/globalPlugins/brailleExtender/__init__.py:635 msgid "Display an overview of current input braille table" msgstr "" "Viser en oversigt over den aktuelt valgte punktskrifttabel til indtastning" -#: addon\globalPlugins\brailleExtender\__init__.py:631 -#: addon\globalPlugins\brailleExtender\__init__.py:639 -#: addon\globalPlugins\brailleExtender\__init__.py:646 +#: addon/globalPlugins/brailleExtender/__init__.py:640 +#: addon/globalPlugins/brailleExtender/__init__.py:648 +#: addon/globalPlugins/brailleExtender/__init__.py:655 msgid "No text selection" msgstr "Ingen tekst valgt" -#: addon\globalPlugins\brailleExtender\__init__.py:632 +#: addon/globalPlugins/brailleExtender/__init__.py:641 msgid "Unicode Braille conversion" msgstr "Unicode punktskriftkonvertering" -#: addon\globalPlugins\brailleExtender\__init__.py:633 +#: addon/globalPlugins/brailleExtender/__init__.py:642 msgid "" "Convert the text selection in unicode braille and display it in a browseable " "message" @@ -492,11 +504,11 @@ msgstr "" "Konvertér den valgte tekst til unicode punktskrift og vis teksten i en " "navigérbar meddelelse" -#: addon\globalPlugins\brailleExtender\__init__.py:640 +#: addon/globalPlugins/brailleExtender/__init__.py:649 msgid "Braille Unicode to cell descriptions" msgstr "Punktskrift Unicode til beskrivelser af punktcelle" -#: addon\globalPlugins\brailleExtender\__init__.py:641 +#: addon/globalPlugins/brailleExtender/__init__.py:650 msgid "" "Convert text selection in braille cell descriptions and display it in a " "browseable message" @@ -504,11 +516,11 @@ msgstr "" "Konvertér valgte tekst til beskrivelse af punktceller og viser den i en " "navigérbar meddelelse" -#: addon\globalPlugins\brailleExtender\__init__.py:648 +#: addon/globalPlugins/brailleExtender/__init__.py:657 msgid "Cell descriptions to braille Unicode" msgstr "Beskrivelse af punktceller til punktskrift Unicode" -#: addon\globalPlugins\brailleExtender\__init__.py:649 +#: addon/globalPlugins/brailleExtender/__init__.py:658 msgid "" "Braille cell description to Unicode Braille. E.g.: in a edit field type " "'125-24-0-1-123-123'. Then select this text and execute this command" @@ -516,101 +528,99 @@ msgstr "" "Beskrivelse af punktcelle til Unicode punktskrift. I et editfelt kan du fx " "skrive '125-24-0-1-123-123'. Vælg derefter teksten og udfør denne kommando" -#: addon\globalPlugins\brailleExtender\__init__.py:654 +#: addon/globalPlugins/brailleExtender/__init__.py:663 #, python-format msgid "Advanced braille input mode %s" msgstr "Avanceret indtastningstilstand til punktskrift %s" -#: addon\globalPlugins\brailleExtender\__init__.py:655 -#, fuzzy -#| msgid "Enable/disable BRF mode" +#: addon/globalPlugins/brailleExtender/__init__.py:664 msgid "Enable/disable the advanced input mode" -msgstr "Slå BRF-tilstand til/fra" +msgstr "Slå avanceret indtastningstilstand til/fra" -#: addon\globalPlugins\brailleExtender\__init__.py:660 +#: addon/globalPlugins/brailleExtender/__init__.py:669 #, python-format msgid "Description of undefined characters %s" msgstr "Beskrivelse af ikke-defineredd tegn %s" -#: addon\globalPlugins\brailleExtender\__init__.py:662 +#: addon/globalPlugins/brailleExtender/__init__.py:671 msgid "Enable/disable description of undefined characters" msgstr "Slå beskrivelse af ikke-definerede tegn til og fra" -#: addon\globalPlugins\brailleExtender\__init__.py:666 +#: addon/globalPlugins/brailleExtender/__init__.py:675 msgid "Get the cursor position of text" msgstr "Oplys markørens placering i teksten" -#: addon\globalPlugins\brailleExtender\__init__.py:692 +#: addon/globalPlugins/brailleExtender/__init__.py:701 msgid "Hour and date with autorefresh" msgstr "Tid og dato med automatisk opdatering" -#: addon\globalPlugins\brailleExtender\__init__.py:705 +#: addon/globalPlugins/brailleExtender/__init__.py:714 msgid "Autoscroll stopped" msgstr "Autorul stoppet" -#: addon\globalPlugins\brailleExtender\__init__.py:712 +#: addon/globalPlugins/brailleExtender/__init__.py:721 msgid "Unable to start autoscroll. More info in NVDA log" msgstr "Autorul kunne ikke starte. Yderligere oplysninger i NVDA loggen" -#: addon\globalPlugins\brailleExtender\__init__.py:717 +#: addon/globalPlugins/brailleExtender/__init__.py:726 msgid "Enable/disable autoscroll" msgstr "Slå autorul til/fra" -#: addon\globalPlugins\brailleExtender\__init__.py:732 +#: addon/globalPlugins/brailleExtender/__init__.py:741 msgid "Increase the master volume" msgstr "Skru op for systemlydstyrke" -#: addon\globalPlugins\brailleExtender\__init__.py:749 +#: addon/globalPlugins/brailleExtender/__init__.py:758 msgid "Decrease the master volume" msgstr "Skru ned for systemlydstyrke" -#: addon\globalPlugins\brailleExtender\__init__.py:755 +#: addon/globalPlugins/brailleExtender/__init__.py:764 msgid "Muted sound" msgstr "Lyd slået fra" -#: addon\globalPlugins\brailleExtender\__init__.py:757 +#: addon/globalPlugins/brailleExtender/__init__.py:766 #, python-format msgid "Unmuted sound (%3d%%)" msgstr "Lyd slået til (%3d%%)" -#: addon\globalPlugins\brailleExtender\__init__.py:763 +#: addon/globalPlugins/brailleExtender/__init__.py:772 msgid "Mute or unmute sound" msgstr "Slå lyd til eller fra" -#: addon\globalPlugins\brailleExtender\__init__.py:768 +#: addon/globalPlugins/brailleExtender/__init__.py:777 #, python-format msgid "Show the %s documentation" msgstr "Vis %s dokumentationen" -#: addon\globalPlugins\brailleExtender\__init__.py:806 +#: addon/globalPlugins/brailleExtender/__init__.py:815 msgid "No such file or directory" msgstr "Denne fil eller mappe findes ikke" -#: addon\globalPlugins\brailleExtender\__init__.py:808 +#: addon/globalPlugins/brailleExtender/__init__.py:817 msgid "Opens a custom program/file. Go to settings to define them" msgstr "Åbner valgfrigt program/fil. Angiv dem i indstillinger" -#: addon\globalPlugins\brailleExtender\__init__.py:815 +#: addon/globalPlugins/brailleExtender/__init__.py:824 #, python-format msgid "Check for %s updates, and starts the download if there is one" msgstr "" "Søger efter %s opdateringer og påbegynder hentningen, hvis der findes én" -#: addon\globalPlugins\brailleExtender\__init__.py:845 +#: addon/globalPlugins/brailleExtender/__init__.py:854 msgid "Increase autoscroll delay" msgstr "Sæt forsinkelse ved autorul op" -#: addon\globalPlugins\brailleExtender\__init__.py:846 +#: addon/globalPlugins/brailleExtender/__init__.py:855 msgid "Decrease autoscroll delay" msgstr "Sæt forsinkelse ved autorul ned" -#: addon\globalPlugins\brailleExtender\__init__.py:850 -#: addon\globalPlugins\brailleExtender\__init__.py:868 +#: addon/globalPlugins/brailleExtender/__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:877 msgid "Please use NVDA 2017.3 minimum for this feature" msgstr "Brug venligst som minimum NVDA 2017.3 til denne funktion " -#: addon\globalPlugins\brailleExtender\__init__.py:852 -#: addon\globalPlugins\brailleExtender\__init__.py:870 +#: addon/globalPlugins/brailleExtender/__init__.py:861 +#: addon/globalPlugins/brailleExtender/__init__.py:879 msgid "" "You must choose at least two tables for this feature. Please fill in the " "settings" @@ -618,49 +628,49 @@ msgstr "" "Du skal vælge mindst to tabeller til denne funktion. Udfyld venligst " "indstillingerne" -#: addon\globalPlugins\brailleExtender\__init__.py:859 +#: addon/globalPlugins/brailleExtender/__init__.py:868 #, python-format msgid "Input: %s" msgstr "Indtastning: %s" -#: addon\globalPlugins\brailleExtender\__init__.py:863 +#: addon/globalPlugins/brailleExtender/__init__.py:872 msgid "Switch between his favorite input braille tables" msgstr "Skift imellem foretrukne indtastningstabeller" -#: addon\globalPlugins\brailleExtender\__init__.py:879 +#: addon/globalPlugins/brailleExtender/__init__.py:888 #, python-format msgid "Output: %s" msgstr "Visning: %s" -#: addon\globalPlugins\brailleExtender\__init__.py:882 +#: addon/globalPlugins/brailleExtender/__init__.py:891 msgid "Switch between his favorite output braille tables" msgstr "Skift imellem foretrukne oversættelsestabeller" -#: addon\globalPlugins\brailleExtender\__init__.py:888 +#: addon/globalPlugins/brailleExtender/__init__.py:897 #, python-brace-format msgid "I⣿O:{I}" msgstr "I⣿O:{I}" -#: addon\globalPlugins\brailleExtender\__init__.py:889 +#: addon/globalPlugins/brailleExtender/__init__.py:898 #, python-brace-format msgid "Input and output: {I}." msgstr "Indtastning og oversættelse: {I}." -#: addon\globalPlugins\brailleExtender\__init__.py:891 +#: addon/globalPlugins/brailleExtender/__init__.py:900 #, python-brace-format msgid "I:{I} ⣿ O: {O}" msgstr "I:{I} ⣿ O: {O}" -#: addon\globalPlugins\brailleExtender\__init__.py:892 +#: addon/globalPlugins/brailleExtender/__init__.py:901 #, python-brace-format msgid "Input: {I}; Output: {O}" msgstr "Indtastning: {I}; Oversættelse: {O}" -#: addon\globalPlugins\brailleExtender\__init__.py:896 +#: addon/globalPlugins/brailleExtender/__init__.py:905 msgid "Announce the current input and output braille tables" msgstr "Oplyser aktuelt valgte punkttabeller til indskrivning og visning " -#: addon\globalPlugins\brailleExtender\__init__.py:901 +#: addon/globalPlugins/brailleExtender/__init__.py:910 msgid "" "Gives the Unicode value of the character where the cursor is located and the " "decimal, binary and octal equivalent." @@ -668,7 +678,7 @@ msgstr "" "Oplyser Unicode-værdien for tegnet hvor cursoren er placeret samt den samme " "værdi i decimal, binær og oktal." -#: addon\globalPlugins\brailleExtender\__init__.py:909 +#: addon/globalPlugins/brailleExtender/__init__.py:918 msgid "" "Show the output speech for selected text in braille. Useful for emojis for " "example" @@ -676,110 +686,110 @@ msgstr "" "Vis taleoutput for den valgte tekst på punkt. Nyttigt for eksempel ved " "emojier" -#: addon\globalPlugins\brailleExtender\__init__.py:913 +#: addon/globalPlugins/brailleExtender/__init__.py:922 msgid "No shortcut performed from a braille display" msgstr "Ingen genvej udført fra punktdisplay" -#: addon\globalPlugins\brailleExtender\__init__.py:917 +#: addon/globalPlugins/brailleExtender/__init__.py:926 msgid "Repeat the last shortcut performed from a braille display" msgstr "Udfør seneste genvej fra punktdisplay igen" -#: addon\globalPlugins\brailleExtender\__init__.py:931 +#: addon/globalPlugins/brailleExtender/__init__.py:940 #, python-format msgid "%s reloaded" msgstr "%s genindlæst" -#: addon\globalPlugins\brailleExtender\__init__.py:943 +#: addon/globalPlugins/brailleExtender/__init__.py:952 #, python-format msgid "Reload %s" msgstr "Genindlæs %s" -#: addon\globalPlugins\brailleExtender\__init__.py:946 +#: addon/globalPlugins/brailleExtender/__init__.py:955 msgid "Reload the first braille display defined in settings" msgstr "Genindlæs det første punktdisplay angivet i indstillinger" -#: addon\globalPlugins\brailleExtender\__init__.py:949 +#: addon/globalPlugins/brailleExtender/__init__.py:958 msgid "Reload the second braille display defined in settings" msgstr "Genindlæs det andet punktdisplay angivet i indstillinger" -#: addon\globalPlugins\brailleExtender\__init__.py:955 +#: addon/globalPlugins/brailleExtender/__init__.py:964 msgid "No braille display specified. No reload to do" msgstr "Ingen punktdisplay angivet. Ingen renindlæsning gennemført" -#: addon\globalPlugins\brailleExtender\__init__.py:992 +#: addon/globalPlugins/brailleExtender/__init__.py:1001 msgid "WIN" msgstr "WIN" -#: addon\globalPlugins\brailleExtender\__init__.py:993 +#: addon/globalPlugins/brailleExtender/__init__.py:1002 msgid "CTRL" msgstr "CTRL" -#: addon\globalPlugins\brailleExtender\__init__.py:994 +#: addon/globalPlugins/brailleExtender/__init__.py:1003 msgid "SHIFT" msgstr "SHIFT" -#: addon\globalPlugins\brailleExtender\__init__.py:995 +#: addon/globalPlugins/brailleExtender/__init__.py:1004 msgid "ALT" msgstr "ALT" -#: addon\globalPlugins\brailleExtender\__init__.py:1097 +#: addon/globalPlugins/brailleExtender/__init__.py:1106 msgid "Keyboard shortcut cancelled" msgstr "Tastaturgenvej annulleret" #. /* docstrings for modifier keys */ -#: addon\globalPlugins\brailleExtender\__init__.py:1105 +#: addon/globalPlugins/brailleExtender/__init__.py:1114 msgid "Emulate pressing down " msgstr "Svarer til at trykke " -#: addon\globalPlugins\brailleExtender\__init__.py:1106 +#: addon/globalPlugins/brailleExtender/__init__.py:1115 msgid " on the system keyboard" msgstr " på systemets tastatur" -#: addon\globalPlugins\brailleExtender\__init__.py:1162 +#: addon/globalPlugins/brailleExtender/__init__.py:1171 msgid "Current braille view saved" msgstr "Det viste på punktdisplayet er blevet gemt" -#: addon\globalPlugins\brailleExtender\__init__.py:1165 +#: addon/globalPlugins/brailleExtender/__init__.py:1174 msgid "Buffer cleaned" msgstr "Buffer renset" -#: addon\globalPlugins\brailleExtender\__init__.py:1166 +#: addon/globalPlugins/brailleExtender/__init__.py:1175 msgid "Save the current braille view. Press twice quickly to clean the buffer" msgstr "" "Gem det, der vises på punktdisplayet. Tryk 2 gange hurtigt for at tømme " "bufferen" -#: addon\globalPlugins\brailleExtender\__init__.py:1171 +#: addon/globalPlugins/brailleExtender/__init__.py:1180 msgid "View saved" msgstr "Vis gemte" -#: addon\globalPlugins\brailleExtender\__init__.py:1172 +#: addon/globalPlugins/brailleExtender/__init__.py:1181 msgid "Buffer empty" msgstr "Buffer er tom" -#: addon\globalPlugins\brailleExtender\__init__.py:1173 +#: addon/globalPlugins/brailleExtender/__init__.py:1182 msgid "Show the saved braille view through a flash message" msgstr "Vis det gemte punktdisplay-billede ved hjælp af en flashmeddelelse" -#: addon\globalPlugins\brailleExtender\__init__.py:1207 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Pause" msgstr "Pause" -#: addon\globalPlugins\brailleExtender\__init__.py:1207 +#: addon/globalPlugins/brailleExtender/__init__.py:1216 msgid "Resume" msgstr "Genoptag" -#: addon\globalPlugins\brailleExtender\__init__.py:1249 -#: addon\globalPlugins\brailleExtender\__init__.py:1256 +#: addon/globalPlugins/brailleExtender/__init__.py:1258 +#: addon/globalPlugins/brailleExtender/__init__.py:1265 #, python-format msgid "Auto test type %d" msgstr "Autotest type %d" -#: addon\globalPlugins\brailleExtender\__init__.py:1266 +#: addon/globalPlugins/brailleExtender/__init__.py:1275 msgid "Auto test stopped" msgstr "Autotest stoppet" -#: addon\globalPlugins\brailleExtender\__init__.py:1276 +#: addon/globalPlugins/brailleExtender/__init__.py:1285 msgid "" "Auto test started. Use the up and down arrow keys to change speed. Use the " "left and right arrow keys to change test type. Use space key to pause or " @@ -790,138 +800,164 @@ msgstr "" "Mellemrumstasten til at sætte testen på pause eller genoptage den. Brug " "Escape til at afbryde" -#: addon\globalPlugins\brailleExtender\__init__.py:1278 +#: addon/globalPlugins/brailleExtender/__init__.py:1287 msgid "Auto test" msgstr "Autotest" -#: addon\globalPlugins\brailleExtender\__init__.py:1283 +#: addon/globalPlugins/brailleExtender/__init__.py:1292 msgid "Add dictionary entry or see a dictionary" msgstr "Tilføj et ordbogselement eller se en ordbog" -#: addon\globalPlugins\brailleExtender\__init__.py:1284 +#: addon/globalPlugins/brailleExtender/__init__.py:1293 msgid "Add a entry in braille dictionary" msgstr "Føj element til punktskriftordbog" #. Add-on summary, usually the user visible name of the addon. #. Translators: Summary for this add-on to be shown on installation and add-on information. -#: addon\globalPlugins\brailleExtender\__init__.py:1334 -#: addon\globalPlugins\brailleExtender\dictionaries.py:112 -#: addon\globalPlugins\brailleExtender\dictionaries.py:368 -#: addon\globalPlugins\brailleExtender\dictionaries.py:375 -#: addon\globalPlugins\brailleExtender\dictionaries.py:379 -#: addon\globalPlugins\brailleExtender\dictionaries.py:383 -#: addon\globalPlugins\brailleExtender\settings.py:33 -#: addon\globalPlugins\brailleExtender\settings.py:411 buildVars.py:24 +#: addon/globalPlugins/brailleExtender/__init__.py:1344 +#: addon/globalPlugins/brailleExtender/dictionaries.py:112 +#: addon/globalPlugins/brailleExtender/dictionaries.py:369 +#: addon/globalPlugins/brailleExtender/dictionaries.py:376 +#: addon/globalPlugins/brailleExtender/dictionaries.py:380 +#: addon/globalPlugins/brailleExtender/dictionaries.py:384 +#: addon/globalPlugins/brailleExtender/settings.py:35 +#: addon/globalPlugins/brailleExtender/settings.py:388 buildVars.py:24 msgid "Braille Extender" msgstr "Udvidelse til Punktskrift" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 msgid "HUC8" msgstr "HUC8" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 -#: addon\globalPlugins\brailleExtender\configBE.py:65 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:64 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:258 msgid "Hexadecimal" msgstr "Hexadecimal" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 -#: addon\globalPlugins\brailleExtender\configBE.py:66 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:65 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:259 msgid "Decimal" msgstr "Decimal" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 -#: addon\globalPlugins\brailleExtender\configBE.py:67 +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:66 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:260 msgid "Octal" msgstr "Octal" -#: addon\globalPlugins\brailleExtender\addonDoc.py:35 -#: addon\globalPlugins\brailleExtender\configBE.py:68 -#| msgid "Dictionary" +#: addon/globalPlugins/brailleExtender/addonDoc.py:35 +#: addon/globalPlugins/brailleExtender/configBE.py:67 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:261 msgid "Binary" msgstr "Binær" -#: addon\globalPlugins\brailleExtender\addonDoc.py:46 +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/addonDoc.py:46 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:239 msgid "Representation of undefined characters" msgstr "Repræsentation af ikke-defineredd tegn" -#: addon\globalPlugins\brailleExtender\addonDoc.py:48 +#: addon/globalPlugins/brailleExtender/addonDoc.py:48 msgid "" "The extension allows you to customize how an undefined character should be " "represented within a braille table. To do so, go to the braille table " "settings. You can choose between the following representations:" msgstr "" +"Udvidelsen giver mulighed for at indstille, hvordan et ikke-defineret tegn " +"skal gengives i en punktskrifttabel. Det gøres ved at åbne indstillingerne " +"for punkttabel. Der kan vælges imellem følgende gengivelser:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:52 +#: addon/globalPlugins/brailleExtender/addonDoc.py:52 msgid "" "You can also combine this option with the “describe the character if " "possible” setting." msgstr "" +"Denne indstilling kan også kombineres med indstillinge “beskriv tegnet hvis " +"muligt”." -#: addon\globalPlugins\brailleExtender\addonDoc.py:54 +#: addon/globalPlugins/brailleExtender/addonDoc.py:54 msgid "Notes:" msgstr "Bemærkninger:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:56 +#: addon/globalPlugins/brailleExtender/addonDoc.py:56 msgid "" "To distinguish the undefined set of characters while maximizing space, the " "best combination is the usage of the HUC8 representation without checking " "the “describe character if possible” option." msgstr "" +"For at adskille de ikke-definerede grupper af tegn og udnytte pladsen, er " +"den bedste kombination at bruge HUC8-repræsentationen og ikke afkrydse " +"indstillingen “beskriv tegn hvis muligt ”." -#: addon\globalPlugins\brailleExtender\addonDoc.py:57 +#: addon/globalPlugins/brailleExtender/addonDoc.py:57 #, python-brace-format msgid "To learn more about the HUC representation, see {url}" -msgstr "" +msgstr "Lær mere om HUC-repræsentationen på {url}" -#: addon\globalPlugins\brailleExtender\addonDoc.py:58 +#: addon/globalPlugins/brailleExtender/addonDoc.py:58 msgid "" "Keep in mind that definitions in tables and those in your table dictionaries " "take precedence over character descriptions, which also take precedence over " "the chosen representation for undefined characters." msgstr "" +"Husk på, at definitioner i tabeller og dem i dine tabelordbøger har forrang " +"i forhold til tegnbeskrivelser, som selv har forrang i forhold til den " +"valgte gengivelse af ikke-definerede tegn." -#: addon\globalPlugins\brailleExtender\addonDoc.py:61 +#: addon/globalPlugins/brailleExtender/addonDoc.py:61 msgid "Getting Current Character Info" msgstr "Finder info for aktuelle tegn" -#: addon\globalPlugins\brailleExtender\addonDoc.py:63 +#: addon/globalPlugins/brailleExtender/addonDoc.py:63 msgid "" "This feature allows you to obtain various information regarding the " "character under the cursor using the current input braille table, such as:" msgstr "" +"Denne funktion gør det muligt at få forskellige oplysninger om tegnet under " +"markøren ved hjælp af den aktuelt valgte indtastningstabel såsom:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:65 +#: addon/globalPlugins/brailleExtender/addonDoc.py:65 msgid "" "the HUC8 and HUC6 representations; the hexadecimal, decimal, octal or binary " "values; A description of the character if possible; - The Unicode Braille " "representation and the Braille dot pattern." msgstr "" +"Gengivelserne i HUC8 og HUC6; værdierne i hexadecimal, decimal, octal eller " +"binær; en beskrivelse af tegnet hvis muligt; - Unicode " +"punktskriftrepræsentationen og punktskriftmønsteret." -#: addon\globalPlugins\brailleExtender\addonDoc.py:67 +#: addon/globalPlugins/brailleExtender/addonDoc.py:67 msgid "" "Pressing the defined gesture associated to this function once shows you the " "information in a flash message and a double-press displays the same " "information in a virtual NVDA buffer." msgstr "" +"Hvis du udfører den indstillede inputbevægelse til denne funktion én gang, " +"vises informationen i en flash-meddelelse, og udføres inputbevægelsen to " +"gange, vises de samme informationer i en NVDA buffer." -#: addon\globalPlugins\brailleExtender\addonDoc.py:69 +#: addon/globalPlugins/brailleExtender/addonDoc.py:69 msgid "" "On supported displays the defined gesture is ⡉+space. No system gestures are " "defined by default." msgstr "" +"På understøttede displays er den definerede inputbevægelse ⡉+mellemrum. Der " +"er som standard ikke angivet nogen system-inputbevægelse." -#: addon\globalPlugins\brailleExtender\addonDoc.py:71 +#: addon/globalPlugins/brailleExtender/addonDoc.py:71 #, python-brace-format msgid "" "For example, for the '{chosenChar}' character, we will get the following " "information:" -msgstr "" +msgstr "For tegnet '{chosenChar}' får vi fx følgende oplysninger:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:74 +#: addon/globalPlugins/brailleExtender/addonDoc.py:74 msgid "Advanced Braille Input" msgstr "Avanceret indtastning i punktskrift" -#: addon\globalPlugins\brailleExtender\addonDoc.py:76 +#: addon/globalPlugins/brailleExtender/addonDoc.py:76 msgid "" "This feature allows you to enter any character from its HUC8 representation " "or its hexadecimal/decimal/octal/binary value. Moreover, it allows you to " @@ -931,56 +967,64 @@ msgid "" "Alternatively, an option allows you to automatically exit this mode after " "entering a single pattern. " msgstr "" +"Denne funktion gør det muligt at indtaste et hvilket som helst tegn ud fra " +"HUC8-repræsentationen eller via hexadecimal/decimal/octal/binær værdien. Den " +"giver desuden mulighed for at opbygge egne forkortelser. Gå til den " +"avancerede indtastningstilstand for at få adgang til denne funktion og " +"indtast det ønskede mønster. Standard inputbevægelser: NVDA+Windows+i eller ⡊" +"+mellemrum (på understøttede displays). Brug samme inputbevægelse til at " +"forlade denne tilstand. Alternativt giver en indstilling mulighed for at " +"forlade denne tilstand efter indtastning af et enkelt mønster. " -#: addon\globalPlugins\brailleExtender\addonDoc.py:80 +#: addon/globalPlugins/brailleExtender/addonDoc.py:80 msgid "Specify the basis as follows" -msgstr "" +msgstr "Angiv basen som følger" -#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "⠭ or ⠓" -msgstr "" +msgstr "⠭ eller ⠓" -#: addon\globalPlugins\brailleExtender\addonDoc.py:82 +#: addon/globalPlugins/brailleExtender/addonDoc.py:82 msgid "for a hexadecimal value" -msgstr "" +msgstr "for en hexadecimal værdi" -#: addon\globalPlugins\brailleExtender\addonDoc.py:83 +#: addon/globalPlugins/brailleExtender/addonDoc.py:83 msgid "for a decimal value" -msgstr "" +msgstr "for en decimal værdi" -#: addon\globalPlugins\brailleExtender\addonDoc.py:84 +#: addon/globalPlugins/brailleExtender/addonDoc.py:84 msgid "for an octal value" -msgstr "" +msgstr "for en octal værdi" -#: addon\globalPlugins\brailleExtender\addonDoc.py:87 +#: addon/globalPlugins/brailleExtender/addonDoc.py:87 msgid "" "Enter the value of the character according to the previously selected basis." -msgstr "" +msgstr "Angiv tegnets værdi svarende til den base, der tidligere er valgt." -#: addon\globalPlugins\brailleExtender\addonDoc.py:88 +#: addon/globalPlugins/brailleExtender/addonDoc.py:88 msgid "Press Space to validate." -msgstr "" +msgstr "Tryk Mellemrum for at godkende." -#: addon\globalPlugins\brailleExtender\addonDoc.py:91 +#: addon/globalPlugins/brailleExtender/addonDoc.py:91 msgid "" "For abbreviations, you must first add them in the dialog box - Advanced mode " "dictionaries -. Then, you just have to enter your abbreviation and press " "space to expand it. For example, you can associate — ⠎⠺ — with — sandwich —." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:93 +#: addon/globalPlugins/brailleExtender/addonDoc.py:93 msgid "Here are some examples of sequences to be entered for given characters:" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:97 +#: addon/globalPlugins/brailleExtender/addonDoc.py:97 msgid "Note: the HUC6 input is currently not supported." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:100 +#: addon/globalPlugins/brailleExtender/addonDoc.py:100 msgid "One-hand mode" msgstr "Enhåndstilstand" -#: addon\globalPlugins\brailleExtender\addonDoc.py:102 +#: addon/globalPlugins/brailleExtender/addonDoc.py:102 msgid "" "This feature allows you to compose a cell in several steps. This can be " "activated in the general settings of the extension's preferences or on the " @@ -988,39 +1032,39 @@ msgid "" "Three input methods are available." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:103 +#: addon/globalPlugins/brailleExtender/addonDoc.py:103 msgid "Method #1: fill a cell in 2 stages on both sides" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:105 +#: addon/globalPlugins/brailleExtender/addonDoc.py:105 msgid "" "With this method, type the left side dots, then the right side dots. If one " "side is empty, type the dots correspondig to the opposite side twice, or " "type the dots corresponding to the non-empty side in 2 steps." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:106 -#: addon\globalPlugins\brailleExtender\addonDoc.py:115 +#: addon/globalPlugins/brailleExtender/addonDoc.py:106 +#: addon/globalPlugins/brailleExtender/addonDoc.py:115 msgid "For example:" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:108 +#: addon/globalPlugins/brailleExtender/addonDoc.py:108 msgid "For ⠛: press dots 1-2 then dots 4-5." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:109 +#: addon/globalPlugins/brailleExtender/addonDoc.py:109 msgid "For ⠃: press dots 1-2 then dots 1-2, or dot 1 then dot 2." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:110 +#: addon/globalPlugins/brailleExtender/addonDoc.py:110 msgid "For ⠘: press 4-5 then 4-5, or dot 4 then dot 5." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:112 +#: addon/globalPlugins/brailleExtender/addonDoc.py:112 msgid "Method #2: fill a cell in two stages on one side (Space = empty side)" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:114 +#: addon/globalPlugins/brailleExtender/addonDoc.py:114 msgid "" "Using this method, you can compose a cell with one hand, regardless of which " "side of the Braille keyboard you choose. The first step allows you to enter " @@ -1028,114 +1072,112 @@ msgid "" "An empty cell will be obtained by pressing the space key twice." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:117 +#: addon/globalPlugins/brailleExtender/addonDoc.py:117 msgid "For ⠛: press dots 1-2 then dots 1-2, or dots 4-5 then dots 4-5." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:118 +#: addon/globalPlugins/brailleExtender/addonDoc.py:118 msgid "For ⠃: press dots 1-2 then space, or 4-5 then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:119 +#: addon/globalPlugins/brailleExtender/addonDoc.py:119 msgid "For ⠘: press space then 1-2, or space then dots 4-5." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:121 +#: addon/globalPlugins/brailleExtender/addonDoc.py:121 msgid "" "Method #3: fill a cell dots by dots (each dot is a toggle, press Space to " "validate the character)" msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:126 +#: addon/globalPlugins/brailleExtender/addonDoc.py:126 msgid "Dots 1-2, then dots 4-5, then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:127 +#: addon/globalPlugins/brailleExtender/addonDoc.py:127 msgid "Dots 1-2-3, then dot 3 (to correct), then dots 4-5, then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:128 +#: addon/globalPlugins/brailleExtender/addonDoc.py:128 msgid "Dot 1, then dots 2-4-5, then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:129 +#: addon/globalPlugins/brailleExtender/addonDoc.py:129 msgid "Dots 1-2-4, then dot 5, then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:130 +#: addon/globalPlugins/brailleExtender/addonDoc.py:130 msgid "Dot 2, then dot 1, then dot 5, then dot 4, and then space." msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:131 +#: addon/globalPlugins/brailleExtender/addonDoc.py:131 msgid "Etc." msgstr "Etc." -#: addon\globalPlugins\brailleExtender\addonDoc.py:150 -#, fuzzy -#| msgid "Docu&mentation" +#: addon/globalPlugins/brailleExtender/addonDoc.py:150 msgid "Documentation" -msgstr "Doku&mentation" +msgstr "Dokumentation" -#: addon\globalPlugins\brailleExtender\addonDoc.py:160 +#: addon/globalPlugins/brailleExtender/addonDoc.py:160 msgid "Driver loaded" msgstr "Driver indlæst" -#: addon\globalPlugins\brailleExtender\addonDoc.py:161 +#: addon/globalPlugins/brailleExtender/addonDoc.py:161 msgid "Profile" msgstr "Profil" -#: addon\globalPlugins\brailleExtender\addonDoc.py:175 +#: addon/globalPlugins/brailleExtender/addonDoc.py:175 msgid "Simple keys" msgstr "Enkle taster" -#: addon\globalPlugins\brailleExtender\addonDoc.py:177 +#: addon/globalPlugins/brailleExtender/addonDoc.py:177 msgid "Usual shortcuts" msgstr "Almindelige genveje" -#: addon\globalPlugins\brailleExtender\addonDoc.py:179 +#: addon/globalPlugins/brailleExtender/addonDoc.py:179 msgid "Standard NVDA commands" msgstr "Standard NVDA-kommandoer" -#: addon\globalPlugins\brailleExtender\addonDoc.py:182 -#: addon\globalPlugins\brailleExtender\settings.py:828 +#: addon/globalPlugins/brailleExtender/addonDoc.py:182 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Modifier keys" msgstr "Modifikationstaster" -#: addon\globalPlugins\brailleExtender\addonDoc.py:185 +#: addon/globalPlugins/brailleExtender/addonDoc.py:185 msgid "Quick navigation keys" msgstr "Lyntaster til navigering" -#: addon\globalPlugins\brailleExtender\addonDoc.py:189 +#: addon/globalPlugins/brailleExtender/addonDoc.py:189 msgid "Rotor feature" msgstr "Rotorfunktion" -#: addon\globalPlugins\brailleExtender\addonDoc.py:197 +#: addon/globalPlugins/brailleExtender/addonDoc.py:197 msgid "Gadget commands" msgstr "Værktøjskommandoer" -#: addon\globalPlugins\brailleExtender\addonDoc.py:210 +#: addon/globalPlugins/brailleExtender/addonDoc.py:210 msgid "Shortcuts defined outside add-on" msgstr "Genveje defineret uden for tilføjelsesprogrammet" -#: addon\globalPlugins\brailleExtender\addonDoc.py:238 +#: addon/globalPlugins/brailleExtender/addonDoc.py:238 msgid "Keyboard configurations provided" msgstr "Tastaturkonfigurationer angivet" -#: addon\globalPlugins\brailleExtender\addonDoc.py:241 +#: addon/globalPlugins/brailleExtender/addonDoc.py:241 msgid "Keyboard configurations are" msgstr "Tastaturkonfigurationer er" -#: addon\globalPlugins\brailleExtender\addonDoc.py:250 +#: addon/globalPlugins/brailleExtender/addonDoc.py:250 msgid "Warning:" msgstr "Advarsel:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:252 +#: addon/globalPlugins/brailleExtender/addonDoc.py:252 msgid "BrailleExtender has no gesture map yet for your braille display." msgstr "" "Udvidelse til Punktskrift har endnu intet sæt af bevægelser til dit " "punktdisplay." -#: addon\globalPlugins\brailleExtender\addonDoc.py:255 +#: addon/globalPlugins/brailleExtender/addonDoc.py:255 msgid "" "However, you can still assign your own gestures in the \"Input Gestures\" " "dialog (under Preferences menu)." @@ -1143,228 +1185,345 @@ msgstr "" "Du kan imidlertid tildele dine egne bevægelser i dialogen \"Inputbevægelser" "\" (under menuen Opsætning)." -#: addon\globalPlugins\brailleExtender\addonDoc.py:259 +#: addon/globalPlugins/brailleExtender/addonDoc.py:259 msgid "Add-on gestures on the system keyboard" msgstr "Tilføjelsens bevægelser på systemtastaturet" -#: addon\globalPlugins\brailleExtender\addonDoc.py:282 +#: addon/globalPlugins/brailleExtender/addonDoc.py:282 msgid "Arabic" msgstr "Arabisk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:283 +#: addon/globalPlugins/brailleExtender/addonDoc.py:283 msgid "Croatian" msgstr "Kroatisk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:284 +#: addon/globalPlugins/brailleExtender/addonDoc.py:284 msgid "Danish" msgstr "Dansk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:285 -msgid "French" -msgstr "Fransk" +#: addon/globalPlugins/brailleExtender/addonDoc.py:285 +msgid "English and French" +msgstr "" -#: addon\globalPlugins\brailleExtender\addonDoc.py:286 +#: addon/globalPlugins/brailleExtender/addonDoc.py:286 msgid "German" msgstr "Tysk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:287 +#: addon/globalPlugins/brailleExtender/addonDoc.py:287 msgid "Hebrew" msgstr "Hebraisk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:288 +#: addon/globalPlugins/brailleExtender/addonDoc.py:288 msgid "Persian" msgstr "Persisk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:289 +#: addon/globalPlugins/brailleExtender/addonDoc.py:289 msgid "Polish" msgstr "Polsk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:290 +#: addon/globalPlugins/brailleExtender/addonDoc.py:290 msgid "Russian" msgstr "Russisk" -#: addon\globalPlugins\brailleExtender\addonDoc.py:293 +#: addon/globalPlugins/brailleExtender/addonDoc.py:293 msgid "Copyrights and acknowledgements" msgstr "Copyright og anerkendelser" -#: addon\globalPlugins\brailleExtender\addonDoc.py:299 +#: addon/globalPlugins/brailleExtender/addonDoc.py:299 msgid "and other contributors" msgstr "og andre bidragydere" -#: addon\globalPlugins\brailleExtender\addonDoc.py:303 +#: addon/globalPlugins/brailleExtender/addonDoc.py:303 msgid "Translators" msgstr "Oversættere" -#: addon\globalPlugins\brailleExtender\addonDoc.py:313 +#: addon/globalPlugins/brailleExtender/addonDoc.py:313 msgid "Code contributions and other" msgstr "Bidrag til koden og andre" -#: addon\globalPlugins\brailleExtender\addonDoc.py:315 +#: addon/globalPlugins/brailleExtender/addonDoc.py:315 msgid "Additional third party copyrighted code is included:" msgstr "Yderliere ophavsretligt beskyttet kode fra tredjeparter er inkluderet:" -#: addon\globalPlugins\brailleExtender\addonDoc.py:321 +#: addon/globalPlugins/brailleExtender/addonDoc.py:321 msgid "Thanks also to" msgstr "Også tak til" -#: addon\globalPlugins\brailleExtender\addonDoc.py:323 +#: addon/globalPlugins/brailleExtender/addonDoc.py:323 msgid "And thank you very much for all your feedback and comments." msgstr "Og mange tak for alle tilbagemeldinger og kommentarer." -#: addon\globalPlugins\brailleExtender\addonDoc.py:327 +#: addon/globalPlugins/brailleExtender/addonDoc.py:327 #, python-format msgid "%s's documentation" msgstr "%s's dokumentation" -#: addon\globalPlugins\brailleExtender\addonDoc.py:346 +#: addon/globalPlugins/brailleExtender/addonDoc.py:346 #, python-format msgid "Emulates pressing %s on the system keyboard" msgstr "Svarer til at trykke %s på systemets tastatur" -#: addon\globalPlugins\brailleExtender\addonDoc.py:357 +#: addon/globalPlugins/brailleExtender/addonDoc.py:357 msgid "description currently unavailable for this shortcut" msgstr "Beskrivelse i øjeblikket ikke tilgængelig for denne genvej" -#: addon\globalPlugins\brailleExtender\addonDoc.py:377 +#: addon/globalPlugins/brailleExtender/addonDoc.py:377 msgid "caps lock" msgstr "caps lock" -#: addon\globalPlugins\brailleExtender\configBE.py:55 +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:105 +msgid "all tables" +msgstr "alle tabeller" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:116 +#, fuzzy +#| msgid "Advanced braille input mode %s" +msgid "Advanced input mode dictionary" +msgstr "Avanceret indtastningstilstand til punktskrift %s" + +#. Translators: The label for the combo box of dictionary entries in advanced input mode dictionary dialog. +#. Translators: The label for the combo box of dictionary entries in table dictionary dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:123 +#: addon/globalPlugins/brailleExtender/dictionaries.py:132 +msgid "Dictionary &entries" +msgstr "Ordbogs&elementer" + +#. Translators: The label for a column in dictionary entries list used to identify comments for the entry. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:131 +msgid "Abbreviation" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:132 +msgid "Replace by" +msgstr "Erstat med" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:133 +#, fuzzy +#| msgid " Input table" +msgid "Input table" +msgstr "Indtastningstabel" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to add new entries. +#. Translators: The label for a button in table dictionaries dialog to add new entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:139 +#: addon/globalPlugins/brailleExtender/dictionaries.py:149 +msgid "&Add" +msgstr "&Tilføj" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to edit existing entries. +#. Translators: The label for a button in table dictionaries dialog to edit existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:145 +#: addon/globalPlugins/brailleExtender/dictionaries.py:155 +msgid "&Edit" +msgstr "&Redigér" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to remove existing entries. +#. Translators: The label for a button in table dictionaries dialog to remove existing entries. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:151 +#: addon/globalPlugins/brailleExtender/dictionaries.py:161 +msgid "Re&move" +msgstr "Fj&ern" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:159 +#, fuzzy +#| msgid "&Open the current dictionary file in an editor" +msgid "&Open the dictionary file in an editor" +msgstr "&Åbn aktuelle ordbogsfil i en editor" + +#. Translators: The label for a button in advanced input mode dictionariy dialog to reload dictionary. +#. Translators: The label for a button in table dictionaries dialog to reload dictionary. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:164 +#: addon/globalPlugins/brailleExtender/dictionaries.py:174 +msgid "&Reload the dictionary" +msgstr "&Genindlæs ordbogen" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:177 +#: addon/globalPlugins/brailleExtender/dictionaries.py:218 +msgid "Add Dictionary Entry" +msgstr "Tilføj ordbogselement" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:221 +msgid "File doesn't exist yet" +msgstr "" + +#. Translators: This is the label for the edit dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:242 +#: addon/globalPlugins/brailleExtender/dictionaries.py:290 +msgid "Edit Dictionary Entry" +msgstr "Redigér ordbogselement" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:247 +msgid "&Abreviation" +msgstr "&Forkortelse" + +#. Translators: This is a label for an edit field in add dictionary entry dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:252 +#| msgid "Replace" +msgid "&Replace by" +msgstr "&Erstat med" + +#. Translators: title of a dialog. +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:276 +#, fuzzy +#| msgid "Advanced braille input mode %s" +msgid "Advanced input mode" +msgstr "Avanceret indtastningstilstand til punktskrift %s" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:284 +msgid "E&xit the advanced input mode after typing one pattern" +msgstr "" + +#: addon/globalPlugins/brailleExtender/advancedInputMode.py:291 +msgid "Escape sign for Unicode values" +msgstr "" + +#: addon/globalPlugins/brailleExtender/configBE.py:54 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:248 #, fuzzy #| msgid "Custom braille tables" msgid "Use braille table behavior" msgstr "Tilpassede punkttabeller" -#: addon\globalPlugins\brailleExtender\configBE.py:56 +#: addon/globalPlugins/brailleExtender/configBE.py:55 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:249 msgid "Dots 1-8 (⣿)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:57 +#: addon/globalPlugins/brailleExtender/configBE.py:56 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:250 msgid "Dots 1-6 (⠿)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:58 +#: addon/globalPlugins/brailleExtender/configBE.py:57 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:251 msgid "Empty cell (⠀)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:59 +#: addon/globalPlugins/brailleExtender/configBE.py:58 msgid "Other dot pattern (e.g.: 6-123456)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:60 +#: addon/globalPlugins/brailleExtender/configBE.py:59 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:253 msgid "Question mark (depending output table)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:61 +#: addon/globalPlugins/brailleExtender/configBE.py:60 msgid "Other sign/pattern (e.g.: \\, ??)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:62 +#: addon/globalPlugins/brailleExtender/configBE.py:61 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:255 msgid "Hexadecimal, Liblouis style" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:63 +#: addon/globalPlugins/brailleExtender/configBE.py:62 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:256 msgid "Hexadecimal, HUC8" msgstr "Hexadecimal, HUC8" -#: addon\globalPlugins\brailleExtender\configBE.py:64 +#: addon/globalPlugins/brailleExtender/configBE.py:63 +#: addon/globalPlugins/brailleExtender/undefinedChars.py:257 msgid "Hexadecimal, HUC6" msgstr "Hexadecimal, HUC6" -#: addon\globalPlugins\brailleExtender\configBE.py:71 -#: addon\globalPlugins\brailleExtender\configBE.py:78 -#: addon\globalPlugins\brailleExtender\configBE.py:92 -#: addon\globalPlugins\brailleExtender\settings.py:449 +#: addon/globalPlugins/brailleExtender/configBE.py:70 +#: addon/globalPlugins/brailleExtender/configBE.py:77 +#: addon/globalPlugins/brailleExtender/configBE.py:91 +#: addon/globalPlugins/brailleExtender/settings.py:426 msgid "none" msgstr "ingen" -#: addon\globalPlugins\brailleExtender\configBE.py:72 +#: addon/globalPlugins/brailleExtender/configBE.py:71 msgid "braille only" msgstr "kun punkt" -#: addon\globalPlugins\brailleExtender\configBE.py:73 +#: addon/globalPlugins/brailleExtender/configBE.py:72 msgid "speech only" msgstr "kun tale" -#: addon\globalPlugins\brailleExtender\configBE.py:74 -#: addon\globalPlugins\brailleExtender\configBE.py:95 +#: addon/globalPlugins/brailleExtender/configBE.py:73 +#: addon/globalPlugins/brailleExtender/configBE.py:94 msgid "both" msgstr "begge" -#: addon\globalPlugins\brailleExtender\configBE.py:79 +#: addon/globalPlugins/brailleExtender/configBE.py:78 msgid "dots 7 and 8" -msgstr "Punkterne 7 og 8" +msgstr "Prikkerne 7 og 8" -#: addon\globalPlugins\brailleExtender\configBE.py:80 +#: addon/globalPlugins/brailleExtender/configBE.py:79 msgid "dot 7" -msgstr "punkt 7" +msgstr "prik 7" -#: addon\globalPlugins\brailleExtender\configBE.py:81 +#: addon/globalPlugins/brailleExtender/configBE.py:80 msgid "dot 8" -msgstr "punkt 8" +msgstr "prik 8" -#: addon\globalPlugins\brailleExtender\configBE.py:87 +#: addon/globalPlugins/brailleExtender/configBE.py:86 msgid "stable" msgstr "stabil" -#: addon\globalPlugins\brailleExtender\configBE.py:88 +#: addon/globalPlugins/brailleExtender/configBE.py:87 msgid "development" msgstr "udvikling" -#: addon\globalPlugins\brailleExtender\configBE.py:93 +#: addon/globalPlugins/brailleExtender/configBE.py:92 msgid "focus mode" msgstr "fokustilstand" -#: addon\globalPlugins\brailleExtender\configBE.py:94 +#: addon/globalPlugins/brailleExtender/configBE.py:93 msgid "review mode" msgstr "gennemsynstilstand" -#: addon\globalPlugins\brailleExtender\configBE.py:103 +#: addon/globalPlugins/brailleExtender/configBE.py:102 msgid "Fill a cell in two stages on both sides" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:104 +#: addon/globalPlugins/brailleExtender/configBE.py:103 msgid "Fill a cell in two stages on one side (space = empty side)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:105 +#: addon/globalPlugins/brailleExtender/configBE.py:104 msgid "" "Fill a cell dots by dots (each dot is a toggle, press space to validate the " "character)" msgstr "" -#: addon\globalPlugins\brailleExtender\configBE.py:132 +#: addon/globalPlugins/brailleExtender/configBE.py:131 msgid "last known" msgstr "sidst kendte" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:30 +#: addon/globalPlugins/brailleExtender/dictionaries.py:30 msgid "Sign" msgstr "Tegn" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:32 +#: addon/globalPlugins/brailleExtender/dictionaries.py:32 msgid "Math" msgstr "Matematik" #. Translators: This is a label for an Entry Type radio button in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:34 +#: addon/globalPlugins/brailleExtender/dictionaries.py:34 msgid "Replace" msgstr "Erstat" -#: addon\globalPlugins\brailleExtender\dictionaries.py:42 +#: addon/globalPlugins/brailleExtender/dictionaries.py:42 msgid "Both (input and output)" msgstr "Både (indtastning og visning)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:43 +#: addon/globalPlugins/brailleExtender/dictionaries.py:43 msgid "Backward (input only)" msgstr "Bagud (kun indtastning)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:44 +#: addon/globalPlugins/brailleExtender/dictionaries.py:44 msgid "Forward (output only)" msgstr "Fremad (kun visning)" -#: addon\globalPlugins\brailleExtender\dictionaries.py:111 +#: addon/globalPlugins/brailleExtender/dictionaries.py:111 #, python-format msgid "" "One or more errors are present in dictionaries tables. Concerned " @@ -1373,121 +1532,87 @@ msgstr "" "Der er én eller flere fejl i ordbogstabellerne. Berørte ordbøger: %s. Det " "betyder, at disse ordbøger ikke blev indlæst." -#. Translators: The label for the combo box of dictionary entries in speech dictionary dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:132 -msgid "Dictionary &entries" -msgstr "Ordbogs&elementer" - #. Translators: The label for a column in dictionary entries list used to identify comments for the entry. -#: addon\globalPlugins\brailleExtender\dictionaries.py:135 +#: addon/globalPlugins/brailleExtender/dictionaries.py:135 msgid "Comment" msgstr "Kommentar" #. Translators: The label for a column in dictionary entries list used to identify original character. -#: addon\globalPlugins\brailleExtender\dictionaries.py:137 +#: addon/globalPlugins/brailleExtender/dictionaries.py:137 msgid "Pattern" msgstr "Mønster" #. Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol -#: addon\globalPlugins\brailleExtender\dictionaries.py:139 +#: addon/globalPlugins/brailleExtender/dictionaries.py:139 msgid "Representation" msgstr "Repræsentation" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon\globalPlugins\brailleExtender\dictionaries.py:141 +#: addon/globalPlugins/brailleExtender/dictionaries.py:141 msgid "Opcode" msgstr "Opcode" #. Translators: The label for a column in dictionary entries list used to identify whether the entry is a sign, math, replace -#: addon\globalPlugins\brailleExtender\dictionaries.py:143 +#: addon/globalPlugins/brailleExtender/dictionaries.py:143 msgid "Direction" msgstr "Retning" -#. Translators: The label for a button in speech dictionaries dialog to add new entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:149 -msgid "&Add" -msgstr "&Tilføj" - -#. Translators: The label for a button in speech dictionaries dialog to edit existing entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:155 -msgid "&Edit" -msgstr "&Redigér" - -#. Translators: The label for a button in speech dictionaries dialog to remove existing entries. -#: addon\globalPlugins\brailleExtender\dictionaries.py:161 -msgid "Re&move" -msgstr "Fj&ern" - -#. Translators: The label for a button in speech dictionaries dialog to open dictionary file in an editor. -#: addon\globalPlugins\brailleExtender\dictionaries.py:169 +#. Translators: The label for a button in table dictionaries dialog to open dictionary file in an editor. +#: addon/globalPlugins/brailleExtender/dictionaries.py:169 msgid "&Open the current dictionary file in an editor" msgstr "&Åbn aktuelle ordbogsfil i en editor" -#. Translators: The label for a button in speech dictionaries dialog to reload dictionary. -#: addon\globalPlugins\brailleExtender\dictionaries.py:174 -msgid "&Reload the dictionary" -msgstr "&Genindlæs ordbogen" - -#: addon\globalPlugins\brailleExtender\dictionaries.py:217 -msgid "Add Dictionary Entry" -msgstr "Tilføj ordbogselement" - -#. Translators: This is the label for the edit dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:289 -msgid "Edit Dictionary Entry" -msgstr "Redigér ordbogselement" - #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:295 +#: addon/globalPlugins/brailleExtender/dictionaries.py:296 msgid "Dictionary" msgstr "Ordbog" -#: addon\globalPlugins\brailleExtender\dictionaries.py:297 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Global" msgstr "Global" -#: addon\globalPlugins\brailleExtender\dictionaries.py:297 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Table" msgstr "Tabel" -#: addon\globalPlugins\brailleExtender\dictionaries.py:297 +#: addon/globalPlugins/brailleExtender/dictionaries.py:298 msgid "Temporary" msgstr "Midlertidig" -#: addon\globalPlugins\brailleExtender\dictionaries.py:303 +#: addon/globalPlugins/brailleExtender/dictionaries.py:304 msgid "See &entries" msgstr "Se &elementer" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:308 +#: addon/globalPlugins/brailleExtender/dictionaries.py:309 msgid "&Text pattern/sign" msgstr "&Tekstmønster/tegn" #. Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:313 +#: addon/globalPlugins/brailleExtender/dictionaries.py:314 msgid "&Braille representation" msgstr "&Punktskriftrepræsentation" #. Translators: This is a label for an edit field in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:317 +#: addon/globalPlugins/brailleExtender/dictionaries.py:318 msgid "&Comment" msgstr "&Kommentar" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:321 +#: addon/globalPlugins/brailleExtender/dictionaries.py:322 msgid "&Opcode" msgstr "&Opcode" #. Translators: This is a label for a set of radio buttons in add dictionary entry dialog. -#: addon\globalPlugins\brailleExtender\dictionaries.py:326 +#: addon/globalPlugins/brailleExtender/dictionaries.py:327 msgid "&Direction" msgstr "&Retning" -#: addon\globalPlugins\brailleExtender\dictionaries.py:367 +#: addon/globalPlugins/brailleExtender/dictionaries.py:368 msgid "Text pattern/sign field is empty." msgstr "Feltet til Tekstmønster/tegn er tomt." -#: addon\globalPlugins\brailleExtender\dictionaries.py:374 +#: addon/globalPlugins/brailleExtender/dictionaries.py:375 #, python-format msgid "" "Invalid value for 'text pattern/sign' field. You must specify a character " @@ -1496,7 +1621,7 @@ msgstr "" "Ugyldig værdi i feltet 'tekstmønster/tegn'. Der skal angives et tegn med " "denne opcode. Fx: %s" -#: addon\globalPlugins\brailleExtender\dictionaries.py:378 +#: addon/globalPlugins/brailleExtender/dictionaries.py:379 #, python-format msgid "" "'Braille representation' field is empty, you must specify something with " @@ -1505,7 +1630,7 @@ msgstr "" "Feltet 'Punktskriftrepræsentation' er tomt, angiv venligst noget med denne " "opcode fx: %s" -#: addon\globalPlugins\brailleExtender\dictionaries.py:382 +#: addon/globalPlugins/brailleExtender/dictionaries.py:383 #, python-format msgid "" "Invalid value for 'braille representation' field. You must enter dot " @@ -1515,209 +1640,204 @@ msgstr "" "punktmønstre med denne opcode fx: %s" #. Translators: Reported when translation didn't succeed due to unsupported input. -#: addon\globalPlugins\brailleExtender\patchs.py:480 +#: addon/globalPlugins/brailleExtender/patchs.py:376 msgid "Unsupported input" msgstr "" -#: addon\globalPlugins\brailleExtender\patchs.py:539 +#: addon/globalPlugins/brailleExtender/patchs.py:435 msgid "Unsupported input method" msgstr "" -#: addon\globalPlugins\brailleExtender\settings.py:32 +#: addon/globalPlugins/brailleExtender/settings.py:34 msgid "The feature implementation is in progress. Thanks for your patience." msgstr "Denne funktion er under udvikling. Tak for tålmodigheden." #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:38 -#: addon\globalPlugins\brailleExtender\settings.py:215 +#: addon/globalPlugins/brailleExtender/settings.py:40 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "General" msgstr "Generel" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:45 +#: addon/globalPlugins/brailleExtender/settings.py:47 msgid "Check for &updates automatically" msgstr "Søg automatisk efter &Opdateringer" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:49 +#: addon/globalPlugins/brailleExtender/settings.py:51 msgid "Add-on update channel" msgstr "Opdateringskanal for tilføjelsesprogram" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:56 +#: addon/globalPlugins/brailleExtender/settings.py:58 msgid "Say current line while scrolling in" msgstr "Sig aktuel linje under rulning i" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:60 +#: addon/globalPlugins/brailleExtender/settings.py:62 msgid "Speech interrupt when scrolling on same line" msgstr "Afbryd tale ved rulning på samme linje" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:64 +#: addon/globalPlugins/brailleExtender/settings.py:66 msgid "Speech interrupt for unknown gestures" msgstr "Afbryd tale ved ukendte bevægelser" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:68 +#: addon/globalPlugins/brailleExtender/settings.py:70 msgid "Announce the character while moving with routing buttons" msgstr "Oplæs tegnet under flytning med markørsammenføringstaster" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:72 +#: addon/globalPlugins/brailleExtender/settings.py:74 msgid "Use cursor keys to route cursor in review mode" msgstr "Brug markørtaster til at flytte markøren i gennemsynstilstand" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:76 +#: addon/globalPlugins/brailleExtender/settings.py:78 msgid "Display time and date infinitely" msgstr "Bliv ved med at vise tid og dato" -#: addon\globalPlugins\brailleExtender\settings.py:78 +#: addon/globalPlugins/brailleExtender/settings.py:80 msgid "Automatic review mode for apps with terminal" msgstr "Automatisk gennemsynstilstand for programmer med terminal" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:82 +#: addon/globalPlugins/brailleExtender/settings.py:84 msgid "Feedback for volume change in" msgstr "Tilbagemelding om ændring i lydstyrke i" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:90 +#: addon/globalPlugins/brailleExtender/settings.py:92 msgid "Feedback for modifier keys in" msgstr "Tilbagemelding om modifikatortaster i" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:96 +#: addon/globalPlugins/brailleExtender/settings.py:98 msgid "Play beeps for modifier keys" msgstr "Afspil bip ved modifikatortaster" -#: addon\globalPlugins\brailleExtender\settings.py:101 +#: addon/globalPlugins/brailleExtender/settings.py:103 msgid "Right margin on cells" msgstr "Højre margen på celler" -#: addon\globalPlugins\brailleExtender\settings.py:101 -#: addon\globalPlugins\brailleExtender\settings.py:117 -#: addon\globalPlugins\brailleExtender\settings.py:369 +#: addon/globalPlugins/brailleExtender/settings.py:103 +#: addon/globalPlugins/brailleExtender/settings.py:115 +#: addon/globalPlugins/brailleExtender/settings.py:366 msgid "for the currrent braille display" msgstr "for det aktuelle punktdisplay" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:105 +#: addon/globalPlugins/brailleExtender/settings.py:107 msgid "Braille keyboard configuration" msgstr "Konfiguration af punkttastatur" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:109 +#: addon/globalPlugins/brailleExtender/settings.py:111 msgid "Reverse forward scroll and back scroll buttons" msgstr "Vend knapperne til at rulle fremad og bagud" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:113 -msgid "Reading from right to left" -msgstr "" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:117 +#: addon/globalPlugins/brailleExtender/settings.py:115 msgid "Autoscroll delay (ms)" msgstr "Autorul forsinkelse (ms)" -#: addon\globalPlugins\brailleExtender\settings.py:118 +#: addon/globalPlugins/brailleExtender/settings.py:116 msgid "First braille display preferred" msgstr "Første foretrukne punktdisplay" -#: addon\globalPlugins\brailleExtender\settings.py:120 +#: addon/globalPlugins/brailleExtender/settings.py:118 msgid "Second braille display preferred" msgstr "Andet foretrukne punktdisplay" -#: addon\globalPlugins\brailleExtender\settings.py:122 +#: addon/globalPlugins/brailleExtender/settings.py:120 msgid "One-handed mode" msgstr "Enhåndstilstand" -#: addon\globalPlugins\brailleExtender\settings.py:126 +#: addon/globalPlugins/brailleExtender/settings.py:124 msgid "One hand mode method" msgstr "Metode til enhåndstilstand" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:162 +#: addon/globalPlugins/brailleExtender/settings.py:159 msgid "Text attributes" msgstr "Tekstattributter" -#: addon\globalPlugins\brailleExtender\settings.py:166 -#: addon\globalPlugins\brailleExtender\settings.py:213 +#: addon/globalPlugins/brailleExtender/settings.py:163 +#: addon/globalPlugins/brailleExtender/settings.py:210 msgid "Enable this feature" msgstr "Slå denne funktion til" -#: addon\globalPlugins\brailleExtender\settings.py:168 +#: addon/globalPlugins/brailleExtender/settings.py:165 msgid "Show spelling errors with" msgstr "Vis stavefejl med" -#: addon\globalPlugins\brailleExtender\settings.py:170 +#: addon/globalPlugins/brailleExtender/settings.py:167 msgid "Show bold with" msgstr "Vis fed med" -#: addon\globalPlugins\brailleExtender\settings.py:172 +#: addon/globalPlugins/brailleExtender/settings.py:169 msgid "Show italic with" msgstr "Vis kursiv med" -#: addon\globalPlugins\brailleExtender\settings.py:174 +#: addon/globalPlugins/brailleExtender/settings.py:171 msgid "Show underline with" msgstr "Vis understregning med" -#: addon\globalPlugins\brailleExtender\settings.py:176 +#: addon/globalPlugins/brailleExtender/settings.py:173 msgid "Show strikethrough with" msgstr "Vis gennemstreget med" -#: addon\globalPlugins\brailleExtender\settings.py:178 +#: addon/globalPlugins/brailleExtender/settings.py:175 msgid "Show subscript with" msgstr "Vis sænket skrift med" -#: addon\globalPlugins\brailleExtender\settings.py:180 +#: addon/globalPlugins/brailleExtender/settings.py:177 msgid "Show superscript with" msgstr "Vis hævet skrift med" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:206 +#: addon/globalPlugins/brailleExtender/settings.py:203 msgid "Role labels" msgstr "Rolleetiketter" -#: addon\globalPlugins\brailleExtender\settings.py:215 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Role category" msgstr "Rollekategorier" -#: addon\globalPlugins\brailleExtender\settings.py:215 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Landmark" msgstr "Landmærke" -#: addon\globalPlugins\brailleExtender\settings.py:215 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Positive state" msgstr "Positiv tilstand" -#: addon\globalPlugins\brailleExtender\settings.py:215 +#: addon/globalPlugins/brailleExtender/settings.py:212 msgid "Negative state" msgstr "Negativ tilstand" -#: addon\globalPlugins\brailleExtender\settings.py:219 +#: addon/globalPlugins/brailleExtender/settings.py:216 msgid "Role" msgstr "Rolle" -#: addon\globalPlugins\brailleExtender\settings.py:221 +#: addon/globalPlugins/brailleExtender/settings.py:218 msgid "Actual or new label" msgstr "Aktuel eller ny etiket" -#: addon\globalPlugins\brailleExtender\settings.py:225 +#: addon/globalPlugins/brailleExtender/settings.py:222 msgid "&Reset this role label" msgstr "&Gendan denne rolleetiket" -#: addon\globalPlugins\brailleExtender\settings.py:227 +#: addon/globalPlugins/brailleExtender/settings.py:224 msgid "Reset all role labels" msgstr "Gendan alle rolleetiketter" -#: addon\globalPlugins\brailleExtender\settings.py:292 +#: addon/globalPlugins/brailleExtender/settings.py:289 msgid "You have no customized label." msgstr "Du har ingen tilpassede etiketter." -#: addon\globalPlugins\brailleExtender\settings.py:295 +#: addon/globalPlugins/brailleExtender/settings.py:292 #, python-format msgid "" "Do you want really reset all labels? Currently, you have %d customized " @@ -1726,106 +1846,92 @@ msgstr "" "Ønsker du at gendanne alle etiketter? Du har i øjeblikket %d tilpassede " "etiketter." -#: addon\globalPlugins\brailleExtender\settings.py:296 -#: addon\globalPlugins\brailleExtender\settings.py:734 +#: addon/globalPlugins/brailleExtender/settings.py:293 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Confirmation" msgstr "Bekræftelse" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:338 +#: addon/globalPlugins/brailleExtender/settings.py:335 msgid "Braille tables" msgstr "Punkttabeller" -#: addon\globalPlugins\brailleExtender\settings.py:343 +#: addon/globalPlugins/brailleExtender/settings.py:340 msgid "Use the current input table" msgstr "Brug den aktuelle indskrivningstabel" -#: addon\globalPlugins\brailleExtender\settings.py:352 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "Prefered braille tables" msgstr "Foretrukne punkttabeller" -#: addon\globalPlugins\brailleExtender\settings.py:352 +#: addon/globalPlugins/brailleExtender/settings.py:349 msgid "press F1 for help" msgstr "tryk F1 for hjælp" -#: addon\globalPlugins\brailleExtender\settings.py:356 +#: addon/globalPlugins/brailleExtender/settings.py:353 msgid "Input braille table for keyboard shortcut keys" msgstr "Punkttabel for indskrivning til tastaturgenveje" -#: addon\globalPlugins\brailleExtender\settings.py:358 +#: addon/globalPlugins/brailleExtender/settings.py:355 msgid "None" msgstr "Ingen" -#: addon\globalPlugins\brailleExtender\settings.py:361 +#: addon/globalPlugins/brailleExtender/settings.py:358 msgid "Secondary output table to use" msgstr "Anden tabel til visning" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:365 +#: addon/globalPlugins/brailleExtender/settings.py:362 msgid "Display &tab signs as spaces" msgstr "Vis &tabulatortegn som mellemrum" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:369 +#: addon/globalPlugins/brailleExtender/settings.py:366 msgid "Number of &space for a tab sign" msgstr "Antal &mellemrum for et tabulatortegn " -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:371 -msgid "Representation of &undefined characters" -msgstr "" - -#. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:377 -msgid "Specify another pattern" -msgstr "" - -#: addon\globalPlugins\brailleExtender\settings.py:379 -msgid "&Description of undefined characters" -msgstr "" - -#: addon\globalPlugins\brailleExtender\settings.py:382 +#: addon/globalPlugins/brailleExtender/settings.py:367 msgid "Alternative and &custom braille tables" msgstr "Alternative og &tilpassede punkttabeller" -#: addon\globalPlugins\brailleExtender\settings.py:410 +#: addon/globalPlugins/brailleExtender/settings.py:387 msgid "" "NVDA must be restarted for some new options to take effect. Do you want " "restart now?" msgstr "" -#: addon\globalPlugins\brailleExtender\settings.py:448 +#: addon/globalPlugins/brailleExtender/settings.py:425 msgid "input and output" msgstr "indtastning og visning" -#: addon\globalPlugins\brailleExtender\settings.py:450 +#: addon/globalPlugins/brailleExtender/settings.py:427 msgid "input only" msgstr "kun indskrivning" -#: addon\globalPlugins\brailleExtender\settings.py:451 +#: addon/globalPlugins/brailleExtender/settings.py:428 msgid "output only" msgstr "kun visning" -#: addon\globalPlugins\brailleExtender\settings.py:491 +#: addon/globalPlugins/brailleExtender/settings.py:459 #, python-format msgid "Table name: %s" msgstr "Tabelnavn: %s" -#: addon\globalPlugins\brailleExtender\settings.py:492 +#: addon/globalPlugins/brailleExtender/settings.py:460 #, python-format msgid "File name: %s" msgstr "Filnavn: %s" -#: addon\globalPlugins\brailleExtender\settings.py:493 +#: addon/globalPlugins/brailleExtender/settings.py:461 #, python-format msgid "In switches: %s" msgstr "Ind ændrer: %s" -#: addon\globalPlugins\brailleExtender\settings.py:494 +#: addon/globalPlugins/brailleExtender/settings.py:462 msgid "About this table" msgstr "Om denne tabel" -#: addon\globalPlugins\brailleExtender\settings.py:497 +#: addon/globalPlugins/brailleExtender/settings.py:465 msgid "" "In this combo box, all tables are present. Press space bar, left or right " "arrow keys to include (or not) the selected table in switches" @@ -1833,7 +1939,7 @@ msgstr "" "I denne combobox findes alle tabeller. Tryk Mellemrum, venstre eller højre " "piletaster for at inkludere (eller ej) den valgte tabel i kontakter" -#: addon\globalPlugins\brailleExtender\settings.py:498 +#: addon/globalPlugins/brailleExtender/settings.py:466 msgid "" "You can also press 'comma' key to get the file name of the selected table " "and 'semicolon' key to view miscellaneous infos on the selected table" @@ -1842,156 +1948,125 @@ msgstr "" "tabel og 'semikolon'-tasten for at se forskellige oplysninger om den valgte " "tabel" -#: addon\globalPlugins\brailleExtender\settings.py:499 +#: addon/globalPlugins/brailleExtender/settings.py:467 msgid "Contextual help" msgstr "Konteksthjælp" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:515 -msgid "Description of undefined characters" -msgstr "" - -#: addon\globalPlugins\brailleExtender\settings.py:519 -msgid "Describe undefined characters if possible" -msgstr "" - -#: addon\globalPlugins\brailleExtender\settings.py:521 -msgid "Start tag" -msgstr "Start tag" - -#: addon\globalPlugins\brailleExtender\settings.py:522 -msgid "End tag" -msgstr "Afslut tag" - -#: addon\globalPlugins\brailleExtender\settings.py:528 -msgid "Language" -msgstr "" - -#: addon\globalPlugins\brailleExtender\settings.py:530 -#, fuzzy -#| msgid "Use the current input table" -msgid "Use the current output table" -msgstr "Brug den aktuelle indskrivningstabel" - -#: addon\globalPlugins\brailleExtender\settings.py:535 -msgid "Braille table" -msgstr "Punkttabel" - -#. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:555 +#: addon/globalPlugins/brailleExtender/settings.py:483 msgid "Custom braille tables" msgstr "Tilpassede punkttabeller" -#: addon\globalPlugins\brailleExtender\settings.py:565 +#: addon/globalPlugins/brailleExtender/settings.py:493 msgid "Use a custom table as input table" msgstr "Brug en tilpasset tabel som indskrivningstabel" -#: addon\globalPlugins\brailleExtender\settings.py:566 +#: addon/globalPlugins/brailleExtender/settings.py:494 msgid "Use a custom table as output table" msgstr "Brug en tilpasset tabel som visningstabel" -#: addon\globalPlugins\brailleExtender\settings.py:567 +#: addon/globalPlugins/brailleExtender/settings.py:495 msgid "&Add a braille table" msgstr "&Tilføj en punkttabel" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:591 +#: addon/globalPlugins/brailleExtender/settings.py:519 msgid "Add a braille table" msgstr "Tilføj en punkttabel" -#: addon\globalPlugins\brailleExtender\settings.py:597 +#: addon/globalPlugins/brailleExtender/settings.py:525 msgid "Display name" msgstr "Vist navn" -#: addon\globalPlugins\brailleExtender\settings.py:598 +#: addon/globalPlugins/brailleExtender/settings.py:526 msgid "Description" msgstr "Beskrivelse" -#: addon\globalPlugins\brailleExtender\settings.py:599 +#: addon/globalPlugins/brailleExtender/settings.py:527 msgid "Path" msgstr "Sti" -#: addon\globalPlugins\brailleExtender\settings.py:600 -#: addon\globalPlugins\brailleExtender\settings.py:671 +#: addon/globalPlugins/brailleExtender/settings.py:528 +#: addon/globalPlugins/brailleExtender/settings.py:599 msgid "&Browse" msgstr "&Gennemse" -#: addon\globalPlugins\brailleExtender\settings.py:603 +#: addon/globalPlugins/brailleExtender/settings.py:531 msgid "Contracted (grade 2) braille table" msgstr "Forkortet (niveau 2) punkttabel" #. Translators: label of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:605 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Available for" msgstr "Tilgængelig for" -#: addon\globalPlugins\brailleExtender\settings.py:605 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input and output" msgstr "Indskrivning og visning" -#: addon\globalPlugins\brailleExtender\settings.py:605 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Input only" msgstr "Kun indskrivning" -#: addon\globalPlugins\brailleExtender\settings.py:605 +#: addon/globalPlugins/brailleExtender/settings.py:533 msgid "Output only" msgstr "Kun visning" -#: addon\globalPlugins\brailleExtender\settings.py:611 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Choose a table file" msgstr "Vælg en tabelfil" -#: addon\globalPlugins\brailleExtender\settings.py:611 +#: addon/globalPlugins/brailleExtender/settings.py:539 msgid "Liblouis table files" msgstr "Liblouis tabelfiler" -#: addon\globalPlugins\brailleExtender\settings.py:623 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Please specify a display name." msgstr "Angiv venligst et vist navn." -#: addon\globalPlugins\brailleExtender\settings.py:623 +#: addon/globalPlugins/brailleExtender/settings.py:551 msgid "Invalid display name" msgstr "Ugyldigt vist navn" -#: addon\globalPlugins\brailleExtender\settings.py:627 +#: addon/globalPlugins/brailleExtender/settings.py:555 #, python-format msgid "The specified path is not valid (%s)." msgstr "Den angivne sti er ikke gyldig (%s)." -#: addon\globalPlugins\brailleExtender\settings.py:627 +#: addon/globalPlugins/brailleExtender/settings.py:555 msgid "Invalid path" msgstr "Ugyldig sti" #. Translators: title of a dialog. -#: addon\globalPlugins\brailleExtender\settings.py:655 +#: addon/globalPlugins/brailleExtender/settings.py:583 msgid "Quick launches" msgstr "Hurtigstartere" -#: addon\globalPlugins\brailleExtender\settings.py:666 +#: addon/globalPlugins/brailleExtender/settings.py:594 msgid "&Gestures" msgstr "&Bevægelser" -#: addon\globalPlugins\brailleExtender\settings.py:669 +#: addon/globalPlugins/brailleExtender/settings.py:597 msgid "Location (file path, URL or command)" msgstr "Placering (fil, sti, URL eller kommando)" -#: addon\globalPlugins\brailleExtender\settings.py:672 +#: addon/globalPlugins/brailleExtender/settings.py:600 msgid "&Remove this gesture" msgstr "&Fjern denne bevægelse" -#: addon\globalPlugins\brailleExtender\settings.py:673 +#: addon/globalPlugins/brailleExtender/settings.py:601 msgid "&Add a quick launch" msgstr "&Tilføj en hurtigstarter" -#: addon\globalPlugins\brailleExtender\settings.py:702 +#: addon/globalPlugins/brailleExtender/settings.py:630 msgid "Unable to associate this gesture. Please enter another, now" msgstr "Kan ikke tildele denne bevægelse." -#: addon\globalPlugins\brailleExtender\settings.py:707 +#: addon/globalPlugins/brailleExtender/settings.py:635 msgid "Out of capture" msgstr "Uden for optagelse" -#: addon\globalPlugins\brailleExtender\settings.py:709 +#: addon/globalPlugins/brailleExtender/settings.py:637 #, python-brace-format msgid "" "Please enter a gesture from your {NAME_BRAILLE_DISPLAY} braille display. " @@ -2000,21 +2075,21 @@ msgstr "" "Angiv venligst en kommando fra dit {NAME_BRAILLE_DISPLAY} punktdisplay. " "Press space to cancel." -#: addon\globalPlugins\brailleExtender\settings.py:717 +#: addon/globalPlugins/brailleExtender/settings.py:645 #, python-format msgid "OK. The gesture captured is %s" msgstr "OK. Den registrerede bevægelse er %s" -#: addon\globalPlugins\brailleExtender\settings.py:734 +#: addon/globalPlugins/brailleExtender/settings.py:662 msgid "Are you sure to want to delete this shorcut?" msgstr "Ønsker du virkelig at slette denne genvej?" -#: addon\globalPlugins\brailleExtender\settings.py:743 +#: addon/globalPlugins/brailleExtender/settings.py:671 #, python-brace-format msgid "{BRAILLEGESTURE} removed" msgstr "{BRAILLEGESTURE} fjernet" -#: addon\globalPlugins\brailleExtender\settings.py:754 +#: addon/globalPlugins/brailleExtender/settings.py:682 msgid "" "Please enter the desired gesture for the new quick launch. Press \"space bar" "\" to cancel" @@ -2022,120 +2097,171 @@ msgstr "" "Angiv venligst den ønskede bevægelse til den nye hurtigstarter. Tryk " "\"Mellemrum\" for at annullere" -#: addon\globalPlugins\brailleExtender\settings.py:757 +#: addon/globalPlugins/brailleExtender/settings.py:685 msgid "Don't add a quick launch" msgstr "Tilføj ikke en hurtigstarter" -#: addon\globalPlugins\brailleExtender\settings.py:783 +#: addon/globalPlugins/brailleExtender/settings.py:711 #, python-brace-format msgid "Choose a file for {0}" msgstr "Vælg en fil for {0}" -#: addon\globalPlugins\brailleExtender\settings.py:796 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Please create or select a quick launch first" msgstr "Venligst opret eller vælg en hurtigstarter først" -#: addon\globalPlugins\brailleExtender\settings.py:796 +#: addon/globalPlugins/brailleExtender/settings.py:724 msgid "Error" msgstr "Fejl" -#: addon\globalPlugins\brailleExtender\settings.py:800 +#: addon/globalPlugins/brailleExtender/settings.py:728 msgid "Profiles editor" msgstr "Profileditor" -#: addon\globalPlugins\brailleExtender\settings.py:811 +#: addon/globalPlugins/brailleExtender/settings.py:739 msgid "You must have a braille display to editing a profile" msgstr "Der kræves et punktdisplay for at kunne redigere en profil" -#: addon\globalPlugins\brailleExtender\settings.py:815 +#: addon/globalPlugins/brailleExtender/settings.py:743 msgid "" "Profiles directory is not present or accessible. Unable to edit profiles" msgstr "" "Mappen med profiler findes ikke eller er utilgængelig. Kan ikke redigere " "profiler" -#: addon\globalPlugins\brailleExtender\settings.py:821 +#: addon/globalPlugins/brailleExtender/settings.py:749 msgid "Profile to edit" msgstr "Profil der skal redigeres" -#: addon\globalPlugins\brailleExtender\settings.py:827 +#: addon/globalPlugins/brailleExtender/settings.py:755 msgid "Gestures category" msgstr "Kategorien Bevægelser " -#: addon\globalPlugins\brailleExtender\settings.py:828 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Single keys" msgstr "Enkelttaster" -#: addon\globalPlugins\brailleExtender\settings.py:828 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Practical shortcuts" msgstr "Praktiske genveje" -#: addon\globalPlugins\brailleExtender\settings.py:828 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "NVDA commands" msgstr "NVDA-kommandoer" -#: addon\globalPlugins\brailleExtender\settings.py:828 +#: addon/globalPlugins/brailleExtender/settings.py:756 msgid "Addon features" msgstr "Tilføjelsesfunktioner" -#: addon\globalPlugins\brailleExtender\settings.py:832 +#: addon/globalPlugins/brailleExtender/settings.py:760 msgid "Gestures list" msgstr "Liste med bevægelser" -#: addon\globalPlugins\brailleExtender\settings.py:841 +#: addon/globalPlugins/brailleExtender/settings.py:769 msgid "Add gesture" msgstr "Tilføj bevægelse" -#: addon\globalPlugins\brailleExtender\settings.py:843 +#: addon/globalPlugins/brailleExtender/settings.py:771 msgid "Remove this gesture" msgstr "Fjern denne bevægelse" -#: addon\globalPlugins\brailleExtender\settings.py:846 +#: addon/globalPlugins/brailleExtender/settings.py:774 msgid "Assign a braille gesture" msgstr "Tildel en punktskriftbevægelse" -#: addon\globalPlugins\brailleExtender\settings.py:853 +#: addon/globalPlugins/brailleExtender/settings.py:781 msgid "Remove this profile" msgstr "Fjern denne profil" -#: addon\globalPlugins\brailleExtender\settings.py:856 +#: addon/globalPlugins/brailleExtender/settings.py:784 msgid "Add a profile" msgstr "Tilføj en profil" -#: addon\globalPlugins\brailleExtender\settings.py:862 +#: addon/globalPlugins/brailleExtender/settings.py:790 msgid "Name for the new profile" msgstr "Navn på den nye profil" -#: addon\globalPlugins\brailleExtender\settings.py:868 +#: addon/globalPlugins/brailleExtender/settings.py:796 msgid "Create" msgstr "Opret" -#: addon\globalPlugins\brailleExtender\settings.py:931 +#: addon/globalPlugins/brailleExtender/settings.py:859 msgid "Unable to load this profile. Malformed or inaccessible file" msgstr "" "Denne profil kan ikke indlæses. Filen har enten den forkerte form eller er " "utilgængelig" -#: addon\globalPlugins\brailleExtender\settings.py:950 +#: addon/globalPlugins/brailleExtender/settings.py:878 msgid "Undefined" msgstr "Udefineret" #. Translators: title of add-on parameters dialog. -#: addon\globalPlugins\brailleExtender\settings.py:979 +#: addon/globalPlugins/brailleExtender/settings.py:909 msgid "Settings" msgstr "Indstillinger" -#: addon\globalPlugins\brailleExtender\updateCheck.py:61 +#. Translators: label of a dialog. +#: addon/globalPlugins/brailleExtender/undefinedChars.py:244 +#, fuzzy +#| msgid "Representation" +msgid "Representation &method" +msgstr "Repræsentation" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:252 +#, python-brace-format +msgid "Other dot pattern (e.g.: {dotPatternSample})" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:254 +#, python-brace-format +msgid "Other sign/pattern (e.g.: {signPatternSample})" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:272 +msgid "Specify another pattern" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:276 +msgid "Describe undefined characters if possible" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:284 +msgid "Also describe extended characters (e.g.: country flags)" +msgstr "" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:291 +msgid "Start tag" +msgstr "Start tag" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:296 +msgid "End tag" +msgstr "Afslut tag" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:307 +msgid "Language" +msgstr "Sprog" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:310 +#, fuzzy +#| msgid "Use the current input table" +msgid "Use the current output table" +msgstr "Brug den aktuelle indskrivningstabel" + +#: addon/globalPlugins/brailleExtender/undefinedChars.py:323 +msgid "Braille table" +msgstr "Punkttabel" + +#: addon/globalPlugins/brailleExtender/updateCheck.py:61 #, python-format msgid "New version available, version %s. Do you want to download it now?" msgstr "Ny version tilgængelig, version %s. Ønsker du at hente den nu?" -#: addon\globalPlugins\brailleExtender\updateCheck.py:72 +#: addon/globalPlugins/brailleExtender/updateCheck.py:72 #, python-format msgid "You are up-to-date. %s is the latest version." msgstr "Du er up-to-date. %s er den seneste version." -#: addon\globalPlugins\brailleExtender\updateCheck.py:81 +#: addon/globalPlugins/brailleExtender/updateCheck.py:81 #, python-format msgid "" "Oops! There was a problem downloading for update. Please retry later or " @@ -2146,78 +2272,78 @@ msgstr "" "igen senere eller hent og installér nanuelt via %s. Ønsker du at åbne denne " "URL i din browser nu?" -#: addon\globalPlugins\brailleExtender\updateCheck.py:115 +#: addon/globalPlugins/brailleExtender/updateCheck.py:115 msgid "An update check dialog is already running!" msgstr "Der kører allerede en opdateringsdialog!" -#: addon\globalPlugins\brailleExtender\updateCheck.py:116 +#: addon/globalPlugins/brailleExtender/updateCheck.py:116 #, python-brace-format msgid "{addonName}'s update" msgstr "{addonName}'s opdatering" -#: addon\globalPlugins\brailleExtender\utils.py:191 +#: addon/globalPlugins/brailleExtender/utils.py:194 msgid "Reload successful" msgstr "Genindlæsning fuldført" -#: addon\globalPlugins\brailleExtender\utils.py:194 +#: addon/globalPlugins/brailleExtender/utils.py:197 msgid "Reload failed" msgstr "Genindlæsning fejlede" -#: addon\globalPlugins\brailleExtender\utils.py:200 -#: addon\globalPlugins\brailleExtender\utils.py:215 +#: addon/globalPlugins/brailleExtender/utils.py:203 +#: addon/globalPlugins/brailleExtender/utils.py:218 msgid "Not a character" msgstr "Ikke et tegn" -#: addon\globalPlugins\brailleExtender\utils.py:205 +#: addon/globalPlugins/brailleExtender/utils.py:208 msgid "N/A" msgstr "N/A" -#: addon\globalPlugins\brailleExtender\utils.py:309 +#: addon/globalPlugins/brailleExtender/utils.py:312 msgid "Available combinations" msgstr "Tilgængelige kombinationer" -#: addon\globalPlugins\brailleExtender\utils.py:311 +#: addon/globalPlugins/brailleExtender/utils.py:314 msgid "One combination available" msgstr "Der findes én kombination" -#: addon\globalPlugins\brailleExtender\utils.py:322 +#: addon/globalPlugins/brailleExtender/utils.py:325 msgid "space" msgstr "mellemrum" -#: addon\globalPlugins\brailleExtender\utils.py:323 +#: addon/globalPlugins/brailleExtender/utils.py:326 msgid "left SHIFT" msgstr "venstre SHIFT" -#: addon\globalPlugins\brailleExtender\utils.py:324 +#: addon/globalPlugins/brailleExtender/utils.py:327 msgid "right SHIFT" msgstr "højre SHIFT" -#: addon\globalPlugins\brailleExtender\utils.py:325 +#: addon/globalPlugins/brailleExtender/utils.py:328 msgid "left selector" msgstr "venstre vælger" -#: addon\globalPlugins\brailleExtender\utils.py:326 +#: addon/globalPlugins/brailleExtender/utils.py:329 msgid "right selector" msgstr "højre vælger" -#: addon\globalPlugins\brailleExtender\utils.py:327 +#: addon/globalPlugins/brailleExtender/utils.py:330 msgid "dot" msgstr "prik" -#: addon\globalPlugins\brailleExtender\utils.py:342 +#: addon/globalPlugins/brailleExtender/utils.py:345 #, python-brace-format msgid "{gesture} on {brailleDisplay}" msgstr "{gesture} på {brailleDisplay}" -#: addon\globalPlugins\brailleExtender\utils.py:419 +#: addon/globalPlugins/brailleExtender/utils.py:422 msgid "No text" msgstr "Ingen tekst" -#: addon\globalPlugins\brailleExtender\utils.py:428 +#: addon/globalPlugins/brailleExtender/utils.py:431 msgid "Not text" msgstr "Ikke tekst" -#: addon\globalPlugins\brailleExtender\utils.py:448 +#: addon/globalPlugins/brailleExtender/utils.py:451 msgid "No text selected" msgstr "Ingen tekst valgt" @@ -2332,6 +2458,12 @@ msgstr "" msgid "actions and quick navigation through a rotor" msgstr "handlinger og hurtig navigering via en rotor" +#~ msgid "Braille &dictionaries" +#~ msgstr "Punktskrift&ordbøger" + +#~ msgid "French" +#~ msgstr "Fransk" + #, python-format #~ msgid "%s braille display" #~ msgstr "%s punktdisplay" From 8c82a2f5b67b73a48ce8b3a30d2e93662bb14a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9-Abush=20Clause?= Date: Thu, 7 May 2020 15:43:14 +0200 Subject: [PATCH 87/87] Try to fix #54 --- addon/globalPlugins/brailleExtender/patchs.py | 2 +- .../brailleExtender/undefinedChars.py | 110 ++++++++++-------- 2 files changed, 62 insertions(+), 50 deletions(-) diff --git a/addon/globalPlugins/brailleExtender/patchs.py b/addon/globalPlugins/brailleExtender/patchs.py index a39bb6e7..131ad035 100644 --- a/addon/globalPlugins/brailleExtender/patchs.py +++ b/addon/globalPlugins/brailleExtender/patchs.py @@ -120,7 +120,7 @@ def update(self): mode=mode, cursorPos=self.cursorPos ) - if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [configBE.CHOICE_liblouis, configBE.CHOICE_HUC8, configBE.CHOICE_HUC6, configBE.CHOICE_hex, configBE.CHOICE_dec, configBE.CHOICE_oct, configBE.CHOICE_bin]: + if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] != configBE.CHOICE_tableBehaviour: undefinedChars.undefinedCharProcess(self) if self.selectionStart is not None and self.selectionEnd is not None: try: diff --git a/addon/globalPlugins/brailleExtender/undefinedChars.py b/addon/globalPlugins/brailleExtender/undefinedChars.py index 28edaa47..3f6f8522 100644 --- a/addon/globalPlugins/brailleExtender/undefinedChars.py +++ b/addon/globalPlugins/brailleExtender/undefinedChars.py @@ -43,30 +43,9 @@ def getHardValue(): def setUndefinedChar(t=None): - if not t or t > CHOICE_HUC6 or t < 0: - t = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] - if t == 0: - return - c = [ - "default", - "12345678", - "123456", - "0", - config.conf["brailleExtender"]["undefinedCharsRepr"]["hardDotPatternValue"], - "questionMark", - "sign", - ] + [HUCDotPattern] * 7 - v = c[t] - if v in ["questionMark", "sign"]: - if v == "questionMark": - s = "?" - else: - s = getHardValue() - v = huc.unicodeBrailleToDescription( - getTextInBraille(s, getCurrentBrailleTables()) - ) - louis.compileString(getCurrentBrailleTables(), - bytes("undefined %s" % v, "ASCII")) + if not t or t > CHOICE_HUC6 or t < 0: t = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] + if t == 0: return + louis.compileString(getCurrentBrailleTables(), bytes(f"undefined {HUCDotPattern}", "ASCII")) def getExtendedSymbolsForString(s: str) -> dict: @@ -78,13 +57,14 @@ def getExtendedSymbolsForString(s: str) -> dict: def getDescChar(c, lang="Windows", start="", end=""): + method = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] if lang == "Windows": lang = languageHandler.getLanguage() desc = characterProcessing.processSpeechSymbols( lang, c, characterProcessing.SYMLVL_CHAR ).replace(' ', '').strip() if not desc or desc == c: - if config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ + if method in [ configBE.CHOICE_HUC6, configBE.CHOICE_HUC8, ]: @@ -93,8 +73,15 @@ def getDescChar(c, lang="Windows", start="", end=""): == configBE.CHOICE_HUC6 ) return huc.translate(c, HUC6=HUC6) - else: + elif method in [ + configBE.CHOICE_bin, + configBE.CHOICE_oct, + configBE.CHOICE_dec, + configBE.CHOICE_hex + ]: return getTextInBraille("".join(getUnicodeNotation(c))) + else: + return getUndefinedCharSign(method) return f"{start}{desc}{end}" @@ -122,7 +109,17 @@ def getUnicodeNotation(s, notation=None): return s +def getUndefinedCharSign(method): + if method == configBE.CHOICE_allDots8: return '⣿' + elif method == configBE.CHOICE_allDots6: return '⠿' + elif method == configBE.CHOICE_otherDots: return huc.cellDescriptionsToUnicodeBraille(config.conf["brailleExtender"]["undefinedCharsRepr"]["hardDotPatternValue"]) + elif method == configBE.CHOICE_questionMark: return getTextInBraille('?') + elif method == configBE.CHOICE_otherSign: return getTextInBraille(config.conf["brailleExtender"]["undefinedCharsRepr"]["hardSignPatternValue"]) + else: return '⠀' + + def undefinedCharProcess(self): + method = config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] extendedSymbolsRawText = {} if config.conf["brailleExtender"]["undefinedCharsRepr"]["extendedDesc"]: extendedSymbolsRawText = getExtendedSymbolsForString(self.rawText) @@ -175,32 +172,37 @@ def undefinedCharProcess(self): start=start, end=end, ), - table=[config.conf["brailleExtender"] - ["undefinedCharsRepr"]["table"]], + table=[config.conf["brailleExtender"]["undefinedCharsRepr"]["table"]], ) for braillePos in allBraillePos } - elif config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] in [ - configBE.CHOICE_HUC6, - configBE.CHOICE_HUC8, + elif method in [ + configBE.CHOICE_HUC6, + configBE.CHOICE_HUC8, ]: - HUC6 = ( - config.conf["brailleExtender"]["undefinedCharsRepr"]["method"] - == configBE.CHOICE_HUC6 - ) + HUC6 = method == configBE.CHOICE_HUC6 replacements = { - braillePos: huc.translate( - self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6 - ) + braillePos: huc.translate(self.rawText[self.brailleToRawPos[braillePos]], HUC6=HUC6) for braillePos in allBraillePos } - else: + elif method in [ + configBE.CHOICE_bin, + configBE.CHOICE_oct, + configBE.CHOICE_dec, + configBE.CHOICE_hex, + ]: replacements = { braillePos: getUnicodeNotation( - self.rawText[self.brailleToRawPos[braillePos]] + self.rawText[self.brailleToRawPos[braillePos]], + method ) for braillePos in allBraillePos } + else: + replacements = { + braillePos: getUndefinedCharSign(method) + for braillePos in allBraillePos + } newBrailleCells = [] newBrailleToRawPos = [] newRawToBraillePos = [] @@ -209,13 +211,11 @@ def undefinedCharProcess(self): i = 0 for iBrailleCells, brailleCells in enumerate(self.brailleCells): brailleToRawPos = self.brailleToRawPos[iBrailleCells] - if iBrailleCells in replacements and not replacements[iBrailleCells].startswith( - undefinedCharPattern[0] - ): + if iBrailleCells in replacements and not replacements[iBrailleCells].startswith(undefinedCharPattern): toAdd = [ord(c) - 10240 for c in replacements[iBrailleCells]] newBrailleCells += toAdd newBrailleToRawPos += [i] * len(toAdd) - alreadyDone += list(range(iBrailleCells, iBrailleCells + 3)) + alreadyDone += list(range(iBrailleCells, iBrailleCells + len(undefinedCharPattern))) i += 1 else: if iBrailleCells in alreadyDone: @@ -223,19 +223,31 @@ def undefinedCharProcess(self): newBrailleCells.append(self.brailleCells[iBrailleCells]) newBrailleToRawPos += [i] if (iBrailleCells + 1) < lenBrailleToRawPos and self.brailleToRawPos[ - iBrailleCells + 1 + iBrailleCells + 1 ] != brailleToRawPos: i += 1 - pos = -42 + lastPos = -42 for i, brailleToRawPos in enumerate(newBrailleToRawPos): - if brailleToRawPos != pos: - pos = brailleToRawPos + if brailleToRawPos != lastPos: + lastPos = brailleToRawPos newRawToBraillePos.append(i) self.brailleCells = newBrailleCells self.brailleToRawPos = newBrailleToRawPos self.rawToBraillePos = newRawToBraillePos if self.cursorPos: - self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] + if len(self.rawToBraillePos) > self.cursorPos: + self.brailleCursorPos = self.rawToBraillePos[self.cursorPos] + else: + log.error(("error during adding undefined char descriptions:\n" + f"cursorPos: {self.cursorPos}\n" + f"brailleCursorPos: {self.brailleCursorPos}\n" + f"brailleCells: {self.brailleCells}\n" + f"=> {''.join([chr(c+10240) for c in self.brailleCells])}\n" + f"==> {len(self.brailleCells)}\n" + f"brailleToRawPos: {self.brailleToRawPos}\n" + f"rawToBraillePos: {self.rawToBraillePos}\n" + f"rawText: {self.rawText}" + )) class SettingsDlg(gui.settingsDialogs.SettingsPanel):