Skip to content
Snippets Groups Projects
  • Jonathan Schöbel's avatar
    6be0d112
    Validator: implemented allowed tag-attribute combinations · 6be0d112
    Jonathan Schöbel authored
    The Validator can check if a attribute is allowed in a tag. It does so
    by associating allowed tags with attributes. This is done in that way,
    to support also attributes which are allowed for every tag (global
    attributes), but this is not yet supported. So some functions allow for
    NULL to be passed and some will still crash.
    
    The predicate SH_Validator_check_attr returns whether an attribute is
    allowed for a specific tag. If tag is NULL, it returns whether an attr
    is allowed at all, not whether it is allowed for every tag. For this
    another predicate will be provided, when this is to be implemented.
    
    The method SH_Validator_register_attr registers an tag-attr combination.
    Note, that it will automatically call SH_Validator_register_tag, if the
    tag doesn't exist. Later it will be possible, to set tag to NULL to
    register a global attribute, but for now the method will crash.
    
    The method SH_Validator_deregister_attr removes a tag-attr combination
    registered earlier. Note, that deregistering a non existent combination
    will result in an error. This behaviour is arguable and might be subject
    to change. When setting only tag to NULL, all tags for this attribute
    are deregistered. When setting only attr to NULL, all attrs for this tag
    are deregistered. This might suffer from problems, if this involves some
    attrs, that are global. Also this will use the internal method
    remove_tag_for_all_attrs, which has the problem, that it might fail
    partially. Normally when failing all functions revert the program to the
    same state, as it was before the call. This function however is
    different, as if it fails there might be some combinations, that haven't
    been removed, but others are already. Nevertheless, the validator is
    still in a valid state, so it is possible to call this function a second
    time, but it is not sure, which combinations are already deregistered.
    
    As the attrs also use the internal strings of the tags, it must be
    ensured, when a tag is deregistered, that all remaining references are
    removed, otherwise there would be dangling pointers. Note, that for this
    also remove_tag_for_all_attrs is used, so the method
    SH_Validator_deregister_tag suffers from the same problems listed above.
    Also if this internal method fails, the tag won't be removed at all.
    
    Furthermore, the tests for deregistering a tag are still missing.
    6be0d112
    History
    Validator: implemented allowed tag-attribute combinations
    Jonathan Schöbel authored
    The Validator can check if a attribute is allowed in a tag. It does so
    by associating allowed tags with attributes. This is done in that way,
    to support also attributes which are allowed for every tag (global
    attributes), but this is not yet supported. So some functions allow for
    NULL to be passed and some will still crash.
    
    The predicate SH_Validator_check_attr returns whether an attribute is
    allowed for a specific tag. If tag is NULL, it returns whether an attr
    is allowed at all, not whether it is allowed for every tag. For this
    another predicate will be provided, when this is to be implemented.
    
    The method SH_Validator_register_attr registers an tag-attr combination.
    Note, that it will automatically call SH_Validator_register_tag, if the
    tag doesn't exist. Later it will be possible, to set tag to NULL to
    register a global attribute, but for now the method will crash.
    
    The method SH_Validator_deregister_attr removes a tag-attr combination
    registered earlier. Note, that deregistering a non existent combination
    will result in an error. This behaviour is arguable and might be subject
    to change. When setting only tag to NULL, all tags for this attribute
    are deregistered. When setting only attr to NULL, all attrs for this tag
    are deregistered. This might suffer from problems, if this involves some
    attrs, that are global. Also this will use the internal method
    remove_tag_for_all_attrs, which has the problem, that it might fail
    partially. Normally when failing all functions revert the program to the
    same state, as it was before the call. This function however is
    different, as if it fails there might be some combinations, that haven't
    been removed, but others are already. Nevertheless, the validator is
    still in a valid state, so it is possible to call this function a second
    time, but it is not sure, which combinations are already deregistered.
    
    As the attrs also use the internal strings of the tags, it must be
    ensured, when a tag is deregistered, that all remaining references are
    removed, otherwise there would be dangling pointers. Note, that for this
    also remove_tag_for_all_attrs is used, so the method
    SH_Validator_deregister_tag suffers from the same problems listed above.
    Also if this internal method fails, the tag won't be removed at all.
    
    Furthermore, the tests for deregistering a tag are still missing.