from enum import Enum
[docs]class HedSectionKey(Enum):
""" Keys designating specific sections in a HedSchema object.
"""
# overarching category listing all tags
Tags = 'tags'
# Overarching category listing all unit classes
UnitClasses = 'unitClasses'
# Overarching category listing all units(not divided by type)
Units = 'units'
# Overarching category listing all unit modifiers.
UnitModifiers = 'unitModifiers'
# Overarching category listing all value classes
ValueClasses = "valueClasses"
# These are the allowed attributes list, gathered from the schema on load.
Attributes = 'attributes'
# These are the allowed attribute property list, gathered from the schema on load.
Properties = 'properties'
[docs]class HedKey:
""" Known property and attribute names.
Notes:
- These names should match the attribute values in the XML/wiki.
"""
# Tag attributes
ExtensionAllowed = 'extensionAllowed'
Recommended = 'recommended'
Required = 'required'
RequireChild = 'requireChild'
TagGroup = 'tagGroup'
TakesValue = 'takesValue'
TopLevelTagGroup = 'topLevelTagGroup'
Unique = 'unique'
UnitClass = 'unitClass'
ValueClass = "valueClass"
RelatedTag = "relatedTag"
SuggestedTag = "suggestedTag"
Rooted = "rooted"
DeprecatedFrom = "deprecatedFrom"
ConversionFactor = "conversionFactor"
Reserved = "reserved"
SIUnit = 'SIUnit'
UnitSymbol = 'unitSymbol'
# Default Units for Type
DefaultUnits = 'defaultUnits'
UnitPrefix = 'unitPrefix'
SIUnitModifier = 'SIUnitModifier'
SIUnitSymbolModifier = 'SIUnitSymbolModifier'
# value class attributes
AllowedCharacter = 'allowedCharacter'
# Node attributes
InLibrary = "inLibrary"
HedID = 'hedId'
UnitClassDomain = "unitClassDomain"
UnitDomain = "unitDomain"
UnitModifierDomain = "unitModifierDomain"
ValueClassDomain = "valueClassDomain"
ElementDomain = "elementDomain"
TagDomain = "tagDomain"
AnnotationProperty = "annotationProperty"
BoolRange = "boolRange"
TagRange = "tagRange"
NumericRange = "numericRange"
StringRange = "stringRange"
UnitClassRange = "unitClassRange"
UnitRange = "unitRange"
ValueClassRange = "valueClassRange"
[docs]class HedKeyOld:
# Fully Deprecated properties
BoolProperty = 'boolProperty'
UnitClassProperty = 'unitClassProperty'
UnitProperty = 'unitProperty'
UnitModifierProperty = 'unitModifierProperty'
ValueClassProperty = 'valueClassProperty'
ElementProperty = 'elementProperty'
NodeProperty = 'nodeProperty'
IsInheritedProperty = 'isInheritedProperty'
VERSION_ATTRIBUTE = 'version'
LIBRARY_ATTRIBUTE = 'library'
WITH_STANDARD_ATTRIBUTE = "withStandard"
UNMERGED_ATTRIBUTE = "unmerged"
NS_ATTRIB = "xmlns:xsi"
NO_LOC_ATTRIB = "xsi:noNamespaceSchemaLocation"
# A list of all attributes that can appear in the header line
valid_header_attributes = {
VERSION_ATTRIBUTE,
LIBRARY_ATTRIBUTE,
WITH_STANDARD_ATTRIBUTE,
NS_ATTRIB,
NO_LOC_ATTRIB,
UNMERGED_ATTRIBUTE
}
character_types = {
"ascii": set([chr(x) for x in range(0, 127)]),
"nonascii": "nonascii", # Special case for all other printable unicode characters
"printable": set([chr(x) for x in range(32, 127)]),
"lowercase": set("abcdefghijklmnopqrstuvwxyz"),
"uppercase": set("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
"digits": set("0123456789"),
"tab": set("\t"),
"newline": set("\n"),
"blank": set(" "),
"exclamation": set("!"),
"double-quote": set('"'),
"number-sign": set("#"),
"dollar": set("$"),
"percent-sign": set("%"),
"ampersand": set("&"),
"single-quote": set("'"),
"left-paren": set("("),
"right-paren": set(")"),
"asterisk": set("*"),
"plus": set("+"),
"comma": set(","),
"hyphen": set("-"),
"period": set("."),
"slash": set("/"),
"colon": set(":"),
"semicolon": set(";"),
"less-than": set("<"),
"equals": set("="),
"greater-than": set(">"),
"question-mark": set("?"),
"at-sign": set("@"),
"backslash": set("\\"),
"caret": set("^"),
"underscore": set("_"),
"vertical-bar": set("|"),
"tilde": set("~"),
}
banned_delimiters = set(",[]{}")
# Compound types
character_types["letters"] = character_types["lowercase"] | character_types["uppercase"]
character_types["alphanumeric"] = character_types["letters"] | character_types["digits"]
character_types["text"] = character_types["printable"].copy()
character_types["text"].add("nonascii")
character_types["text"] -= banned_delimiters
character_types["name"] = character_types["alphanumeric"] | character_types["hyphen"] | character_types["period"] | character_types["underscore"]
character_types["name"].add("nonascii")