aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/highlight/sql_highlighter.h
blob: 39b5e93242dcb4ae808538944a7979b3f525bbd3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once

#include "sql_highlight.h"

#include <util/generic/ptr.h>
#include <util/generic/ylimits.h>

#include <functional>

namespace NSQLHighlight {

    struct TToken {
        EUnitKind Kind;
        size_t Begin;  // In bytes
        size_t Length; // In bytes
    };

    class IHighlighter: public TThrRefBase {
    public:
        using TPtr = TIntrusivePtr<IHighlighter>;
        using TTokenCallback = std::function<void(TToken&& token)>;

        virtual ~IHighlighter() = default;
        virtual bool Tokenize(
            TStringBuf text,
            const TTokenCallback& onNext,
            size_t maxErrors = Max<size_t>()) const = 0;
    };

    TVector<TToken> Tokenize(IHighlighter& highlighter, TStringBuf text);

    IHighlighter::TPtr MakeHighlighter(const THighlighting& highlighting);

} // namespace NSQLHighlight