Hi!

Within your derived TextEditor::SyntaxHighlighter class, you should be able to access currentBlock().blockNumber() - if you document does not have any fancy layout items (images, tables), that one should correspond to the line number (maybe off by one, don't remember).

You probably would also derive from TextEditor::TextDocument. From there, you can start your async lexing/parsing operation if the document is opened or changed. Connect to IDocument::filePathChanged and Core::IDocument::contentsChanged. See e.g. CppEditorDocument for details (this is more than you need, your version would look much simpler).

Nikolai


On 11/23/2017 10:26 AM, JeremY Larrieu wrote:
Hello

@Eike that's exactly what I wanna do. But I don't know where I can connect tout this signals and the "highlightBlock" method doesn't provide the line number to highlight nor from which file the line comes from.

Jeremy

Le 23 nov. 2017 10:06, "JeremY Larrieu" <[email protected] <mailto:[email protected]>> a écrit :

    Hello,

    Thanks for your answers.

    I will look to semantic highlighting.
    The purpose seems to fit my needs: syntax highlighting, symbol
    detection, ... each time a file is opened or modified.

    @Nikolai the lex file works with at most 4/5 states and was not made
    to work line by line. Modifying it in this direction will not help
    me to stick closer to the language when new features will come. I
    will have to make too many updates to my lex file each time the
    one's coming with the language is updated.

    Thanks again.

    Jeremy

    Le 23 nov. 2017 09:19, "Nikolai Kosjar" <[email protected]
    <mailto:[email protected]>> a écrit :

        On 11/23/2017 07:29 AM, JeremY Larrieu wrote:

            Hello,

            I'm working on making a plugin to support a specific
            language: Anubis.

            I've started the highlighting part and I saw that QtCreator
            is making syntax highlighting line by line instead of making
            it "globally" for the whole file.

            I just wanna know, how can I use the Bison/Flex files, used
            to check syntax for Anubis language, to make syntax
            highlighting in QtCreator.
            Knowing that most of the tokens declared in the Flex file
            can be multiline, making a lexer, working line by line, able
            to detect those tokens is hard and the code is too "verbose".

            I've tried to adapt what I've found in Bison/Flex files to
            make a syntax highlighter, but it's really painful and it
            makes further updates harder.
            If I was able to apply highlighting on the whole file (not
            line by line), it were simpler and I could use it to make
            some other functionalities at the same time: code
            completion, code analysis, symbol detection, ...

            Do you have an idea on how I can make syntax highlighting
            without rewriting a full lexer ?

            Thanks in advance.

            Jeremy


        Hi!

        I guess you've found TextEditor::SyntaxHighlighter, which does
        the line by line highlighting with highlightBlock(). For C++ and
        multi-line tokens (e.g. C comments) we call our custom lexer for
        the current line with the lexer state from the line before. If
        flex provides such a state based yylex() equivalent, this might
        work.

        The alternative is to use
        SemanticHighlighter::incrementalApplyExtraAdditionalFormats().
        With this one, you can for example start parsing in a worker
        thread and provide the highlighting information as a stream of
        TextEditor::HighlightingResult items.

        Nikolai


_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator

Reply via email to