{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE MagicHash #-}
{-# LINE "src\Distribution\Fields\Lexer.x" #-}
-----------------------------------------------------------------------------

-- |

-- Module      :  Distribution.Fields.Lexer

-- License     :  BSD3

--

-- Maintainer  :  cabal-devel@haskell.org

-- Portability :  portable

--

-- Lexer for the cabal files.

{-# LANGUAGE CPP #-}
{-# LANGUAGE BangPatterns #-}
#ifdef CABAL_PARSEC_DEBUG
{-# LANGUAGE PatternGuards #-}
#endif
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module Distribution.Fields.Lexer
  (ltest, lexToken, Token(..), LToken(..)
  ,bol_section, in_section, in_field_layout, in_field_braces
  ,mkLexState) where

import Prelude ()
import qualified Prelude as Prelude
import Distribution.Compat.Prelude

import Distribution.Fields.LexerMonad
import Distribution.Parsec.Position (Position (..), incPos, retPos)
import Data.ByteString (ByteString)
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as B.Char8
import qualified Data.Word as Word

#ifdef CABAL_PARSEC_DEBUG
import Debug.Trace
import qualified Data.Vector as V
import qualified Data.Text   as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Encoding.Error as T
#endif
#if __GLASGOW_HASKELL__ >= 603
#include "ghcconfig.h"
#elif defined(__GLASGOW_HASKELL__)
#include "config.h"
#endif
#if __GLASGOW_HASKELL__ >= 503
import Data.Array
#else
import Array
#endif
#if __GLASGOW_HASKELL__ >= 503
import Data.Array.Base (unsafeAt)
import GHC.Exts
#else
import GlaExts
#endif
alex_tab_size :: Int
alex_tab_size :: Int
alex_tab_size = Int
8
alex_base :: AlexAddr
alex_base :: AlexAddr
alex_base = Addr# -> AlexAddr
AlexA#
  Addr#
"\x12\xff\xff\xff\xf9\xff\xff\xff\xfb\xff\xff\xff\x01\x00\x00\x00\x2f\x00\x00\x00\x50\x00\x00\x00\xd0\x00\x00\x00\x50\x01\x00\x00\xd0\x01\x00\x00\x50\x02\x00\x00\x81\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x69\xff\xff\xff\x03\x00\x00\x00\x09\x00\x00\x00\xf8\x00\x00\x00\xe2\xff\xff\xff\xd0\x02\x00\x00\x71\xff\xff\xff\x0b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x5f\xff\xff\xff\x5d\xff\xff\xff\x00\x00\x00\x00\xf0\x02\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x03\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x66\x03\x00\x00\x98\x00\x00\x00\x80\xff\xff\xff\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\xef\x03\x00\x00\x13\x04\x00\x00"#

alex_table :: AlexAddr
alex_table :: AlexAddr
alex_table = Addr# -> AlexAddr
AlexA#
  Addr#
"\x00\x00\x18\x00\x11\x00\x17\x00\x02\x00\x17\x00\x16\x00\x0b\x00\x16\x00\x0f\x00\x03\x00\x17\x00\x0f\x00\x17\x00\x16\x00\x13\x00\x16\x00\x15\x00\x10\x00\x17\x00\x15\x00\x17\x00\x16\x00\x17\x00\x16\x00\x11\x00\x19\x00\x02\x00\x1a\x00\x1c\x00\x0b\x00\x22\x00\x10\x00\x03\x00\x27\x00\x0f\x00\x00\x00\x00\x00\x12\x00\x00\x00\x12\x00\x10\x00\x00\x00\x15\x00\x00\x00\x00\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x1c\x00\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x22\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x0c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x1e\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x14\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x27\x00\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x2d\x00\x1b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2c\x00\x2c\x00\x2d\x00\x2d\x00\x2d\x00\x08\x00\x09\x00\x2d\x00\xff\xff\x11\x00\x17\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2d\x00\x29\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\xff\xff\xff\xff\x2d\x00\x2d\x00\x2d\x00\x0a\x00\x09\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x2d\x00\xff\xff\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x2d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\xff\xff\xff\xff\x2d\x00\x2d\x00\x2d\x00\x09\x00\x09\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x2d\x00\xff\xff\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x2d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x2d\x00\xff\xff\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2e\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#

alex_check :: AlexAddr
alex_check :: AlexAddr
alex_check = Addr# -> AlexAddr
AlexA#
  Addr#
"\xff\xff\xef\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0d\x00\x09\x00\x0d\x00\xa0\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0d\x00\x2d\x00\x0d\x00\xa0\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0d\x00\x0a\x00\x0d\x00\x20\x00\xbb\x00\x20\x00\xbf\x00\x0a\x00\x20\x00\x0a\x00\xa0\x00\x20\x00\x0a\x00\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x2d\x00\x20\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x20\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xc2\x00\xff\xff\xc2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xff\xff\xc2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xff\xff\xc2\x00\xff\xff\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x7f\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x22\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x7f\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\x21\x00\x7f\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x22\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#

alex_deflt :: AlexAddr
alex_deflt :: AlexAddr
alex_deflt = Addr# -> AlexAddr
AlexA#
  Addr#
"\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x24\x00\x07\x00\x07\x00\x07\x00\x07\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1b\x00"#

alex_accept :: Array Int (AlexAcc user)
alex_accept = (Int, Int) -> [AlexAcc user] -> Array Int (AlexAcc user)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0 :: Int, Int
48)
  [ Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
30
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
29
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
28
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
27
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
26
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
25
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
24
  , AlexAcc user
forall user. AlexAcc user
AlexAccSkip
  , AlexAcc user
forall user. AlexAcc user
AlexAccSkip
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
23
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
22
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
21
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
20
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccSkip
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
19
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
18
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
17
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
16
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
15
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
14
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
13
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
12
  , AlexAcc user
forall user. AlexAcc user
AlexAccSkip
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
11
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
10
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
9
  , AlexAcc user
forall user. AlexAcc user
AlexAccSkip
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
8
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
7
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
6
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
5
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
4
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
3
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
2
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
1
  , Int -> AlexAcc user
forall user. Int -> AlexAcc user
AlexAcc Int
0
  , AlexAcc user
forall user. AlexAcc user
AlexAccNone
  ]

alex_actions :: Array Int (Position -> Int -> ByteString -> Lex LToken)
alex_actions = (Int, Int)
-> [(Int, Position -> Int -> ByteString -> Lex LToken)]
-> Array Int (Position -> Int -> ByteString -> Lex LToken)
forall i e. Ix i => (i, i) -> [(i, e)] -> Array i e
array (Int
0 :: Int, Int
31)
  [ (Int
30,Position -> Int -> ByteString -> Lex LToken
forall {p}. Position -> Int -> p -> Lex LToken
alex_action_0)
  , (Int
29,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_20)
  , (Int
28,Position -> Int -> ByteString -> Lex LToken
alex_action_16)
  , (Int
27,Position -> Int -> ByteString -> Lex LToken
alex_action_3)
  , (Int
26,Position -> Int -> ByteString -> Lex LToken
alex_action_8)
  , (Int
25,Position -> Int -> ByteString -> Lex LToken
alex_action_8)
  , (Int
24,Position -> Int -> ByteString -> Lex LToken
alex_action_8)
  , (Int
23,Position -> Int -> ByteString -> Lex LToken
alex_action_5)
  , (Int
22,Position -> Int -> ByteString -> Lex LToken
alex_action_4)
  , (Int
21,Position -> Int -> ByteString -> Lex LToken
alex_action_3)
  , (Int
20,Position -> Int -> ByteString -> Lex LToken
alex_action_16)
  , (Int
19,Position -> Int -> ByteString -> Lex LToken
alex_action_1)
  , (Int
18,Position -> Int -> ByteString -> Lex LToken
alex_action_1)
  , (Int
17,Position -> Int -> ByteString -> Lex LToken
forall {p}. Position -> Int -> p -> Lex LToken
alex_action_0)
  , (Int
16,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_25)
  , (Int
15,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_25)
  , (Int
14,Position -> Int -> ByteString -> Lex LToken
alex_action_24)
  , (Int
13,Position -> Int -> ByteString -> Lex LToken
alex_action_23)
  , (Int
12,Position -> Int -> ByteString -> Lex LToken
alex_action_22)
  , (Int
11,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_19)
  , (Int
10,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_19)
  , (Int
9,Position -> Int -> ByteString -> Lex LToken
alex_action_18)
  , (Int
8,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_15)
  , (Int
7,Position -> Int -> ByteString -> Lex LToken
forall {p} {p} {p}. p -> p -> p -> Lex LToken
alex_action_15)
  , (Int
6,Position -> Int -> ByteString -> Lex LToken
alex_action_14)
  , (Int
5,Position -> Int -> ByteString -> Lex LToken
alex_action_13)
  , (Int
4,Position -> Int -> ByteString -> Lex LToken
alex_action_12)
  , (Int
3,Position -> Int -> ByteString -> Lex LToken
alex_action_11)
  , (Int
2,Position -> Int -> ByteString -> Lex LToken
alex_action_10)
  , (Int
1,Position -> Int -> ByteString -> Lex LToken
alex_action_9)
  , (Int
0,Position -> Int -> ByteString -> Lex LToken
alex_action_9)
  ]


bol_field_braces,bol_field_layout,bol_section,in_field_braces,in_field_layout,in_section :: Int
bol_field_braces :: Int
bol_field_braces = Int
1
bol_field_layout :: Int
bol_field_layout = Int
2
bol_section :: Int
bol_section = Int
3
in_field_braces :: Int
in_field_braces = Int
4
in_field_layout :: Int
in_field_layout = Int
5
in_section :: Int
in_section = Int
6
alex_action_0 :: Position -> Int -> p -> Lex LToken
alex_action_0 = \Position
pos Int
len p
_ -> do
              Bool -> Lex () -> Lex ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
len Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
0) (Lex () -> Lex ()) -> Lex () -> Lex ()
forall a b. (a -> b) -> a -> b
$ Position -> LexWarningType -> Lex ()
addWarningAt Position
pos LexWarningType
LexWarningBOM
              Position -> Lex ()
setPos Position
pos -- reset position as if BOM didn't exist

              Int -> Lex ()
setStartCode Int
bol_section
              Lex LToken
lexToken
alex_action_1 :: Position -> Int -> ByteString -> Lex LToken
alex_action_1 = \Position
pos Int
len ByteString
inp -> Position -> Int -> ByteString -> Lex Int
checkWhitespace Position
pos Int
len ByteString
inp Lex Int -> Lex () -> Lex ()
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Position -> Position) -> Lex ()
adjustPos Position -> Position
retPos Lex () -> Lex LToken -> Lex LToken
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex LToken
lexToken
alex_action_3 :: Position -> Int -> ByteString -> Lex LToken
alex_action_3 = \Position
pos Int
len ByteString
inp -> Position -> Int -> ByteString -> Lex Int
checkLeadingWhitespace Position
pos Int
len ByteString
inp Lex Int -> (Int -> Lex LToken) -> Lex LToken
forall a b. Lex a -> (a -> Lex b) -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
len' ->
                                     -- len' is character whitespace length (counting nbsp as one)

                                     if ByteString -> Int
B.length ByteString
inp Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
len
                                       then LToken -> Lex LToken
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (Position -> Token -> LToken
L Position
pos Token
EOF)
                                       else do
                                        -- Small hack: if char and byte length mismatch

                                        -- subtract the difference, so lexToken will count position correctly.

                                        -- Proper (and slower) fix is to count utf8 length in lexToken

                                        Bool -> Lex () -> Lex ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
len' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
len) (Lex () -> Lex ()) -> Lex () -> Lex ()
forall a b. (a -> b) -> a -> b
$ (Position -> Position) -> Lex ()
adjustPos (Int -> Position -> Position
incPos (Int
len' Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
len))
                                        Int -> Lex ()
setStartCode Int
in_section
                                        LToken -> Lex LToken
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (Position -> Token -> LToken
L Position
pos (Int -> Token
Indent Int
len'))
alex_action_4 :: Position -> Int -> ByteString -> Lex LToken
alex_action_4 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
OpenBrace
alex_action_5 :: Position -> Int -> ByteString -> Lex LToken
alex_action_5 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
CloseBrace
alex_action_8 :: Position -> Int -> ByteString -> Lex LToken
alex_action_8 = (ByteString -> Token)
-> Position -> Int -> ByteString -> Lex LToken
toki ByteString -> Token
TokSym
alex_action_9 :: Position -> Int -> ByteString -> Lex LToken
alex_action_9 = \Position
pos Int
len ByteString
inp -> LToken -> Lex LToken
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (LToken -> Lex LToken) -> LToken -> Lex LToken
forall a b. (a -> b) -> a -> b
$! Position -> Token -> LToken
L Position
pos (ByteString -> Token
TokStr (Int -> ByteString -> ByteString
B.take (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) (HasCallStack => ByteString -> ByteString
ByteString -> ByteString
B.tail ByteString
inp)))
alex_action_10 :: Position -> Int -> ByteString -> Lex LToken
alex_action_10 = (ByteString -> Token)
-> Position -> Int -> ByteString -> Lex LToken
toki ByteString -> Token
TokOther
alex_action_11 :: Position -> Int -> ByteString -> Lex LToken
alex_action_11 = (ByteString -> Token)
-> Position -> Int -> ByteString -> Lex LToken
toki ByteString -> Token
TokOther
alex_action_12 :: Position -> Int -> ByteString -> Lex LToken
alex_action_12 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
Colon
alex_action_13 :: Position -> Int -> ByteString -> Lex LToken
alex_action_13 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
OpenBrace
alex_action_14 :: Position -> Int -> ByteString -> Lex LToken
alex_action_14 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
CloseBrace
alex_action_15 :: p -> p -> p -> Lex LToken
alex_action_15 = \p
_ p
_ p
_ -> (Position -> Position) -> Lex ()
adjustPos Position -> Position
retPos Lex () -> Lex () -> Lex ()
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Lex ()
setStartCode Int
bol_section Lex () -> Lex LToken -> Lex LToken
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex LToken
lexToken
alex_action_16 :: Position -> Int -> ByteString -> Lex LToken
alex_action_16 = \Position
pos Int
len ByteString
inp -> Position -> Int -> ByteString -> Lex Int
checkLeadingWhitespace Position
pos Int
len ByteString
inp Lex Int -> (Int -> Lex LToken) -> Lex LToken
forall a b. Lex a -> (a -> Lex b) -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
len' ->
                                  if ByteString -> Int
B.length ByteString
inp Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
len
                                    then LToken -> Lex LToken
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (Position -> Token -> LToken
L Position
pos Token
EOF)
                                    else do
                                      -- Small hack: if char and byte length mismatch

                                      -- subtract the difference, so lexToken will count position correctly.

                                      -- Proper (and slower) fix is to count utf8 length in lexToken

                                      Bool -> Lex () -> Lex ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
len' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
len) (Lex () -> Lex ()) -> Lex () -> Lex ()
forall a b. (a -> b) -> a -> b
$ (Position -> Position) -> Lex ()
adjustPos (Int -> Position -> Position
incPos (Int
len' Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
len))
                                      Int -> Lex ()
setStartCode Int
in_field_layout
                                      LToken -> Lex LToken
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (Position -> Token -> LToken
L Position
pos (Int -> Token
Indent Int
len'))
alex_action_18 :: Position -> Int -> ByteString -> Lex LToken
alex_action_18 = (ByteString -> Token)
-> Position -> Int -> ByteString -> Lex LToken
toki ByteString -> Token
TokFieldLine
alex_action_19 :: p -> p -> p -> Lex LToken
alex_action_19 = \p
_ p
_ p
_ -> (Position -> Position) -> Lex ()
adjustPos Position -> Position
retPos Lex () -> Lex () -> Lex ()
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Lex ()
setStartCode Int
bol_field_layout Lex () -> Lex LToken -> Lex LToken
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex LToken
lexToken
alex_action_20 :: p -> p -> p -> Lex LToken
alex_action_20 = \p
_ p
_ p
_ -> Int -> Lex ()
setStartCode Int
in_field_braces Lex () -> Lex LToken -> Lex LToken
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex LToken
lexToken
alex_action_22 :: Position -> Int -> ByteString -> Lex LToken
alex_action_22 = (ByteString -> Token)
-> Position -> Int -> ByteString -> Lex LToken
toki ByteString -> Token
TokFieldLine
alex_action_23 :: Position -> Int -> ByteString -> Lex LToken
alex_action_23 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
OpenBrace
alex_action_24 :: Position -> Int -> ByteString -> Lex LToken
alex_action_24 = Token -> Position -> Int -> ByteString -> Lex LToken
tok  Token
CloseBrace
alex_action_25 :: p -> p -> p -> Lex LToken
alex_action_25 = \p
_ p
_ p
_ -> (Position -> Position) -> Lex ()
adjustPos Position -> Position
retPos Lex () -> Lex () -> Lex ()
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Lex ()
setStartCode Int
bol_field_braces Lex () -> Lex LToken -> Lex LToken
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex LToken
lexToken

#define ALEX_GHC 1
#define ALEX_LATIN1 1
#define ALEX_NOPRED 1
-- -----------------------------------------------------------------------------

-- ALEX TEMPLATE

--

-- This code is in the PUBLIC DOMAIN; you may copy it freely and use

-- it for any purpose whatsoever.


-- -----------------------------------------------------------------------------

-- INTERNALS and main scanner engine


#ifdef ALEX_GHC
#  define ILIT(n) n#
#  define IBOX(n) (I# (n))
#  define FAST_INT Int#
-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.

#  if __GLASGOW_HASKELL__ > 706
#    define GTE(n,m) (tagToEnum# (n >=# m))
#    define EQ(n,m) (tagToEnum# (n ==# m))
#  else
#    define GTE(n,m) (n >=# m)
#    define EQ(n,m) (n ==# m)
#  endif
#  define PLUS(n,m) (n +# m)
#  define MINUS(n,m) (n -# m)
#  define TIMES(n,m) (n *# m)
#  define NEGATE(n) (negateInt# (n))
#  define IF_GHC(x) (x)
#else
#  define ILIT(n) (n)
#  define IBOX(n) (n)
#  define FAST_INT Int
#  define GTE(n,m) (n >= m)
#  define EQ(n,m) (n == m)
#  define PLUS(n,m) (n + m)
#  define MINUS(n,m) (n - m)
#  define TIMES(n,m) (n * m)
#  define NEGATE(n) (negate (n))
#  define IF_GHC(x)
#endif

#ifdef ALEX_GHC
data AlexAddr = AlexA# Addr#
-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.

#if __GLASGOW_HASKELL__ < 503
uncheckedShiftL# = shiftL#
#endif

{-# INLINE alexIndexInt16OffAddr #-}
alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#
alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#
alexIndexInt16OffAddr (AlexA# Addr#
arr) Int#
off =
#ifdef WORDS_BIGENDIAN
  narrow16Int# i
  where
        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
        off' = off *# 2#
#else
#if __GLASGOW_HASKELL__ >= 901
  Int16# -> Int#
int16ToInt#
#endif
    (Addr# -> Int# -> Int16#
indexInt16OffAddr# Addr#
arr Int#
off)
#endif
#else
alexIndexInt16OffAddr arr off = arr ! off
#endif

#ifdef ALEX_GHC
{-# INLINE alexIndexInt32OffAddr #-}
alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#
alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#
alexIndexInt32OffAddr (AlexA# Addr#
arr) Int#
off =
#ifdef WORDS_BIGENDIAN
  narrow32Int# i
  where
   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
                     (b2 `uncheckedShiftL#` 16#) `or#`
                     (b1 `uncheckedShiftL#` 8#) `or#` b0)
   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
   off' = off *# 4#
#else
#if __GLASGOW_HASKELL__ >= 901
  Int32# -> Int#
int32ToInt#
#endif
    (Addr# -> Int# -> Int32#
indexInt32OffAddr# Addr#
arr Int#
off)
#endif
#else
alexIndexInt32OffAddr arr off = arr ! off
#endif

#ifdef ALEX_GHC

#if __GLASGOW_HASKELL__ < 503
quickIndex arr i = arr ! i
#else
-- GHC >= 503, unsafeAt is available from Data.Array.Base.

quickIndex :: Array Int (AlexAcc Any) -> Int -> AlexAcc Any
quickIndex = Array Int (AlexAcc Any) -> Int -> AlexAcc Any
forall i. Ix i => Array i (AlexAcc Any) -> Int -> AlexAcc Any
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> Int -> e
unsafeAt
#endif
#else
quickIndex arr i = arr ! i
#endif

-- -----------------------------------------------------------------------------

-- Main lexing routines


data AlexReturn a
  = AlexEOF
  | AlexError  !AlexInput
  | AlexSkip   !AlexInput !Int
  | AlexToken  !AlexInput !Int a

-- alexScan :: AlexInput -> StartCode -> AlexReturn a

alexScan :: ByteString
-> Int -> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
alexScan ByteString
input__ IBOX(sc)
  = Any
-> ByteString
-> Int
-> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
forall {t}.
t
-> ByteString
-> Int
-> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
alexScanUser Any
forall a. HasCallStack => a
undefined ByteString
input__ IBOX(sc)

alexScanUser :: t
-> ByteString
-> Int
-> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
alexScanUser t
user__ ByteString
input__ IBOX(sc)
  = case t
-> ByteString
-> Int#
-> ByteString
-> Int#
-> AlexLastAcc
-> (AlexLastAcc, ByteString)
forall {t} {t}.
t
-> t
-> Int#
-> ByteString
-> Int#
-> AlexLastAcc
-> (AlexLastAcc, ByteString)
alex_scan_tkn t
user__ ByteString
input__ ILIT(0) input__ sc AlexNone of
  (AlexLastAcc
AlexNone, ByteString
input__') ->
    case ByteString -> Maybe (Word8, ByteString)
alexGetByte ByteString
input__ of
      Maybe (Word8, ByteString)
Nothing ->
#ifdef ALEX_DEBUG
                                   trace ("End of input.") $
#endif
                                   AlexReturn (Position -> Int -> ByteString -> Lex LToken)
forall a. AlexReturn a
AlexEOF
      Just (Word8, ByteString)
_ ->
#ifdef ALEX_DEBUG
                                   trace ("Error.") $
#endif
                                   ByteString
-> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
forall a. ByteString -> AlexReturn a
AlexError ByteString
input__'

  (AlexLastSkip ByteString
input__'' Int
len, ByteString
_) ->
#ifdef ALEX_DEBUG
    trace ("Skipping.") $
#endif
    ByteString
-> Int -> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
forall a. ByteString -> Int -> AlexReturn a
AlexSkip ByteString
input__'' Int
len

  (AlexLastAcc Int
k ByteString
input__''' Int
len, ByteString
_) ->
#ifdef ALEX_DEBUG
    trace ("Accept.") $
#endif
    ByteString
-> Int
-> (Position -> Int -> ByteString -> Lex LToken)
-> AlexReturn (Position -> Int -> ByteString -> Lex LToken)
forall a. ByteString -> Int -> a -> AlexReturn a
AlexToken ByteString
input__''' Int
len (Array Int (Position -> Int -> ByteString -> Lex LToken)
alex_actions Array Int (Position -> Int -> ByteString -> Lex LToken)
-> Int -> Position -> Int -> ByteString -> Lex LToken
forall i e. Ix i => Array i e -> i -> e
! Int
k)


-- Push the input through the DFA, remembering the most recent accepting

-- state it encountered.


alex_scan_tkn :: t
-> t
-> Int#
-> ByteString
-> Int#
-> AlexLastAcc
-> (AlexLastAcc, ByteString)
alex_scan_tkn t
user__ t
orig_input Int#
len ByteString
input__ Int#
s AlexLastAcc
last_acc =
  ByteString
input__ ByteString
-> (AlexLastAcc, ByteString) -> (AlexLastAcc, ByteString)
forall a b. a -> b -> b
`seq` -- strict in the input

  let
  new_acc :: AlexLastAcc
new_acc = (AlexAcc Any -> AlexLastAcc
forall {user}. AlexAcc user -> AlexLastAcc
check_accs (Array Int (AlexAcc Any)
forall {user}. Array Int (AlexAcc user)
alex_accept Array Int (AlexAcc Any) -> Int -> AlexAcc Any
`quickIndex` IBOX(s)))
  in
  AlexLastAcc
new_acc AlexLastAcc
-> (AlexLastAcc, ByteString) -> (AlexLastAcc, ByteString)
forall a b. a -> b -> b
`seq`
  case ByteString -> Maybe (Word8, ByteString)
alexGetByte ByteString
input__ of
     Maybe (Word8, ByteString)
Nothing -> (AlexLastAcc
new_acc, ByteString
input__)
     Just (Word8
c, ByteString
new_input) ->
#ifdef ALEX_DEBUG
      trace ("State: " ++ show IBOX(s) ++ ", char: " ++ show c ++ " " ++ (show . chr . fromIntegral) c) $
#endif
      case Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
c of { IBOX(ord_c) ->
        let
                base   = alexIndexInt32OffAddr alex_base s
                offset = PLUS(base,ord_c)

                new_s = if GTE(offset,ILIT(0))
                          && let check  = alexIndexInt16OffAddr alex_check offset
                             in  EQ(check,ord_c)
                          then alexIndexInt16OffAddr alex_table offset
                          else alexIndexInt16OffAddr alex_deflt s
        in
        case new_s of
            ILIT(-1) -> (new_acc, input__)
                -- on an error, we want to keep the input *before* the

                -- character that failed, not after.

            _ -> alex_scan_tkn user__ orig_input
#ifdef ALEX_LATIN1
                   PLUS(len,ILIT(1))
                   -- issue 119: in the latin1 encoding, *each* byte is one character

#else
                   (if c < 0x80 || c >= 0xC0 then PLUS(len,ILIT(1)) else len)
                   -- note that the length is increased ONLY if this is the 1st byte in a char encoding)

#endif
                   new_input new_s new_acc
      }
  where
        check_accs :: AlexAcc user -> AlexLastAcc
check_accs (AlexAcc user
AlexAccNone) = AlexLastAcc
last_acc
        check_accs (AlexAcc Int
a  ) = Int -> ByteString -> Int -> AlexLastAcc
AlexLastAcc Int
a ByteString
input__ IBOX(len)
        check_accs (AlexAcc user
AlexAccSkip) = ByteString -> Int -> AlexLastAcc
AlexLastSkip  ByteString
input__ IBOX(len)
#ifndef ALEX_NOPRED
        check_accs (AlexAccPred a predx rest)
           | predx user__ orig_input IBOX(len) input__
           = AlexLastAcc a input__ IBOX(len)
           | otherwise
           = check_accs rest
        check_accs (AlexAccSkipPred predx rest)
           | predx user__ orig_input IBOX(len) input__
           = AlexLastSkip input__ IBOX(len)
           | otherwise
           = check_accs rest
#endif

data AlexLastAcc
  = AlexNone
  | AlexLastAcc !Int !AlexInput !Int
  | AlexLastSkip     !AlexInput !Int

data AlexAcc user
  = AlexAccNone
  | AlexAcc Int
  | AlexAccSkip
#ifndef ALEX_NOPRED
  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)

type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool

-- -----------------------------------------------------------------------------

-- Predicates on a rule


alexAndPred p1 p2 user__ in1 len in2
  = p1 user__ in1 len in2 && p2 user__ in1 len in2

--alexPrevCharIsPred :: Char -> AlexAccPred _

alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__

alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)

--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _

alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__

--alexRightContext :: Int -> AlexAccPred _

alexRightContext IBOX(sc) user__ _ _ input__ =
     case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of
          (AlexNone, _) -> False
          _ -> True
        -- TODO: there's no need to find the longest

        -- match when checking the right context, just

        -- the first match will do.

#endif
{-# LINE "src\Distribution\Fields\Lexer.x" #-}
-- | Tokens of outer cabal file structure. Field values are treated opaquely.

data Token = TokSym   !ByteString       -- ^ Haskell-like identifier, number or operator

           | TokStr   !ByteString       -- ^ String in quotes

           | TokOther !ByteString       -- ^ Operators and parens

           | Indent   !Int              -- ^ Indentation token

           | TokFieldLine !ByteString   -- ^ Lines after @:@

           | Colon
           | OpenBrace
           | CloseBrace
           | EOF
           | LexicalError InputStream --TODO: add separate string lexical error

  deriving Show

data LToken = L !Position !Token
  deriving Show

toki :: (ByteString -> Token) -> Position -> Int -> ByteString -> Lex LToken
toki t pos  len  input = return $! L pos (t (B.take len input))

tok :: Token -> Position -> Int -> ByteString -> Lex LToken
tok  t pos _len _input = return $! L pos t

checkLeadingWhitespace :: Position -> Int -> ByteString -> Lex Int
checkLeadingWhitespace pos len bs
    | B.any (== 9) (B.take len bs) = do
        addWarningAt pos LexWarningTab
        checkWhitespace pos len bs
    | otherwise = checkWhitespace pos len bs

checkWhitespace :: Position -> Int -> ByteString -> Lex Int
checkWhitespace pos len bs
    -- UTF8 NBSP is 194 160. This function is called on whitespace bytestrings,

    -- therefore counting 194 bytes is enough to count non-breaking spaces.

    -- We subtract the amount of 194 bytes to convert bytes length into char length

    | B.any (== 194) (B.take len bs) = do
        addWarningAt pos LexWarningNBSP
        return $ len - B.count 194 (B.take len bs)
    | otherwise = return len

-- -----------------------------------------------------------------------------

-- The input type


type AlexInput = InputStream

alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar _ = error "alexInputPrevChar not used"

alexGetByte :: AlexInput -> Maybe (Word.Word8,AlexInput)
alexGetByte = B.uncons

lexicalError :: Position -> InputStream -> Lex LToken
lexicalError pos inp = do
  setInput B.empty
  return $! L pos (LexicalError inp)

lexToken :: Lex LToken
lexToken = do
  pos <- getPos
  inp <- getInput
  st  <- getStartCode
  case alexScan inp st of
    AlexEOF -> return (L pos EOF)
    AlexError inp' ->
        let !len_bytes = B.length inp - B.length inp' in
            --FIXME: we want len_chars here really

            -- need to decode utf8 up to this point

        lexicalError (incPos len_bytes pos) inp'
    AlexSkip  inp' len_chars -> do
        checkPosition pos inp inp' len_chars
        adjustPos (incPos len_chars)
        setInput inp'
        lexToken
    AlexToken inp' len_chars action -> do
        checkPosition pos inp inp' len_chars
        adjustPos (incPos len_chars)
        setInput inp'
        let !len_bytes = B.length inp - B.length inp'
        t <- action pos len_bytes inp
        --traceShow t $ return tok

        return t


checkPosition :: Position -> ByteString -> ByteString -> Int -> Lex ()
#ifdef CABAL_PARSEC_DEBUG
checkPosition pos@(Position lineno colno) inp inp' len_chars = do
    text_lines <- getDbgText
    let len_bytes = B.length inp - B.length inp'
        pos_txt   | lineno-1 < V.length text_lines = T.take len_chars (T.drop (colno-1) (text_lines V.! (lineno-1)))
                  | otherwise = T.empty
        real_txt  = B.take len_bytes inp
    when (pos_txt /= T.decodeUtf8 real_txt) $
      traceShow (pos, pos_txt, T.decodeUtf8 real_txt) $
      traceShow (take 3 (V.toList text_lines)) $ return ()
  where
    getDbgText = Lex $ \s@LexState{ dbgText = txt } -> LexResult s txt
#else
checkPosition :: Position -> ByteString -> ByteString -> Int -> Lex ()
checkPosition Position
_ ByteString
_ ByteString
_ Int
_ = () -> Lex ()
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#endif

lexAll :: Lex [LToken]
lexAll :: Lex [LToken]
lexAll = do
  LToken
t <- Lex LToken
lexToken
  case LToken
t of
    L Position
_ Token
EOF -> [LToken] -> Lex [LToken]
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return [LToken
t]
    LToken
_       -> do [LToken]
ts <- Lex [LToken]
lexAll
                  [LToken] -> Lex [LToken]
forall a. a -> Lex a
forall (m :: * -> *) a. Monad m => a -> m a
return (LToken
t LToken -> [LToken] -> [LToken]
forall a. a -> [a] -> [a]
: [LToken]
ts)

ltest :: Int -> String -> Prelude.IO ()
ltest :: Int -> String -> IO ()
ltest Int
code String
s =
  let ([LexWarning]
ws, [LToken]
xs) = Lex [LToken] -> ByteString -> ([LexWarning], [LToken])
forall a. Lex a -> ByteString -> ([LexWarning], a)
execLexer (Int -> Lex ()
setStartCode Int
code Lex () -> Lex [LToken] -> Lex [LToken]
forall a b. Lex a -> Lex b -> Lex b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Lex [LToken]
lexAll) (String -> ByteString
B.Char8.pack String
s)
   in (LexWarning -> IO ()) -> [LexWarning] -> IO ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ LexWarning -> IO ()
forall a. Show a => a -> IO ()
print [LexWarning]
ws IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (LToken -> IO ()) -> [LToken] -> IO ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ LToken -> IO ()
forall a. Show a => a -> IO ()
print [LToken]
xs


mkLexState :: ByteString -> LexState
mkLexState :: ByteString -> LexState
mkLexState ByteString
input = LexState
  { curPos :: Position
curPos   = Int -> Int -> Position
Position Int
1 Int
1
  , curInput :: ByteString
curInput = ByteString
input
  , curCode :: Int
curCode  = Int
0
  , warnings :: [LexWarning]
warnings = []
#ifdef CABAL_PARSEC_DEBUG
  , dbgText  = V.fromList . lines' . T.decodeUtf8With T.lenientDecode $ input
#endif
  }

#ifdef CABAL_PARSEC_DEBUG
lines' :: T.Text -> [T.Text]
lines' s1
  | T.null s1 = []
  | otherwise = case T.break (\c -> c == '\r' || c == '\n') s1 of
                  (l, s2) | Just (c,s3) <- T.uncons s2
                         -> case T.uncons s3 of
                              Just ('\n', s4) | c == '\r' -> l `T.snoc` '\r' `T.snoc` '\n' : lines' s4
                              _                           -> l `T.snoc` c : lines' s3

                          | otherwise
                         -> [l]
#endif