Pull to refresh

Comments 19

Спасибо за Вашу серию постов! Я вот сейчас пишу небольшой вспомогательный инструмент для себя на Qt, но использую там QSyntaxHighlighter, думаю изменить на QScintilla, т.к. по возможностям покруче будет, просто не знал про него в Qt до Ваших постов. Со Scintilla я знаком по wxPython, там есть виджет stc.StyledTextCtrl, как раз основанный Scintilla очень очень и удобный, уже успел заценить все его плюшки прямо из коробки :)
Судя по последней картинке, как-то не очень правильно ключевые слова ищутся. Нужно проверять, что вхождение ключевых слов в тексте, разделено сепараторами.

В слове dword, or подсвечиваться не должен.

В остальном все хорошо, спасибо.
Простите за пунктуацию, у меня тоже проблемы с сепараторами(.
Я написал про этот баг под картинкой:
>> Видно некоторые баги, например в слове «dword» подсвечивается вхождение «or» как ключевое
Приношу свои извинения, не заметил. Рекомендую все-же указать алгоритм избавления от этой баги.
>«В коробке» его нету — не беда, напишем сами!

Для тех лексеров, поддержки которых нет «в коробке» QScintilla, но есть «в коробке» оригинальной Scintilla, всё гораздо проще — нужно лишь написать небольшую обёртку. Ну или большую — в зависимости от языка :)
Несколько примеров можно посмотреть тут: github.com/Mezomish/juffed/tree/master/src/app/qsci/lexers
Спасибо. Но я показывал лишь пример реализации.
Я ни на секунду не осправивал полезность вашего примера :) Я просто показал ещё одну опцию для тех, кому понадобится реализовать свой собственный лексер.

Если необходимый синтаксис поддерживается оригинальной Scintilla — можно использовать оба способа, если же не поддерживается — то тут только ваш способ, без вариантов.
Кстати, хочу попросить совета. Есть необходимость реализовать WYSIWYG-редактор текста с плюшками (подсветка синтаксиса, замена последовательностей символов на картинки (что-то вроде графической мнемоники), при необходимости использование кастомных растровых шрифтов и т.п.). Подойдёт ли для этих целей Scintilla или QScintilla? Насколько я знаю, стандартные Qt'шные контролы в этом плане весьма и весьма тормознутые.
Вполне подойдет. Но зависит непосредственно от проекта. Может быть такой проект, что scintilla вообще не подходит, а может быть что только она и годится.
А она разве поддерживает «замена последовательностей символов на картинки»?
Что вы имеете ввиду? Насколько мне известно, можно использовать scintilla как угодно. А вот qscintilla надо кастомить немного. Надо посмотреть. Если QsciScintilla от QTextEdit, то возможно в теории.
Насколько я понял требования, необходима возможность вставлять картинки прямо в текст, аналогично тому, как вставляются смайлики в окне чата.
Конечно это можно сделать. Ведь так или иначе, qscintilla наследует QTextEdit. А он поддерживает html.
Так она же, видимо, переопределяет часть функционала QTextEdit, используя Scintill'у. А HTML мне не подходит, ведь цель — не вывести текст с графикой, а позволять редактировать его в WYSIWYG-режиме. В этом случае HTML будет сторонней примесью.
>Конечно это можно сделать. Ведь так или иначе, qscintilla наследует QTextEdit.

М-м-м?

class QSCINTILLA_EXPORT QsciScintilla : public QsciScintillaBase
{
    Q_OBJECT
    ...


class QSCINTILLA_EXPORT QsciScintillaBase : public QAbstractScrollArea
{
    Q_OBJECT
    ...
Упс. Я был о ней большего мнения. Это… это ужасно, господа.
Ну, знаете, это смотря с какой стороны посмотреть. QTextEdit с QSyntaxHighlighter-ом начинает захлёбываться на файлах даже в пару мегабайт, в то время как QScintilla жуёт без проблем и в 10 раз бОльшие файлы.
Ну, по крайней мере оно так было в те стародавние времена, когда JuffEd ещё был основан на QTextEdit, может сейчас и поправили уже.
Да, именно так. Удачная аналогия. При этом в сам текст должны вставляться соответствующие картинкам последовательности символов. В случае смайликов это были бы их текстовые представления — ":)", ";)" и т.п.
Sign up to leave a comment.

Articles