Skip to content

Commit a9dc927

Browse files
Add yaml-mode
1 parent 70ae278 commit a9dc927

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

yi-misc-modes/src/Yi/Config/Default/MiscModes.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ configureMiscModes = do
2121
addMode gnuMakeMode
2222
addMode ottMode
2323
addMode whitespaceMode
24+
addMode yamlMode

yi-misc-modes/src/Yi/Lexer/YAML.x

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-- -*- haskell -*-
2+
-- Lexer for YAML-file
3+
-- This is based off the syntax as described in the github manual:
4+
-- http://yaml.org/spec/1.2/spec.html
5+
-- Maintainer: Junji Hashimoto
6+
{
7+
{-# OPTIONS -w #-}
8+
module Yi.Lexer.YAML ( lexer ) where
9+
import Yi.Lexer.Alex hiding (tokenToStyle)
10+
import Yi.Style
11+
( Style ( .. )
12+
, StyleName
13+
)
14+
import qualified Yi.Style as Style
15+
}
16+
17+
$space = [\ ]
18+
19+
yaml :-
20+
21+
<0>
22+
{
23+
^\%.* { c Style.importStyle }
24+
^\-\-\- { c Style.importStyle }
25+
^$space*\#.* { c Style.commentStyle }
26+
^$space*[\-] { c Style.keywordStyle }
27+
^$space*[^\:]+\: { c Style.keywordStyle }
28+
\n
29+
{ c Style.defaultStyle }
30+
.
31+
{ c Style.defaultStyle }
32+
}
33+
34+
{
35+
data HlState =
36+
TopLevel
37+
deriving Show
38+
stateToInit TopLevel = 0
39+
40+
initState :: HlState
41+
initState = TopLevel
42+
43+
type Token = StyleName
44+
45+
lexer :: StyleLexerASI HlState Token
46+
lexer = StyleLexer
47+
{ _tokenToStyle = id
48+
, _styleLexer = commonLexer alexScanToken initState
49+
}
50+
51+
#include "common.hsinc"
52+
}

yi-misc-modes/src/Yi/Modes.hs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
module Yi.Modes (cMode, objectiveCMode, cppMode, cabalMode, clojureMode,
1515
srmcMode, ocamlMode, ottMode, gnuMakeMode,
1616
perlMode, pythonMode, javaMode, jsonMode, anyExtension,
17-
svnCommitMode, whitespaceMode,
17+
svnCommitMode, whitespaceMode, yamlMode,
1818
gitCommitMode, rubyMode
1919
) where
2020

@@ -41,6 +41,7 @@ import qualified Yi.Lexer.Ruby as Ruby (lexer)
4141
import qualified Yi.Lexer.Srmc as Srmc (lexer)
4242
import qualified Yi.Lexer.SVNCommit as SVNCommit (lexer)
4343
import qualified Yi.Lexer.Whitespace as Whitespace (lexer)
44+
import qualified Yi.Lexer.YAML as YAML (lexer)
4445
import Yi.Mode.Common
4546
import Yi.Style (StyleName)
4647

@@ -148,3 +149,9 @@ whitespaceMode = styleMode Whitespace.lexer
148149
& modeNameA .~ "whitespace"
149150
& modeAppliesA .~ anyExtension [ "ws" ]
150151
& modeIndentA .~ (\_ _ -> insertB '\t')
152+
153+
yamlMode :: TokenBasedMode StyleName
154+
yamlMode = styleMode YAML.lexer
155+
& modeNameA .~ "yaml"
156+
& modeAppliesA .~ anyExtension [ "yaml", "yml" ]
157+
& modeIndentSettingsA %~ (\x -> x { expandTabs = True, shiftWidth = 2 })

yi-misc-modes/yi-misc-modes.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ library
6161
Yi.Lexer.SVNCommit
6262
Yi.Lexer.Srmc
6363
Yi.Lexer.Whitespace
64+
Yi.Lexer.YAML
6465
Yi.Syntax.Latex
6566
other-modules:
6667
Yi.Lexer.BasicTemplate

0 commit comments

Comments
 (0)