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