1#!/usr/bin/env python
2
3from plasTeX import Command, Environment
4
5def ProcessOptions(options, document):
6    context = document.context
7
8    languages = list(document.context.languages.keys())
9    for key, value in list(options.items()):
10        if key in languages:
11            context.loadLanguage(key, document)
12        if key in ['german','ngerman']:
13            class glqq(Command): str = '\u201e'
14            class grqq(Command): str = '\u201c'
15            context.addGlobal('glqq', glqq)
16            context.addGlobal('grqq', grqq)
17
18class selectlanguage(Command):
19    args = 'lang:str'
20
21    def invoke(self, tex):
22        res = Command.invoke(self, tex)
23        self.ownerDocument.context.loadLanguage(self.attributes['lang'], self.ownerDocument)
24        return res
25
26class otherlanguage(Environment):
27    args = 'lang:str'
28
29    def invoke(self, tex):
30        res = Environment.invoke(self, tex)
31        doc = self.ownerDocument
32        if self.macroMode != self.MODE_END:
33            self.ownerDocument.userdata.setPath('babel/previouslanguage',
34                                              doc.context.currentLanguage)
35            doc.context.loadLanguage(self.attributes['lang'], self.ownerDocument)
36        else:
37            lang = doc.userdata.getPath('babel/previouslanguage')
38            doc.context.loadLanguage(lang, self.ownerDocument)
39        return res
40
41class foreignlanguage(Command):
42    args = 'lang:str self'
43
44    def postArgument(self, arg, value, tex):
45        if arg.name == 'lang':
46            doc = self.ownerDocument
47            doc.userdata.setPath('babel/previouslanguage',
48                               doc.context.currentLanguage)
49            doc.context.loadLanguage(value, doc)
50        else:
51            Command.postArgument(self, arg, value, tex)
52
53    def invoke(self, tex):
54        res = Command.invoke(self, tex)
55        doc = self.ownerDocument
56        lang = doc.userdata.getPath('babel/previouslanguage')
57        doc.context.loadLanguage(lang, doc)
58        return res
59
60class OtherLanguageStar(Environment):
61    args = 'lang:str'
62    macroName = 'otherlanguage*'
63
64class iflanguage(Command):
65    args = 'lang:str yes:nox no:nox'
66
67    def invoke(self, tex):
68        res = Command.invoke(self, tex)
69        if self.ownerDocument.context.currentLanguage == self.attributes['lang']:
70            return self.attributes['yes']
71        return self.attributes['no']
72
73