cpphs-1.6: docs/cpphs/Language/Preprocessor/Cpphs/Options.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<pre><a name="(line1)"></a><font color=Blue>-----------------------------------------------------------------------------</font>
<a name="(line2)"></a><font color=Blue>-- |</font>
<a name="(line3)"></a><font color=Blue>-- Module : Options</font>
<a name="(line4)"></a><font color=Blue>-- Copyright : 2006 Malcolm Wallace</font>
<a name="(line5)"></a><font color=Blue>-- Licence : LGPL</font>
<a name="(line6)"></a><font color=Blue>--</font>
<a name="(line7)"></a><font color=Blue>-- Maintainer : Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk></font>
<a name="(line8)"></a><font color=Blue>-- Stability : experimental</font>
<a name="(line9)"></a><font color=Blue>-- Portability : All</font>
<a name="(line10)"></a><font color=Blue>--</font>
<a name="(line11)"></a><font color=Blue>-- This module deals with Cpphs options and parsing them</font>
<a name="(line12)"></a><font color=Blue>-----------------------------------------------------------------------------</font>
<a name="(line13)"></a>
<a name="(line14)"></a><font color=Green><u>module</u></font> Language<font color=Cyan>.</font>Preprocessor<font color=Cyan>.</font>Cpphs<font color=Cyan>.</font>Options
<a name="(line15)"></a> <font color=Cyan>(</font> CpphsOptions<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
<a name="(line16)"></a> <font color=Cyan>,</font> BoolOptions<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
<a name="(line17)"></a> <font color=Cyan>,</font> parseOptions
<a name="(line18)"></a> <font color=Cyan>,</font> defaultCpphsOptions
<a name="(line19)"></a> <font color=Cyan>,</font> defaultBoolOptions
<a name="(line20)"></a> <font color=Cyan>)</font> <font color=Green><u>where</u></font>
<a name="(line21)"></a>
<a name="(line22)"></a><font color=Green><u>import</u></font> Maybe
<a name="(line23)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isPrefixOf<font color=Cyan>)</font>
<a name="(line24)"></a>
<a name="(line25)"></a><a name="CpphsOptions"></a><font color=Blue>-- | Cpphs options structure.</font>
<a name="(line26)"></a><a name="CpphsOptions"></a><font color=Green><u>data</u></font> CpphsOptions <font color=Red>=</font> CpphsOptions
<a name="(line27)"></a> <font color=Cyan>{</font> infiles <font color=Red>::</font> <font color=Red>[</font>FilePath<font color=Red>]</font>
<a name="(line28)"></a> <font color=Cyan>,</font> outfiles <font color=Red>::</font> <font color=Red>[</font>FilePath<font color=Red>]</font>
<a name="(line29)"></a> <font color=Cyan>,</font> defines <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font>
<a name="(line30)"></a> <font color=Cyan>,</font> includes <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font>
<a name="(line31)"></a> <font color=Cyan>,</font> preInclude<font color=Red>::</font> <font color=Red>[</font>FilePath<font color=Red>]</font> <font color=Blue>-- ^ Files to #include before anything else</font>
<a name="(line32)"></a> <font color=Cyan>,</font> boolopts <font color=Red>::</font> BoolOptions
<a name="(line33)"></a> <font color=Cyan>}</font>
<a name="(line34)"></a>
<a name="(line35)"></a><a name="defaultCpphsOptions"></a><font color=Blue>-- | Default options.</font>
<a name="(line36)"></a>defaultCpphsOptions <font color=Red>::</font> CpphsOptions
<a name="(line37)"></a>defaultCpphsOptions <font color=Red>=</font> CpphsOptions <font color=Cyan>{</font> infiles <font color=Red>=</font> []<font color=Cyan>,</font> outfiles <font color=Red>=</font> []
<a name="(line38)"></a> <font color=Cyan>,</font> defines <font color=Red>=</font> []<font color=Cyan>,</font> includes <font color=Red>=</font> []
<a name="(line39)"></a> <font color=Cyan>,</font> preInclude <font color=Red>=</font> []
<a name="(line40)"></a> <font color=Cyan>,</font> boolopts <font color=Red>=</font> defaultBoolOptions <font color=Cyan>}</font>
<a name="(line41)"></a>
<a name="(line42)"></a><a name="BoolOptions"></a><font color=Blue>-- | Options representable as Booleans.</font>
<a name="(line43)"></a><a name="BoolOptions"></a><font color=Green><u>data</u></font> BoolOptions <font color=Red>=</font> BoolOptions
<a name="(line44)"></a> <font color=Cyan>{</font> macros <font color=Red>::</font> Bool <font color=Blue>-- ^ Leave \#define and \#undef in output of ifdef?</font>
<a name="(line45)"></a> <font color=Cyan>,</font> locations <font color=Red>::</font> Bool <font color=Blue>-- ^ Place #line droppings in output?</font>
<a name="(line46)"></a> <font color=Cyan>,</font> pragma <font color=Red>::</font> Bool <font color=Blue>-- ^ Keep #pragma in final output?</font>
<a name="(line47)"></a> <font color=Cyan>,</font> stripEol <font color=Red>::</font> Bool <font color=Blue>-- ^ Remove C eol (\/\/) comments everywhere?</font>
<a name="(line48)"></a> <font color=Cyan>,</font> stripC89 <font color=Red>::</font> Bool <font color=Blue>-- ^ Remove C inline (\/**\/) comments everywhere?</font>
<a name="(line49)"></a> <font color=Cyan>,</font> lang <font color=Red>::</font> Bool <font color=Blue>-- ^ Lex input as Haskell code?</font>
<a name="(line50)"></a> <font color=Cyan>,</font> ansi <font color=Red>::</font> Bool <font color=Blue>-- ^ Permit stringise \# and catenate \#\# operators?</font>
<a name="(line51)"></a> <font color=Cyan>,</font> layout <font color=Red>::</font> Bool <font color=Blue>-- ^ Retain newlines in macro expansions?</font>
<a name="(line52)"></a> <font color=Cyan>,</font> literate <font color=Red>::</font> Bool <font color=Blue>-- ^ Remove literate markup?</font>
<a name="(line53)"></a> <font color=Cyan>,</font> warnings <font color=Red>::</font> Bool <font color=Blue>-- ^ Issue warnings?</font>
<a name="(line54)"></a> <font color=Cyan>}</font>
<a name="(line55)"></a>
<a name="(line56)"></a><a name="defaultBoolOptions"></a><font color=Blue>-- | Default settings of boolean options.</font>
<a name="(line57)"></a>defaultBoolOptions <font color=Red>::</font> BoolOptions
<a name="(line58)"></a>defaultBoolOptions <font color=Red>=</font> BoolOptions <font color=Cyan>{</font> macros <font color=Red>=</font> True<font color=Cyan>,</font> locations <font color=Red>=</font> True
<a name="(line59)"></a> <font color=Cyan>,</font> pragma <font color=Red>=</font> False
<a name="(line60)"></a> <font color=Cyan>,</font> stripEol <font color=Red>=</font> False<font color=Cyan>,</font> stripC89 <font color=Red>=</font> False
<a name="(line61)"></a> <font color=Cyan>,</font> lang <font color=Red>=</font> True<font color=Cyan>,</font> ansi <font color=Red>=</font> False
<a name="(line62)"></a> <font color=Cyan>,</font> layout <font color=Red>=</font> False<font color=Cyan>,</font> literate <font color=Red>=</font> False
<a name="(line63)"></a> <font color=Cyan>,</font> warnings <font color=Red>=</font> True <font color=Cyan>}</font>
<a name="(line64)"></a>
<a name="(line65)"></a><a name="RawOption"></a><font color=Blue>-- | Raw command-line options. This is an internal intermediate data</font>
<a name="(line66)"></a><a name="RawOption"></a><font color=Blue>-- structure, used during option parsing only.</font>
<a name="(line67)"></a><a name="RawOption"></a><font color=Green><u>data</u></font> RawOption
<a name="(line68)"></a> <font color=Red>=</font> NoMacro
<a name="(line69)"></a> <font color=Red>|</font> NoLine
<a name="(line70)"></a> <font color=Red>|</font> Pragma
<a name="(line71)"></a> <font color=Red>|</font> Text
<a name="(line72)"></a> <font color=Red>|</font> Strip
<a name="(line73)"></a> <font color=Red>|</font> StripEol
<a name="(line74)"></a> <font color=Red>|</font> Ansi
<a name="(line75)"></a> <font color=Red>|</font> Layout
<a name="(line76)"></a> <font color=Red>|</font> Unlit
<a name="(line77)"></a> <font color=Red>|</font> SuppressWarnings
<a name="(line78)"></a> <font color=Red>|</font> Macro <font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font>
<a name="(line79)"></a> <font color=Red>|</font> Path String
<a name="(line80)"></a> <font color=Red>|</font> PreInclude FilePath
<a name="(line81)"></a> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>
<a name="(line82)"></a>
<a name="(line83)"></a><a name="flags"></a>flags <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> RawOption<font color=Cyan>)</font><font color=Red>]</font>
<a name="(line84)"></a>flags <font color=Red>=</font> <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"--nomacro"</font><font color=Cyan>,</font> NoMacro<font color=Cyan>)</font>
<a name="(line85)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--noline"</font><font color=Cyan>,</font> NoLine<font color=Cyan>)</font>
<a name="(line86)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--pragma"</font><font color=Cyan>,</font> Pragma<font color=Cyan>)</font>
<a name="(line87)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--text"</font><font color=Cyan>,</font> Text<font color=Cyan>)</font>
<a name="(line88)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--strip"</font><font color=Cyan>,</font> Strip<font color=Cyan>)</font>
<a name="(line89)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--strip-eol"</font><font color=Cyan>,</font> StripEol<font color=Cyan>)</font>
<a name="(line90)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--hashes"</font><font color=Cyan>,</font> Ansi<font color=Cyan>)</font>
<a name="(line91)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--layout"</font><font color=Cyan>,</font> Layout<font color=Cyan>)</font>
<a name="(line92)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--unlit"</font><font color=Cyan>,</font> Unlit<font color=Cyan>)</font>
<a name="(line93)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"--nowarn"</font><font color=Cyan>,</font> SuppressWarnings<font color=Cyan>)</font>
<a name="(line94)"></a> <font color=Red>]</font>
<a name="(line95)"></a>
<a name="(line96)"></a><a name="rawOption"></a><font color=Blue>-- | Parse a single raw command-line option. Parse failure is indicated by</font>
<a name="(line97)"></a><font color=Blue>-- result Nothing.</font>
<a name="(line98)"></a>rawOption <font color=Red>::</font> String <font color=Red>-></font> Maybe RawOption
<a name="(line99)"></a>rawOption x <font color=Red>|</font> isJust a <font color=Red>=</font> a
<a name="(line100)"></a> <font color=Green><u>where</u></font> a <font color=Red>=</font> lookup x flags
<a name="(line101)"></a>rawOption <font color=Cyan>(</font><font color=Magenta>'-'</font><font color=Red><b>:</b></font><font color=Magenta>'D'</font><font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>$</font> Macro <font color=Cyan>(</font>s<font color=Cyan>,</font> <font color=Green><u>if</u></font> null d <font color=Green><u>then</u></font> <font color=Magenta>"1"</font> <font color=Green><u>else</u></font> tail d<font color=Cyan>)</font>
<a name="(line102)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>s<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Red>=</font> break <font color=Cyan>(</font><font color=Cyan>==</font><font color=Magenta>'='</font><font color=Cyan>)</font> xs
<a name="(line103)"></a>rawOption <font color=Cyan>(</font><font color=Magenta>'-'</font><font color=Red><b>:</b></font><font color=Magenta>'I'</font><font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>$</font> Path <font color=Cyan>$</font> trailing <font color=Magenta>"/\\"</font> xs
<a name="(line104)"></a>rawOption xs <font color=Red>|</font> <font color=Magenta>"--include="</font><font color=Cyan>`isPrefixOf`</font>xs
<a name="(line105)"></a> <font color=Red>=</font> Just <font color=Cyan>$</font> PreInclude <font color=Cyan>(</font>drop <font color=Magenta>10</font> xs<font color=Cyan>)</font>
<a name="(line106)"></a>rawOption <font color=Green><u>_</u></font> <font color=Red>=</font> Nothing
<a name="(line107)"></a>
<a name="(line108)"></a><a name="trailing"></a>trailing <font color=Red>::</font> <font color=Cyan>(</font>Eq a<font color=Cyan>)</font> <font color=Red>=></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font>
<a name="(line109)"></a>trailing xs <font color=Red>=</font> reverse <font color=Cyan>.</font> dropWhile <font color=Cyan>(</font><font color=Cyan>`elem`</font>xs<font color=Cyan>)</font> <font color=Cyan>.</font> reverse
<a name="(line110)"></a>
<a name="(line111)"></a><a name="boolOpts"></a><font color=Blue>-- | Convert a list of RawOption to a BoolOptions structure.</font>
<a name="(line112)"></a>boolOpts <font color=Red>::</font> <font color=Red>[</font>RawOption<font color=Red>]</font> <font color=Red>-></font> BoolOptions
<a name="(line113)"></a>boolOpts opts <font color=Red>=</font>
<a name="(line114)"></a> BoolOptions
<a name="(line115)"></a> <font color=Cyan>{</font> macros <font color=Red>=</font> not <font color=Cyan>(</font>NoMacro <font color=Cyan>`elem`</font> opts<font color=Cyan>)</font>
<a name="(line116)"></a> <font color=Cyan>,</font> locations <font color=Red>=</font> not <font color=Cyan>(</font>NoLine <font color=Cyan>`elem`</font> opts<font color=Cyan>)</font>
<a name="(line117)"></a> <font color=Cyan>,</font> pragma <font color=Red>=</font> Pragma <font color=Cyan>`elem`</font> opts
<a name="(line118)"></a> <font color=Cyan>,</font> stripEol <font color=Red>=</font> StripEol<font color=Cyan>`elem`</font> opts
<a name="(line119)"></a> <font color=Cyan>,</font> stripC89 <font color=Red>=</font> StripEol<font color=Cyan>`elem`</font> opts <font color=Cyan>||</font> Strip <font color=Cyan>`elem`</font> opts
<a name="(line120)"></a> <font color=Cyan>,</font> lang <font color=Red>=</font> not <font color=Cyan>(</font>Text <font color=Cyan>`elem`</font> opts<font color=Cyan>)</font>
<a name="(line121)"></a> <font color=Cyan>,</font> ansi <font color=Red>=</font> Ansi <font color=Cyan>`elem`</font> opts
<a name="(line122)"></a> <font color=Cyan>,</font> layout <font color=Red>=</font> Layout <font color=Cyan>`elem`</font> opts
<a name="(line123)"></a> <font color=Cyan>,</font> literate <font color=Red>=</font> Unlit <font color=Cyan>`elem`</font> opts
<a name="(line124)"></a> <font color=Cyan>,</font> warnings <font color=Red>=</font> not <font color=Cyan>(</font>SuppressWarnings <font color=Cyan>`elem`</font> opts<font color=Cyan>)</font>
<a name="(line125)"></a> <font color=Cyan>}</font>
<a name="(line126)"></a>
<a name="(line127)"></a><a name="parseOptions"></a><font color=Blue>-- | Parse all command-line options.</font>
<a name="(line128)"></a>parseOptions <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> Either String CpphsOptions
<a name="(line129)"></a>parseOptions xs <font color=Red>=</font> f <font color=Cyan>(</font>[]<font color=Cyan>,</font> []<font color=Cyan>,</font> []<font color=Cyan>)</font> xs
<a name="(line130)"></a> <font color=Green><u>where</u></font>
<a name="(line131)"></a> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'-'</font><font color=Red><b>:</b></font><font color=Magenta>'O'</font><font color=Red><b>:</b></font>x<font color=Cyan>)</font><font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> x<font color=Red><b>:</b></font>outs<font color=Cyan>)</font> xs
<a name="(line132)"></a> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> <font color=Cyan>(</font>x<font color=Red>@</font><font color=Cyan>(</font><font color=Magenta>'-'</font><font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>case</u></font> rawOption x <font color=Green><u>of</u></font>
<a name="(line133)"></a> Nothing <font color=Red>-></font> Left x
<a name="(line134)"></a> Just a <font color=Red>-></font> f <font color=Cyan>(</font>a<font color=Red><b>:</b></font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> xs
<a name="(line135)"></a> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> normalise x<font color=Red><b>:</b></font>ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> xs
<a name="(line136)"></a> f <font color=Cyan>(</font>opts<font color=Cyan>,</font> ins<font color=Cyan>,</font> outs<font color=Cyan>)</font> [] <font color=Red>=</font>
<a name="(line137)"></a> Right CpphsOptions <font color=Cyan>{</font> infiles <font color=Red>=</font> reverse ins
<a name="(line138)"></a> <font color=Cyan>,</font> outfiles <font color=Red>=</font> reverse outs
<a name="(line139)"></a> <font color=Cyan>,</font> defines <font color=Red>=</font> <font color=Red>[</font> x <font color=Red>|</font> Macro x <font color=Red><-</font> reverse opts <font color=Red>]</font>
<a name="(line140)"></a> <font color=Cyan>,</font> includes <font color=Red>=</font> <font color=Red>[</font> x <font color=Red>|</font> Path x <font color=Red><-</font> reverse opts <font color=Red>]</font>
<a name="(line141)"></a> <font color=Cyan>,</font> preInclude<font color=Red>=</font><font color=Red>[</font> x <font color=Red>|</font> PreInclude x <font color=Red><-</font> reverse opts <font color=Red>]</font>
<a name="(line142)"></a> <font color=Cyan>,</font> boolopts <font color=Red>=</font> boolOpts opts
<a name="(line143)"></a> <font color=Cyan>}</font>
<a name="(line144)"></a> normalise <font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>filepath<font color=Cyan>)</font> <font color=Red>=</font> normalise <font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>filepath<font color=Cyan>)</font>
<a name="(line145)"></a> normalise <font color=Cyan>(</font>x<font color=Red><b>:</b></font>filepath<font color=Cyan>)</font> <font color=Red>=</font> x<font color=Red><b>:</b></font>normalise filepath
<a name="(line146)"></a> normalise [] <font color=Red>=</font> []
</pre>
</html>