function parseBase( source ){
/*=
| item_mod-->'item'
| item--mod->'item'
*/
var
result= source,
sep= this.sep.modf;
if( sep )
result= source.split(sep)[0];
return result;
}
function parseModfName( source ){
/*=
| item_mod-->'mod'
| item--mod->'mod'
*/
var
result= '',
sep= this.sep.modf,
div;
if( sep ){
div= source.split(sep);
if( div.length > 1 ){
result = div[1];
}
}
return result;
}
function parseModfVal( source ){
/*=
| item--modf_val->'val'
*/
var
result= '',
div= source.split(this.sep.modv);
if( div.length>1 )
result= div[1];
return result;
}
function parseModf( source ){
var
result= null,
sep= this.sep.modf,
name;
if( sep ){
name = this.ƒn.parseModfName(source);
if( name ){
var
val= this.ƒn.parseModfVal(source)||null;
result= {name,sep,val};
}
}
return result;
}
var parser= {
sep:{
elem:'__',
modf:'--',
modv:'_'
},
ƒn:{
parseBase: src=> parseBase.call(parser,src),
parseModfName: src=>parseModfName.call(parser,src),
parseModfVal: src=> parseModfVal.call(parser,src),
parseModf: src=> parseModf.call(parser,src),
},
parse( source ){
var
result= {};
if( !source )
return result;
//=split block
var
div= source.split(this.sep.elem),
item= div[0],
part= 'block';
//+concat name
result[part]={ name:this.ƒn.parseBase(item) };
//=has elem
if( div.length>1 ){
//+get postfix
item= div[1];
part= 'elem';
//+concat postfix
result[part]={ name:this.ƒn.parseBase(item) };
}
//=parse mod
var
mod= this.ƒn.parseModf(item);
if( mod )
result[part].mod= mod;
return result;
},
create(elem='__',modf='--',modv='_'){
Object.assign(this.parser.sep,{elem,modf,modv});
return this.parser.parse;
}
};
module.exports= parser;