feat(assessment): auto comprehensive assessment - rules engine from college scoring standard, per-semester stats, manual overrides, word export
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
lazy import re as _re
|
||||
|
||||
|
||||
def is_valid_name(name):
|
||||
"""Test whether a string is a valid element or attribute name."""
|
||||
# https://www.w3.org/TR/xml/#NT-Name
|
||||
return _re.fullmatch(
|
||||
# NameStartChar
|
||||
'['
|
||||
':A-Z_a-z'
|
||||
'\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF'
|
||||
'\u200C\u200D'
|
||||
'\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF'
|
||||
'\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF'
|
||||
']'
|
||||
# NameChar
|
||||
'['
|
||||
r'\-.0-9:A-Z_a-z'
|
||||
'\xB7'
|
||||
'\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF'
|
||||
'\u200C\u200D\u203F\u2040'
|
||||
'\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF'
|
||||
'\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF'
|
||||
']*+',
|
||||
name) is not None
|
||||
|
||||
# https://www.w3.org/TR/xml/#charsets
|
||||
_ILLEGAL_XML_CHAR = (
|
||||
'['
|
||||
'\x00-\x08\x0B\x0C\x0E-\x1F' # C0 controls except TAB, CR and LF
|
||||
'\uD800-\uDFFF' # the surrogate blocks
|
||||
'\uFFFE\uFFFF' # special Unicode characters
|
||||
']')
|
||||
|
||||
def is_valid_text(data):
|
||||
"""Test whether a string is a sequence of legal XML 1.0 characters."""
|
||||
return _re.search(_ILLEGAL_XML_CHAR, data) is None
|
||||
Reference in New Issue
Block a user