-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathview.elm
144 lines (128 loc) · 3.57 KB
/
view.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
module View exposing (view)
import Html exposing
(Html, Attribute, div, span, input, text, button, h1, h2, h3, h4, h5, h6, label, table, th, tr, td)
import Html.Attributes exposing (placeholder, type_, checked)
import Html.Events exposing (onInput, onClick)
import Types exposing (..)
-- VIEW
view : Model -> Html Msg
view model =
div []
[ input [ placeholder "Utsagnslogisk formel", onInput ChangeInput ] []
, viewParseInfoPanel model
, viewTruthTable model.truthTable
]
viewParseInfoPanel : Model -> Html Msg
viewParseInfoPanel model =
let
viewParseInfoSwitch =
label []
[ input [ type_ "checkbox", onClick ToggleParseInfo, checked True ] []
, text "Vis programmets parse-data"
]
viewParseInfoContent model =
if model.showParseInfo
then
div []
[ viewTokens model
, viewParseTree model
]
else
div [] []
in
div []
[ viewParseInfoSwitch
, viewErrorMessage model
, viewParseInfoContent model
]
viewErrorMessage : Model -> Html msg
viewErrorMessage model =
div []
[ h4 [] [ text (getErrorOrOkMessage model) ]
]
getErrorOrOkMessage : Model -> String
getErrorOrOkMessage model =
if String.isEmpty model.errorMessage
then "---"
else model.errorMessage
viewTokens : Model -> Html msg
viewTokens model =
let
tokenSpans = List.map (\ token -> span [] [ text ("[" ++ (toString token) ++ "] ") ]) model.tokens
in
div []
((h4 [] [ text "Tokenizer - Token list:" ] ) :: tokenSpans)
viewParseTree : Model -> Html msg
viewParseTree model =
div []
[ h4 [] [ text "Parser - Parse tree:" ]
, text (renderParseTreeToString model)
]
renderParseTreeToString : Model -> String
renderParseTreeToString model =
case model.parseTree of
Nothing ->
"Parse tree is empty"
Just parseTree ->
toString parseTree
viewTruthTable : TruthTable -> Html msg
viewTruthTable truthTable =
let
ttHeader = ttHeaderToTableRow truthTable.ttHeader
ttRows = List.map ttRowToTableRow truthTable.ttRows
in
div []
[ h4 [] [ text "Sannhetsverditabell" ]
, table []
(ttHeader :: ttRows)
]
ttHeaderToTableRow : TTHeader -> Html msg
ttHeaderToTableRow ttHeader =
let
headerStrings = List.map ttHeaderTokenToString ttHeader
in
listToTableRow headerStrings True
ttRowToTableRow : List (Maybe Bool) -> Html msg
ttRowToTableRow ttRow =
let
rowStrings = List.map (rowMaybeBoolToString OneAndZero) ttRow
in
listToTableRow rowStrings False
ttHeaderTokenToString : TTHeaderToken -> String
ttHeaderTokenToString ttHeaderToken =
case ttHeaderToken of
TTHPropvarToken propvar -> propvar
TTHLeftParToken -> "("
TTHRightParToken -> ")"
TTHAndToken -> "∧"
TTHOrToken -> "∨"
TTHImplicationToken -> "→"
TTHNotToken -> "¬"
rowMaybeBoolToString : TruthValueFormat -> (Maybe Bool) -> String
rowMaybeBoolToString truthValueFormat maybeBool =
case maybeBool of
Nothing -> ""
Just bool ->
case truthValueFormat of
OneAndZero ->
case bool of
True -> "1"
False -> "0"
TAndF ->
case bool of
True -> "T"
False -> "F"
TrueAndFalse ->
case bool of
True -> "True"
False -> "False"
listToTableRow : List String -> Bool -> Html msg
listToTableRow lst isHeaderRow =
let
tableCellType =
case isHeaderRow of
True -> th
False -> td
cells = List.map (\ item -> tableCellType [] [ text item ]) lst
in
tr [] cells