summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/asymptote/GUI/xasyOptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/asymptote/GUI/xasyOptions.py')
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/xasyOptions.py254
1 files changed, 143 insertions, 111 deletions
diff --git a/Master/texmf-dist/asymptote/GUI/xasyOptions.py b/Master/texmf-dist/asymptote/GUI/xasyOptions.py
index 927490b77aa..8f023b2eeb4 100755
--- a/Master/texmf-dist/asymptote/GUI/xasyOptions.py
+++ b/Master/texmf-dist/asymptote/GUI/xasyOptions.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
###########################################################################
#
# xasyOptions provides a mechanism for storing and restoring a user's
@@ -10,117 +10,149 @@
#
###########################################################################
-import pickle
-import sys,os
-import errno
-
-defaultOptions = {
- 'asyPath':'asy',
- 'showDebug':False,
- 'showGrid':False,
- 'gridX':10,
- 'gridY':10,
- 'gridColor':'#eeeeee',
- 'showAxes':True,
- 'axisX':10,
- 'axisY':10,
- 'axesColor':'#cccccc',
- 'tickColor':'#eeeeee',
- 'defPenOptions':'',
- 'defPenColor':'#000000',
- 'defPenWidth':1.0,
- 'externalEditor':''
- }
-
-if sys.platform[:3] == "win":
- defaultOptions['externalEditor'] = "%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe"
-else:
- defaultOptions['externalEditor'] = "emacs"
-
-
-options = defaultOptions.copy()
-
-def settingsFileLocation():
- folder = ""
- try:
- folder = os.path.expanduser("~/.asy/")
- except:
+import json
+import sys
+import io
+import os
+import platform
+import shutil
+
+import configs
+
+try:
+ import cson
+except ModuleNotFoundError:
+ cson = None
+
+try:
pass
- return os.path.normcase(os.path.join(folder,"xasy.conf"))
+# import yaml
+except ModuleNotFoundError:
+ yaml = None
+
+class xasyOptions:
+ def defaultOptions(self):
+ if self._defaultOptions is None:
+ f = io.open(self._defualtOptLocation)
+ try:
+ opt = cson.loads(f.read())
+ finally:
+ f.close()
+ self._defaultOptions = opt
+ return self._defaultOptions
+
+ def overrideSettings(self):
+ settingsName = platform.system()
+
+ if settingsName not in self.options:
+ return
+
+ for key in self.options[settingsName]:
+ self.options[key] = self.options[settingsName][key]
+
+
+ def settingsFileLocation(self):
+ folder = os.path.expanduser("~/.asy/")
+
+ searchOrder = ['.cson', '.yaml', '.json', '']
+
+ searchIndex = 0
+ found = False
+ currentFile = ''
+ while searchIndex < len(searchOrder) and not found:
+ currentFile = os.path.join(folder, self.configName + searchOrder[searchIndex])
+ if os.path.isfile(currentFile):
+ found = True
+ searchIndex += 1
+
+ if found:
+ return os.path.normcase(currentFile)
+ else:
+ return os.path.normcase(os.path.join(folder, self.configName + '.cson'))
+ def __init__(self, configName, defaultConfigLocation):
+ self.configName = configName
+ self.defaultConfigName = defaultConfigLocation
+
+ self._defaultOptions = None
+ self._defualtOptLocation = os.path.join(defaultConfigLocation)
+
+ self.options = self.defaultOptions()
+ self.load()
+
+ def __getitem__(self, item):
+ return self.options[item]
+
+ def __setitem__(self, key, value):
+ self.options[key] = value
+
+ def load(self):
+ fileName = self.settingsFileLocation()
+ if not os.path.exists(fileName):
+ # make folder
+ thedir = os.path.dirname(fileName)
+ if not os.path.exists(thedir):
+ os.makedirs(thedir)
+ if not os.path.isdir(thedir):
+ raise Exception("Configuration folder path does not point to a folder")
+ self.setDefaults()
+ f = io.open(fileName, 'r')
+ try:
+ ext = os.path.splitext(fileName)[1]
+ if ext == '.cson':
+ if cson is None:
+ raise ModuleNotFoundError
+ newOptions = cson.loads(f.read())
+ elif ext in {'.yml', '.yaml'}:
+ if yaml is None:
+ raise ModuleNotFoundError
+ newOptions = yaml.load(f)
+ else:
+ newOptions = json.loads(f.read())
+ except (IOError, ModuleNotFoundError):
+ self.setDefaults()
+ else:
+ for key in self.options.keys():
+ if key in newOptions:
+ assert isinstance(newOptions[key], type(self.options[key]))
+ else:
+ newOptions[key] = self.options[key]
+ self.options = newOptions
+ finally:
+ f.close()
+
+ def setDefaults(self):
+ self.options = self.defaultOptions()
+ if sys.platform[:3] == 'win': # for windows, wince, win32, etc
+ # setAsyPathFromWindowsRegistry()
+ pass
+ folder = os.path.expanduser("~/.asy/")
+ defaultPath = os.path.join(folder, self.configName + '.cson')
+ shutil.copy2(self._defualtOptLocation, defaultPath)
+
+
+# TODO: Figure out how to merge this back.
+"""
def setAsyPathFromWindowsRegistry():
- try:
- import _winreg as registry
- #test both registry locations
- try:
- key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Asymptote")
- options['asyPath'] = registry.QueryValueEx(key,"Path")[0]+"\\asy.exe"
- registry.CloseKey(key)
- except:
- key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Asymptote")
- options['asyPath'] = registry.QueryValueEx(key,"InstallLocation")[0]+"\\asy.exe"
- registry.CloseKey(key)
- except:
- #looks like asy is not installed or this isn't Windows
- pass
+ if os.name == 'nt':
+ import _winreg as registry
+ # test both registry locations
+ try:
+ key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Asymptote")
+ options['asyPath'] = registry.QueryValueEx(key, "Path")[0] + "\\asy.exe"
+ registry.CloseKey(key)
+ except:
+ key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Asymptote")
+ options['asyPath'] = registry.QueryValueEx(key, "InstallLocation")[0] + "\\asy.exe"
+ registry.CloseKey(key)
+"""
+
-def setDefaults():
- global options
- options = defaultOptions.copy()
- if sys.platform[:3] == 'win': #for windows, wince, win32, etc
- setAsyPathFromWindowsRegistry()
- save()
-
-def load():
- global options
- fileName = settingsFileLocation()
- if not os.path.exists(fileName):
- #make folder
- thedir = os.path.dirname(fileName)
- if not os.path.exists(thedir):
- try:
- os.makedirs(thedir)
- except:
- raise Exception("Could not create configuration folder")
- if not os.path.isdir(thedir):
- raise Exception("Configuration folder path does not point to a folder")
- setDefaults()
- try:
- f = open(fileName,"rb")
- newOptions = pickle.load(f)
- for key in options.keys():
- if type(newOptions[key]) != type(options[key]):
- raise Exception("Bad type for entry in xasy settings")
- options = newOptions
- except:
- setDefaults()
-
-def save():
- global options
- fileName = settingsFileLocation()
- try:
- f = open(fileName,"wb")
- pickle.dump(options,f)
- f.close()
- except:
- raise Exception("Error saving preferences")
-
-load()
-
-if __name__=='__main__':
- print (settingsFileLocation())
- print ("Current content")
- load()
- print ("Setting defaults")
- setDefaults()
- save()
- load()
- options['showAxes'] = options['showGrid'] = False
- save()
- print ("Set to False")
- load()
- options['showAxes'] = options['showGrid'] = True
- save()
- print ("Set to True")
- load()
- print (options)
+class BasicConfigs:
+ _configPath = list(configs.__path__)[0]
+ defaultOpt = xasyOptions(
+ 'xasyconfig', os.path.join(_configPath, 'xasyconfig.cson'))
+ keymaps = xasyOptions('xasykeymap', os.path.join(
+ _configPath, 'xasykeymap.cson'))