attributeParser.js
Home
/
src /
webvowl /
js /
parsing /
attributeParser.js
/**
* Parses the attributes an element has and sets the corresponding attributes.
* @returns {Function}
*/
module.exports = (function (){
var attributeParser = {},
// Style
ANONYMOUS = "anonymous",
DATATYPE = "datatype",
DEPRECATED = "deprecated",
EXTERNAL = "external",
OBJECT = "object",
RDF = "rdf",
// Representations
ASYMMETRIC = "asymmetric",
FUNCTIONAL = "functional",
INVERSE_FUNCTIONAL = "inverse functional",
IRREFLEXIVE = "irreflexive",
KEY = "key",
REFLEXIVE = "reflexive",
SYMMETRIC = "symmetric",
TRANSITIVE = "transitive",
// Attribute groups
VISUAL_ATTRIBUTE_GROUPS = [
[DEPRECATED, DATATYPE, OBJECT, RDF],
[ANONYMOUS]
],
CLASS_INDICATIONS = [DEPRECATED, EXTERNAL],
PROPERTY_INDICATIONS = [ASYMMETRIC, FUNCTIONAL, INVERSE_FUNCTIONAL, IRREFLEXIVE, KEY, REFLEXIVE, SYMMETRIC,
TRANSITIVE];
/**
* Parses and sets the attributes of a class.
* @param clazz
*/
attributeParser.parseClassAttributes = function ( clazz ){
if ( !(clazz.attributes() instanceof Array) ) {
return;
}
parseVisualAttributes(clazz);
parseClassIndications(clazz);
};
function parseVisualAttributes( element ){
VISUAL_ATTRIBUTE_GROUPS.forEach(function ( attributeGroup ){
setVisualAttributeOfGroup(element, attributeGroup);
});
}
function setVisualAttributeOfGroup( element, group ){
var i, l, attribute;
for ( i = 0, l = group.length; i < l; i++ ) {
attribute = group[i];
if ( element.attributes().indexOf(attribute) >= 0 ) {
element.visualAttributes().push(attribute);
// Just a single attribute is possible
break;
}
}
}
function parseClassIndications( clazz ){
var i, l, indication;
for ( i = 0, l = CLASS_INDICATIONS.length; i < l; i++ ) {
indication = CLASS_INDICATIONS[i];
if ( clazz.attributes().indexOf(indication) >= 0 ) {
clazz.indications().push(indication);
}
}
}
/**
* Parses and sets the attributes of a property.
* @param property
*/
attributeParser.parsePropertyAttributes = function ( property ){
if ( !(property.attributes() instanceof Array) ) {
return;
}
parseVisualAttributes(property);
parsePropertyIndications(property);
};
function parsePropertyIndications( property ){
var i, l, indication;
for ( i = 0, l = PROPERTY_INDICATIONS.length; i < l; i++ ) {
indication = PROPERTY_INDICATIONS[i];
if ( property.attributes().indexOf(indication) >= 0 ) {
property.indications().push(indication);
}
}
}
return function (){
// Return a function to keep module interfaces consistent
return attributeParser;
};
})();