module Text.Highlighting.Kate.Syntax.Gcc
(highlight, parseExpression, syntaxName, syntaxExtensions)
where
import Text.Highlighting.Kate.Types
import Text.Highlighting.Kate.Common
import Text.ParserCombinators.Parsec hiding (State)
import Control.Monad.State
import Data.Char (isSpace)
import qualified Data.Set as Set
syntaxName :: String
syntaxName :: String
syntaxName = String
"GCCExtensions"
syntaxExtensions :: String
syntaxExtensions :: String
syntaxExtensions = String
"*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;"
highlight :: String -> [SourceLine]
highlight :: String -> [SourceLine]
highlight String
input = State SyntaxState [SourceLine] -> SyntaxState -> [SourceLine]
forall s a. State s a -> s -> a
evalState ((String -> StateT SyntaxState Identity SourceLine)
-> [String] -> State SyntaxState [SourceLine]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM String -> StateT SyntaxState Identity SourceLine
parseSourceLine ([String] -> State SyntaxState [SourceLine])
-> [String] -> State SyntaxState [SourceLine]
forall a b. (a -> b) -> a -> b
$ String -> [String]
lines String
input) SyntaxState
startingState
parseSourceLine :: String -> State SyntaxState SourceLine
parseSourceLine :: String -> StateT SyntaxState Identity SourceLine
parseSourceLine = KateParser Token
-> String -> StateT SyntaxState Identity SourceLine
mkParseSourceLine (Maybe (String, String) -> KateParser Token
parseExpression Maybe (String, String)
forall a. Maybe a
Nothing)
parseExpression :: Maybe (String,String)
-> KateParser Token
parseExpression :: Maybe (String, String) -> KateParser Token
parseExpression Maybe (String, String)
mbcontext = do
(String
lang,String
cont) <- KateParser (String, String)
-> ((String, String) -> KateParser (String, String))
-> Maybe (String, String)
-> KateParser (String, String)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe KateParser (String, String)
currentContext (String, String) -> KateParser (String, String)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (String, String)
mbcontext
Token
result <- (String, String) -> KateParser Token
parseRules (String
lang,String
cont)
ParsecT String SyntaxState Identity ()
-> ParsecT String SyntaxState Identity ()
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m ()
optional (ParsecT String SyntaxState Identity ()
-> ParsecT String SyntaxState Identity ())
-> ParsecT String SyntaxState Identity ()
-> ParsecT String SyntaxState Identity ()
forall a b. (a -> b) -> a -> b
$ do ParsecT String SyntaxState Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
(SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ())
-> (SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall a b. (a -> b) -> a -> b
$ \SyntaxState
st -> SyntaxState
st{ synStPrevChar :: Char
synStPrevChar = Char
'\n' }
ParsecT String SyntaxState Identity ()
pEndLine
Token -> KateParser Token
forall (m :: * -> *) a. Monad m => a -> m a
return Token
result
startingState :: SyntaxState
startingState = SyntaxState :: ContextStack
-> Int
-> Char
-> Bool
-> Bool
-> Bool
-> Bool
-> [String]
-> SyntaxState
SyntaxState {synStContexts :: ContextStack
synStContexts = [(String
"GCCExtensions",String
"DetectGccExtensions")], synStLineNumber :: Int
synStLineNumber = Int
0, synStPrevChar :: Char
synStPrevChar = Char
'\n', synStPrevNonspace :: Bool
synStPrevNonspace = Bool
False, synStContinuation :: Bool
synStContinuation = Bool
False, synStCaseSensitive :: Bool
synStCaseSensitive = Bool
True, synStKeywordCaseSensitive :: Bool
synStKeywordCaseSensitive = Bool
True, synStCaptures :: [String]
synStCaptures = []}
pEndLine :: ParsecT String SyntaxState Identity ()
pEndLine = do
(SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ())
-> (SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall a b. (a -> b) -> a -> b
$ \SyntaxState
st -> SyntaxState
st{ synStPrevNonspace :: Bool
synStPrevNonspace = Bool
False }
(String, String)
context <- KateParser (String, String)
currentContext
ContextStack
contexts <- SyntaxState -> ContextStack
synStContexts (SyntaxState -> ContextStack)
-> ParsecT String SyntaxState Identity SyntaxState
-> ParsecT String SyntaxState Identity ContextStack
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` ParsecT String SyntaxState Identity SyntaxState
forall (m :: * -> *) s u. Monad m => ParsecT s u m u
getState
SyntaxState
st <- ParsecT String SyntaxState Identity SyntaxState
forall (m :: * -> *) s u. Monad m => ParsecT s u m u
getState
if ContextStack -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length ContextStack
contexts Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
2
then case (String, String)
context of
(String, String)
_ | SyntaxState -> Bool
synStContinuation SyntaxState
st -> (SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ())
-> (SyntaxState -> SyntaxState)
-> ParsecT String SyntaxState Identity ()
forall a b. (a -> b) -> a -> b
$ \SyntaxState
st -> SyntaxState
st{ synStContinuation :: Bool
synStContinuation = Bool
False }
(String
"GCCExtensions",String
"DetectGccExtensions") -> () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
(String
"GCCExtensions",String
"GNUMacros") -> () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
(String
"GCCExtensions",String
"AttrArgs") -> (ParsecT String SyntaxState Identity ()
popContext) ParsecT String SyntaxState Identity ()
-> ParsecT String SyntaxState Identity ()
-> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ParsecT String SyntaxState Identity ()
pEndLine
(String
"GCCExtensions",String
"Close") -> () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
(String
"GCCExtensions",String
"AttrStringArg") -> () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
(String, String)
_ -> () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else () -> ParsecT String SyntaxState Identity ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
withAttribute :: a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute a
attr String
txt = do
Bool -> ParsecT s SyntaxState m () -> ParsecT s SyntaxState m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
txt) (ParsecT s SyntaxState m () -> ParsecT s SyntaxState m ())
-> ParsecT s SyntaxState m () -> ParsecT s SyntaxState m ()
forall a b. (a -> b) -> a -> b
$ String -> ParsecT s SyntaxState m ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Parser matched no text"
(SyntaxState -> SyntaxState) -> ParsecT s SyntaxState m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((SyntaxState -> SyntaxState) -> ParsecT s SyntaxState m ())
-> (SyntaxState -> SyntaxState) -> ParsecT s SyntaxState m ()
forall a b. (a -> b) -> a -> b
$ \SyntaxState
st -> SyntaxState
st { synStPrevChar :: Char
synStPrevChar = String -> Char
forall a. [a] -> a
last String
txt
, synStPrevNonspace :: Bool
synStPrevNonspace = SyntaxState -> Bool
synStPrevNonspace SyntaxState
st Bool -> Bool -> Bool
|| Bool -> Bool
not ((Char -> Bool) -> String -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Char -> Bool
isSpace String
txt) }
(a, String) -> ParsecT s SyntaxState m (a, String)
forall (m :: * -> *) a. Monad m => a -> m a
return (a
attr, String
txt)
list_GNUTypes :: Set String
list_GNUTypes = [String] -> Set String
forall a. Ord a => [a] -> Set a
Set.fromList ([String] -> Set String) -> [String] -> Set String
forall a b. (a -> b) -> a -> b
$ String -> [String]
words (String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ String
"__float80 __float128 _Decimal32 _Decimal64 _Decimal128 __int128 __fp16 _Fract _Sat _Accum"
list_GNUKeywords :: Set String
list_GNUKeywords = [String] -> Set String
forall a. Ord a => [a] -> Set a
Set.fromList ([String] -> Set String) -> [String] -> Set String
forall a b. (a -> b) -> a -> b
$ String -> [String]
words (String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ String
"__asm__ __const__ __extension__ __inline__ __label__ __complex__ __real__ __restrict__ __restrict __imag__ __typeof__ typeof __alignof__ __thread"
list_GNUFunctions :: Set String
list_GNUFunctions = [String] -> Set String
forall a. Ord a => [a] -> Set a
Set.fromList ([String] -> Set String) -> [String] -> Set String
forall a b. (a -> b) -> a -> b
$ String -> [String]
words (String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ String
"__has_nothrow_assign __has_nothrow_copy __has_nothrow_constructor __has_trivial_assign __has_trivial_copy __has_trivial_constructor __has_trivial_destructor __has_virtual_destructor __is_abstract __is_base_of __is_class __is_empty __is_enum __is_pod __is_polymorphic __is_union __sync_fetch_and_add __sync_fetch_and_sub __sync_fetch_and_or __sync_fetch_and_and __sync_fetch_and_xor __sync_fetch_and_nand __sync_add_and_fetch __sync_sub_and_fetch __sync_or_and_fetch __sync_and_and_fetch __sync_xor_and_fetch __sync_nand_and_fetch __sync_bool_compare_and_swap __sync_val_compare_and_swap __sync_synchronize __sync_lock_test_and_set __sync_lock_release __atomic_load_n __atomic_load __atomic_store_n __atomic_store __atomic_exchange_n __atomic_exchange __atomic_compare_exchange_n __atomic_compare_exchange __atomic_add_fetch __atomic_sub_fetch __atomic_and_fetch __atomic_or_fetch __atomic_xor_fetch __atomic_nand_fetch __atomic_fetch_add __atomic_fetch_sub __atomic_fetch_and __atomic_fetch_or __atomic_fetch_xor __atomic_fetch_nand __atomic_test_and_set __atomic_clear __atomic_signal_fence __atomic_thread_fence __atomic_always_lock_free __atomic_is_lock_free"
list_GNUMacros :: Set String
list_GNUMacros = [String] -> Set String
forall a. Ord a => [a] -> Set a
Set.fromList ([String] -> Set String) -> [String] -> Set String
forall a b. (a -> b) -> a -> b
$ String -> [String]
words (String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ String
"_FORTIFY_SOURCE _GNU_SOURCE _ILP32 _LP64 _REENTRANT _STDC_PREDEF_H __3dNOW_A__ __3dNOW__ __ABM__ __ADX__ __AES__ __ATOMIC_ACQUIRE __ATOMIC_ACQ_REL __ATOMIC_CONSUME __ATOMIC_HLE_ACQUIRE __ATOMIC_HLE_RELEASE __ATOMIC_RELAXED __ATOMIC_RELEASE __ATOMIC_SEQ_CST __AVX2__ __AVX__ __BASE_FILE__ __BIGGEST_ALIGNMENT__ __BMI2__ __BMI__ __BYTE_ORDER__ __CHAR16_TYPE__ __CHAR32_TYPE__ __CHAR_BIT__ __CHAR_UNSIGNED__ __COUNTER__ __DBL_DECIMAL_DIG__ __DBL_DENORM_MIN__ __DBL_DIG__ __DBL_EPSILON__ __DBL_HAS_DENORM__ __DBL_HAS_INFINITY__ __DBL_HAS_QUIET_NAN__ __DBL_MANT_DIG__ __DBL_MAX_10_EXP__ __DBL_MAX_EXP__ __DBL_MAX__ __DBL_MIN_10_EXP__ __DBL_MIN_EXP__ __DBL_MIN__ __DEC128_EPSILON__ __DEC128_MANT_DIG__ __DEC128_MAX_EXP__ __DEC128_MAX__ __DEC128_MIN_EXP__ __DEC128_MIN__ __DEC128_SUBNORMAL_MIN__ __DEC32_EPSILON__ __DEC32_MANT_DIG__ __DEC32_MAX_EXP__ __DEC32_MAX__ __DEC32_MIN_EXP__ __DEC32_MIN__ __DEC32_SUBNORMAL_MIN__ __DEC64_EPSILON__ __DEC64_MANT_DIG__ __DEC64_MAX_EXP__ __DEC64_MAX__ __DEC64_MIN_EXP__ __DEC64_MIN__ __DEC64_SUBNORMAL_MIN__ __DECIMAL_BID_FORMAT__ __DECIMAL_DIG__ __DEC_EVAL_METHOD__ __DEPRECATED __ELF__ __EXCEPTIONS __F16C__ __FAST_MATH__ __FINITE_MATH_ONLY__ __FLOAT_WORD_ORDER__ __FLT_DECIMAL_DIG__ __FLT_DENORM_MIN__ __FLT_DIG__ __FLT_EPSILON__ __FLT_EVAL_METHOD__ __FLT_HAS_DENORM__ __FLT_HAS_INFINITY__ __FLT_HAS_QUIET_NAN__ __FLT_MANT_DIG__ __FLT_MAX_10_EXP__ __FLT_MAX_EXP__ __FLT_MAX__ __FLT_MIN_10_EXP__ __FLT_MIN_EXP__ __FLT_MIN__ __FLT_RADIX__ __FMA4__ __FMA__ __FP_FAST_FMA __FP_FAST_FMAF __FSGSBASE__ __FUNCTION__ __FXSR__ __GCC_ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_TEST_AND_SET_TRUEVAL __GCC_ATOMIC_WCHAR_T_LOCK_FREE __GCC_HAVE_DWARF2_CFI_ASM __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 __GFORTRAN__ __GNUC_GNU_INLINE__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ __GNUC_STDC_INLINE__ __GNUC__ __GNUG__ __GXX_ABI_VERSION __GXX_EXPERIMENTAL_CXX0X__ __GXX_RTTI __GXX_WEAK__ __ILP32__ __INCLUDE_LEVEL__ __INT16_C __INT16_MAX__ __INT16_TYPE__ __INT32_C __INT32_MAX__ __INT32_TYPE__ __INT64_C __INT64_MAX__ __INT64_TYPE__ __INT8_C __INT8_MAX__ __INT8_TYPE__ __INTMAX_C __INTMAX_MAX__ __INTMAX_TYPE__ __INTPTR_MAX__ __INTPTR_TYPE__ __INT_FAST16_MAX__ __INT_FAST16_TYPE__ __INT_FAST32_MAX__ __INT_FAST32_TYPE__ __INT_FAST64_MAX__ __INT_FAST64_TYPE__ __INT_FAST8_MAX__ __INT_FAST8_TYPE__ __INT_LEAST16_MAX__ __INT_LEAST16_TYPE__ __INT_LEAST32_MAX__ __INT_LEAST32_TYPE__ __INT_LEAST64_MAX__ __INT_LEAST64_TYPE__ __INT_LEAST8_MAX__ __INT_LEAST8_TYPE__ __INT_MAX__ __LDBL_DENORM_MIN__ __LDBL_DIG__ __LDBL_EPSILON__ __LDBL_HAS_DENORM__ __LDBL_HAS_INFINITY__ __LDBL_HAS_QUIET_NAN__ __LDBL_MANT_DIG__ __LDBL_MAX_10_EXP__ __LDBL_MAX_EXP__ __LDBL_MAX__ __LDBL_MIN_10_EXP__ __LDBL_MIN_EXP__ __LDBL_MIN__ __LONG_LONG_MAX__ __LONG_MAX__ __LP64__ __LWP__ __LZCNT__ __MMX__ __NEXT_RUNTIME__ __NO_INLINE__ __OPTIMIZE_SIZE__ __OPTIMIZE__ __ORDER_BIG_ENDIAN__ __ORDER_LITTLE_ENDIAN__ __ORDER_PDP_ENDIAN__ __PCLMUL__ __PIC__ __PIE__ __POPCNT__ __PRAGMA_REDEFINE_EXTNAME __PRETTY_FUNCTION__ __PRFCHW__ __PTRDIFF_MAX__ __PTRDIFF_TYPE__ __RDRND__ __RDSEED__ __REGISTER_PREFIX__ __RTM__ __SANITIZE_ADDRESS__ __SCHAR_MAX__ __SHRT_MAX__ __SIG_ATOMIC_MAX__ __SIG_ATOMIC_MIN__ __SIG_ATOMIC_TYPE__ __SIZEOF_DOUBLE__ __SIZEOF_FLOAT__ __SIZEOF_INT128__ __SIZEOF_INT__ __SIZEOF_LONG_DOUBLE__ __SIZEOF_LONG_LONG__ __SIZEOF_LONG__ __SIZEOF_POINTER__ __SIZEOF_PTRDIFF_T__ __SIZEOF_SHORT__ __SIZEOF_SIZE_T__ __SIZEOF_WCHAR_T__ __SIZEOF_WINT_T__ __SIZE_MAX__ __SIZE_TYPE__ __SSE2_MATH__ __SSE2__ __SSE3__ __SSE4A__ __SSE4_1__ __SSE4_2__ __SSE_MATH__ __SSE__ __SSP_ALL__ __SSP__ __SSSE3__ __STDC_HOSTED__ __STDC_IEC_559_COMPLEX__ __STDC_IEC_559__ __STDC_ISO_10646__ __STDC_NO_THREADS__ __STDC_UTF_16__ __STDC_UTF_32__ __STDC_VERSION__ __STDC__ __STRICT_ANSI__ __TBM__ __TIMESTAMP__ __UINT16_C __UINT16_MAX__ __UINT16_TYPE__ __UINT32_C __UINT32_MAX__ __UINT32_TYPE__ __UINT64_C __UINT64_MAX__ __UINT64_TYPE__ __UINT8_C __UINT8_MAX__ __UINT8_TYPE__ __UINTMAX_C __UINTMAX_MAX__ __UINTMAX_TYPE__ __UINTPTR_MAX__ __UINTPTR_TYPE__ __UINT_FAST16_MAX__ __UINT_FAST16_TYPE__ __UINT_FAST32_MAX__ __UINT_FAST32_TYPE__ __UINT_FAST64_MAX__ __UINT_FAST64_TYPE__ __UINT_FAST8_MAX__ __UINT_FAST8_TYPE__ __UINT_LEAST16_MAX__ __UINT_LEAST16_TYPE__ __UINT_LEAST32_MAX__ __UINT_LEAST32_TYPE__ __UINT_LEAST64_MAX__ __UINT_LEAST64_TYPE__ __UINT_LEAST8_MAX__ __UINT_LEAST8_TYPE__ __USER_LABEL_PREFIX__ __USING_SJLJ_EXCEPTIONS__ __VA_ARGS__ __VERSION__ __WCHAR_MAX__ __WCHAR_MIN__ __WCHAR_TYPE__ __WCHAR_UNSIGNED__ __WINT_MAX__ __WINT_MIN__ __WINT_TYPE__ __XOP__ __XSAVEOPT__ __XSAVE__ __amd64 __amd64__ __amdfam10 __amdfam10__ __athlon __athlon__ __athlon_sse__ __atom __atom__ __bdver1 __bdver1__ __bdver2 __bdver2__ __bdver3 __bdver3__ __btver1 __btver1__ __btver2 __btver2__ __code_model_32__ __code_model_small__ __core2 __core2__ __core_avx2 __core_avx2__ __corei7 __corei7__ __cplusplus __geode __geode__ __gnu_linux__ __i386 __i386__ __i486 __i486__ __i586 __i586__ __i686 __i686__ __k6 __k6_2__ __k6_3__ __k6__ __k8 __k8__ __linux __linux__ __nocona __nocona__ __pentium __pentium4 __pentium4__ __pentium__ __pentium_mmx__ __pentiumpro __pentiumpro__ __pic__ __pie__ __tune_amdfam10__ __tune_athlon__ __tune_athlon_sse__ __tune_atom__ __tune_bdver1__ __tune_bdver2__ __tune_bdver3__ __tune_btver1__ __tune_btver2__ __tune_core2__ __tune_core_avx2__ __tune_corei7__ __tune_geode__ __tune_i386__ __tune_i486__ __tune_i586__ __tune_i686__ __tune_k6_2__ __tune_k6_3__ __tune_k6__ __tune_k8__ __tune_nocona__ __tune_pentium2__ __tune_pentium3__ __tune_pentium4__ __tune_pentium__ __tune_pentium_mmx__ __tune_pentiumpro__ __unix __unix__ __x86_64 __x86_64__ i386 linux unix"
regex_'5f'5fbuiltin'5f'5ba'2dzA'2dZ0'2d9'5f'5d'2b :: Regex
regex_'5f'5fbuiltin'5f'5ba'2dzA'2dZ0'2d9'5f'5d'2b = Bool -> String -> Regex
compileRegex Bool
True String
"__builtin_[a-zA-Z0-9_]+"
regex_0'5bBb'5d'5b01'5d'2b'28'5bUu'5d'5bLl'5d'7b0'2c2'7d'7c'5bLl'5d'7b0'2c2'7d'5bUu'5d'3f'7c'5f'5b'5f0'2d9A'2dZa'2dz'5d'2a'29'3f'5cb :: Regex
regex_0'5bBb'5d'5b01'5d'2b'28'5bUu'5d'5bLl'5d'7b0'2c2'7d'7c'5bLl'5d'7b0'2c2'7d'5bUu'5d'3f'7c'5f'5b'5f0'2d9A'2dZa'2dz'5d'2a'29'3f'5cb = Bool -> String -> Regex
compileRegex Bool
True String
"0[Bb][01]+([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\\b"
parseRules :: (String, String) -> KateParser Token
parseRules (String
"GCCExtensions",String
"DetectGccExtensions") =
(((String -> Set String -> KateParser String
pKeyword String
" \n\t.():!+,-<=>%&*/;?[]^{|}~\\" Set String
list_GNUMacros KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
OtherTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((String -> Set String -> KateParser String
pKeyword String
" \n\t.():!+,-<=>%&*/;?[]^{|}~\\" Set String
list_GNUFunctions KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
FunctionTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((String -> Set String -> KateParser String
pKeyword String
" \n\t.():!+,-<=>%&*/;?[]^{|}~\\" Set String
list_GNUTypes KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
DataTypeTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Bool -> String -> KateParser String
pString Bool
False String
"__attribute__" KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (String, String) -> ParsecT String SyntaxState Identity ()
pushContext (String
"GCCExtensions",String
"AttrArgs"))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Bool -> String -> KateParser String
pString Bool
False String
"__declspec" KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (String, String) -> ParsecT String SyntaxState Identity ()
pushContext (String
"GCCExtensions",String
"AttrArgs"))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((String -> Set String -> KateParser String
pKeyword String
" \n\t.():!+,-<=>%&*/;?[]^{|}~\\" Set String
list_GNUKeywords KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Regex -> KateParser String
pRegExpr Regex
regex_'5f'5fbuiltin'5f'5ba'2dzA'2dZ0'2d9'5f'5d'2b KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
FunctionTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Regex -> KateParser String
pRegExpr Regex
regex_0'5bBb'5d'5b01'5d'2b'28'5bUu'5d'5bLl'5d'7b0'2c2'7d'7c'5bLl'5d'7b0'2c2'7d'5bUu'5d'3f'7c'5f'5b'5f0'2d9A'2dZa'2dz'5d'2a'29'3f'5cb KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(KateParser (String, String)
currentContext KateParser (String, String)
-> ((String, String) -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String, String)
x -> Bool -> ParsecT String SyntaxState Identity ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard ((String, String)
x (String, String) -> (String, String) -> Bool
forall a. Eq a => a -> a -> Bool
== (String
"GCCExtensions",String
"DetectGccExtensions")) ParsecT String SyntaxState Identity ()
-> KateParser String -> KateParser String
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> KateParser String
pDefault KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
NormalTok))
parseRules (String
"GCCExtensions",String
"GNUMacros") =
(((String -> Set String -> KateParser String
pKeyword String
" \n\t.():!+,-<=>%&*/;?[]^{|}~\\" Set String
list_GNUMacros KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
OtherTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(KateParser (String, String)
currentContext KateParser (String, String)
-> ((String, String) -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String, String)
x -> Bool -> ParsecT String SyntaxState Identity ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard ((String, String)
x (String, String) -> (String, String) -> Bool
forall a. Eq a => a -> a -> Bool
== (String
"GCCExtensions",String
"GNUMacros")) ParsecT String SyntaxState Identity ()
-> KateParser String -> KateParser String
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> KateParser String
pDefault KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
NormalTok))
parseRules (String
"GCCExtensions",String
"AttrArgs") =
(((Bool -> Char -> Char -> KateParser String
pDetect2Chars Bool
False Char
'(' Char
'(' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Bool -> Char -> Char -> KateParser String
pDetect2Chars Bool
False Char
')' Char
')' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (ParsecT String SyntaxState Identity ()
popContext))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Bool -> Char -> KateParser String
pDetectChar Bool
False Char
'(' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (String, String) -> ParsecT String SyntaxState Identity ()
pushContext (String
"GCCExtensions",String
"Close"))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(KateParser (String, String)
currentContext KateParser (String, String)
-> ((String, String) -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String, String)
x -> Bool -> ParsecT String SyntaxState Identity ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard ((String, String)
x (String, String) -> (String, String) -> Bool
forall a. Eq a => a -> a -> Bool
== (String
"GCCExtensions",String
"AttrArgs")) ParsecT String SyntaxState Identity ()
-> KateParser String -> KateParser String
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> KateParser String
pDefault KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok))
parseRules (String
"GCCExtensions",String
"Close") =
(((Bool -> Char -> KateParser String
pDetectChar Bool
False Char
')' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (ParsecT String SyntaxState Identity ()
popContext))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
((Bool -> Char -> KateParser String
pDetectChar Bool
False Char
'"' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
StringTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (String, String) -> ParsecT String SyntaxState Identity ()
pushContext (String
"GCCExtensions",String
"AttrStringArg"))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(KateParser (String, String)
currentContext KateParser (String, String)
-> ((String, String) -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String, String)
x -> Bool -> ParsecT String SyntaxState Identity ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard ((String, String)
x (String, String) -> (String, String) -> Bool
forall a. Eq a => a -> a -> Bool
== (String
"GCCExtensions",String
"Close")) ParsecT String SyntaxState Identity ()
-> KateParser String -> KateParser String
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> KateParser String
pDefault KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
ExtensionTok))
parseRules (String
"GCCExtensions",String
"AttrStringArg") =
(((Bool -> Char -> KateParser String
pDetectChar Bool
False Char
'"' KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
StringTok) KateParser Token
-> ParsecT String SyntaxState Identity () -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> m b -> m a
>>~ (ParsecT String SyntaxState Identity ()
popContext))
KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(KateParser (String, String)
currentContext KateParser (String, String)
-> ((String, String) -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String, String)
x -> Bool -> ParsecT String SyntaxState Identity ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard ((String, String)
x (String, String) -> (String, String) -> Bool
forall a. Eq a => a -> a -> Bool
== (String
"GCCExtensions",String
"AttrStringArg")) ParsecT String SyntaxState Identity ()
-> KateParser String -> KateParser String
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> KateParser String
pDefault KateParser String
-> (String -> KateParser Token) -> KateParser Token
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TokenType -> String -> KateParser Token
forall (m :: * -> *) a s.
Monad m =>
a -> String -> ParsecT s SyntaxState m (a, String)
withAttribute TokenType
StringTok))
parseRules (String, String)
x = (String, String) -> KateParser Token
parseRules (String
"GCCExtensions",String
"DetectGccExtensions") KateParser Token -> KateParser Token -> KateParser Token
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> String -> KateParser Token
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"Unknown context" String -> String -> String
forall a. [a] -> [a] -> [a]
++ (String, String) -> String
forall a. Show a => a -> String
show (String, String)
x)