summaryrefslogtreecommitdiffstats
path: root/func/yaml/implicit.py
diff options
context:
space:
mode:
Diffstat (limited to 'func/yaml/implicit.py')
-rw-r--r--func/yaml/implicit.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/func/yaml/implicit.py b/func/yaml/implicit.py
new file mode 100644
index 0000000..49d65e0
--- /dev/null
+++ b/func/yaml/implicit.py
@@ -0,0 +1,52 @@
+"""
+pyyaml legacy
+Copyright (c) 2001 Steve Howell and Friends; All Rights Reserved
+(see open source license information in docs/ directory)
+"""
+
+import re
+import string
+from timestamp import timestamp, matchTime
+
+DATETIME_REGEX = re.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
+FLOAT_REGEX = re.compile("^[-+]?[0-9][0-9,]*\.[0-9]*$")
+SCIENTIFIC_REGEX = re.compile("^[-+]?[0-9]+(\.[0-9]*)?[eE][-+][0-9]+$")
+OCTAL_REGEX = re.compile("^[-+]?([0][0-7,]*)$")
+HEX_REGEX = re.compile("^[-+]?0x[0-9a-fA-F,]+$")
+INT_REGEX = re.compile("^[-+]?(0|[1-9][0-9,]*)$")
+
+def convertImplicit(val):
+ if val == '~':
+ return None
+ if val == '+':
+ return 1
+ if val == '-':
+ return 0
+ if val[0] == "'" and val[-1] == "'":
+ val = val[1:-1]
+ return string.replace(val, "''", "\'")
+ if val[0] == '"' and val[-1] == '"':
+ if re.search(r"\u", val):
+ val = "u" + val
+ unescapedStr = eval (val)
+ return unescapedStr
+ if matchTime.match(val):
+ return timestamp(val)
+ if INT_REGEX.match(val):
+ return int(cleanseNumber(val))
+ if OCTAL_REGEX.match(val):
+ return int(val, 8)
+ if HEX_REGEX.match(val):
+ return int(val, 16)
+ if FLOAT_REGEX.match(val):
+ return float(cleanseNumber(val))
+ if SCIENTIFIC_REGEX.match(val):
+ return float(cleanseNumber(val))
+ return val
+
+def cleanseNumber(str):
+ if str[0] == '+':
+ str = str[1:]
+ str = string.replace(str,',','')
+ return str
+