#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from aenea import *

grammar = Grammar(u'Grammaire Chep')

class ChepGeneral(MappingRule):
	mapping = {
		u'demande <text>': Text(u'%(text)s?'),
		u'je te dicte <text>': Text(u'%(text)s'),
		u'nombre <n>': Text(u'%(n)d'),
		u'camion': Text(u'pouet pouet'),
		u'controlu [<text>]': Key(u'c-u') + Text(u'%(text)s'),
		u'argument <n>': Key(u'c-u') + Text(u'%(n)d'),
		u'<n> fois <text>': Mimic(extra='text') * Repeat(extra='n'),
		u'Alt tab': Key(u'a-tab'),
		u'loque écran': Key(u'ca-l'),
		u'control c\'est': Key(u'c-c'),
		u'control air': Key(u'c-r'),
		u'control elle': Key(u'c-l'),
		u'tilde': Key(u'tilde'),
		u'alt air': Key(u'a-r'),
		u'alt': Key(u'alt:down'),
		u'control': Key(u'ctrl:down'),
		u'Shift': Key(u'shift:down'),
		u'Windows': Key(u'win:down'),
		u'relâche': Key(u'alt:up,ctrl:up,shift:up,win:up'),
		u'salut': Text(u''),
	}
	extras = [
		Dictation(u'text'),
		Integer('n', 0, 10000000),
	]
	defaults = {
		'n': 1,
	}

class ChepSymboles(MappingRule):
	mapping = {
		u'espace': Key(u'space'),
		u'escape': Key(u'escape'),
		u'tab': Key(u'tab'),
		u'caractère tab': Key(u'c-q,tab'),
		u'entrer': Key(u'enter'),
		u'ligne vide': Key(u'c-j'),
		u'efface': Key(u'backspace'),
		u'supprime': Key(u'del'),
		u'accolade': Key(u'lbrace,rbrace,left'),
		u'ouvre accolade': Key(u'lbrace'),
		u'ferme accolade': Key(u'rbrace'),
		u'parenthèse': Key(u'lparen,rparen,left'),
		u'ouvre parenthèse': Key(u'lparen'),
		u'ferme parenthèse': Key(u'rparen'),
		u'crochet': Key(u'lbracket,rbracket,left'),
		u'ouvre crochet': Key(u'lbracket'),
		u'ferme crochet': Key(u'rbracket'),
		u'deux points': Key(u'colon'),
		u'virgule': Key(u'comma'),
		u'point virgule': Key(u'semicolon'),
		u'point': Key(u'dot'),
		u'point point': Key(u'dot, dot'),
		u'point slash': Key(u'dot, slash'),
		u'point point slash': Key(u'dot, dot, slash'),
		u'dièse': Key(u'hash'),
		u'pourcent': Key(u'percent'),
		u'plus simple': Key(u'plus'),
		u'moins simple': Key(u'minus'),
		u'multiplier simple': Key(u'asterisk'),
		u'dollar': Key(u'dollar'),
		u'étoile': Key(u'asterisk'),
		u'slash': Key(u'slash'),
		u'antislash': Key(u'backslash'),
		u'apostrophe': Key(u'apostrophe'),
		u'quote': Key(u'apostrophe,apostrophe,left'),
		u'double quote': Key(u'dquote,dquote,left'),
		u'guillemets': Key(u'dquote'),
		u'supérieur': Key(u'space, rangle, space'),
		u'inférieur': Key(u'space, langle, space'),
		u'supérieur simple': Key(u'rangle'),
		u'inférieur simple': Key(u'langle'),
		u'supérieur égal': Key(u'space, rangle, equal, space'),
		u'inférieur égal': Key(u'space, langle, equal, space'),
		u'égal simple': Key(u'equal'),
		u'égal égal': Key(u'space, equal, equal, space'),
		u'exclamation': Key(u'exclamation'),
		u'not': Key(u'exclamation'),
		u'interrogation': Key(u'question'),
		u'paillpe': Key(u'bar'),
		u'underscore': Key(u'underscore'),
		u'et commercial': Key(u'ampersand'),
		u'double et': Key(u'space, ampersand, ampersand, space'),
		u'double ou': Key(u'space, bar, bar, space'),
		u'flèche': Key(u'minus,rangle'),
		u'arobase': Key(u'at'),
		u'plus égal': Key(u'space, plus, equal, space'),
		u'moins égal': Key(u'space, minus, equal, space'),
		u'plus plus': Key(u'plus, plus'),
		u'égal': Key(u'space, equal, space'),
		u'plus': Key(u'space, plus, space'),
		u'moins': Key(u'space, minus, space'),
		u'multiplier': Key(u'space, asterisk, space'),
		u'diviser': Key(u'space, slash, space'),
		u'chevron': Key(u'langle, rangle, left'),

	}

class ChepLettres(MappingRule):
	mapping = {
		u'alpha': Key(u'a'),
		u'bravo': Key(u'b'),
		u'charlie': Key(u'c'),
		u'delta': Key(u'd'),
		u'echo': Key(u'e'),
		u'foxtrot': Key(u'f'),
		u'golf': Key(u'g'),
		u'hotel': Key(u'h'),
		u'india': Key(u'i'),
		u'juliette': Key(u'j'),
		u'kilo': Key(u'k'),
		u'lima': Key(u'l'),
		u'mike': Key(u'm'),
		u'november': Key(u'n'),
		u'oscar': Key(u'o'),
		u'papa': Key(u'p'),
		u'quebec': Key(u'q'),
		u'romeo': Key(u'r'),
		u'sierra': Key(u's'),
		u'tango': Key(u't'),
		u'uniform': Key(u'u'),
		u'victor': Key(u'v'),
		u'whiskey': Key(u'w'),
		u'xavier': Key(u'x'),
		u'yvonne': Key(u'y'),
		u'zulu': Key(u'z'),
		u'grand alpha': Key(u's-a'),
		u'grand bravo': Key(u's-b'),
		u'grand charlie': Key(u's-c'),
		u'grand delta': Key(u's-d'),
		u'grand echo': Key(u's-e'),
		u'grand foxtrot': Key(u's-f'),
		u'grand golf': Key(u's-g'),
		u'grand hotel': Key(u's-h'),
		u'grand india': Key(u's-i'),
		u'grand juliette': Key(u's-j'),
		u'grand kilo': Key(u's-k'),
		u'grand lima': Key(u's-l'),
		u'grand mike': Key(u's-m'),
		u'grand november': Key(u's-n'),
		u'grand oscar': Key(u's-o'),
		u'grand papa': Key(u's-p'),
		u'grand quebec': Key(u's-q'),
		u'grand romeo': Key(u's-r'),
		u'grand sierra': Key(u's-s'),
		u'grand tango': Key(u's-t'),
		u'grand uniform': Key(u's-u'),
		u'grand victor': Key(u's-v'),
		u'grand whiskey': Key(u's-w'),
		u'grand xavier': Key(u's-x'),
		u'grand yvonne': Key(u's-y'),
		u'grand zulu': Key(u's-z'),
		u'control alpha': Key(u'c-a'),
		u'control bravo': Key(u'c-b'),
		u'control charlie': Key(u'c-c'),
		u'control delta': Key(u'c-d'),
		u'control echo': Key(u'c-e'),
		u'control foxtrot': Key(u'c-f'),
		u'control golf': Key(u'c-g'),
		u'control hotel': Key(u'c-h'),
		u'control india': Key(u'c-i'),
		u'control juliette': Key(u'c-j'),
		u'control kilo': Key(u'c-k'),
		u'control lima': Key(u'c-l'),
		u'control mike': Key(u'c-m'),
		u'control november': Key(u'c-n'),
		u'control oscar': Key(u'c-o'),
		u'control papa': Key(u'c-p'),
		u'control quebec': Key(u'c-q'),
		u'control romeo': Key(u'c-r'),
		u'control sierra': Key(u'c-s'),
		u'control tango': Key(u'c-t'),
		u'control uniform': Key(u'c-u'),
		u'control victor': Key(u'c-v'),
		u'control whiskey': Key(u'c-w'),
		u'control xavier': Key(u'c-x'),
		u'control yvonne': Key(u'c-y'),
		u'control zulu': Key(u'c-z'),
		u'alt alpha': Key(u'a-a'),
		u'alt bravo': Key(u'a-b'),
		u'alt charlie': Key(u'a-c'),
		u'alt delta': Key(u'a-d'),
		u'alt echo': Key(u'a-e'),
		u'alt foxtrot': Key(u'a-f'),
		u'alt golf': Key(u'a-g'),
		u'alt hotel': Key(u'a-h'),
		u'alt india': Key(u'a-i'),
		u'alt juliette': Key(u'a-j'),
		u'alt kilo': Key(u'a-k'),
		u'alt lima': Key(u'a-l'),
		u'alt mike': Key(u'a-m'),
		u'alt november': Key(u'a-n'),
		u'alt oscar': Key(u'a-o'),
		u'alt papa': Key(u'a-p'),
		u'alt quebec': Key(u'a-q'),
		u'alt romeo': Key(u'a-r'),
		u'alt sierra': Key(u'a-s'),
		u'alt tango': Key(u'a-t'),
		u'alt uniform': Key(u'a-u'),
		u'alt victor': Key(u'a-v'),
		u'alt whiskey': Key(u'a-w'),
		u'alt xavier': Key(u'a-x'),
		u'alt yvonne': Key(u'a-y'),
		u'alt zulu': Key(u'a-z'),

	}

grammar.add_rule(ChepGeneral())
grammar.add_rule(ChepSymboles())
grammar.add_rule(ChepLettres())

grammar.load()

def unload():
	global grammar
	if grammar:
		grammar.unload()
	grammar = None
