def initializeFormats(self): Config = self.Config Config["fontfamily"] = "monospace" pal = QApplication.instance().palette() for name, color, bold, italic in ( ("normal", None, False, False), ("keyword", pal.color(QPalette.ColorRole.Link).name(), True, False), ("builtin", pal.color(QPalette.ColorRole.Link).name(), False, False), ("comment", "#007F00", False, True), ("string", "#808000", False, False), ("number", "#924900", False, False), ("lparen", None, True, True), ("rparen", None, True, True)): Config["%sfontcolor" % name] = color Config["%sfontbold" % name] = bold Config["%sfontitalic" % name] = italic baseFormat = QTextCharFormat() baseFormat.setFontFamily(Config["fontfamily"]) Config["fontsize"] = gprefs['gpm_template_editor_font_size'] baseFormat.setFontPointSize(Config["fontsize"]) for name in ("normal", "keyword", "builtin", "comment", "string", "number", "lparen", "rparen"): format = QTextCharFormat(baseFormat) col = Config["%sfontcolor" % name] if col: format.setForeground(QColor(col)) if Config["%sfontbold" % name]: format.setFontWeight(QFont.Weight.Bold) format.setFontItalic(Config["%sfontitalic" % name]) self.Formats[name] = format
def parse_text_formatting(text): pos = 0 tokens = [] for m in re.finditer(r'</?([a-zA-Z1-6]+)/?>', text): q = text[pos:m.start()] if q: tokens.append((False, q)) tokens.append((True, (m.group(1).lower(), '/' in m.group()[:2]))) pos = m.end() if tokens: if text[pos:]: tokens.append((False, text[pos:])) else: tokens = [(False, text)] ranges, open_ranges, text = [], [], [] offset = 0 for is_tag, tok in tokens: if is_tag: tag, closing = tok if closing: if open_ranges: r = open_ranges.pop() r[-1] = offset - r[-2] if r[-1] > 0: ranges.append(r) else: if tag in {'b', 'strong', 'i', 'em'}: open_ranges.append([tag, offset, -1]) else: offset += len(tok.replace('&', '&')) text.append(tok) text = ''.join(text) formats = [] for tag, start, length in chain(ranges, open_ranges): fmt = QTextCharFormat() if tag in {'b', 'strong'}: fmt.setFontWeight(QFont.Weight.Bold) elif tag in {'i', 'em'}: fmt.setFontItalic(True) else: continue if length == -1: length = len(text) - start if length > 0: r = QTextLayout.FormatRange() r.format = fmt r.start, r.length = start, length formats.append(r) return text, formats
def initialize_formats(self): font_name = gprefs.get('gpm_template_editor_font', None) size = gprefs['gpm_template_editor_font_size'] if font_name is None: font = QFont() font.setFixedPitch(True) font.setPointSize(size) font_name = font.family() config = self.Config = {} config["fontfamily"] = font_name app_palette = QApplication.instance().palette() for name, color, bold, italic in ( ("normal", None, False, False), ("keyword", app_palette.color(QPalette.ColorRole.Link).name(), True, False), ("builtin", app_palette.color(QPalette.ColorRole.Link).name(), False, False), ("identifier", None, False, True), ("comment", "#007F00", False, True), ("string", "#808000", False, False), ("number", "#924900", False, False), ("lparen", None, True, True), ("rparen", None, True, True)): config["%sfontcolor" % name] = color config["%sfontbold" % name] = bold config["%sfontitalic" % name] = italic base_format = QTextCharFormat() base_format.setFontFamily(config["fontfamily"]) config["fontsize"] = size base_format.setFontPointSize(config["fontsize"]) self.Formats = {} for name in ("normal", "keyword", "builtin", "comment", "identifier", "string", "number", "lparen", "rparen"): format_ = QTextCharFormat(base_format) color = config["%sfontcolor" % name] if color: format_.setForeground(QColor(color)) if config["%sfontbold" % name]: format_.setFontWeight(QFont.Weight.Bold) format_.setFontItalic(config["%sfontitalic" % name]) self.Formats[name] = format_
def initializeFormats(cls): baseFormat = QTextCharFormat() baseFormat.setFontFamily('monospace') p = QApplication.instance().palette() for name, color, bold, italic in ( ("normal", None, False, False), ("keyword", p.color(QPalette.ColorRole.Link).name(), True, False), ("builtin", p.color(QPalette.ColorRole.Link).name(), False, False), ("constant", p.color(QPalette.ColorRole.Link).name(), False, False), ("decorator", "#0000E0", False, False), ("comment", "#007F00", False, True), ("string", "#808000", False, False), ("number", "#924900", False, False), ("error", "#FF0000", False, False), ("pyqt", "#50621A", False, False)): fmt = QTextCharFormat(baseFormat) if color is not None: fmt.setForeground(QColor(color)) if bold: fmt.setFontWeight(QFont.Weight.Bold) if italic: fmt.setFontItalic(italic) cls.Formats[name] = fmt
def do_italic(self): with self.editing_cursor() as c: fmt = QTextCharFormat() fmt.setFontItalic(not c.charFormat().fontItalic()) c.mergeCharFormat(fmt)