[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kwrite-devel
Subject:    Re: KSyntaxHighlighting meta data
From:       "Dr.-Ing. Christoph Cullmann" <cullmann () absint ! com>
Date:       2018-08-04 15:56:52
Message-ID: 1787990868.120123.1533398212153.JavaMail.zimbra () absint ! com
[Download RAW message or body]

Hi,

> On Thursday, 2 August 2018 11:31:59 CEST Dominik Haumann wrote:
> > > I'm not too worried about keeping API compatibility for extra getters,
> > > this
> > > all exists since many years and has proven to be stable.
> > 
> > Ok.
> > 
> > > I am however more
> > > worried about aspects of the syntax files becoming part of the de-facto
> > > API
> > > that you might not expect to be "API". We have that with the keyword
> > > access
> > > now for example, which exposes internal names used in the syntax files.
> > 
> > True, I haven't thought about it this way. Should we remove the
> > keywordList() getters again? Maybe we can come up with something better at
> > Akademy.
> > 
> > CC: Alexander, who requested this feature
> 
> I don't think we need to revert that, there's indeed valid use-cases for it,
> like the one Alexander has, and IIRC the Sieve editor in KDE PIM also
> duplicates the keyword list for auto-completion. And I don't really see a way
> to enable that without accessing the lists by name.
> 
> It's just something to keep in mind before we go further down that route, and
> possible to mention in the docs for the XML files, so we don't rename stuff
> there without thinking about the implications.
I ported a bit more stuff over.

Normal highlighting and folding seems to work fine.
I still get random colorization, but I assume that is the "broken" handling of the
format => attribute mapping I do atm.
The highlighting and folding info itself looks sane, I think.

I removed the exposure of the internal contexts in our internal API.

I added "FIXME-SYNTAX" markers to the places outside of katehighlight.cpp that still \
need fixes.

Three functions we will need to implement are:

    /**
     * Get all keywords valid for the given cursor position.
     * @param doc document to use
     * @param cursor cursor position in the given document
     * @return all keywords valid at that location
     */
    QStringList keywordsForLocation(KTextEditor::DocumentPrivate* doc, const \
KTextEditor::Cursor& cursor);

    /**
     * Is spellchecking required for the tiven cursor position?
     * @param doc document to use
     * @param cursor cursor position in the given document
     * @return spell checking required?
     */
    bool spellCheckingRequiredForLocation(KTextEditor::DocumentPrivate* doc, const \
KTextEditor::Cursor& cursor);

    /**
     * Get highlighting mode for the given cursor position.
     * @param doc document to use
     * @param cursor cursor position in the given document
     * @return mode valid at that location
     */
    QString higlightingModeForLocation(KTextEditor::DocumentPrivate* doc, const \
KTextEditor::Cursor& cursor);

For them, we would need some more interfacing to the syntax-highlighting framework,
I assume. Before, they did compute the context up to the given column and then \
collect the info from there.

For spellCheckingRequiredForLocation it could be good enough to just look at the \
property of the format there, that can already be implemented.

For the other two, more interfacing is needed (if one doesn't try to do \
higlightingModeForLocation only with the format, too)

I map already all formats to their definitions, which allows other things to work.

For the meta info, one still needs to fill:

    class HighlightPropertyBag
    {
    public:
        QString singleLineCommentMarker;
        QString multiLineCommentStart;
        QString multiLineCommentEnd;
        QString multiLineRegion;
        CSLPos  singleLineCommentPosition;
        QString deliminator;
        QString wordWrapDeliminator;
        QLinkedList<QRegularExpression> emptyLines;
        QHash<QString, QChar> characterEncodings;
        KatePrefixStore characterEncodingsPrefixStore;
        QHash<QChar, QString> reverseCharacterEncodings;
        int encodedCharactersInsertionPolicy;
    };

Beside emptyLines which is just foldingIgnoreList(), the other things that come from \
the XML files would still need some accessor in the framework.

Greetings
Christoph

-- 
----------------------------- Dr.-Ing. Christoph Cullmann ---------
AbsInt Angewandte Informatik GmbH      Email: cullmann@AbsInt.com
Science Park 1                         Tel:   +49-681-38360-22
66123 Saarbrücken                      Fax:   +49-681-38360-20
GERMANY                                WWW:   http://www.AbsInt.com
--------------------------------------------------------------------
Geschäftsführung: Dr.-Ing. Christian Ferdinand
Eingetragen im Handelsregister des Amtsgerichts Saarbrücken, HRB 11234


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic